A local-first knowledge-base app for people who want their notes to stay as plain markdown files on disk.
Think of it as a tool for building personal wikis, research notebooks, reading logs, project journals, or practice trackers — any domain where you accumulate entries over time and want to query, cross-reference, and revisit them — all plain markdown, queryable through Notion-style table, board, list, and gallery views.
What makes it different from Notion or Obsidian: your knowledge base lives as a folder of .md files on your filesystem, and wiki-view ships with an integrated terminal rooted at the workspace. That means you can launch Claude Code directly against your notes, run scripts over them, or execute source files that live alongside your notes — all without leaving the app. No API, no export step. wiki-view indexes frontmatter so both the user (through the UI) and Claude (through the structured filesystem + the terminal) can work the same knowledge base together.
No database server, no lock-in. Built with Electron, React, and TypeScript.
Every .md file is a document. Base frontmatter keys (title, created, updated, tags) are implicit; custom keys (e.g. status, difficulty, last_reviewed) are user-defined and their types live in .wikiview/schema.json.
A folder that behaves as one document in the sidebar. Marked by a direct-child .md with wikiview.role: index in frontmatter. Use bundles when a topic grows multi-file — notes plus attachments plus sub-docs.
A folder with a .wvdb.json view definition. Child .md files are queryable rows. Views (table, board, list, gallery) are configured in the UI with filters, sorts, and groupings.
Inline markdown links [text](path.md) are tracked with automatic backlinks and broken-link warnings. ![[target]] transcludes another doc's body inline (depth capped at 3).
A ```wikiview-view fenced block inside a document renders a live query result against the workspace, scoped by default to the host doc's directory.
A pty-backed terminal panel rooted at the workspace. Launch claude, run scripts, or grep your own knowledge base — without leaving the app.
Optional cross-device sync with a .wikiviewignore file (gitignore syntax) to exclude non-markdown artifacts. Built-in ignores cover .git, node_modules, .wikiview, .DS_Store, and all dotfiles.
One way to see wiki-view in action is a LeetCode practice workspace — a place to track problems you've solved, group them by technique, surface ones due for review, and run your solutions without leaving the app.
The workspace looks like this:
leetcode/
├── CLAUDE.md ← operating rules for Claude Code sessions
├── repo-index.md ← root index listing top-level directories
├── seed.md ← blueprint the workspace was scaffolded from
├── problems/ ← one bundle per problem
│ ├── 3Sum/
│ │ ├── 3Sum.md ← wikiview.role: index (write-up + solution notes)
│ │ └── solution.py ← runnable alongside the notes
│ ├── Two Sum/
│ └── …
├── concepts/ ← techniques, each with a bundle of linked problems
│ ├── Backtracking/
│ │ └── Backtracking.md
│ ├── Trees/
│ └── Linked Lists/
├── practice/ ← dated practice-session logs
├── learning_plan/ ← roadmap docs
├── todo/
│ ├── todo.md
│ ├── backlog.md
│ └── completed.md
├── scripts/
│ └── query.py ← custom frontmatter query tool
└── ingest/ ← drop-zone for unstructured input
How it comes together:
- Each problem bundle carries frontmatter like
difficulty: medium,status: solved,last_reviewed: 2026-04-10,concepts: [Backtracking]. The bundle holds the problem statement, your notes, and the solution file side-by-side. problems/as a database (once you drop a.wvdb.jsonin it) gives you a board grouped bystatus, or a table sorted bylast_reviewedto surface stale problems.- Transclusion pulls a concept's summary into every problem that uses it:
![[concepts/Backtracking/Backtracking]]in a problem doc inlines the concept write-up. - Embedded views on the root
repo-index.mdshow live lists like "problems due for review" — a```wikiview-viewblock with filters overlast_reviewed. - Integrated terminal is rooted at the workspace: open a problem bundle, jump to the terminal,
python problems/3Sum/solution.pywithout leaving the app. Or launchclaudeand ask it to draft a new problem bundle using your workspace's conventions.
A concept bundle pulls the pieces together — the Backtracking page below carries its own frontmatter (tags, custom properties), shows inbound links from the concepts index, and uses headings like "Problems with patterns: [Backtracking]" to manually surface related problems:
Split panes and the integrated terminal let you write notes, browse example source files, and execute them side-by-side:
Because the terminal is rooted at the workspace, you can launch Claude Code inside it and ask questions about your knowledge base directly — Claude runs your own scripts (here, scripts/query.py) over your frontmatter to answer:
The workspace was scaffolded via the /new-seed flow — see Starting a new workspace with Claude below.
$ npm install$ npm run dev# For windows
$ npm run build:win
# For macOS
$ npm run build:mac
# For Linux
$ npm run build:linuxwiki-view ships a slash-command template that interviews you about a new workspace and writes a seed.md blueprint tailored to it. A follow-up Claude session then uses the seed to scaffold CLAUDE.md, repo-index.md, the todo queue, and your content directories.
To use it in an empty workspace:
- Copy docs/workspace-templates/new-seed.md into
.claude/commands/new-seed.mdat the workspace root. - Open Claude Code in that directory and run
/new-seed. - Answer the interview questions. Claude writes
seed.mdat the root. - Start a fresh Claude Code session and say
read seed.md and scaffold this workspace.
The template is a frozen snapshot of wiki-view's user-facing rules (bundles, transclusions, sync ignores, etc.) — copy the current version each time you start a new workspace so you're working off up-to-date behaviour.


