A self-hosted productivity suite — and the platform you build the next app on top of. Auth, multi-org, live data, push, audit, and a mobile build, ready before you write the first screen.
The shell every package leans on, so you write the feature and not the foundation.
| What it does | Looks like | |
|---|---|---|
| 🔐 | Auth — sessions, signup, login, OAuth-ready | useAuth() |
| 🏢 | Multi-org — users in many orgs, per-org roles, org-scoped routes | useOrgInfo() |
| ⚡ | Live data — TanStack DB on PocketBase, reactive everywhere | useOrgLiveQuery(...) |
| 🔁 | Mutations — optimistic updates with rollback, generator-based | useMutation({ ... }) |
| 📨 | Email — transactional + IMAP/SMTP serving in one config | sender.Send(ctx, msg) |
| 🔔 | Notifications — one in-app feed for every package event | notify.emit({ event, title }) |
| 📱 | Expo Push — native iOS + Android push, per-user device tokens | push.SendToUser(app, userID, payload) |
| 📜 | Audit log — append-only record of every change, browsable + exportable | audit.RegisterCollection(app, name, cfg) |
| 🎨 | Theming — light + dark, semantic tokens, user-pickable palettes | useThemeColor('foreground') |
| 🌐 | Web + native — one codebase, Expo Router everywhere | <Link href={orgHref(...)} /> |
Every "app" you see is a separately-installable sibling git repo that links into the shell. Fork one. Replace one. Write your own.
# Assemble a workspace (the tinycld shell + the apps you want).
mkdir ~/code/tinycld && cd ~/code/tinycld
npx @tinycld/bootstrap@latest --assemble-only --with mail --with contacts
pnpm install
# Scaffold a new package as a sibling member.
npx @tinycld/bootstrap --new my-app
# manifest, screens, collections, migrations,
# tests, Go server stub, CI — already wired in.
cd tinycld && pnpm run dev→ Getting started · Anatomy of a package · llms-full.txt for your agent
Each app is its own repo. Clone the ones you want; skip the rest.
@tinycld/mail— threaded inbox, attachments, IMAP + SMTP@tinycld/calendar— shared calendars, recurring events, CalDAV@tinycld/contacts— shared directory, CardDAV@tinycld/drive— versioned files, share links, WebDAV@tinycld/textbeta— CRDT-collaborative.docxround-trip editor with suggesting mode + threaded comments@tinycld/calcbeta— spreadsheets with pivot tables, conditional formatting, snapshots, co-editing@tinycld/google-takeout-import— one-shot Google Workspace migration
tinycld is the Expo + PocketBase shell, with @tinycld/core (the shared TS + Go runtime) nested inside it. @tinycld/bootstrap is the scaffolder + workspace assembler.
One container. AGPL-3.0. No telemetry.
mkdir tinycld && cd tinycld
curl -O https://raw.githubusercontent.com/tinycld/tinycld/main/docker-compose.yml
# edit docker-compose.yml: set PRIMARY_DOMAIN, plus AUTOCERT_ENABLED: "true" for HTTPS
docker compose up -d→ Installation guide · Docker image · iOS app
Client: Expo (React Native) · Expo Router · TypeScript · Tailwind v4 · TanStack DB · TanStack Query · Zustand · React Hook Form + Zod Server: Go · PocketBase · IMAP / SMTP / CalDAV / CardDAV / WebDAV Build & deploy: Docker (single container) · EAS for native builds
One workspace, one bundler, one container. No microservices, no message bus, no separate auth provider — every primitive listed in The platform is in TinyCld, not a third-party SaaS dependency.
tinycld.org · docs · support · privacy
Made for teams who'd rather own the cloud than rent it.