Skip to content
@tinycld

TinyCld

Your cloud, your rules
TinyCld — your cloud, your rules. A self-hosted productivity suite — mail, calendar, drive, docs. And the platform you build the next app on top of.

tinycld.org On the App Store ghcr.io/tinycld/tinycld License: AGPL-3.0


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 platform

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(...)} />

Build a package

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


The apps

Each app is its own repo. Clone the ones you want; skip the rest.

tinycld is the Expo + PocketBase shell, with @tinycld/core (the shared TS + Go runtime) nested inside it. @tinycld/bootstrap is the scaffolder + workspace assembler.


Run it

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


The stack

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.

Popular repositories Loading

  1. workspace workspace Public

    TinyCld npm-workspace root (members cloned via @tinycld/bootstrap --tooling)

    71 1

  2. tinycld tinycld Public

    TypeScript 31 3

  3. calc calc Public

    a spreadsheet application that allows users to create, edit, and collaborate on data in real-time

    TypeScript 6 1

  4. mail mail Public

    @tinycld/mail — TinyCld feature package

    TypeScript 5 2

  5. drive drive Public

    @tinycld/drive — TinyCld feature package

    TypeScript 5 1

  6. bootstrap bootstrap Public

    Scaffolder for @tinycld feature packages

    TypeScript 3 1

Repositories

Showing 10 of 14 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…