Releases: ddsyasas/llm-wiki
Release list
v1.2.3 — free OpenRouter models + first-run nudge
Patch release. Lowers the cost-to-first-ingest from "spend a few cents per source" to "$0", with a first-run wizard step that helps new users find the option without hunting through Settings.
Install
npm install -g @syasas/llm-wiki@latest
# or pin: npm install -g @syasas/llm-wiki@1.2.3If npm is unavailable: npm install -g https://github.com/ddsyasas/llm-wiki/releases/download/v1.2.3/syasas-llm-wiki-1.2.3.tgz.
What's new
Free OpenRouter models in the dropdown. Settings → Models now lists four curated :free routes alongside the paid options:
meta-llama/llama-3.3-70b-instruct:free— proven JSON, 131K ctx. Best foringestandlint.nvidia/nemotron-3-super-120b-a12b:free— 1M ctx. Best forqueryandchat.deepseek/deepseek-v4-flash:free— fast reasoning, 1M ctx. Alternative forquery/chat.google/gemma-4-31b-it:free— vision-capable, 262K ctx. The only credible free vision pick.
All four are tagged with FREE in the dropdown notes. Pricing is set to $0/M tokens, so cost previews and the usage tracker show real numbers.
Settings → Models banner. When any slot uses a :free route, an amber banner surfaces the three things users need to know:
- Rate limits — ~20 req/min, ~50/day on a fresh account; ~1000/day after $10 of OpenRouter credit is added (deposit raises the cap even for free routes).
- Data retention — some free routes pass through providers that retain prompts for training. Paid Anthropic/OpenAI routes don't.
- JSON reliability — if you hit a "schema validation failed" error, switch the offending slot to a paid model.
Same amber palette as the existing Ollama banner since both are "you made a non-default choice with caveats".
First-run wizard nudge. Step 2 of 3 ("OpenRouter API key") gained a small block under the keychain note: "Prefer zero per-call cost? Use free OpenRouter models." One toggle button sets sensible free-tier defaults across all five operation slots. Users still enter their key (OpenRouter accounts are free; what changes is the per-call cost, not whether you need to sign up). Two-click setup for a fully working zero-cost wiki.
Why not just point at the existing Ollama path?
Ollama is the truly key-less path and works great, but it needs local compute (10–30 GB RAM for the larger models). Free OpenRouter fills a different gap: cloud-quality models with zero per-call cost for users whose laptops can't run a 70B locally. The two paths coexist — pick whichever matches your machine.
Upgrading
npm install -g @syasas/llm-wiki@latestExisting settings (whichever paid model you chose) are preserved. To switch to free models post-upgrade: Settings → Models → pick a (free) entry per slot, Save.
Patch-fix bundled in this release: stale assertion in the vision-ingest test that was missed during the v1.2.1 PDF fix. Tests are green again on a clean checkout.
v1.2.2 — CLI update notifier
Patch release. Adds a small but high-leverage UX feature: the CLI now tells users when a newer version is available.
Install
npm install -g @syasas/llm-wiki@latest
# or pin: npm install -g @syasas/llm-wiki@1.2.2If npm is unavailable: npm install -g https://github.com/ddsyasas/llm-wiki/releases/download/v1.2.2/syasas-llm-wiki-1.2.2.tgz.
What's new
Update-available banner on llm-wiki start — when a newer version is on npm, a yellow banner prints above the server logs:
╭───────────────────────────────────────────────────╮
│ Update available: 1.2.2 → 1.2.3 │
│ Run: npm install -g @syasas/llm-wiki@latest │
╰───────────────────────────────────────────────────╯
Solves the discovery problem that bit v1.2.0 users hit with the bugs fixed in v1.2.1 — they had no way to know there was a fix unless they checked the repo manually.
How it works:
- Cached on disk in
~/.llm-wiki/update-check.json. No network call on the hot path, so startup isn't slowed. - Background-refreshes the cache when it's >24h stale (3s timeout, all errors silent — offline or slow registry = no banner, no warning).
- First start after a release lands is silent; the banner shows on the next start. Matches the
update-notifierlibrary's behavior. - Silenced by
NO_UPDATE_NOTIFIER=1(the convention) or--quiet. - Skips prerelease tags so stable users aren't nagged about betas.
Implemented as ~100 lines inline in the CLI bin file rather than as an external dep, keeping the global-install dep graph clean.
Upgrading
If you're on v1.2.1 already: npm install -g @syasas/llm-wiki@latest, then restart llm-wiki start. You won't see anything different now — the next time a v1.2.3 (or higher) ships, you will.
If you're still on v1.2.0: please upgrade — v1.2.1 fixed the typing crash on Sources/Query and PDF ingest. See #3 for details.
v1.2.1 — fix typing crash on Sources/Query + PDF ingest
Patch release. Two regressions surfaced after v1.2.0 hit the wild — both triggered by the model-slot refactor that v1.2.0 introduced for Ollama support.
Install
npm install -g @syasas/llm-wiki@latest
# or pin: npm install -g @syasas/llm-wiki@1.2.1If npm is unavailable: npm install -g https://github.com/ddsyasas/llm-wiki/releases/download/v1.2.1/syasas-llm-wiki-1.2.1.tgz.
What's fixed
Sources & Query pages crashed on type/paste — the moment the textarea became non-empty, the page died with "Application error: a client-side exception has occurred." Root cause: useWikiSettings typed defaultModels.<slot> as a plain string (the pre-1.2.0 shape), but 1.2.0 changed it to {provider, model}. TypeScript silently approved; at runtime CostPreview tried to render the object as a React child → unhandled exception. The hook's types now match reality and both callers extract .model before passing to CostPreview.
PDF ingest failed with "Cannot read properties of undefined (reading '0')" — PDFs were sent to OpenRouter as image_url data URLs. OpenRouter's actual PDF contract is type: "file" with file_data; the upstream Anthropic provider rejected the payload, OpenRouter returned 200 OK with {error} and no choices, and response.choices[0] then threw the cryptic message. PDFs now ride as file content parts (images still use image_url). As a defense in depth, the response-shape guard now surfaces the real provider error (including provider name + raw upstream message) instead of an unguarded array access.
Upgrading
If you installed v1.2.0 and hit either bug: npm install -g @syasas/llm-wiki@latest, then restart llm-wiki start. No data migration needed — both fixes are code-only.
v1.2.0 — Local models (Ollama) support
First minor release since the v1.x line began — adds first-class local-model support via Ollama plus the UX scaffolding that makes it self-explanatory to use.
Headline contribution by @savindugeethma — first external PR merged into the project. 4-round review process (PR #1 → PR #2) before landing as squash commit 35149a3. Thanks for the patient iteration.
Install
npm install -g @syasas/llm-wiki@latest
# or pin: npm install -g @syasas/llm-wiki@1.2.0If npm is unavailable: npm install -g https://github.com/ddsyasas/llm-wiki/releases/download/v1.2.0/syasas-llm-wiki-1.2.0.tgz.
What's new
Local models (Ollama) as a first-class provider
Run any operation (ingest / query / chat / lint / vision) against a model on your own machine instead of OpenRouter. Free per query after the one-time model download. Fully private — your sources never leave your laptop.
- Settings → Models: each slot now has a Provider dropdown — choose OpenRouter (cloud) or Ollama (Local). Mix and match per slot.
- 10 suggested Ollama models in the dropdown (llama3, mistral, phi3, llava, etc.) with sensible vision-only filtering on the vision slot.
- Backward compatible: existing wiki configs with the old
stringmodel shape are auto-migrated to the new{ provider, model }shape on next read. No manual edits needed. - If you only use Ollama: no OpenRouter API key required. The first-run wizard skips the key step entirely when at least one operation is set to Ollama.
Settings banner — heads-up when Ollama is selected
Amber banner appears at the top of Settings → Models if any slot uses Ollama, listing which slots and linking to the setup guide. Removes the "I selected Ollama, why am I getting Connection error?" failure mode that bit users who selected Ollama without realizing Ollama itself has to be installed locally first.
/local-models setup guide
New in-app page with everything needed to actually use Ollama:
- Install commands for macOS / Linux / Windows
- How to pull a model + verify Ollama is running
- Hardware requirements table covering 9 common models (phi3 / llama3 / mistral / mixtral / llama3:70b / gemma2 / llava / moondream / phi3:medium) with disk size, RAM minimum + recommended, tokens-per-sec on Apple Silicon vs CPU-only, and what each model is best for
- "Quick picker" mapping 5 common hardware profiles ("old 8 GB laptop" / "modern 16 GB" / "Apple Silicon 64 GB unified" / etc.) to recommended models
- Custom
OLLAMA_BASE_URLenv var for tunneled or networked Ollama - Troubleshooting for the 6 errors users actually hit
Cross-linked from /help (new section + TOC entry) and /developers (Swapping LLM providers section).
Other fixes
- All v1.1.x improvements still in (cross-platform install, npm publish, case-insensitive CLI commands, welcome banner, etc.)
- Test suite up to 195 passing (1 new test for the legacy-string-shape WikiSettings migration)
Upgrading from v1.1.x
Wiki on-disk format is unchanged within v1.x. The settings shape change is handled transparently by the parser. Just install the new version:
npm install -g @syasas/llm-wiki@latestThen optionally open Settings → Models to try the new Provider dropdown.
Platform notes
- macOS: verified
- Linux (incl. WSL): verified
- Windows: verified
Same as v1.1.0/v1.1.1 — better-sqlite3 and keytar install per-platform via npm.
Full changelog
See dev-log.md sections P through V for the full sequence from V1.x sprint through this release.
v1.1.1 — case-insensitive commands + banner alignment
Patch release. Two small fixes triggered by the first real-user report on Windows after v1.1.0 went live.
Install
npm install -g @syasas/llm-wiki@latest
# or if you already have an older version:
npm install -g @syasas/llm-wiki@1.1.1If npm is unavailable: npm install -g https://github.com/ddsyasas/llm-wiki/releases/download/v1.1.1/syasas-llm-wiki-1.1.1.tgz.
What's fixed
Case-insensitive command dispatch — llm-wiki Doctor (capital D) was treated as an unknown command in 1.1.0. Common typing pattern on Windows since the filesystem itself is case-insensitive. Now Doctor, DOCTOR, doctor, and dOcToR all dispatch to the same doctor command. Same for Start, Init, Help, etc.
Banner alignment — the welcome box's right edge drifted by 2 characters because padding was hand-counted vs. a target that included ANSI escape codes. Replaced with dynamic padding computed from visible text width. Now stays square at any version string length.
Upgrading
Wiki on-disk format is unchanged from 1.1.0 — your existing wiki folder, schema, pages, chats, and history all carry over intact. npm install -g @syasas/llm-wiki@latest is all that's needed.
Full changelog since 1.0.0
See dev-log.md sections P, Q, R, S, T for the full sequence (V1.x feature sprint → production build → publish pipeline → npm release → this patch).
v1.1.0 — cross-platform npm installable
First release with a real install path: download the tarball, run npm install -g, and you have the llm-wiki CLI on your PATH.
Verified end-to-end on macOS / Linux (incl. WSL) / Windows.
Install
# From the npm registry (once published)
npm install -g @syasas/llm-wiki
# Or directly from this release:
npm install -g https://github.com/ddsyasas/llm-wiki/releases/download/v1.1.0/syasas-llm-wiki-1.1.0.tgz
llm-wiki startThat's it — no git clone, no pnpm, no monorepo navigation. The CLI auto-initializes your wiki folder, picks a free port (3737 by default), and opens the browser. First run shows a welcome banner with the three commands you'll use most.
What's new since 1.0.0
The V1.x sprint shipped 10 features in section P + 5 in section Q + the cross-platform release in section R (see dev-log.md):
- Wiki health dashboard at
/dashboard— per-wiki page/source/chat counts + cumulative LLM spend, sortable by recency - Mobile sidebar — off-canvas drawer on
/wikiand/chats - Per-page diff view —
/wiki/<slug>/historyshows backups with line-by-line unified diffs - Approval gate for ingest — preview LLM changes before applying (Settings toggle)
- Export wiki to zip —
Settings → Wikis → ↓ Export active wiki(now actually works, was broken in 1.0.0) - Wiki templates — pick a starting
CLAUDE.mdtemplate when creating a new wiki - Cross-wiki page search —
⌘Ksearches every wiki, not just the active one - Setup gate on every route — direct bookmarks to
/sources,/query,/lint,/schemanow redirect to onboarding instead of failing loud - Replay welcome tour in Settings → About — now actually shows the wizard (was navigating to home instead)
- LLM spend calculation —
Settings → Modelsand/dashboardnow compute and show cost in dollars (was always$0.00in 1.0.0) - Cross-platform tarball — native deps install per-platform at
npm installtime, no per-OS build needed - Friendly install + first-run UX — post-install banner + first-run welcome in the CLI
CLI commands
llm-wiki start [folder] Start the wiki server (auto-init if needed)
llm-wiki init [folder] Initialize a folder without starting
llm-wiki doctor Probe install + OpenRouter connectivity
llm-wiki version
llm-wiki help
Requirements
- Node 20+
- An OpenRouter API key
Platform notes
- macOS: verified
- Linux (incl. WSL): verified — if
llm-wiki: command not foundafter install, runecho 'export PATH="$(npm prefix -g)/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc - Windows: verified
Native deps (better-sqlite3, keytar) are installed at npm install time with the right prebuilt binary for your platform. No per-OS tarball needed.
Upgrading from 1.0.0
Wiki on-disk format is unchanged. Just install the new version — your existing wiki folder, schema, pages, chats, and history all carry over intact.
v1.0.0 — first stable release
First stable release of LLM Wiki — a from-scratch implementation of Andrej Karpathy's LLM Wiki pattern. Open source, local-first, bring-your-own-key, MIT.
What v1.0 ships
The three operations (Karpathy's pattern, wired end-to-end with cost previews and error recovery):
- Ingest — paste / file / URL / PDF / image → LLM compiles into cross-linked pages, refreshes the index, logs the change. Each ingest is a refactor pass, not an append.
- Query — one-shot Q&A against the wiki with cited pages. "Save as wiki page" promotes useful answers.
- Lint — local scan (broken links / orphans) + LLM pass (contradictions / gaps / stale claims / missing pages) with one-click fixes including LLM-powered ones that write the page edit for you.
Workflow surfaces:
/sources— add via paste / drag-drop / URL, with source-detail pages showing the raw bytes + which wiki pages they contributed to/wiki— card grid grouped by page type, search/filter sidebar, per-page view with backlinks + source lineage + inline split-pane editor/graph— new in v1.0 — 3D force-directed graph of every page and every[[wikilink]]. Same engine as Obsidian's 3D Graph plugin, but colored by page type (concept / entity / comparison / overview / source) so the structure of your knowledge is visible at a glance. Click-to-focus, URL-state, bidirectional walking/chats— multi-turn threads saved as.mdfiles in folders. Per-message Save-as-wiki-page + whole-chat Ingest→wiki/schema— split-pane editor for theCLAUDE.mdcontract the LLM reads on every operation/log— chronological timeline of every ingest / edit / lint / schema-save with clickable wikilinks/about/help/developers— in-app documentation reachable from the footer
Quality / safety:
- First-run wizard collects wiki topic + OpenRouter key (no silent failures on first ingest)
- Page-history backups on every edit
- Cost transparency before every LLM call, cumulative tally in Settings
- Source lineage — bidirectional traversal between wiki pages and raw inputs
- Index auto-refreshes on page edits + manual Rebuild Index button
Settings: five model slots per-operation (ingest / query / chat / lint / vision), curated dropdowns + custom-slug field, light/dark/auto theme, OpenRouter key in OS keychain when available.
Stack
TypeScript strict · Next.js 14 (App Router) · Tailwind + shadcn-style primitives · better-sqlite3 + FTS5 · OpenRouter via openai SDK · zod for LLM contracts · gray-matter · chokidar · keytar · react-force-graph-3d + three.js for the graph · vitest · pnpm workspaces
Test suite: ~140 core + 17 llm + 11 ingestion = ~168 passing tests.
Install + run
git clone https://github.com/ddsyasas/llm-wiki.git
cd llm-wiki
pnpm install
pnpm --filter @llm-wiki/web devOpen http://localhost:3000 → the first-run wizard walks you through the rest. Full README at https://github.com/ddsyasas/llm-wiki.
Deferred to V1.x / V2
Honest about what's not in this release (tracked in docs/dev-log.md open questions):
- Per-page diff view when LLM updates a page
- Approval gate for ingest (preview changes before applying)
- Export wiki to zip
- Per-source re-ingest / delete + extracted-markdown view for binary formats
- Production build (
next build) — v1.0 currently ships viapnpm dev - CLI npm publish —
pnpm packworkspace:* deps blocker - Tauri desktop installer (V2)
- MCP server mode (V3)
- 2D toggle / search overlay / persistent camera state for the graph
Credits
Built by @ddsyasas. Pattern by Andrej Karpathy. MIT.