WebEncode is a high-performance, distributed media processing engine designed for scale. It features a micro-kernel architecture where all major functionality (Auth, Storage, Encoding, Live Streaming, Publishing) is offloaded to a resilient, gRPC-based plugin mesh.
- Hyper-Modular Architecture: 5-Pillar Plugin System (Auth, Storage, Encoder, Live, Publisher)
- Distributed Workers: Scalable FFmpeg execution engine powered by NATS JetStream
- Modern UI: Next.js 16 Dashboard with real-time monitoring
- Live Streaming: Zero-config RTMP ingest to HLS via MediaMTX integration
- Production Ready: Docker, Kubernetes, OpenTelemetry, and structured logging
- Restreaming: 1:N simulcasting to YouTube, Twitch, Kick, and Rumble with unified chat
- Language: Go 1.24+
- Framework: Chi/v5 (HTTP), gRPC (plugins)
- Database: PostgreSQL 16 (pgx/v5)
- Message Bus: NATS JetStream 2.10+
- Plugin System: HashiCorp go-plugin
- Framework: Next.js 16 with React 19
- UI Components: Shadcn/ui, Radix UI
- Styling: Tailwind CSS 4
- State Management: TanStack React Query
- Containerization: Docker, Docker Compose
- Orchestration: Kubernetes
- Live Streaming: MediaMTX (RTMP/WebRTC)
- Storage: S3-compatible (MinIO) + Local filesystem
- Docker and Docker Compose
- Go 1.24+ (for local development)
- Node.js 22+ (for UI development)
# Start the entire stack (Kernel, Workers, UI, NATS, Postgres, MediaMTX)
make upOnce running:
- Dashboard: http://localhost:3000
- API: http://localhost:8080
- MediaMTX: http://localhost:8888
# Build all binaries (kernel, worker, plugins)
make build-all
# Run tests
make test
# Generate test coverage
make test-coverageWebEncode/
├── cmd/ # Entry points (kernel, worker)
├── internal/ # Core business logic
│ ├── api/ # REST API handlers
│ ├── orchestrator/ # Job orchestration
│ ├── plugin_manager/ # Plugin lifecycle
│ └── worker/ # Worker tasks
├── pkg/ # Shared libraries
│ ├── api/ # API models
│ ├── bus/ # NATS messaging
│ ├── db/ # Database models (SQLC)
│ └── pluginsdk/ # Plugin SDK interfaces
├── plugins/ # 5-Pillar Plugin System
│ ├── auth-*/ # Authentication plugins
│ ├── storage-*/ # Storage plugins
│ ├── encoder-*/ # Encoder plugins
│ ├── live-*/ # Live streaming plugins
│ └── publisher-*/ # Publisher plugins
├── proto/ # gRPC Protobuf definitions
├── ui/ # Next.js Frontend
├── deploy/ # Docker & Kubernetes configs
└── docs/ # Documentation
WebEncode uses a 5-pillar plugin system:
| Pillar | Purpose | Included Plugins |
|---|---|---|
| Auth | User authentication | Basic, OIDC, LDAP, Cloudflare Access |
| Storage | File storage | Filesystem, S3/MinIO |
| Encoder | Transcoding | FFmpeg |
| Live | RTMP/WebRTC ingest | MediaMTX |
| Publisher | Distribution | YouTube, Twitch, Kick, Rumble, Generic RTMP |
- Specification: Complete system specification
- Contributing Guide: Development setup and plugin development
- API Reference: REST API documentation
- Plugin SDK: Guide for writing plugins
- Operator Runbook: Deployment and operations guide
- OpenAPI Spec: OpenAPI 3.1 specification
- Issues & Roadmap: Implementation status and known issues
WebEncode is configured via environment variables. See the Operator Runbook for full configuration options.
Key environment variables:
DATABASE_URL=postgres://user:pass@localhost:5432/webencode
NATS_URL=nats://localhost:4222
AUTH_PLUGIN=auth-basic
STORAGE_PLUGIN=storage-fsContributions are welcome. Please read the Contributing Guide for development setup and guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.