A Markdown workspace reader for Chrome.
Open one local .md file and the whole folder is one click away.
Notes, docs and ADRs usually live as a folder of Markdown files, but Markdown viewers show you one file at a time. Burrow treats the folder as the unit:
- Workspace sidebar (right) – every Markdown file in the folder as a tree. Click to switch; the tree, its expanded folders and your sidebar layout stay put.
- No setup – there is no "open folder" step. The workspace is detected from the file you opened; press ↑ to widen it to the parent folder, and Burrow remembers that root for every file under it.
- Search the whole folder – file names and contents. Clicking a hit opens that file at the matching line with the term highlighted, and the results stay open so the next hit is one click away.
- Outline sidebar (left) – the headings of the current file; follows your scroll position, click to jump.
- Out of the way when you read – hide either sidebar (
Alt+[,Alt+]), drag to resize; the layout is remembered. - Rendering – GFM tables and task lists, syntax highlighting, Mermaid diagrams, light / dark / system theme, raw view. Output is always sanitised.
| Search the folder, jump to the line | Focus mode: both sidebars hidden |
|---|---|
![]() |
![]() |
- Download
burrow.zipfrom the latest release and unzip it somewhere permanent (Chrome loads the extension from that folder every time it starts). - Open
chrome://extensions, enable Developer mode, click Load unpacked and pick the unzipped folder. - Open the extension's Details page and turn on Allow access to file URLs. Chrome does not let extensions touch
file://pages without it; the toolbar popup tells you whether it is on. - Open a local
.mdfile in Chrome.
To build it yourself instead:
npm install
npm run build # unpacked extension in dist/
npm run package # the same, zipped as burrow.zip| Keys | Action |
|---|---|
Alt + [ |
Toggle outline |
Alt + ] |
Toggle workspace |
Alt + K |
Search workspace |
Esc (in search box) |
Clear search, back to the file tree |
Theme, ignored folder names (dot-folders are always ignored; node_modules by default), the search index file limit (default 2000), raw HTML rendering (off by default; output is always sanitised), and the list of saved workspace roots.
Burrow works entirely on your machine.
- No network access. The extension makes no network requests and requests no network
permissions. Its only host permission is
file:///*, and the code that reads files rejects any URL that is not a local file. - No data collection. There is no telemetry, analytics or account. Nothing about your files, searches or usage leaves the browser.
- What is stored. Your settings, sidebar layout, expanded folders and saved workspace roots
(folder paths) are kept in
chrome.storage.localon this device; they are not synced. The search index lives in memory and is discarded when the background worker stops. - Permissions.
storagefor the settings above,offscreenfor a fallback file reader, and access to file URLs, which you grant explicitly inchrome://extensions.
One caveat that applies to any Markdown viewer: if a document embeds remote content, such as
, Chrome loads it when the document is rendered, exactly as it
would for a web page. Burrow does not add, rewrite or proxy such requests.
To report a vulnerability, see SECURITY.md.
Chrome renders file:///some/dir/ as a directory listing page. The background service worker fetches that page and parses it to list a folder, so no folder picker or native helper is needed. The content script only handles the UI; directory reads, root resolution and the search index live in the service worker (src/background). If a Chrome version refuses file:// fetches from the worker, reads fall back to an offscreen document automatically.
Switching files is a normal page navigation, so back/forward, reload and bookmarks all work.
npm run typecheck
npm test # unit tests (Vitest)
npm run build && npm run e2e # Playwright, loads dist/ into ChromiumThe first E2E run needs npx playwright install chromium. npm run screenshots regenerates the README images from docs/demo/orchard-handbook, and node scripts/make-icons.mjs re-renders the icons from static/logo.svg.
Releases are cut by pushing a v* tag whose version matches manifest.json; the release workflow tests, builds and attaches burrow.zip.
Design notes: docs/design.md.
Apache License 2.0. Third-party components are listed in NOTICE.



