ianlan

ianlan.dev

Local-first developer tools.

Software that runs on infrastructure you control, keeps credentials under your control, and tells you plainly what it cannot do yet.

The Packet family

Five projects sharing a prefix and a design sensibility — rather less code than that suggests. How they fit together →

PacketBench

alpha

Rust · Tauri · React  |  native desktop app

A local-first desktop agent development environment. Multi-CLI workspaces, a bring-your-own-key agent picker, Flight Deck orchestration across parallel worktrees, SSH remotes, an MCP hub, project memory and issue tracking — in one native app.

PacketCode

alpha

Go · Bubble Tea  |  single terminal binary

A keyboard-first coding agent that lives in the terminal. One Go binary holding the conversation, tool execution, permission approvals, background agents and MCP connections — speaking to eleven built-in providers, plus any OpenAI-compatible endpoint, rather than binding you to one.

PacketAgent

alpha

TypeScript · Hono · React  |  self-hosted service

A self-hosted control plane for Workers — long-running jobs woken by a schedule, a webhook or an alert, that keep going after whatever created them has closed. Each run carries explicit permissions, a budget and an audit trail.

PacketChat

alpha Source private

TypeScript · Next.js · Postgres  |  self-hosted service

A private multi-user AI workspace for a small team: chats, projects, prompt libraries, knowledge bases and agents, all against admin-managed provider keys on your own infrastructure. Nobody holds their own key.

PacketRelay

early Source private

Rust · tokio  |  self-hosted service

An opaque WebSocket router in Rust. One-to-one bridges, one-to-many broadcast and authenticated multi-member rooms — deployed infrastructure reserved for PacketBench’s planned Remote Agents.

Other tools

The same sensibility, without the shared prefix and without any shared code.

Nodehouse

alpha

Node.js · SQLite  |  self-hosted service

A self-hosted community BBS reached by Telnet or a browser terminal. Both transports drive the same multi-node session engine for messages, mail, chat, files, administration and door games.

Syndicate

early Source private

TypeScript · SQLite  |  local-first host, loopback only

A local-first control plane for AI coding agents. It launches a coding-agent CLI you already installed, gives each writable task its own locked Git worktree, and records everything to an append-only event log a browser replays live. The listener binds to loopback and refuses any other address.

Sugar

alpha Source private

Next.js · Node · SQLite  |  one self-hosted process

One OpenAI-compatible endpoint in front of the several model providers a small team already pays for, deciding per request which family and which supplier serves it. A single Node process over a single SQLite file.

demarc

alpha Source private

Python · FastAPI · Next.js  |  self-hosted service

A self-hosted AI phone receptionist for numbers bought from Telnyx. It transcribes the caller, asks a language model what to say, and streams the reply back as speech down the same socket — plus SMS and a dashboard with an attached CRM.

Blackbox AI

alpha Source private

TypeScript · Next.js · Tauri  |  local-first desktop and service

A civic observatory and research workbench for Ridgeport, a persistent fictional world whose residents, institutions and ambient systems continue while the service runs. Observation is read-only by default; research is something you enter deliberately.

Midnight

MVP acceptance Source private

Go · Postgres · Docker · Traefik  |  self-hosted control plane

An open-source platform-as-a-service control plane for one trusted Linux VM: deploy an app, route it, and keep it running, with deployment records, a hash-chained audit ledger and an embedded agent that can deploy, roll back and diagnose failures.

Midnight Marketing

alpha Source private

React · Vite · Cloudflare-compatible  |  public product site

The public site for the self-hosted Midnight alpha. Its build verifies the rendered markup, the security headers and the canonical redirect, and refuses to publish product claims that were withdrawn for being ahead of what Midnight can do.