Highlighting ✦ Live Diagnostics ✦ Project-Aware Tasks
Language support for Obfusku, the symbolic ritualistic esoteric programming language, directly inside VS Code.
Obfusku expresses computation through a frozen alphabet of glyphs (λ, ≔, ⟡, ▷, ☄, ☊, ❧…) rather than ASCII keywords. Without editor support, that alphabet is just unrecognized text to VS Code — no highlighting, no error feedback until you run the CLI by hand, no sense of whether a directory is a Project or a bare file.
This extension closes that gap: it never reimplements any of Obfusku's language logic itself — parsing, type inference, and formatting all stay owned by the obfusku/obfusku-lsp binaries — it only wires their real output into VS Code's native UI.
A TextMate grammar built directly from spec/CONCRETE_SYMBOLIC_GRAMMAR.md's glyph table — binders (≔ ˚ ⚙︎), control (⟡ ☄ ☊), base types, pattern/match syntax, and every operator at its correct precedence group.
obfusku-lsp runs as a real language server, pushing type errors, parse errors, and warnings as you type — against the unsaved buffer, not just on save.
Formats the current buffer through obfusku fmt, no save required first.
Recognizes obfusku.toml (spec/adr/ADR-017/018/020) the same way the CLI does — walking upward from the active file:
Obfusku: Build Projectand its editor-title icon appear only when the active file sits inside a Project.- Build/Run tasks (
Terminal: Run Task→obfusku) for every workspace folder with a manifest, with errors and warnings attributed to the Project's entry file and surfaced in the Problems panel. - Schema-backed completion for
obfusku.tomlwhen the Even Better TOML extension is installed.
| Command | What it does |
|---|---|
Obfusku: Run File |
Runs the active file with obfusku run and shows output |
Obfusku: Type Check File |
Runs obfusku check and refreshes diagnostics |
Obfusku: Format File |
Formats the active file |
Obfusku: Open REPL |
Opens an integrated terminal running obfusku repl |
Obfusku: Build Project |
Runs obfusku build (only shown inside a Project) |
Obfusku: Show Language Server Output |
Opens the obfusku-lsp output channel |
Shows whether obfusku-lsp is running, starting, or failed to start — click it to jump straight to the server's own log.
Functions, bindings, type declarations (sum/record/tuple), match, conditionals, raise/catch, and imports.
Both obfusku and obfusku-lsp must be installed and resolvable on PATH — the official install.sh installs both together:
curl -fsSL https://raw.githubusercontent.com/core-red-project/obfusku/main/install.sh | bashIf they live somewhere else, point to them explicitly:
{
"obfusku.path": "/path/to/obfusku",
"obfusku.lspPath": "/path/to/obfusku-lsp"
}The extension reads obfusku --version and enables only what that CLI can do. Tested against 1.0.0 and 1.1.0.
| Feature | 1.0.x | 1.1.x |
|---|---|---|
Live diagnostics (obfusku-lsp) |
yes | yes |
| Error in an imported module | drawn on the importing file at the imported file's line | pinned to line 1 with an "in an imported module" prefix |
| Closing a file | its diagnostics stay in Problems | cleared |
| Buffer not on disk yet | could not read '<path>' |
checked against its directory |
Type Check File, Run, Build, REPL |
yes (text output) | yes (JSON output) |
Format File |
disabled: the 1.0 formatter deletes comments | yes |
Run Project Tests and the test task |
no | yes |
Manifest format 2 ([capabilities], [dependencies]…) |
no | yes |
The obfusku-lsp rows come from running the real server (tests/lsp, selectable with OBFUSKU_LSP_PATH and OBFUSKU_PATH); the extension cannot correct what a 1.0 server publishes.
A 1.0.x CLI shows a notice once. Anything from 2.0 on is outside the tested range and also notices once; 1.x releases after 1.1 keep every 1.1 feature. Keep obfusku and obfusku-lsp on the same version.
| Setting | Default | Description |
|---|---|---|
obfusku.path |
"obfusku" |
Path to the obfusku CLI executable |
obfusku.lspPath |
"obfusku-lsp" |
Path to the obfusku-lsp language server executable |
- With obfusku 1.0.x a brand-new file that is not on disk yet is reported as unreadable until it is saved once; 1.1 checks it against its directory.
- No hover, go-to-definition, or completion yet —
obfusku-lspcurrently implementstextDocument/publishDiagnosticsonly. - Build/Run tasks don't use a declarative
problemMatcher: the CLI's plain-text diagnostic lines (error: message (line:col)) never include a filename, so a regex-based matcher has nothing to key on. Instead, the task provider resolves the Project's entry file itself and attributes diagnostics to it directly — correct for the common case, but a diagnostic that actually originates in an imported module still surfaces against the entry file, not the module that raised it.
- Obfusku language repository — specification, ADRs, CLI, and LSP source
- Issue Tracker & Feature Requests
- Contributing Guide
Obfusku for VS Code — A Core Red Project
© 2026 Sxnnyside Project. Distributed under the MIT License.