lattice

Your pages, your knowledge,
your ship.

A personal knowledge platform that runs on your own Urbit ship. Write pages in markdown, gemtext, or HTML, or in Hoon so they compute their own content. Keep a private, tagged knowledge store that you and your AI agents share. Search all of it. Everything you publish is addressed urb://~ship/path and travels peer-to-peer between ships, with no DNS, no web server, and no host in the middle.

Web + PWA · served by your ship Desktop · Linux, macOS Filesystem mount MCP · memory for AI agents Open source · MIT

How it works

lattice's ship side is a nexus inside the grubbery framework. Your pages and your knowledge live in grubbery's vault on your ship. The client is served by the ship too, so there is nothing to install beyond one dojo command.

the ship
one desk, one command
|install ~ricsul-bilwyt %grubbery pulls the desk, boots the lattice nexus and binds /apps/lattice. Updates arrive on their own through kiln.
the client
reader, workspace, PWA
Open /apps/lattice to read and /apps/lattice/app to write. On a phone, add it to your home screen: it is a full PWA that works offline.
the surfaces
desktop, filesystem, agents
An optional desktop app, a FUSE mount that makes your pages plain files, and eleven MCP tools your AI assistant uses as memory. One store behind all of them.
urb://~nisfeb/notes/urbit a page, straight from ~nisfeb's ship urb://~nisfeb/manifest everything ~nisfeb has published https://…/apps/lattice/c/site the same page, if you choose to put it on the clearweb

What it does

Memory for your AI agents

The knowledge store speaks MCP through eleven tools compiled into the ship itself: save, read, list, search, explore by tag, move, delete, restore, tag, untag, and list tags. Anything an agent saves shows up in the knowledge browser, and vice-versa. There is nothing to run beside the ship and nothing to register; the tools survive restarts and redeploys.

// your MCP client's config: the ship is the server { "mcpServers": { "myship": { "url": "https://your-ship.example.com/grubbery/mcp", "headers": { "Cookie": "urbauth-~your-ship=0v…" } } } }

The cookie is a normal ship session, minted from /~/login with your +code, and it is the only credential involved. Your assistant's memory lives on your ship, not in someone's cloud. Details in the docs.

What it isn't

Privacy

The only server lattice talks to is your ship.

No analytics, no third-party SDKs, no telemetry. The client is served by your ship and speaks only to it. Access is enforced by grubbery's per-directory ACLs: the knowledge store is owner-only, the HTTP API and the MCP tools require a valid ship session, and shared pages are readable only by the ships and groups you grant.

What you publish is public by design, in the Urbit namespace and, if you choose, on the clearweb. Nothing else leaves your ship.

Under the hood

The ship side is Hoon: a grubbery nexus whose pages and memories are grubs in the vault, published into the Urbit namespace and served to other ships over remote scry. The web client is served by the same nexus, with live updates over an Eyre SSE channel and a service worker that keeps the shell and your last-known tree at hand offline. The filesystem client is Rust, the desktop app is Tauri, and the MCP tools are Hoon compiled into the desk.

ship side
grubbery nexus · Hoon
web
Reader, workspace, PWA · served by the ship
desktop
Tauri · Linux, macOS
filesystem
lattice-fs · Rust FUSE
agents
11 MCP tools · in the ship
transport
Remote scry · peer-to-peer

Install

1. On your ship

:: in your dojo |install ~ricsul-bilwyt %grubbery

The desk is grubbery with lattice and its MCP server and nothing else. If you already run a full grubbery from another publisher, read the notes on switching first. On first boot lattice also installs %obelisk for the optional search mirror.

2. Open it

Log into your ship's web login with your +code, then open /apps/lattice to read and /apps/lattice/app to write. On a phone, use your browser's Add to Home Screen: lattice is a full PWA with its own icon and standalone window.

3. Optional: the desktop app

The same ship-served client in its own window, plus managed filesystem mounts, scheduled backups, and auto-detection of piers running on the same machine. Direct links resolve to the latest release; the releases page has older versions and notes.

Linux AppImage chmod +x and run. Portable, needs FUSE 2. Download
Linux .deb sudo apt install ./lattice_*.deb on Debian, Ubuntu and derivatives. Download
macOS, Apple Silicon Disk image. First launch: right-click → Open (unsigned). Download
macOS, Intel Disk image. Same first-launch step. Download

Windows and Android use the PWA. The filesystem client on its own is lattice-fs in the repo, built with cargo build --release.

New to Urbit? urbit.org/overview/running-urbit walks you through booting a ship.