Skip to content

Distributed video transcoding platform with modular architecture and plugin-based engine for scalable media processing.

License

Notifications You must be signed in to change notification settings

rennerdo30/WebEncode

Repository files navigation

WebEncode Logo

WebEncode

License: MIT Go Version Next.js

Distributed, Plugin-Based Video Transcoding Platform

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.

Features

  • 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

Technology Stack

Backend

  • 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

Frontend

  • Framework: Next.js 16 with React 19
  • UI Components: Shadcn/ui, Radix UI
  • Styling: Tailwind CSS 4
  • State Management: TanStack React Query

Infrastructure

  • Containerization: Docker, Docker Compose
  • Orchestration: Kubernetes
  • Live Streaming: MediaMTX (RTMP/WebRTC)
  • Storage: S3-compatible (MinIO) + Local filesystem

Quick Start

Prerequisites

Run with Docker

# Start the entire stack (Kernel, Workers, UI, NATS, Postgres, MediaMTX)
make up

Once running:

Build from Source

# Build all binaries (kernel, worker, plugins)
make build-all

# Run tests
make test

# Generate test coverage
make test-coverage

Project Structure

WebEncode/
├── 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

Plugin Architecture

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

Documentation

Configuration

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-fs

Contributing

Contributions are welcome. Please read the Contributing Guide for development setup and guidelines.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Distributed video transcoding platform with modular architecture and plugin-based engine for scalable media processing.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages