An Obsidian desktop plugin for Ghostty-style terminal surfaces inside your workspace. Open a shell in the right sidebar or main area, create terminal tabs and splits, and keep terminal context close to your notes.
Getting Started · Features · Requirements · Security · Build · Limitations

Open terminal from the command palette.You can also open the GhostTerm community plugin page and select Add to Obsidian.
andyhtran/GhostTerm.Open terminal from the command palette.On first terminal start, GhostTerm writes its bundled PTY helper into the installed plugin directory. BRAT only needs the standard Obsidian plugin files from the release.
Download these files from the latest GitHub release:
main.js
manifest.json
styles.css
Copy the files into <vault>/.obsidian/plugins/ghostterm/.
Enable GhostTerm in Obsidian's community plugin settings.
Build GhostTerm:
npm install
npm run build
Copy these files into <vault>/.obsidian/plugins/ghostterm/:
manifest.json
styles.css
dist/main.js -> main.js
Enable GhostTerm in Obsidian's community plugin settings.
PATH, locale, TERM, dimensions, and shell environment for GUI-launched ObsidianRuntime:
Build:
GhostTerm starts a local shell through a bundled helper binary. Commands run with the same permissions as Obsidian and your user account. They can read, write, create, delete, or execute files that your user account can access.
GhostTerm supports terminal copy and paste through the system clipboard when you invoke terminal copy/paste shortcuts.
Use GhostTerm only in vaults and workspaces where running a local terminal is appropriate. Treat terminal output and shell commands with the same care you would in a standalone terminal application.
GhostTerm does not collect telemetry. GhostTerm does not require network access at runtime.
npm install
npm run check
npm run build
The helper is built from pty-helper/ and embedded into dist/main.js during npm run build.
GhostTerm includes TypeScript plugin code and a Rust PTY helper. The plugin writes the helper into the installed plugin directory when a terminal starts. JavaScript dependencies are declared in package-lock.json; Rust dependencies are declared in pty-helper/Cargo.lock.