A plain-text knowledge base built to the YANP vault spec v0.2. All logic — wikilinks, frontmatter, search — runs in Janet Lisp compiled to WebAssembly. One HTML file. No install.
Faithful to the YANP spec. Your notes are just strings in localStorage — readable, exportable, yours.
Type [[Note Name]] anywhere in your note. In preview mode, links resolve by frontmatter title → aliases → slug — exactly as the YANP spec demands. Clicking a missing link creates the note.
Open notes with a --- block. Supports title, tags, aliases, status, author, due, and more. Unknown fields are preserved — the spec requires it.
Switch between raw edit and a fully rendered preview. Wikilinks are processed first by Janet, then passed to marked.js for Markdown rendering. Code blocks, blockquotes, lists — all styled.
The search box filters your vault in real time. Janet's search-notes function matches against slug, frontmatter title, and body content — all case-insensitive.
Before deleting a note, YANP Notes checks for inbound wikilinks from other notes. If any exist, you get a warning listing the linking notes — then you decide.
All business logic runs in Janet Lisp via WebAssembly. PEG grammars parse wikilinks and tags. JavaScript only handles the DOM. A real Lisp, in your browser tab.
One HTML file contains everything: styles, markup, Janet source code, and the JavaScript glue. The WASM runtime is fetched on first load.
Run npx serve . in the folder containing
notes.html and open it in your browser.
janet.js is fetched from janet-lang.org, which
auto-downloads the WebAssembly runtime (~1 MB, cached after first load).
The embedded Janet source code is evaluated into the REPL environment. All app functions — wikilinks, search, slugs — are now live.
Notes are auto-saved to localStorage as you type.
Your vault persists across reloads, no server required.
YANP defines a plain-text, tool-agnostic vault format. This app adapts the file-system spec for the browser using localStorage.
| Spec requirement | Browser adaptation | |
|---|---|---|
| UTF-8 .md files, kebab-case names | localStorage keys are kebab-case slugs generated by Janet's note-slug function |
✓ |
| Optional YAML frontmatter | Parsed by Janet's parse-frontmatter using string splitting. Unknown fields preserved on round-trip. |
✓ |
| Wikilink resolution: title → aliases → stem | Janet's PEG grammar extracts link targets; resolution follows the spec precedence order | ✓ |
| Tags: inline #tags and frontmatter tags: [] | Janet's extract-tags merges and deduplicates both sources, case-insensitive |
✓ |
| Warn before deleting linked notes | Janet's inbound-links scans the vault for references; confirmation dialog names the linking notes |
✓ |
| Reject duplicate slugs / titles / aliases | Checked on note creation — duplicate title or alias triggers an alert before the note is saved | ✓ |
| status: draft / active / archived | Stored in frontmatter, displayed as a chip in the frontmatter bar, new notes default to draft |
✓ |
No npm. No bundler. No framework. Just Janet, WASM, and a browser.
Open YANP Notes →