Releases: freema/vellum
Releases · freema/vellum
Release list
v1.11.0
Added
- Resource reads carry the content hash, modtime and size. Reading a
note through its resource URI (vellum://note/{path}) now returns
hash,modTimeandsizeinResourceContents._meta, mirroring what
theread_notetool already reports. A note attached as context —
through a resource picker or an @-mention — can therefore seed the
expected_hashon a later write, so the resource path gets the same
conflict-safe footing as the tool path instead of being a snapshot with
weaker freshness semantics. Since 1.9.0 resource reads returned only the
markdown text, with no way to tie an attached note back to a safe write.
v1.10.0
The web vault stays signed in.
Added
- The web UI now keeps you signed in for up to 30 days. It renews its
1-hour access token silently in the background from the rotating refresh
token and stores the session inlocalStorage, so a page reload, a closed
tab or a browser restart no longer drops you back at the connect screen.
Previously the web vault held only the 1-hour access token in
sessionStorageand logged you out on the hour or when the tab closed —
the 30-day refresh token shipped in 1.9.1 was never used by the web client.
Changed
- The web client refreshes without re-sending the client secret. A valid,
rotating refresh token is now sufficient for therefresh_tokengrant, so
the embedded SPA — which keeps no secret after the initial login — renews on
the refresh token alone, exactly as the public MCP clients already did.
Minting the first token pair still requires the client secret. Existing web
sessions re-authenticate once after upgrading, since the session moved from
sessionStoragetolocalStorage.
v1.9.1
Changed
- Refresh tokens now last 30 days (was 24 hours). A connected client
re-authorizes far less often — only after 30 days of inactivity, since
every refresh rotates the token and resets the clock. Access tokens stay
short-lived at 1 hour.
v1.9.0
MCP resources & subscriptions, tool annotations, and a workspace that
remembers its view.
Added
- Notes are MCP resources. Every note is listed as a resource
(vellum://note/{path},text/markdown) with a URI template for
arbitrary paths, so MCP clients can attach notes as context without a
tool call. Clients can subscribe to a note and receive
notifications/resources/updatedwhenever it changes — through any door
(MCP tools or the web editor). The resource list re-announces only on
create/delete/title change, not on every keystroke autosave. - Tool annotations and titles. All 21 tools now carry
readOnlyHint/destructiveHint/idempotentHint/
openWorldHint: falseplus a human-readable title, so clients can
auto-allow reads and warn only on genuinely destructive calls
(delete_note,write_noteoverwrite,patch_note). - Server instructions. The MCP handshake now includes a short guide to
the vault conventions (inbox flow,expected_hashconcurrency,
wikilinks, task statuses, resource URIs) — agents no longer have to
discover them by trial and error. - Filters live in the URL. The selected folder, active tags and the
type/status filters persist as query parameters
(?dir=…&tags=a,b&type=task&status=done): a refresh keeps the view and
a filtered view can be bookmarked or shared. Opening notes keeps the
filters; Back still steps between notes, not filter clicks. - UI preferences survive a refresh. Theme (initialised from the OS
prefers-color-scheme, applied before first paint — no white flash),
the editor view mode (edit/split/preview, now also stable across note
switches), the Projects group expansion and the tag-list "Show all"
state are stored inlocalStorage.
Fixed
- The last second of typing no longer dies with the tab. Autosave is
debounced at 1 s; a refresh or tab close inside that window used to drop
the keystrokes. The dirty draft is now flushed with akeepalive
request when the page hides. - The MCP server no longer advertises the
loggingcapability it never
used.
Docs
- New docs/mcp.md — the full MCP reference (transports,
handshake, every tool with annotations, resources, subscriptions,
client setup) — and docs/workspace.md — the web
UI reference (URL scheme, storage keys, autosave/conflict/flush,
self-sync). The e2e checklist gained persistence & resources
scenarios.
v1.0.1
v1.0.0 — a calm window into a folder of markdown
First stable release.
vellum is a lightweight, self-hosted MCP server over a folder of markdown files. One static Go binary with an embedded web UI, one ~24 MB Docker image, ~5 MB idle RAM.
Highlights
- Vault layer: CRUD over .md files with path-traversal/symlink protection, atomic writes, sha256 optimistic concurrency (ETag/If-Match → 409 on the REST side)
- Structure: inbox/projects/archive conventions, inbox fallback for unfiled notes
- Metadata index: tags + backlinks in RAM (1200 notes ≈ 50 ms), instant task filters
- Search: zero-dependency parallel scan with tag/dir narrowing (1200 notes ≈ 13 ms)
- MCP: Streamable HTTP at /mcp (official Go SDK), 15 tools + 6 optional curator tools, stdio mode
- OAuth 2.1: single client secret, PKCE, consent screen — vellum is its own issuer, no external identity provider
- Web UI: three-panel workspace (paper/midnight ink design), ⌘K palette, conflict dialog, self-hosted fonts
- Ops: distroless read-only container, GHCR multi-arch (amd64+arm64), security docs
Quick start
curl -fsSLO https://raw.githubusercontent.com/freema/vellum/main/docker-compose.yml
echo "AUTH_ENABLED=true
VELLUM_CLIENT_SECRET=$(openssl rand -hex 32)" > .env
docker compose up -dConnect Claude: claude mcp add --transport http vellum https://your-host/mcp
Image: ghcr.io/freema/vellum:1.0.0