Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Hyper-Dimensional Brainfuck

Hyper-Dimensional Brainfuck is an infinite-dimensional version of the Brainfuck programming language. Instead of a tape, we have a "world." Lines within the world are called "vectors," and act very much like the Brainfuck tape. You can switch between vectors using the ^ and V commands.


+ - increment value of current cell
- - decrement value of current cell
> - shift positively along current vector
< - shift negatively along current vector
^ - switch to a vector, parallel to the next dimensional axis, that passes through the current cell
V - switch to a vector, parallel to the previous dimension axis, that passes through the current cell
. - print out contents of current cell
, - replace contents of current cell with input from STDIN
[ - skip past matching ] if current cell values zero
] - return to matching [

Debug Commands (enabled with -d):
# - print out coordinates and value of current cell
? - print out current coordinates

Interdimensional Travel

The ^ and V commands do not change the current cell, but only the direction in which the pointer will travel. Note that ^V and V^ is useless code, because they cancel each other out. A good way to think about this is a simple array of nodes, storing the cell's values and coordinates. For example, the list at the start of a program may be {(0)=0} where the cell at position 0 is equal to 0. At the end of the program, the list may be {(0)=5,(0,1)=2,(1,1,1)=3,(1,5)=7, ...}

The < and > commands will actually switch to a different node in the array. For example, starting at coordinate (0), ^>>>^^>> will go to the cell at position (0,3,0,2)

In our notation, (0) is the same coordinate as (0,0,0,0) or (0,0,0,0,0,0,0,0,0,0,0)


Let's say we're only considering a 2-dimensional plane of the world:


You start at 0,0. To shift to 1,0, you would use >. To switch to 1,1 from there, you would use ^>. From there, to switch to 0,1, you would just use V<, and to switch back to 0,0, you use ^<

Now let's consider a three dimensional cube, specifically a 3x3x3 cube.
To go from the bottom, left, front corner of the cube, i.e (0,0,0) to the top, right, back corner, i.e. (2,2,2) You would do the following:


For a 4x4x4x4 tesseract:


git clone
cd hdbf
sudo make install
# test
hdbf ./examples/LostKingdom.b

Command Line Usage:

hdbf somefile.hdbf //Run some file
hdbf -o somefile.hdbf // Run optimized version of some file
hdbf -b somefile.hdbf // Run some file as pure brainfuck
hdbf -d somefile.hdbf // Run some file in debug mode
hdbf -di "+++++++>^^+++#" // Run command in debug mode
hdbf --help // Display help