Roman1 downloadsOne code block — one line of buttons that open a directory or file in Finder, the system terminal, or any CLI (zed, cursor, …). Global defaults, per-block overrides.
Status: 1.0.0 — feature-complete v1: finder/terminal/cmd buttons, global
defaults + per-block merge, settings, public API. Design:
spec/001-architecture.md.
One Obsidian code block — one line of buttons that
open a directory or file elsewhere on the machine: the file manager
(Finder), a terminal at the dir, or any CLI that takes a path
(zed <dir>, cursor <dir>). Global settings define the default line;
blocks extend, override, or disable it. A typed replacement for
hand-written [Dir](file:///…) links.
Global defaults only (Settings → Openers ships with Finder + Terminal):
```openers
dir: /Users/roman/spaces/loomp-tools/obsidian/viz
```
Per-block buttons — string shorthand, named map form, disable a global:
```openers
dir: ~/dev/some-project
label: Some Project
buttons:
zed: zed
cursor:
name: Cursor
cmd: cursor
notes: false
```
The body can be simple key: value lines (nested maps, - item lists,
inline flow maps {zed: zed}, key: | block scalars) or one JSON object.
Paths are absolute, ~-expanded, file:// URLs (paste migration), or
vault-relative. file: works the same as dir: — Terminal opens the
containing folder for file targets, Finder reveals and selects the file.
finder (Electron shell, OS-agnostic by construction),
terminal (macOS open -a Terminal|<app>, Linux terminal probe, Windows
best-effort), cmd (any executable; the path is appended, or substituted
for {path}; {dir} also available).zed: zed-nightly), extend (cursor:), or disable
(notes: false)./opt/homebrew/bin, /usr/local/bin,
~/.local/bin, ~/bin, then PATH; failures surface as actionable
Notices.Command field (zed, code -r,
nvim {path}), Terminal buttons a macOS app name (empty = Terminal;
e.g. iTerm, WezTerm, Warp), all get an optional lucide icon.finder + terminal; add command buttons (suggested
ids app, app-2, …) or edit data.json by hand.Copy main.js, manifest.json, styles.css into
<vault>/.obsidian/plugins/openers/, then enable Openers under
Settings → Community plugins. Desktop only (spawns local executables).
globalThis.openers (version 1):
const api = globalThis.openers;
api.version; // 1
api.buttons(); // [{ id, kind, name, cmd, enabled }]
api.open("/some/dir", "zed"); // resolve + run a global button
const handle = api.render(el, source);// render the widget into any element
handle.unload();
Plain single-file plugin, no build step (main.js is hand-written ES2022).
node --check main.js to syntax-check; design docs in spec/; sample
blocks in examples/widgets.md; node harness in examples/fixtures/.
Excluded from the repo: data.json (local settings) and .hotreload
(dev marker).