We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
π
- This is still a work in progress. It may be changed in the future.
π is an esolang created by User:Filbist, on 10/27/2026. The name[1] comes from its predecessor, β, which is basically just a theoretical language.
π uses a finite looping tape of 8 cells each holding one bit, and one stored bit, effectively making it a two-state automaton. The tape can be visualized both as a vertical tape and as a wheel, making it turning, but not Turning, and a Turing Tarpit.
Commands
π uses 22 commands. The symbols were chosen to be easily typable, which means no holding down shift.
| Symbol | Name | Nickname | Description | Type |
|---|---|---|---|---|
| b | Advance | 'Confident' | Advances the pointer forward one cell, better thought of moving the tape backwards one cell, as the pointer is stationary in visualizations. | Instant |
| n | Flip cells | 'Daredevil' | Flips the whole tape around the perceived center in the flat visualization. | Instant |
| q | Flip pointer (bit) | 'Impartial' | Flips the current bit. | Instant |
| w | Set pointer 0 | 'Sad' | Sets the current bit to 0. | Instant |
| e | Set pointer 1 | 'Happy' | Sets the current bit to 1. | Instant |
| a | Flip stored | 'Fickle' | Flips the stored bit. | Instant |
| s | Set stored 0 | 'Pessimist' | Sets the stored bit to 0. | Instant |
| d | Set stored 1 | 'Optimist' | Sets the stored bit to 1. | Instant |
| r | If pointer 0 | 'Judge' | Checks if the current bit is 0, and if it is, runs the argument. | Argument |
| t | If pointer 1 | 'Enthusiast' | Checks if the current bit is 1, and if it is, runs the argument. | Argument |
| f | If stored 0 | 'Jury' | Checks if the stored bit is 0, and if it is, runs the argument. | Argument |
| g | If stored 1 | 'John' | Checks if the stored bit is 1, and if it is, runs the argument. | Argument |
| m | Input | 'Quiet' | Stops execution and waits for user input in binary. It overwrites all cells from (and including) the pointer to the end of the input with the input. | Input |
| z | Output mode on | 'Extrovert' | Sets the pointer to output as it advances. | State |
| x | Output mode change | 'Hyperactive' | Cycles the output mode between raw binary (default), numbers, ASCII, and Unicode. | State |
| c | Output mode off | 'Introvert' | Switches the output state off. | State |
| v | Output whole tape | 'Infodumper' | Outputs the whole tape at once in the chosen mode. | Instant |
| N | Repeat N times | 'Redundant' | Runs the argument N times. | Argument |
| y | Loop start | 'Stubborn' | Like the BF '[', except has no base condition. By default, without a condition, it acts as a NOP, and if a condition is given but isn't met, it skips to the next instruction past the matching loop end. | State |
| u | Loop end | 'Mediator' | Like the BF ']', except has no base condition for breaking the loop. By default, without a condition, it jumps the instruction pointer back to the instruction after the matching loop start, and if a condition is given but isn't met, it acts as a NOP. | State |
| h | Add cell | 'Organizer' | Creates a new blank (0) cell on the tape at the pointer's current location, with the previously pointed cell being shifted back to the end of the flat visualization. | Instant |
| j | Remove cell | 'Sloppy Joe' | Removes the current cell, pointing the pointer at what was the next cell before the command was run. | Instant |
These are the only commands available, making writing programs quite difficult unless you devise a very strict system to run tasks.
Visualization
There are two visualizations for the tape. The flat visualization, and the circular visualization.
The flat visualization, shown on the right, has two sections. The left section has the tape, with the pointer on the bottom, and the right section has only one cell, that being the stored bit. An alternative variant to this visualization could have the stored bit in line with the rest of the tape for easier step history display, but that may make the orientation difficult to infer. As a solution, it could color that cell slightly differently for clarification.
The circular visualization is currently just a concept[3], but may be implemented in the future.
References
- β From author's words: "I chose the name even before I decided that the tape could be visualized as a wheel based off of its looping property, I find this quite amusing. (If you don't understand why this is funny, look at how the name looks.)"
- β From author's words: "Repeatedly adding and removing cells results in moving the pointer forwards while demolishing everything in its path, which is called a shimmy. That's certainly one way to clear the tape!"
- β At the time of writing, ~~~~~ (That didn't work. It's currently 23:42, 29 October 2026 (UTC).)
