Epher for Visual Studio Code, VSCodium, and Cursor

epher is a calculator language: you write ordinary math, with units
that convert, and every statement's answer appears inline, right next
to the line that produced it.
Edit text files with an extension of type '.epher', such as 'triangle.epher'.
Download the epher calculator, and a large
selection of ready-made scripts from
epher.org.


Type a formula and the answer is already there. No runnable repl in a
side panel, no print statements: the editor is the calculator.
What you get
- Answers inline: each statement's result renders next to its
line:
x = 40 + 2 shows = 42.
- Units that convert:
6371 km, 55 mile/hr, 30 deg are
quantities, not comments. speed in km/hr converts; the answer
carries the right unit.
- Live diagnostics: syntax errors point at the exact token, and
evaluation errors carry the same message the epher calculator shows.
- Hover signatures: hover any name for its canonical signature;
your own functions show their definitions, catalog functions show
their docs.

- Completion: the whole catalog (math, astronomy, statistics),
your own definitions, keywords, and snippets for the common
statement shapes.

- Unit-aware coloring: semantic tokens color unit suffixes by
meaning: the
m in 2 m is a unit, not a variable.
Quick start
- In VS Code: Extensions view → search for Epher →
Install (or run
ext install upyesp.epher). The
marketplace page
has the listing.
- In VSCodium: Extensions view → search for Epher →
Install. VSCodium searches Open VSX
by default, which carries the same extension.
- In Cursor: Extensions view → search for Epher →
Install. Cursor searches Open VSX through its own reviewed
marketplace proxy, and the same extension is served there.
- Open any
.epher file and start calculating.
On another fork, or prefer to sideload? Get
epher-vscode.vsix from the
releases page,
then Extensions view → the ⋯ menu → Install from VSIX…
(the wasm-wasi runtime it rides on installs itself as a dependency).
The language server ships inside the extension: a WebAssembly
build of the same epher-lsp server the other editors use. Nothing is
downloaded on first use, and it works offline.
Running a script
One behaviour, however you start it: the Run script CodeLens at
the top of the editor (the play icon), Ctrl+Enter /
Cmd+Enter, F5, Ctrl+F5, or the command
palette. The whole file runs, the answers print in the Debug Console,
and the results pane opens beside the editor with the same
transcript, clickable back to its lines, plus every graph the run
produced as inline SVG.
epher has nothing to pause or step through: statements evaluate in
order and the answers are the whole transcript, so the run rides a
run-only debug adapter with no breakpoints and F5 simply means "run".
A launch.json entry works too (type: "epher", request: "launch",
program: path to script); the Add Configuration menu offers the
snippet.
Works in the browser too
The same extension runs on vscode.dev and
github.dev: press . on any GitHub repository to open it in
the browser, with the same inline answers.
Requirements
- VS Code
1.88 or newer (and the forks: Cursor, VSCodium; or a web
host). The ms-vscode.wasm-wasi-core runtime installs automatically
with the extension.
- No other setup: no compiler, no runtime, no network after install.
Troubleshooting
If the server cannot start, editing still works through the TextMate
baseline (highlighting and snippets); only the live features wait. A
window reload retries. The Output panel's Epher channel says
what happened.
Data and telemetry
None. Everything evaluates on your machine.
License
MIT
Building and contributing (extension developers)
The extension is a thin shell; all understanding lives in
epher-lsp,
the shared language server. The grammar (syntaxes/epher.tmLanguage.json)
and snippets (snippets/epher.json) are copies of
clients/shared;
edit there, never the copies.
npm install
npm run compile # syncs shared assets, typechecks, bundles both entries
npx @vscode/vsce package --no-dependencies
npm run compile bundles the desktop entry to out/extension.js and
the web entry to dist/browser.js with esbuild (single file each; the
web worker allows no module loading) and typechecks both.
The wasm must be in place first (CI does this before packaging; the
wasm is never checked in):
rustup target add wasm32-wasip1-threads
cargo build -p epher-lsp --target wasm32-wasip1-threads --release
mkdir -p server
cp ../../target/wasm32-wasip1-threads/release/epher-lsp.wasm server/
Marketplace publication is live (ADR-0068 amendment, 2026-09-18):
upyesp.epher publishes with the Entra ID secure automated route
(vsce publish --azure-credential, no personal access token). The
releases page keeps the vsix for sideloading.