Offline API documentation, one keystroke away.
dashi is a macOS viewer for Dash-format docsets. Press a key, filter, search, and navigate the docs without leaving your keyboard. Press Escape you'll be back on the exact place you left.
Keyboard driven. Everything happens without the mouse. Type to search, arrows to move,
Enter to read. Page Up / Page Down jumps between sections, typing filters the outline,
⌘ + F finds in page, ⌘ + [ and ⌘ + ] walk your history. Press ⌘ + ? anytime for the
full reference.
There when you need it. dashi lives as a resident background agent summoned by a global
hotkey (⌥ + Space by default), making the context switch between your code and the reference
as cheap as it gets: one keystroke each way. The panel floats over full-screen apps and
works across Spaces, and because macOS never activates it as an app, your editor stays put
underneath and dismissing drops you on the exact character you left. Searches return in
milliseconds across hundreds of thousands of entries, and the outline knows every method on
the page, no matter which documentation generator produced it.
Minimal. One purpose: reading docs. Native Swift and AppKit, no web stack wrapping the app, no accounts, no telemetry. A single floating panel with a search view and a reading view, styled to stay out of your way.
Community-backed. dashi reads the standard Dash docset format, which means the whole
ecosystem of official and community docsets works out of the box. Install them with
dasht, or drop .docset bundles into the docsets folder
from Preferences.
Requires macOS 14+ and the Xcode command line tools.
git clone https://github.com/dportalesr/dashi.git
cd dashi
make installmake install builds the app and copies it to /Applications. On first launch dashi
registers itself as a login item (toggleable in System Settings) and sits in the menu bar
as a book icon. Summon it with ⌥ + Space.
dashi looks for docsets in ~/.local/share/dasht/docsets by default (configurable in
Preferences). Each docset gets a derived search keyword, so ruby4: map scopes the search
to Ruby 4; keywords are customizable per docset, and selecting a result pins its docset
automatically. Enable, disable, reorder, and delete docsets from Preferences.
| Key | Action |
|---|---|
⌥ + Space |
Summon or dismiss the panel |
Esc |
Back one level; dismisses from search |
↑ or ↓ then ⏎ |
Pick and open a result |
Page Up / Page Down |
Previous / next section in the viewer |
⌘ + F |
Find in page |
⌘ + [ / ⌘ + ] / ⌘ + ← / ⌘ + → |
History back / forward |
⌘ + = / ⌘ + - / ⌘ + 0 |
Zoom |
⌘ + ? |
Full shortcut reference |
dashi registers a URL scheme for editor and script integration:
open "dashi://search?q=Array&docset=ruby4"swift test # headless core tests
make run # build, bundle, and launchThe search, parsing, and resolution logic lives in DashiCore, a target with no AppKit
dependency, so the behavior that matters is tested without a GUI.


