Open-source event streaming platform with real-time notifications, webhooks, and integrations. Built with SvelteKit and Svelte 5.
- Push Notifications: Web Push API with VAPID support for browser notifications
- Webhooks: Reliable HTTP POST dispatching with HMAC signatures and retry logic
- Integrations: Slack, Discord, and Email notifications out of the box
- Type-Safe API: End-to-end TypeScript with Zod validation
- Production-Ready: Durable side-effect execution with Upstash Workflow
- Modern UI: shadcn-svelte components with Tailwind CSS
- Self-Hostable: Deploy to Vercel (more platforms coming soon)
- Framework: SvelteKit with Svelte 5
- Database: PostgreSQL with Drizzle ORM
- Event Storage: Tinybird
- Authentication: Better Auth
- Styling: shadcn-svelte + Tailwind CSS
- Package Manager: pnpm
- Node.js 18+ and pnpm
- PostgreSQL database
- Tinybird account (for event storage)
- Redis (optional, for caching)
- Clone the repository:
git clone https://github.com/emitkithq/emitkit.git
cd emitkit- Install dependencies:
pnpm install- Copy the environment example and configure:
cp .env.example .envEdit .env and add your credentials:
- Database connection string
- Better Auth secret
- Tinybird API token
- VAPID keys for push notifications (run
pnpm run generate:vapid)
- Set up the database:
pnpm run db:push- Set up Tinybird:
cd tinybird
tb auth
tb push --force- Start the development server:
pnpm run devVisit http://localhost:5173 to see your app.
# Development
pnpm run dev # Start dev server
pnpm run build # Build for production
pnpm run preview # Preview production build
# Database
pnpm run db:studio # Open Drizzle Studio
pnpm run db:generate # Generate migrations
pnpm run db:push # Push schema changes
# Docker
pnpm run docker:up # Start services (Postgres, Redis)
pnpm run docker:down # Stop services
# Code Quality (for contributors)
pnpm run check # TypeScript type checking
pnpm run lint # ESLint + Prettier
pnpm run format # Format code with Prettier- Installation Guide - Step-by-step setup instructions
- Configuration - Environment variables and secrets
- Deployment - Deploy to production (Vercel)
- Tinybird Setup - Event storage configuration
- Troubleshooting - Common issues and solutions
- Contributing Guide - How to contribute
- Development Docs - Architecture and development patterns
See Configuration Guide for complete environment variable documentation.
- Copy
.env.exampleto.env - Fill in required values (database, auth secret, Tinybird token)
- Generate VAPID keys for push notifications:
pnpm dlx web-push generate-vapid-keys
For detailed configuration options, see the Configuration Guide.
See Deployment Guide for complete production deployment instructions.
- Push your code to GitHub
- Import to Vercel
- Set environment variables (see Configuration Guide)
- Deploy
For detailed deployment steps, troubleshooting, and production best practices, see the Deployment Guide.
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
See CONTRIBUTING.md for detailed contribution guidelines.
Quick steps:
- Fork the repository
- Create a feature branch
- Make your changes
- Run
pnpm run check(must pass with 0 errors) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with SvelteKit and Svelte 5
- UI components from shadcn-svelte
- Authentication powered by Better Auth
- Event analytics by Tinybird
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: docs/
Made with ❤️ by the EmitKit community