Get SynthStack running with pure TypeScript in 15 minutes. No Python required.
- Node.js 20+
- pnpm 9+
- Docker & Docker Compose
git clone https://github.com/manicinc/synthstack.git
cd synthstack
pnpm installcp .env.example .envEdit .env with your API keys:
# Required for AI features
OPENAI_API_KEY=sk-...
# Optional - for advanced LLM routing
ANTHROPIC_API_KEY=sk-ant-...
OPENROUTER_API_KEY=sk-or-...
# Stripe (for billing)
STRIPE_SECRET_KEY=YOUR_STRIPE_SECRET_KEY
STRIPE_PUBLISHABLE_KEY=YOUR_STRIPE_PUBLISHABLE_KEY
# Supabase Auth (or use local PostgreSQL)
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=eyJ...SynthStack offers two editions controlled by environment variables:
LITE (Community Edition) - MIT-licensed core (defaults shown):
ENABLE_COPILOT=true
ENABLE_REFERRALS=false
VITE_ENABLE_COPILOT=true
VITE_ENABLE_REFERRALS=falsePRO (Commercial Edition) - Adds PRO-only modules (e.g., referrals, advanced AI modules) when present:
ENABLE_COPILOT=true
ENABLE_REFERRALS=true
VITE_ENABLE_COPILOT=true
VITE_ENABLE_REFERRALS=trueSee VERSIONS.md for detailed feature comparison.
# Start Docker services (Postgres, Redis, Qdrant, Directus)
docker compose up -d
# Wait ~30 seconds for services to initialize
# Start the API Gateway
pnpm dev:api
# In a new terminal - Start the frontend
pnpm dev:web| Service | URL |
|---|---|
| Frontend | http://localhost:3050 |
| API Gateway | http://localhost:3003 |
| API Docs | http://localhost:3003/docs |
| Directus CMS | http://localhost:8099/admin |
The TypeScript stack includes:
- Supabase or Local PostgreSQL auth
- OAuth (Google, GitHub, Discord, Microsoft)
- JWT tokens with refresh rotation
- Role-based access control
- Stripe subscriptions and one-time payments
- Credit-based usage system
- Referral program with tiered rewards
- LLM chat (OpenAI, Anthropic, OpenRouter)
- Streaming responses
- Conversation history
- Agent orchestration
- Workflow builder
- Vue 3 + Quasar cross-platform app
- iOS, Android, Desktop (Electron), PWA
- Responsive design with dark mode
- Real-time updates
If you need RAG, embeddings, or text analysis without Python:
# Start ts-ml-service
cd packages/ts-ml-service
pnpm install
pnpm start:devThis provides:
/embeddings/*- Text embeddings with OpenAI/rag/*- Document indexing and semantic search/analysis/*- Summarization, sentiment, keywords/transcription/*- Audio transcription (Whisper)/complexity/*- Task complexity estimation
┌─────────────────────────────────────────────────────────────┐
│ Frontend │
│ Vue 3 + Quasar │
│ (Web, iOS, Android, PWA, Electron) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ API Gateway │
│ Fastify + TypeScript │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Auth │ │ Billing │ │ Agents │ │ LLM Router │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐
│ Supabase │ │ Stripe │ │ Directus │ │ OpenAI/ │
│ Auth │ │ │ │ CMS │ │ Anthropic │
└──────────┘ └──────────┘ └──────────┘ └──────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ PostgreSQL │
│ (via Directus) │
└──────────────────────────────────────────────────────────────┘
// packages/api-gateway/src/routes/my-feature.ts
import { FastifyPluginAsync } from 'fastify';
const routes: FastifyPluginAsync = async (fastify) => {
fastify.get('/my-endpoint', async (request, reply) => {
return { message: 'Hello from TypeScript!' };
});
};
export default routes;import { llmRouter } from '../services/llm-router';
const response = await llmRouter.chat({
messages: [{ role: 'user', content: 'Hello!' }],
model: 'gpt-4o-mini',
});// apps/web/src/stores/my-store.ts
import { defineStore } from 'pinia';
export const useMyStore = defineStore('my-store', {
state: () => ({
items: [],
}),
actions: {
async fetchItems() {
const { data } = await api.get('/my-endpoint');
this.items = data;
},
},
});docker compose down -v
docker compose up -dChange ports in .env:
WEB_PORT=3051
API_PORT=3004Wait 30-60 seconds after docker compose up for Postgres to initialize.
- Full AI Stack Guide - Add Python ML services
- Architecture Decision Guide - Choose your stack
- Mobile Guide - Build iOS/Android apps
- Stripe Integration - Configure billing