Skip to content

Repository files navigation

Core

Open-source, all-in-one productivity platform. Email, calendar, chat (AI), messages, files, projects, and dashboard — in a single app.

Core is a monorepo with three packages:

Features

  • Email — Gmail and Outlook sync with AI-powered summaries and importance detection
  • Calendar — Google Calendar and Microsoft 365 sync with event management
  • Chat — AI assistant with tool use (email search, web search, and more)
  • Messages — Real-time team messaging with channels, threads, and reactions
  • Files — Upload, preview, and organize files with presigned URL uploads
  • Documents — Rich text editor (TipTap/ProseMirror) with real-time collaboration
  • Projects — Kanban boards with issues, labels, and assignees
  • Workspaces — Multi-workspace support with role-based access control and resource sharing
  • Dashboard — Unified view across all apps

Tech Stack

LayerTechnology
BackendPython 3.12, FastAPI, Pydantic
FrontendReact 19, Vite 7, TypeScript, Tailwind 4
DatabaseSupabase (PostgreSQL + RLS + Realtime)
AuthSupabase Auth (JWT), Google/Microsoft OAuth
StateZustand with persistence
Rich TextTipTap (ProseMirror)
File StorageCloudflare R2 (S3-compatible)
DeploymentVercel (API + Web)

Quick Start

Prerequisites

1. Clone and configure

git clone https://github.com/10xapp/core-oss.git
cd core-oss
# Set up environment variables
cp core-api/.env.example core-api/.env
cp core-web/.env.example core-web/.env
# Edit both .env files with your Supabase credentials

2. Set up the database

# Install Supabase CLI: https://supabase.com/docs/guides/clicd core-api
supabase link --project-ref YOUR_PROJECT_REF
supabase db push

3. Start the backend

cd core-api
uv pip install -r requirements.txt
make start
# API runs at http://localhost:8000

4. Start the frontend

cd core-web
npm install
npm run dev
# App runs at http://localhost:5173

Architecture

core-oss/
├── core-api/ # FastAPI backend
│ ├── api/
│ │ ├── config.py # Pydantic settings (env-driven)
│ │ ├── dependencies.py # Auth dependencies
│ │ ├── routers/ # HTTP endpoints
│ │ └── services/ # Business logic
│ ├── lib/ # Shared clients (Supabase, R2, etc.)
│ ├── supabase/migrations/ # 23 domain-organized SQL migrations
│ └── tests/
├── core-web/ # React SPA
│ ├── src/
│ │ ├── api/ # API client
│ │ ├── components/ # 34 feature modules
│ │ ├── stores/ # Zustand stores
│ │ ├── hooks/ # Custom hooks
│ │ └── lib/ # Supabase, Sentry, PostHog clients
│ └── public/
├── core-image-proxy/ # Cloudflare Worker
│ └── src/index.ts # HMAC-signed image proxy + resizing
├── LICENSE # Apache 2.0
└── README.md

Service Dependencies

Core is designed to run with just Supabase for local development. Additional services unlock more features, and most can be swapped for self-hosted or alternative providers.

ServiceRequiredWhat it enablesWithout itSelf-hosted / Alternatives
SupabaseYesAuth, database, realtimeSelf-hosted Supabase (Docker)
Cloudflare R2NoFile uploads, avatarsFile features disabledAny S3-compatible store: Garage, MinIO, AWS S3, DigitalOcean Spaces — uses boto3, just change env vars
OpenAI / AnthropicNoAI chat assistantChat disabledvLLM + Qwen3/Llama 4 (best for tool calling), Ollama, or OpenRouter for multi-provider access
GroqNoEmail AI analysisGeneric email summariesOllama + Qwen3-8B, or any OpenAI-compatible API
Google OAuthNoGmail + Google Calendar syncEmail/calendar sync disabledRequires Google Cloud credentials — no alternative
Microsoft OAuthNoOutlook + M365 Calendar syncMicrosoft sync disabledRequires Azure AD credentials — no alternative
ResendNoWorkspace invitation emailsInvitations failAny SMTP provider: Gmail SMTP, Mailgun, Amazon SES — or Mailpit for local dev
RedisNoDistributed rate limitingIn-memory fallbackValkey (BSD-licensed Redis fork), Dragonfly, or plain Redis
QStashNoBackground job queueJobs handled by cronNo swap needed — cron endpoints handle sync without it
ExaNoWeb search in AI chatWeb search tool disabledSearXNG (free, self-hosted), Tavily (1k free/mo), Brave Search API
SentryNoError trackingNo error reportingBugsink (single container, Sentry SDK compatible), GlitchTip, or self-hosted Sentry
PostHogNoAnalyticsNo analyticsSelf-hosted PostHog (Docker)

Note: The AI chat agent uses tool calling (function calling) with 8+ tools. If self-hosting an LLM, use vLLM — Ollama's OpenAI-compatible endpoint drops tool calls during streaming. LiteLLM can act as a proxy to normalize any LLM backend into an OpenAI-compatible API.

See core-api/.env.example for the full list with setup instructions.

Development

Running checks locally

# Backend — lint + type checkcd core-api
make check # runs both lint and typecheck
make test# run tests
make lint # ruff linter only
make typecheck # mypy only# Frontend — build + lintcd core-web
npm run build # TypeScript check + Vite build
npm run lint # ESLint

Pre-commit hooks (secret scanning)

We use gitleaks to prevent accidental secret commits:

pip install pre-commit
cd core-oss
pre-commit install

After this, every git commit will automatically scan for secrets before allowing the commit.

CI/CD

Every PR runs these checks automatically via GitHub Actions:

CheckWhat it does
API: LintRuff linter on api/ and lib/
API: Type CheckMypy static type analysis
API: TestsPytest suite
API: OpenAPI SchemaValidates the generated OpenAPI spec
Web: BuildTypeScript check + Vite production build
Secret ScanningGitleaks scans for leaked credentials

Contributing

See CONTRIBUTING.md for guidelines.

License

Apache License 2.0

Star History

Star History Chart

About

core-oss monorepo

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages