A 2D game block building inspired by Everybody Edits. Code structure inspired by Luanti/Minetest practices.
The project direction can be found in doc/DIRECTION.md.
Account management
- Any specified username is automatically converted to uppercase.
GUESTxxxusernames are treated as temporary.- Registration is nethier needed nor possible.
- The account registration is rate limited by IP address.
Hotkeys
- W/A/S/D or arrow keys: move player
- Space: Jump
- LMB: Place the selected block
- RMB or Shift+LMB: Block eraser
- RMB + Ctrl: Select clicked block including params
- Mouse scroll: Zoom in/out
- Warning: Rendering performs pretty badly. Do not scroll out too far.
- 1-9: Hotbar block selector
- Use RMB to drag & drop a block from the selector into the hotbar
/or T or Enter: Open chat box- Enter: Submit
- ESC: Cancel and close
- Tab: Nickname autocompletion
- Up/Down: Previous chat message / empty chat message
- E: Toggle block selector
- G: Toggle god mode
- M: Toggle minimap
- F1: Toggle debug information
- Ctrl + F: Search worlds (lobby only)
Chat commands
- See
/helpand/help COMMAND(in-game)
Permission/player flag examples:
/fset FOOBAR tmp-edit-drawtemporary edit access (until rejoin)/fset FOOBAR godmodepersistent god mode access (after the world is saved)/fdel FOOBAR ownerremoves all persistent access except for "banned"/ffilterlists all players with any specified flags
Command line arguments
--versionoutputs the current game version--unittestruns the included tests to sanity check--decompress FILEPATHdecompresses an EELVL file (for development purposes)--serverstarts a server-only instance without GUI--setpass USERNAME PASSWORD|@FILE- Changes the password of the specified player.
--setrole USERNAME ROLEROLEcan be one of:normal,moderator,admin.- Can be executed while a server is already running.
--go USERNAME PASSWORD|@FILE [WORLD_ID]- Starts a local server and joins the world ID (if provided)
--is-up ADDRESS- Checks whether the server is online. Exit code 0 when online.
World import/export
*.eelvlfiles inworlds/imports/are listed by the server as playable read-only worlds- Helpful level archive: https://archive.offlinee.com/
- Clients may use
.export FILENAMEto export the current world toworlds/exports/ - See
worlds/README.txtfor further information
Environment variables
OE_DEBUG=+foo,-bar,+alloverride the default log levels+prefix: verbose logging-prefix: ignore anything below error levelall: Changes all loggers- Specific log level overrides take priority over
all. OE_DEBUG=?lists the available loggers
Lua API (This game can be modded!)
- API reference: lua_api.md
- Entry point:
assets/scripts/main.lua
- Extract the archive to any location
- Run
OpenEdits - In case of issues: run with
gdb. Debug symbols are included.
- Extract the archive to any location
- Run the executable
- In case of issues: use a debugger such as x64dbg or
gdb(in mingw-w64)
- CMake (cmake-gui recommended for desktops)
- Irrlicht-Mt : GUI/rendering library
- enet : networking library
- LuaJIT : server-defined scripts
- SQLite3 : auth & world saving
- Threads (pthread?)
- zlib: world compression (including EELVL import/export)
- OpenAL-soft: sound (for GUI builds only)
Dependency tree:
OpenEdits
├── enet
├── irrlicht-mt (server)
├── irrlicht-mt (client)
│ ├── libjpeg
│ ├── libpng
│ │ └── zlib
│ └── zlib
├── lua(jit)
├── openal-soft (client, optional)
├── sqlite3
└── zlib
Debian/Ubuntu:
# For all builds
sudo apt install libenet-dev libluajit-5.1-dev libsqlite3-dev zlib1g-dev
# Client builds only
sudo apt install libjpeg-dev libpng-dev libopenal-dev
Windows:
- C99 standard library is required. msvcrt uses C89, thus MinGW or Clang are recommended over MSVC.
Project compiling:
cmake -S . -B build
cd build
make -j
Headless server compiling
- Install the minimal required libraries
- Put the IrrlichtMt headers (include directory) somewhere
cmake -S . -B build -DBUILD_CLIENT=0 -DIRRLICHTMT_BUILD_DIR="/path/to/irrlicht/include/"cd build-> buildmake -j-> start./OpenEdits-server
Distributing (simplified)
cd build
make install
bash ../misc/pack.sh
Code: LGPL 2.1+
Imported code
- minimp3 (CC 0), used in GUI builds only
- SHA3IUF (MIT)
- FindENet.cmake (GPL 2)
- FindLuaJIT.cmake (LGPL 2.1+)
DejaVu Sans bitmaps (Bitstream Vera license, extended MIT)
- Converted with https://github.com/kahrl/irrtum
Images that are not listed below were created by SmallJoker (CC BY 4.0).
Unfortunately, iconfinder.com ceased to exist in November 2025.
DailyYouth (CC BY 3.0)
IconMarket (CC BY 4.0)
icon_minimap.png(desaturated)
ZUMMACO (CC BY 3.0)
Microsoft Fluent Emoji (MIT)
icon_copy.png(modified)
Sounds that are not listed below were created by SmallJoker (CC BY 4.0).
Piotr Barcz (CC 0)
