New Now on the App Store

Your cloud,
your rules.

A self-hosted productivity suite for your team - and the platform you build the next app on top of. Standard protocols, own your data, free forever.

No signup. Sandboxed. Resets nightly.

6 Integrated apps
5+ Native protocols
$0 Per user, forever
Pick your path

Run TinyCld. Or build on it.

Two doors into the same project. One leads to a working productivity suite for your team in fifteen minutes. The other leads to a platform you can build the next app on top of.

~/tinycld — bash live
$ docker compose up -d
Pulling tinycld:latest
Acquired Let's Encrypt cert · <your domain>.org
IMAP listening on :993
SMTP listening on :465
Web ready on :443
Ready in 14.7s
For teams

Run TinyCld for your organization.

One Docker container. Free, self-hosted. Fifteen minutes from zero to a working mail server with HTTPS. When it's up, your team's new home lives at https://your-domain.com/.

manifest.ts — VS Code type-safe
1export default {
2    name: 'CRM',
3    slug: 'crm',
4    routes: { directory: 'screens' },
5    collections: { register: 'collections' },
6    nav: { label: 'CRM', icon: 'users' },
7}|
Apps

Everything you need,
nothing you don't.

Six tightly integrated apps that cover daily productivity. Each one speaks native protocols - use the web UI, mobile app, or your favorite desktop client.

Mail

Full email with threaded conversations, labels, attachments, and delivery tracking. Connect with any IMAP or SMTP client.

IMAPSMTP

Calendar

Shared calendars with recurring events, guest management, RSVP, reminders, and color-coded categories.

CalDAV

Contacts

Shared contact directory with favorites, notes, and org-wide sharing. Syncs with any CardDAV client.

CardDAV

Drive

Cloud file storage with versioning, share links, role-based permissions, thumbnails, and trash.

WebDAV
Beta

Text

A real document editor — not a textarea in a tab. Rich formatting, tables, comments, and live collaboration via CRDTs, with full-fidelity .docx and Markdown round-trips. Mobile-native: format and edit from your phone without fighting the keyboard.

  • Live CRDT collaboration
  • .docx & Markdown round-trip
  • Mobile-first editor

Feature complete · Lightly battle-tested

Beta

Calc

Spreadsheets that hold up on a phone. Formulas, named ranges, workbook snapshots, and real-time co-editing on top of Drive. CSV and .xlsx import/export with formatting preserved, so it actually plays nicely with whatever your team already uses.

  • Touch-friendly formula bar
  • Snapshots & change history
  • Drive-backed storage

Feature complete · Lightly battle-tested

Now shipping Live on the App Store

Your cloud,
in your pocket.

The official TinyCld iOS app is here. Connect to your server, sign in, and your mail, calendar, contacts, and drive show up where you actually use them. No middlemen. No analytics. No re-hosting your data.

  • Native push from the server you control
  • Same UI as the web app — Expo Router under the hood
  • Free, with no account required at our end
Migrate

Switch in an afternoon.

Export your Google data. Drag the ZIP onto TinyCld. We parse .mbox, .ics, and .vcf in a web worker, dedupe contacts by vCard UID, merge calendars by ICAL_UID, and drop your files back into their original folders.

  • 01
    Download your archive from Google Takeout Mail, Calendar, Contacts, and Drive in one bundle.
  • 02
    Drop the .zip into TinyCld - no unpacking Parsing happens in a web worker, so the UI stays snappy even at 20 GB.
  • 03
    Walk away. Re-imports are idempotent. Contacts dedupe by vCard UID, events by ICAL_UID, calendars reuse by name.
Why TinyCld

Built different.

Not a wrapper around other services. A ground-up implementation that's fast, lean, and respects your team's freedom.

$0 / user

Free forever

No per-seat pricing, no premium tiers, no surprises. TinyCld is open source under a permissive license. Self-host it on a $5/month VPS or use our hosted option.

Google Workspace $7.20/user/mo
Microsoft 365 $6.00/user/mo
TinyCld Free

Own your data

Your emails, files, and contacts live on your server. No data mining, no ads, no lock-in. Export anything, anytime.

Deploys anywhere

A single Docker image runs on a $5 VPS, your homelab, or a Dokku one-liner. Healthchecks and Let's Encrypt are baked in - no ops team required.

Private by default

No telemetry, no tracking pixels.

Self-host on your own server and TinyCld never phones home - no analytics, no crash pings, no metered usage reports. External email images are proxied through your server with a scoped token, so senders can't see your IP, read receipts, or user agent. Big tech sees nothing, because nothing is sent.

  • Server-side image proxy for HTML email
  • Invite-only signup - no public account creation
  • One binary, one SQLite file, one place to audit

Native protocols

IMAP, SMTP, CalDAV, CardDAV, WebDAV - use Apple Mail, Thunderbird, any CalDAV client, or mount your drive as a network folder.

Multi-org

Users can belong to multiple organizations with different roles. Shared calendars, contacts, mailboxes, and files within org boundaries.

Web + Mobile

One app for web, iOS, and Android - plus standard protocols so Apple Mail, Thunderbird, and Finder just work alongside.

Real-time

Live updates across all apps via server-sent events. No polling, no manual refresh - changes from other users and devices appear instantly.

Protocols

Standards, not lock-in.

Every app speaks its native protocol. Use our web UI, your favorite desktop client, or both. Your choice, always.

IMAP RFC 9051
Read email from any mail client - Apple Mail, Thunderbird, Outlook, mutt
:993
SMTP RFC 5321
Send email through any client that supports SMTP submission
:465
CalDAV RFC 4791
Sync calendars with Apple Calendar, GNOME Calendar, DAVx5, and more
:443
CardDAV RFC 6352
Sync contacts with Apple Contacts, GNOME Contacts, DAVx5, and more
:443
WebDAV RFC 4918
Mount your Drive as a network folder from any OS - macOS Finder, Windows Explorer, Linux Nautilus
:443
For teams

Ready to ditch the subscription?

Host TinyCld yourself on a small Linux VM. One Docker container, one compose file, working email and HTTPS in about fifteen minutes.

# on any Linux VM with Docker
$ mkdir tinycld && cd tinycld
$ curl -O https://raw.githubusercontent.com/tinycld/tinycld/main/docker-compose.yml
$ docker compose up -d
 ready · https://mail.example.org
Foundation

Twelve things you don't have to build.

Every package starts with a working app shell that already does the hard parts. Drop in a manifest.ts, get all of this for free, and ship the parts that actually matter to you.

Auth

Sessions, signup, login, and OAuth-ready user records.

const { user } = useAuth()

Multi-org

Users in many orgs with per-org roles. Routes are org-scoped.

const { orgId, orgSlug } = useOrgInfo()

Live data

Reactive queries with TanStack DB. Updates push automatically.

useOrgLiveQuery((q, { orgId }) => …)

Mutations

Optimistic updates with rollback. Generator-based for sequencing.

const m = useMutation({ mutationFn: …})

Email

Send transactional + IMAP/SMTP serving for end users. One config.

mailer.Send(ctx, msg)

Files

Upload, version, share. Thumbnails, mime detection, role-scoped.

drive.insert({ file, parent, owner })

Notifications

In-app drawer + toasts. One feed for every package event.

notify({ title, body, data })

Expo Push

Native iOS + Android push out of the box. Per-user device tokens.

push.SendToUser(ctx, userId, msg)

Audit log

Append-only record of every change. UI to browse and export.

audit.Record(ctx, "contact.created", …)

Forms

Hook Form + Zod, typed end-to-end. Inputs styled to match.

useForm({ resolver: zodResolver(schema) })

Theming

Light + dark, semantic tokens, user-pickable color palettes.

useThemeColor('foreground')

Web + Native

One codebase. Expo Router routes work in both.

<Link href={orgHref('crm/[id]', …)} />

Plus everything PocketBase gives you (admin UI, file storage, real-time, OAuth providers) and everything Expo gives you (Expo Router on web + iOS + Android, EAS builds, OTA updates). The stack you don't have to build.

Anatomy

One file declares everything.

A package is a folder with a manifest.ts. The manifest points at directories that already exist in your repo - and the generator wires them all into the running app at build time.

manifest.ts
1export default {
2  slug: 'crm',
3  routes: { directory: 'screens' },
4  collections: { register: 'collections' },
5  settings: [{ component: 'settings/admin' }],
6  migrations: { directory: 'pb-migrations' },
7  server: { module: 'tinycld.org/packages/crm' },
8}
screens/ Org-scoped routes
collections.ts Typed pbtsdb wiring
settings/ Settings panels
pb-hooks/ PocketBase JS hooks
pb-migrations/ DB migrations
server/ (Go) First-class Go ext
public-screens/ Top-level routes
tests/ Vitest + Playwright
01 You write the directories listed in your manifest.
02 npm run packages:link drops a symlink in the app shell.
03 The generator stitches everything in - routes, types, server, migrations.
04 Your package is alive on web and native, with a working admin UI.
For developers

Start a package in sixty seconds.

The scaffolding CLI sets up a sibling repo with a working manifest, an example screen, and the symlink wired into a running app shell. From npm create to a live route in your browser.

# in your code/ directory
$ npx @tinycld/create-package
  ? What's the package name? crm
  ? Include a Go server? y
 Created ./crm
 Linked into ../tinycld/packages/@tinycld/crm
 Generated routes, types, migrations
 open http://localhost:7100/a/<org>/crm

One project. Two audiences. Same git history.

Teams self-host. Developers extend. Both lanes share the same open source codebase, the same issues, the same roadmap.