v0.8.3 — Latest Release

Ship faster.
Skip the boring parts.

A production-ready full-stack starter with auth, notifications, AI integration, backups, search, audit logs, and more — all configured through a polished admin UI, all inside a single Docker container.

scroll
10+
Notification Channels
6
AI/LLM Providers
5
SSO Providers
1
Docker Container
40+
API Controllers
0
Config File Edits Needed
// how it fits together

One container. Everything inside.

All services start automatically via Supervisor — Nginx, PHP-FPM, Next.js, Meilisearch, and WebSockets. No orchestration complexity required.

:8080
──────►
🔀 Nginx
Reverse Proxy
├── /api/* ──────── /* │                  │
/api/*
⚙️ PHP-FPM
Laravel 11 API
/*
⚛️ Next.js
React 18 · TypeScript
🗄️
SQLite
Default · MySQL/PG ok
🔍
Meilisearch
Full-text Search
📡
Reverb
WebSockets
🔄
Supervisor
Process Manager

Session-based auth via HTTP-only cookies  ·  Nginx routes /api/* → PHP-FPM, everything else → Next.js


// batteries included

Everything your app needs, pre-built.

Stop reimplementing auth and notifications on every new project. All infrastructure-level features are pre-built, tested, and configurable from the admin UI.

🔐
Authentication & Users

Email/password, SSO via Google, GitHub, Microsoft, Apple, and Discord. TOTP two-factor auth with recovery codes, and WebAuthn/FIDO2 passkeys. Group-based permissions with granular controls.

SanctumOAuth2/OIDC 2FA + PasskeysRBAC Groups
🔔
Multi-Channel Notifications

10+ delivery channels: email (SMTP/Mailgun/SES), SMS (Twilio/Vonage/SNS), Slack, Telegram, Discord, Signal, Matrix, ntfy, Web Push, and in-app. Per-user preferences and delivery diagnostics.

EmailSMS SlackTelegramWeb Push
🤖
AI / LLM Integration

Multi-provider support for Claude, OpenAI, Gemini, Ollama, AWS Bedrock, and Azure OpenAI. Three orchestration modes: Single (direct query), Aggregation (synthesized results), and Council (consensus voting).

ClaudeOpenAI GeminiOllamaBedrock
💾
Backup & Restore

Automated full backups (database + files + settings) on a configurable schedule. Remote destinations: S3-compatible, SFTP, Google Drive, and local storage. Optional encryption and configurable retention policies.

S3SFTP Google DriveEncryptedScheduled
🔍
Full-Text Search

Meilisearch-powered global search with a Cmd+K shortcut. Searches both navigation pages and database records simultaneously. Falls back to database LIKE queries when Meilisearch is unavailable.

MeilisearchCmd+K Laravel ScoutFuse.js
📋
Audit Logging

Real-time streaming audit logs via Server-Sent Events. HIPAA-compliant access logging, suspicious activity detection, and structured application logs with correlation IDs. Configurable retention.

Real-time SSEHIPAA Correlation IDsLive Stream
📱
Progressive Web App

Full PWA: offline capability, install prompts, background sync, and share target API. Service Worker via Workbox 7 (bundled locally). Web Push with VAPID keys. Custom install banner with dismissal tracking.

Workbox 7Offline Background SyncWeb Push
⚙️
Admin Configuration UI

Every setting is manageable through the admin dashboard — no config file edits, no container restarts. Settings are stored in the database with environment variable fallback for defaults.

No RestartsDB-backed Env FallbackLive Updates
🗂️
Multi-Provider Storage

File storage with Amazon S3 (and S3-compatible services), Google Cloud Storage, Azure Blob Storage, and local filesystem. Includes a file manager UI for browsing and managing uploads.

S3GCS Azure BlobFile Manager
💳
Payments (Optional Module)

Stripe Connect integration with platform application fees, destination charges, OAuth onboarding, idempotent webhook handling, and a payment history admin view. Available as an optional module.

Stripe ConnectWebhooks OptionalIdempotent

// preview

A complete admin experience.

Every feature is accessible through a polished Next.js interface. No terminal commands or config file editing after initial setup.

localhost:8080/dashboard
Dashboard Users Configuration ⌘K Search
Welcome back, Admin ✦
Total Users
42
Storage Used
1.2 GB
Quick Actions
+ New User Run Backup Reindex Search
localhost:8080/configuration/notifications
← Config Notifications
Delivery channels · 4 of 10 enabled
Email (SMTP)enabled
Slack Webhookenabled
Web Push (VAPID)enabled
In-Appenabled
Telegram Botconfigure
Twilio SMSdisabled
localhost:8080/configuration/ai
← Config AI / LLM
Mode: Council (consensus voting)
Anthropic Claudeclaude-3-5-sonnet
OpenAIgpt-4o
Google Geminigemini-1.5-pro
Ollama (local)not configured
AWS Bedrocknot configured
localhost:8080/configuration/audit
← Config Audit Logs ● Live stream
user.loginadmin@example.comjust now
backup.completedfull · 24.3 MB2m ago
auth.failedunknown@x.com5m ago
settings.updatednotifications.slack12m ago
suspicious.activity5 failed logins1h ago

// the stack

Built on Laravel & Next.js.

Two of the most productive full-stack frameworks available, with the full Laravel and React ecosystems at your disposal. Everything included — nothing mandatory.

⚙️ Laravel 11
PHP 8.3+ · The API backbone

A mature, expressive PHP framework with an enormous ecosystem. Sourdough uses Laravel for all API routes, business logic, auth, queuing, notifications, and database access — with the full ecosystem already wired up and ready to extend.

Included Laravel packages
Laravel Sanctum Laravel Scout Laravel Reverb Laravel Eloquent Laravel Notifications Laravel Queue Laravel Mail Optional Horizon Optional Lighthouse GraphQL Pest PHP
⚛️ Next.js 16
React 18 · TypeScript · The frontend

A production-grade React framework with file-based routing, server components, and a rich ecosystem. Sourdough's frontend is a fully-typed TypeScript application with a complete component library, state management, and form handling already configured.

Included frontend packages
Tailwind CSS shadcn/ui + Radix TanStack Query Zustand React Hook Form Zod Workbox PWA Fuse.js Playwright Vitest
🔐
Laravel Sanctum
Laravel

First-party Laravel package for session-based authentication. Sourdough uses HTTP-only cookie sessions — no Bearer tokens, no JWT management. Secure by default, works seamlessly with SSO and 2FA.

Used for: API auth, session management, CSRF protection, SPA authentication
🔍
Laravel Scout
Laravel

Laravel's official full-text search abstraction. Models are decorated with Searchable and Scout handles indexing, querying, and syncing — currently backed by Meilisearch, swappable to Algolia or Typesense.

Driver: Meilisearch (included)  ·  Fallback: database LIKE queries
📡
Laravel Reverb
Laravel

Laravel's first-party WebSocket server — runs inside the same container, no third-party service required. Powers real-time audit log streaming, live notifications, and any event broadcasting you add to your app.

Used for: real-time audit logs, in-app notifications, live dashboard updates
🔔
Laravel Notifications
Laravel

Laravel's notification system extended with 10+ custom channels: Telegram, Slack, Discord, Twilio SMS, Web Push, and more. Adding a new channel means implementing one interface and registering it — the rest is wired.

Channels: email, SMS, Slack, Telegram, Discord, Signal, Matrix, ntfy, Web Push, in-app
Laravel Queue
Laravel

Background job processing for backups, notifications, and heavy operations. Uses the database driver out of the box — no Redis required to get started. Swap to Redis or SQS when you need to scale.

Default driver: database  ·  Also supports: Redis, SQS, Beanstalkd
🧩
Lighthouse GraphQL
Optional

A full GraphQL API alongside the REST API, powered by Lighthouse — a schema-first GraphQL server for Laravel. Use it if your clients prefer GraphQL; leave it out if they don't. The REST API works independently.

Remove it: uninstall the package, drop the schema file — REST API is unaffected
🗄️ Eloquent ORM

Laravel's built-in ORM means the database is an implementation detail. Sourdough ships with SQLite by default — zero setup, file-based, works immediately. When you're ready to scale, change one env var.

SQLite ← default MySQL PostgreSQL Supabase PlanetScale
Change DB_CONNECTION

That's literally it. Eloquent handles the rest. All migrations, relationships, and queries work identically across every supported database driver.

# .env
DB_CONNECTION=pgsql
DB_DATABASE=my_app
# Run migrations. Done.
🧱

Everything is included, nothing is required. Don't need GraphQL? Remove Lighthouse. Don't need payments? Drop the Stripe module. Don't need search? Remove Scout and Meilisearch. The codebase is modular — features are self-contained and documented in the AI recipes so your assistant knows exactly what to remove and what to leave alone.


// start cooking

Fork it. Start it. Build your app.

Three commands and you're in a fully running dev environment. Your AI assistant handles the rest.

1
Fork on GitHub & clone your fork
# Fork the repo on GitHub, then:
git clone https://github.com/your-org/your-app-name
cd your-app-name
cp .env.example .env
2
Start the dev environment
docker-compose up -d

✓ Container sourdough-dev Started
✓ Nginx · PHP-FPM · Next.js · Meilisearch ready
✓ App running at http://localhost:8080

# That's it. All services start automatically via Supervisor.
# No configuring individual services. No port juggling.
3
Tell your AI assistant: "Get cooking"
# Open the project in Cursor, VS Code, Claude Code, etc.
# The AI config files load automatically. Then say:

"Get cooking"

Your AI assistant will walk you through a guided setup wizard:
→ Name your app, set colors & fonts
→ Choose which features to keep or remove
→ Configure your auth model and database
→ Your app is now yours. Start building features.
4
Build your features with 47 AI recipes
# Your AI already knows the codebase patterns.
# Just describe what you want:

"Add a config page for managing webhooks"
"Add a dashboard widget showing active sessions"
"Add email notifications when a user signs up"

→ AI follows the recipe, creates backend + frontend,
registers routes, adds nav entry, wires it all up.
✓ Ship in hours, not days.
📌 Minimum Requirements
🐳 Docker 💾 1 GB RAM (2 GB+ recommended) 💽 2 GB disk (5 GB+ recommended) 🖥️ 1 CPU core (2+ recommended)

// built for agentic development

Your AI already knows this codebase.

Sourdough ships with deep AI documentation — recipes, patterns, anti-patterns, and IDE-specific config files — so any AI assistant can hit the ground running on day one.

The setup wizard
You
Get cooking
AI Assistant
Let's set up your app. I'll walk you through this in 3 tiers — you can pause and resume anytime.

Tier 1 — Identity
1. What's your app called?
2. Pick a primary color / brand theme
3. Which features do you need? (auth, payments, AI, notifications...)
My app is called Acme. Keep auth and notifications, remove payments. Primary color: indigo.
Got it. Renaming to Acme, removing the Stripe module, setting indigo as primary. Moving to Tier 2 — auth model and database...
Documentation structure
File / PathWhat it does
CLAUDE.md Always-loaded context: stack, architecture, commands, task lookup
FORK-ME.md "Get cooking" wizard entry point and full feature guide
docs/ai/README.md Dev workflows index — which recipe to use for which task
docs/ai/recipes/ 47 step-by-step implementation guides
docs/ai/patterns/ Copy-paste code patterns for every layer
docs/ai/anti-patterns/ Common mistakes and what to do instead
docs/adr/ 26 Architecture Decision Records — the "why" behind every choice
📖
47 Recipes
Step-by-step guides for every common task
add-full-stack-feature
add-config-page
add-notification-channel
add-dashboard-widget
add-api-endpoint
add-searchable-model
add-llm-provider
add-new-permission
add-backup-destination
add-email-template
+ 37 more recipes →
🧱
Patterns & Anti-patterns
Consistent code, no surprises
Every feature follows the same structure: service layer for business logic, controllers for routing, TanStack Query on the frontend. The AI knows the pattern and won't deviate.
✓ Always scope queries by user_id
✓ Business logic in Services/, not Controllers
✗ Never use is_admin column (use groups)
✗ Never add Bearer token auth (session-based only)
🔌
IDE Auto-configuration
Opens with context. No setup needed.
Cursor
.cursor/rules/*.mdc
Auto-loads on open
GitHub Copilot
.github/copilot-instructions.md
Auto-loads on open
Windsurf
.windsurfrules
Auto-loads on open
Claude Code
CLAUDE.md
Always-loaded context