The 2024 Wheel Reinvention Jam just concluded. See the results.

REGISTER HERE: Jam projects / teams!

There is also https://bedit.handmade.network/


Replying to TimothyB (#25090)

Thanks Martins and Simon. I was not aware of 101 Editor or BEdit. Both those programs are pretty much exactly what I had in mind.

My wheel reinvention project is a web app that replicates some of the Twitter functionality really well, enables a weird use case that Twitter can't do and consists of 97% C++/GLSL and only 3% web stuff. Right now it's at a cool engineering demo stage, and I hope to spend the jam week making it more useful as a tool.

Once upon a time I encountered a guy on Twitter who posts a lot of interesting threads and links related threads to each other. Official apps make it hard to keep track of what is read and which paths haven't been explored, so it's easy to get lost in the maze. I figured it would be interesting to build a dedicated web tool to view these threads as a graph, and to do it with C++/wasm/WebGL to spice up the challenge. It was cool to not deal with arbitrary restrictions that DOM puts on the building blocks available and to see what it takes to build a UI from pixels.

Currently the app can load the network of 2K threads/19K tweets as a blob, display every type of tweet pretty close to how Twitter would do it, teleport you to a random thread and show the incoming/outgoing connections with arrows.

You can check it out at https://visa-viz.github.io/ (best viewed on desktop and beware the slow initial load).

Things that might get implemented during the jam:

  • 2D graph layout: Right now the threads are laid out in a chain left to right, and expanding something in the middle closes a chunk of other threads. It would be cool to fully show the explored part of the maze. Laying out graphs is a generally tricky problem but I have some ideas.
  • Zoom and minimap: More open threads call for more tools to navigate.
  • Full text search: Helps the user to start with something topical but requires implementing a textbox from scratch.

Hi Everyone,

My project will be a re-imagination and generalization of text editors. It will be changing the definition of a text editor from "a program for editing text files" into "a program for editing any file that can be converted into a textual representation".

Text editors have been around for decades and are still popular for good reasons. Editing content as plain text is an easy and natural interaction with a computer. The files text editors work with are text files, basically a sequence of characters. We store a lot of content in text files, mainly because this allows any text editor to display and edit them. That's a huge benefit compared to other formats that might need specialized software for editing them.

On the other hand, text files have quite some shortcomings:

First of all, they are typically a lot less efficient than binary files, both in terms of storage size and reading efficiency. For example, I've seen ~10x improvements in size and performance when we were switching some large csv files to a binary format.

Second, many text formats have syntax rules that a text editor might not understand. A text editor will happily store files containing errors, and you might only discover it later when trying to parse the file. If you've ever pushed something to CI that then reported 15 minutes later that you've made a trivial syntax error in some configuration file, that's what I'm talking about.

Third, text files inherently mix content and presentation. Take programming languages as an example: They usually don't care where you put additional whitespace, but your choices are stored in the file anyway and shared with the whole team. There have been countless discussions about code formatting rules, preferable line lengths or whether or not to use curly braces for code blocks. There's no generic right answer to these questions because they are depending on individual preference. People have different tastes and needs, so there's no one-size-fits-all.

So what if all of these issues could be solved while still allowing the text editing we like so much?

My idea is to create a public registry of so-called "converter plugins". These plugins are WASM modules and basically provide two functions, present and store. present takes a sequence of bytes and converts it into a text. store does the opposite, taking a text and converting it into a sequence of bytes.

A text editor using these kinds of plugins works like this: When opening a file, the editor checks the file format and lets the user choose a compatible converter plugin. The plugin converts the file content into a textual representation. This text can then be edited just like in a regular text editor. When saving the file, the textual representation gets parsed and converted into the storage representation.

This simple enhancement provides a decoupling of how files are stored on disk and how they are displayed in a text editor. This has some big advantages:

  • Editing binary file formats like CBOR, BSON, compressed text files etc. becomes possible without manual conversion.
  • Syntax errors are caught early (when storing the file). Files containing syntax errors cannot be saved.
  • Designers of file formats (e.g. for programming languages) can focus on the the relevant content and don't need to commit to specific syntax. This makes language evolution much simpler.
  • Textual syntax of PLs would be part of a plugin. There could be different plugins for the same language to allow different tastes or simply experimentation with new ideas.
  • There's more, so stay tuned for updates during the jam.

I've been experimenting with this idea over the last couple of months and have written some code already. I want to use the jam to bring these experiments into a usable state and focus on sharing the idea more broadly.

Changing something as fundamental as text editors, it really feels like I'm reinventing the wheel here. Let's see if I can get rid of some of the larger edges our current wheels are having ;-)

I'm looking forward to the jam and especially to the other's projects. If you're working on a text editor and would like to integrate support for these plugins, I'd be glad to collaborate. See you soon!


Edited by fkohlgrueber on

I was thinking about what program I would personally really want to improve, and windows explorer was the clear winner here. Like tomthornt0n said, it just sucks so let’s improve it!

Soo in the middle of writing about this, I sadly realized that I don’t think not going to make this, but here is my idea anyway:

I want to make a simple and snappy explorer that’s fun to use. I already have a very clear vision for what I want to make, and I feel like I’ll be more productive and comfortable if I tackle it alone this time. But I 100% support the idea of sharing the ideas instead of keeping them secret for yourself, so I'll describe what I have planned so far and if you want to discuss ideas, msg me on discord (@Eero#4198).

The design goal is to stay simple and make everyday file navigation, searching, creating and moving files as fluent and fast as possible. I don’t care about fancy features.

Here is a quick draft I made: https://imgur.com/h1TFaMy

Very simple compared to win explorer, not a lot going on. I’m not against buttons, just didn’t spend any time adding them. But for this project I AM against hidden menus/dropdowns. It’s good to have everything immediately available because file explorer is used so much.

The first obvious improvement is tabs. Tabs are nice. The second biggest change is the way navigation works. I’ve borrowed the idea of directory columns from Mac OS. I like it a lot more than just having a single folder open at a time, but the problem becomes that if you have a deep path with few files in each folder, you’ll waste and quickly run out of screen space.

My idea is that clicking once on a folder opens it regularly in a new column, but double clicking a folder also collapses the current column it’s in. So you can double click your way and all previous folders will be collapsed. In the bottom you can see the path, and in dark gray you can see folders that are collapsed (“mammals”, “cute”). The collapsed folders are collapsed “between” that vertical double-line. You can also click on the words in that path, and it will collapse/uncollapse those folders.

You might wonder what that new-tab + button does. It opens an empty directory which is a temporary and anonymous folder where you can drag and create files. It is destroyed when you close the explorer. I think this could be pretty useful.

Other noteworthy things:

-No crap like “This PC”, just straight to the point with C:/ and D:/ and other pinned base directory buttons. Drag and drop directories there to pin them.

-I was thinking you could press space and start typing/filtering directory/file names, pressing tab could autocomplete the folder name and go inside. Basically keyboard navigation.

-Recent files are instantly accessible. I was originally thinking this space could potentially be replaced with a rectangle that holds a temporary folder, the same thing as the new-tab + button does, but idk.

-FAST file search that updates as you type. It’s ridiculous how slow the windows search is.

-copy/paste the path as text

-ability to launch cmd in the folder

-mouse extra buttons for going back/fourth

-generous padding so that there is empty space where to click

Ooo the list keeps getting worse

-setting it as the default file manager on windows, so when you double-click a folder or press “show in folder” on a chrome download, use my file manager instead of windows explorer. This can be done somehow, because XYplorer can do that, not sure how. However, it’s not perfect. If you for instance say “Open File” in any program, it will still use the default windows explorer. I’m not sure if that can be solved.

-undo, redo. Deleted files will have to be restored from the trash bin

-smooth window resize, draw while still resizing. I’m using vulkan and I have no clue if that’s even possible.

-custom window border. I already have code that does this.

-drawing file icons. Picture files, pretty ez, but what about an ordinary icon for a text file? You’d have to look at which program is the default program for that extension, then read that programs icon (.ico) file and then make an image out of that… It doesn’t sound fun.

-folder links, hidden folders

-Right click menu options… Some programs add their custom options there. Right click -> open in notepad++. Or right click -> 7zip -> extract. XYplorer right click menu actually has these too, but I don’t know how they’ve done it. I guess they’re somehow using the UI library from windows (which I’ve never used) to add the identical right-click menu. Ironically this means you will also get the latency of the windows right click menu.

I went through the effort of designing this thing, but realized finally that uhh yeah I’m not gonna do that :( Just too many things that I don’t believe I’m going to be able to solve, many to do with windows. Hopefully my ideas will be inspiring though, and best of luck to whoever is going to try to make a windows explorer replacement!

I might think about another project idea in the following days.


Edited by Eero__ on

Hey all,

I am thinking of reinventing the browser basically with lua, a project that I have in my todo list for some time now

  1. DNS will be replaced by magnet links.
  2. Markdown instead of html for now.
  3. Possibly SVG, images, video.
  4. Simple buttons. Image maps. Form submit will send an email.
  5. Integrated payment.
  6. Mobile app
  7. Xanadu style transclusions that have to be authorised for rendering.
  8. Simpler CSS with lua. Maybe some yaml.

If anyone is interested, feel free to contact me on discord.

I'll be working on a video editor - hopefully very simple, but I love the SilverNode/Blender idea of having an interface that leaves your left hand on the keyboard and the right on the mouse as much as possible for combining digital and analog inputs.

It'll be mac-first, but I'm going through a platform layer, so will be porting to Essence asap ;)

I've always wanted to create a programming language. I have something small in mind, but it is possible I'm underestimating the task.

The language is going to be dynamic and compiled, hopefully with same ease-of-scripting as Python, but with the peformance somewhere between C and LuaJIT.

One week will be a lot of time, to implement a lot of the things I want. This however is not just going to be a jam project, since I want to work and improve upon it after. I'm basically using this jam, as an excuse to finally get started on a project, I've wanted to create for several years.

The overall goal is a language that fits my needs very well, but I will put effort into making it a community project on GitHub.

As for what it's reinventing, I mean... It's another programming language, amongst the many many languages out there.

I intend on streaming the development and uploading devlogs of the project. I'm also going to be creating a short series of videos after, that goes through the development of the entire language (parser, compiler), using simple and beautiful graphics.

My project idea is to reinvent the digital audio workstation (DAW). There is no shortage of free DAWs, but there is a lack of quality. Electronic music production being a creative field requires a tool that enables individual workflows and supports the user as their workflow evolves. In my recent searching, I found tools such as Cakewalk, LMMS, or Reaper either didn't support my workflow or features that were important to me.

I'm using a few main pillars to keep the scope of my program as small as I can:

  1. Can be completely taught with a single 30s tutorial
  2. Efficient to organize and compose musical ideas
  3. Makes it easy to develop sounds & textures

These pillars give rise to the following features:

  1. Arrangement view managed via a lego inspired hybrid graph/grid interface
  2. Relationship view for defining relationships between melodies & sections
  3. Rack view for designing instruments and sequencing audio effects

During the jam, I hope to finish the first two features.

I plan on developing this in rust, and taking advantage of https://github.com/RustAudio for the heavy lifting & audio processing. I also have a bit of experience with elm, so I'll be using https://github.com/iced-rs/iced for gui.

I'm primarily making this program for myself, so I'd prefer to discover it over the course of the jam first. That being said, if anyone is interested in helping after the jam I'm totally open to it & can provide support!


Edited by Gabe on Reason: adding a bit more context

I really need to switch to a non-linear note taking system.

Most notes I have taken in the past year are practically inaccessible, as they're all in one huge tree structure, which isn't much more explorable than a linear list.

As I haven't found an existing solution that I'm happy with, I'll use the jam to begin creating my own one.

Things I don't like about existing solutions:

  • "Human readable" formats & markdown. I am a strong believer in structured data and that every app, that is about managing a set of objects, should have an api (a good one perferably). More specifically: I think "tools" should primarily be a data model. The code and interfaces they provide should be secondary - "defaults" if you will.
  • Cloud based. Especially if unencrypted or without an export/import system. (Looking at you Notion!)
  • Not easily extensible. I really can't be bothered to install 200 js packages.
  • Slow! Almost forgot about this one. If I can feel a delay, you're doing something wrong.
  • No way to take notes on mobile. (Obsidian, afaik)

Things I like:

  • Workflowy/Notion style collapsible trees. (in moderation)
  • Obsidian's graph view and linking. (Support for Zettelkasten-style processes and "random exploration".)
  • Notion's structured editor.
    • (Even though it's laughably slow. On my phone, creating a new list item sometimes takes literal seconds, plural!)
    • Controlling nesting using tab is very intuitive, especially with the recent changes.
    • The "/" to create objects is pretty cool. Though sadly often gets in the way as it messes up the ui layout and is slow af.

I probably forgot a ton. If you have any pains/ideas, I'd be glad to hear them!

I'm so excited by all the responses here! This is a great turnout already, and I'm so excited to see what everyone can get done in a week.

I just wanted to show my appreciation for a few ideas I find personally exciting:

Notion's structured editor. (Even though it's laughably slow.)

I am a big fan of Notion as well, but I'm really concerned about how slow their app already is. And with such elegant data organization, it seems like a shame that they aren't doing more to help you search and visualize your notes. Leddoo, I'm really happy to hear that you're gonna explore this space!

My wheel reinvention project is a web app that replicates some of the Twitter functionality

ilidemi, this thing is already super cool 100x more pleasant than actually navigating tweets on Twitter. Super excited to see what else you can do with it!

a mobile application that would render and organize ChordPro files

I am always super excited to hear about projects like this that reach outside the domain of programming tools. Projects like this are in large part why we wanted to do this jam in the first place!

I will be working on a word processor / typesetting format.

I am so excited to see prototypes in this space. (This was one of the things we had on our starter list!) Best of luck Samuel, I'll definitely be paying attention to this one!

This jam is gonna be great! I'm itching to kick this thing off 😁

The wheel reinvention project I have in mind is a cross-platform Orthodox File Manager.

Total Commander is the first app I install on a new PC, but I can't use it on Linux or Mac, or in remote SSH terminal for that matter.

Midnight Commander meanwhile only has an unofficial Windows port (and has other missing features).

Feature list:

  • GUI
  • TUI (GUI first)
  • Flexible pane arrangement
    • Dual pane arrangement default
  • Panes can contain different kinds of widget
    • File lister with configurable columns (name, ext, size, etc.)
    • Tree view
    • Image / Text preview (no image preview in terminal)
  • Copy/move/rename/delete/pack/unpack file operations
  • Mass file rename according to pattern
  • Quick file finder
  • Synchronize two directories (and their descendants)
  • Create/verify checksums
  • Plugin SDK to support more archive/image formats and virtual filesystems.

The idea is being able to compile the same app with a GUI or TUI and the same operations being available to you under the same shortcuts. Filenames may be condensed and the layout may be a bit different in the terminal, but you'd be able to keep your workflow.

For the Jam only a small part of this project is expected to be realized, and TUI support is a secondary concern.

Initial prototype goals for the Jam week:

  • Two panes
  • Mount point / drive letter picker
  • Windows and Linux support
  • Copy, Move, Rename, Delete
  • File checksumming
  • List archive contents as directory
    • Unpack from tar.gz

It'll be written in Odin.


Edited by Jeroen van Rijn on

I am registering for the Jam. The project I will be working will be codenamed "Ambrosia".

I will reveal what the idea will be at the beginning of the Jam.

It will be written purely in Odin using may of the built-in vendor libraries such as SDL and the native port of rxi's microui.

Going to use this jam to put together a .procreate file reader and hopefully exporter. I have an app already that I use to export PSD files and ASE files. But my current workflow is making art on my iPad in procreate. Then I have to hit export save it as a PSD, save that to my computer, then I can export that to PNG.

So I hope to:

  • Main goals:
    • Read .procreate files and get the layer and image data.
    • Transform image data into PNG
  • Stretch
    • Put together a good syncing system for my iPad to update existing .procreate files on my computer and add new ones.

Edited by Clay Murray on

I just took a compute shader workshop the last eight weeks by the artist arsiliath. I've implemented the exercises using Rust and WebGPU. I mostly have one-off scripts that are quite complex -- I'd like to make a framework to simplify their logic.

In particular, there are a number of patterns I've been laboriously repeating. For example, texture swapping, managing a buffer of read-only parameters, implementing read/write buffers, instancing for 2D-to-3D pixel effects, and windowing.

In many ways, this is reinventing the wheel -- easy-to-use shader toys already exist. However, this one is being written in Rust using the WebGPU API, making it somewhat unique. I also hope to use this framework in future projects that incorporate the setup and shaders into larger animated works.


Edited by Dan on