Ahmad AlModhayan47 downloadsRun, view and edit code in 40 languages: Run and Copy on code blocks with live output, an editor for code files, and a local, opt-in bridge for AI agents.
Run, view and edit code inside Obsidian. Every code block gets Run and Copy, output appears live under the block, and code files open in a real editor. It supports 40 languages, speaks English and Arabic, and stays light, with nothing running until you press Run.
New in 1.1: trusted folders for notes from other people, an Arabic interface, and an opt-in agent bridge that lets local AI agents (Claude Code, Raqeeb) read the folders you choose and propose note changes that wait for your Accept.
Brief Coder was called Obsidian Coder (plugin ID
coder-studio) until 1.0.1. The community directory doesn't allow "Obsidian" in plugin names, so it was renamed, ID included. See Moving from Obsidian Coder.

input(), Scanner, read) get a box to type into.main, a class or <?php; Brief Coder adds them for you.console.log output appears with the rest..py, .js, .ts, .go, .rs, .java, .c, .cs, .sh and more get:.ipynb files show their cells and saved outputs, on desktop and on phones. See Notebooks.
On desktop, Brief Coder uses the languages installed on your computer. Settings → Brief Coder → Check shows which ones it found.
| Group | Languages (code block names) |
|---|---|
| Built in, no install | JavaScript (js), HTML (html) |
| Scripting | Python (python, py), JavaScript with Node.js / Bun / Deno, TypeScript (ts), Shell (bash, sh), Zsh, Fish, PowerShell (pwsh), Batch (Windows), Ruby, PHP, Perl, Lua, R, Julia, AppleScript (macOS), SQL (sql, runs in a temporary SQLite database) |
| Compiled | Go, Rust, C, C++ (cpp), C# (cs), F#, Java, Kotlin, Scala, Groovy, Swift, Dart, Haskell, Elixir, Clojure, OCaml, Nim, Zig, Crystal, Racket, Common Lisp, Fortran, Octave / MATLAB |
| Copy only | CSS, JSON, YAML, TOML, XML, Dockerfile, Makefile, diff, LaTeX and about 70 more |
Blocks that Obsidian or other plugins render, such as mermaid, dataview, tasks and query, are left untouched.
Brief Coder needs Obsidian 1.8.7 or newer.
From Community plugins
Manually
main.js, manifest.json and styles.css from the latest release.<your vault>/.obsidian/plugins/brief-coder/.With BRAT (optional)
BRAT gets a new GitHub release as soon as it's out, before the directory lists it.
Ahmad-AlModhayan/brief-coder.The plugin ID changed from coder-studio to brief-coder, so Obsidian treats Brief Coder as a new plugin:
coder-studio and says so.coder-studio) in Settings → Community plugins. With BRAT, also remove the old entry from BRAT's list, so it doesn't reinstall it.```python title="Squares"
print([n * n for n in range(5)])
```
title="…" shows a name in the block's bar.norun keeps the Copy button but hides Run, for example ```python norun.open("data.csv") reads a file next to the note. Settings can switch this to a temporary folder.By default the whole vault is trusted (/), and code runs when you press Run, as in earlier versions. If your vault holds notes from other people (a shared or synced folder, an imported vault), list only your own folders in Settings → Brief Coder → Trusted folders. Code in any other note then shows the code and asks first. Run all code blocks in this note always asks once, and names what will run. Ask before running makes every run ask, wherever the note is.
scratch.py or tools/convert.js..txt, .log, .rst, .adoc, .csv, .tsv, .ndjson, .conf, .cfg, prod.env, .properties, .tf, .tex, .diff and more. They have no Run button. .txt, .log, .rst, .adoc and .text wrap long lines; Settings → Brief Coder → Wrap text files turns that off, unless Wrap long lines is on, which covers every file. .csv and .tsv show as plain text..env, .gitignore) aren't part of the vault, so Obsidian can't open them; prod.env opens, .env doesn't. Files with no extension (Dockerfile, Makefile) don't open either: Obsidian picks a viewer by extension only, so opening them would mean claiming every extensionless file in the vault, binaries included..ipynb files (Jupyter's format 4) open in a read-only view, on desktop and mobile. Brief Coder doesn't write to the file, and opening a notebook never runs its code.
<br> and <b>.![[embeds]] and [[links]] show as text. Code blocks show as code, so plugins such as Dataview don't run them..ipynb: if another plugin handles it, that plugin keeps it. If you added ipynb to Code files, it keeps opening as text in the editor.
HTML blocks and .html files render in a sandboxed frame that grows to fit the page. Drag its bottom edge to resize it.
Assign hotkeys to any of them in Settings → Hotkeys.
The agent bridge gives local AI agents your notes as context without giving them your vault. It is off by default. Full design: docs/AGENT_BRIDGE.md.

coder-bridge.mjs, a small MCP server the agent starts on your computer. It talks over stdin/stdout: no port, no network, no account.Set it up:
coder-bridge.mjs from the latest release into <vault>/.obsidian/plugins/brief-coder/. It needs Node.js 18 or newer..mcp.json.Agents get six tools: list_notes, search_notes (Arabic-aware), read_note, list_code_blocks, propose_change and list_changes. The bridge never runs code.

| Setting | What it does |
|---|---|
| Show Run and Copy bar | Turns the bar under code blocks on or off. |
| Hide Obsidian's copy button | Avoids two copy buttons on one block. |
| Click inline code to copy | In Reading view, clicking inline code copies it. |
| Trusted folders | Notes in these folders run on click; others show the code and ask. / is the whole vault. |
| Ask before running | Asks before every run, wherever the note is. |
| Time limit | Stops programs after this many seconds. 0 means no limit. |
| Output kept per run | Keeps the newest output (200 KB by default), so endless printing can't slow Obsidian. |
| JavaScript runs with | Auto (Node.js if installed), Node.js, or the in-app sandbox. |
| Code files | Which extensions open in Brief Coder's editor, plus line numbers, wrapping (all files, or text files only) and tab size. |
| Agent bridge | Off by default. Shared folders, private folders, whether agents may propose changes, and the config to copy. |
| Languages | Per-language command, e.g. /opt/homebrew/bin/python3.12 or py -3.12. |
src/run/process.ts uses Node's fs for the temporary files described below, and child_process to start the interpreter or compiler you installed, read your shell's PATH and stop a run. Scanners, including the community directory's, flag both. The agent bridge uses fs to read the folders you share with it and to save proposed changes in <vault>/.coder/agent-changes.Brief Coder was built to keep Obsidian fast. Measured in Obsidian 1.13 and 1.14:
dotnet run app.cs). On older .NET, install dotnet-script and set it as the C# command.tsx, Bun, Deno or Node.js 22.6+.py launcher, and bash blocks use Git Bash. A background job started with & in a Git Bash block keeps running after Stop; end it from the Task Manager, or don't start background jobs in blocks.Execute Code is the most-used plugin for running code blocks. Brief Coder covers the same ground with a different focus:
.py, .go, .rs and other files open in an editor and run with Ctrl/Cmd + Enter.Execute Code has features Brief Coder doesn't, such as notebook-style shared state between blocks and plots drawn into the note. Pick the one that fits how you work.
Does it work on phones and tablets? Yes. JavaScript and HTML run inside Obsidian, and code files open in the editor. Other languages need a desktop computer to run; on mobile their blocks keep the Copy button.
Does it send my notes or code anywhere? No. Brief Coder makes no network requests and collects nothing. Code you run can use the network, as any program you run yourself can.
Is it safe to open a vault someone shared with me? Nothing runs when a note opens, syncs or renders. Code runs only when you press Run, and code in notes outside your trusted folders asks first and shows what will run.
Will it slow Obsidian down? It shouldn't. Startup takes a few milliseconds, desktop-only parts load the first time you press Run, and nothing runs in the background while you aren't running code. See Performance.
Where is output kept? In memory only. Output isn't written into your notes, and it's dropped when you clear it, when Obsidian closes, or after ten minutes with nothing showing it.
Why does it say a language isn't installed? Brief Coder runs code with the tools already on your computer. Install the language, or set its full path in Settings → Brief Coder → Languages. See Troubleshooting.
Do I need the agent bridge? No. It's off by default and only matters if you use a local AI agent such as Claude Code. See Agent bridge.
npm install
npm run dev # rebuilds main.js on change
npm run build # type-check + production build
npm test # unit tests + runs real snippets in every language installed on the machine
src/languages.ts: the language table (names, file types, commands, snippet helpers).src/run/: desktop process runner, in-app runners, output buffer and run sessions.src/ui/: code-block bar (Reading view and Live Preview), output panel, code file editor, settings, Agent changes view.src/agent/changes.ts: held changesets (accept, reject, revert, diff).src/i18n.ts: English and Arabic interface text. A test fails if a string has no Arabic.bridge/coder-bridge.mjs: the agent bridge (MCP over stdio, no dependencies).The test suite runs snippets in 32 languages end to end, and also covers Stop, the time limit, typed input, output limits, temporary-file cleanup, error messages, the bridge's scope rules, and accepting and reverting changesets. docs/TESTING.md records the last run inside Obsidian.
To contribute, see CONTRIBUTING.md.
Releasing: run npm version patch (or minor / major), update .github/RELEASE_NOTES.md and CHANGELOG.md, and push to main. GitHub Actions builds, tests and publishes the release with main.js, manifest.json, styles.css and coder-bridge.mjs.
MIT © Ahmad AlModhayan