Caixote is a family of five self-hosted apps — files, chat, tasks, calendar, feeds and a printer control. Four of them (Docs, Chat, Agenda and RSS) are single Rust binaries that link to each other and share one account; the sixth, Caixote CC2, works on its own.
Same idea everywhere: small, fast software that is yours. Docs, Chat, Agenda and RSS share the same look and one account and connect to each other; Caixote CC2 is the workshop one and needs none of them. Use just one or connect the four.
File browser with full-text search of documents, OCR for scanned PDFs, editors for documents, spreadsheets, decks and PDFs, and many previews.
End-to-end encrypted chat with files, voice notes and video calls.
Tasks and calendar in one app: a Plan to share and sync, and a Private calendar encrypted in your browser.
Your own feed reader: folders, search, tags and rules, full-text fetching and no algorithm in between.
Control and spool stock for the Elegoo Centauri Carbon 2, plus an optional AI that watches the camera.
A web file browser that knows what is inside your files. Point it at a folder and search the text of documents and PDFs, including scanned ones. Images are found by name.
A chat even the server cannot read. Encryption runs on your device; the server stores ciphertext (it still sees who talks to whom, and when).
Tasks and a calendar in one app, with a Plan you can share and sync, and a Private calendar the server cannot read.
A feed reader that stays quiet: your subscriptions, your rules, nothing deciding what you should read next.
Your 3D printer, on your own network. Pause a print from the sofa, see which spool is about to run out and let an AI keep an eye on the camera — with no vendor cloud in between.
Unofficial project, not affiliated with Elegoo. Commands go to a machine that heats and moves: use at your own risk.
The apps don’t talk to each other behind the scenes. You pair them, in the browser, and they exchange validated messages. Caixote Chat’s server still only stores encrypted content.
A chat panel inside Caixote Docs: “Send in chat…” from any file and “Save to Caixote Docs” on receiving.
Share a task or an event in a conversation, as a card that links back to the app.
In Caixote Agenda, tasks with a due date show up in the calendar of the same app (the calendar module).
From an article in Caixote RSS, send a message to Caixote Chat, or a task, an event or a note to Caixote Docs. The receiver shows what arrived and asks before saving. Articles you star become Markdown files in a Notícias folder in Caixote Docs, searchable with everything else (one way: unstar and the untouched file goes away; a file you edited stays).
Apps are paired with a one-time code, each account chooses which apps it links, and sign-in is shared through a signed ticket, with optional automatic unlock. Your password never travels between apps.
Each of the four linked apps is a Rust binary with few dependencies, a SQLite database and a plain JavaScript interface — no frameworks, and no third-party requests from the four linked apps themselves (fonts are local). The exceptions are what you ask for: Caixote RSS fetching feeds and images, and optional email. Caixote CC2 can show filament-brand icons fetched from the brands’ own websites (those sites then see your address); the setting is on by default in the app and off in the demo.
| App | Server | Data | Security | Development status |
|---|---|---|---|---|
| Caixote Docs | Rust · custom HTTP | Files + SQLite (FTS5) | Sessions, PBKDF2, CSRF, sign-in throttling | in use PWA in testing |
| Caixote Chat | Rust · SSE · WebRTC | SQLite + encrypted blobs | E2EE: X25519, Ed25519, AES-256-GCM | working PWA in testing · native apps next |
| Caixote Agenda | Rust · rusqlite · SSE | SQLite | Server-enforced permissions, ticket SSO; Private calendar encrypted in the browser (PBKDF2 + AES-GCM) | working PWA installable, no offline yet |
| Caixote RSS | Rust · system curl | SQLite (FTS5) | Double HTML sanitising, signed image proxy, SSRF guard, ticket SSO | working |
| Caixote CC2 | nginx · plain JS (+ Python for the AI check) | One JSON file on the server | No cloud; the AI key stays on the server (mode 600) and is never sent back | working AI check not yet tried on a real print |
Caixote Chat’s encryption does not yet have per-message forward secrecy (planned: Double Ratchet / MLS), and the server sees metadata such as who talks to whom and when. Everything in Caixote Agenda’s Plan, synced with Caixote Docs or not, is stored in plain text on the server (that is what lets it remind, share and sync), so it is not end-to-end encrypted; only the Private calendar is, and it can’t be shared. Caixote Chat’s limits are written down in its design notes.
Features ship with unit, API and UI tests in a real Firefox. Docker files exist for every app, but only Caixote Docs’s has been tested so far, and nothing is published yet.
# Caixote Agenda → http://localhost:8350 podman run -d -p 8350:8350 -v caixote-agenda-data:/data caixote-agenda