E++ is a small, English-like programming language with a browser Studio, a C++ command-line engine and a Python runner. Write text in double quotes, variables in single quotes, and maths as numbers and words.
let 'name' be "Ada"
say "Hello, ", 'name'
say 2 plus 3 times 4
- Edit Studio: drag launcher shortcuts between the activity and top bars, remove or restore them, and try the Studio default, Focus and Top bar presets. The editor, console and Tools remain available.
- Settings: pick from twelve colors or choose a custom accent, change editor text size, line numbers and wrapping, and control library file auto-renaming (on by default).
- News: open Tools → News for the latest 1.4a2 update and screenshots. EShare now lives only in Tools.
- EShare: turn an E++ project (including its pictures) into a portable code and import it in another browser without a server or account.
Settings, layouts and working files stay on this device. Existing files are not overwritten by automatic renaming or EShare imports.
Requirements: Node.js 18 or newer. No npm packages are needed to run the server.
npm startOpen http://localhost:8000 on that machine. On smaller screens, the same workspace scales down to fit. Use the activity bar for files and libraries and the Tools menu for project actions. The editor saves personal working copies in this browser. Learn opens the interactive lessons; Wiki opens the offline guide in the same tab, with a link back to Studio.
You can also open index.html directly for offline editing, Draw, Game and EShare.
Create a file, type the following and press Run code:
say "Hello, world!"
say 7 plus 5
Text needs double quotes. say hello is an error (E402), not a shortcut for printing text.
ask "What is your name?" and save the output as 'name'
say "Hello, ", 'name'
let 'score' be 10
say "Next score:", 'score' plus 1
Type your answer in the console. Variable names use single quotes and are case-insensitive.
let 'count' be 1
while 'count' is less than 4 do
say 'count'
let 'count' be 'count' plus 1
end while
Try repeat 3 times … end repeat, or an if ... then followed by otherwise on the next line. Notes use note [text].
add library "Draw"
define 'pencil' as drawing sprite
set the speed of 'pencil' to 200
'pencil' move right "100"
'pencil' move down "100"
'pencil' move left "100"
'pencil' move up "100"
The default speed is 240 pixels/second. Change it per sprite with set the speed of 'pencil' to 60, 600, or instant. The console’s speed menu can change the selected cursor while it moves; arrows move it manually. Stop interrupts an animation. Draw is not in E++.zip.
- Add
add library "Game"to a.enpplproject. The Image button appears. - Choose a local PNG, JPG, GIF, WEBP or SVG, name it
hero, and link it. The panel inserts the actor code. - Run the program.
create the actor 'hero'uses the picture linked to that name. You can addput the actor 'hero' at 0 and 0to position it at the centre.
An unreadable upload is refused; a broken existing link shows a message and a labelled tile. Upload the file again to relink it. Local uploads are embedded; URLs and relative paths in code still depend on those external resources.
Open Tools → EShare. Choose the current project or select an .enpp / .enppl file; copy the generated code and send it to someone. To open it, choose Import → Paste an EShare code. Imports are saved as new local copies without overwriting existing projects. Pictures are included when present. Plain E++ files and encrypted Studio downloads are supported; encrypted files must be unlockable with the keyring on the device creating the code.
EShare uses an authenticated encrypted container, but the decryption key is included in the share code so recipients can open it without setup. Anyone with the code can read the project: do not use it to protect secrets. Nothing is uploaded to a server. The old gallery API remains in the server for compatibility, but EShare replaces the gallery in Studio.
In the full source checkout, use:
make # build the native C++ engine
./epp -e 'say 2 plus 3'
python3 epp.py -e 'say "Hello"'
make test # C++ and Python regression suite
npm test # JavaScript, diagnostics, lexer and gallery tests
make zip # rebuild E++.zip and epp_language.zipThe full repository’s C++ and Python runners can use Colors, but have no Draw or Game canvas. The copies and native binary inside E++.zip reject Colors, Draw and Game with a helpful error, including after rebuilding from the ZIP’s source. In an extracted ZIP, make, make test and npm start work; rebuilding release archives and the npm test scripts require the full source checkout. For detailed build differences, see LANGUAGE.md.
In the full checkout, after make zip, run npm run test:distribution to check the extracted archives. Optional end-to-end tests require npm install and a Chromium/Chrome executable: set EPP_BROWSER to its path, then run npm run test:eshare, npm run test:studio:alpha and npm run test:distribution:browser.
Export downloads a sealed project; Keys exports or imports the keyring needed to open it on another browser or machine. Keep both safe. EShare codes include the key needed to open them, so share them only with people you trust. Don’t run untrusted projects without reviewing them; native Python integration can execute Python on your computer.
The Studio uses src/lexer.cpp compiled to offline WebAssembly and consumes its tokens in a JavaScript evaluator. The native CLI separately uses the C++ parser and interpreter; the browser does not run those components. If the compiled lexer is unavailable, Studio stops with E601 rather than silently falling back. See WIKI.md for architecture, limitations and troubleshooting.
Licensed under Apache 2.0; third-party notices are in third_party/licenses/.