Argon is a high-performance, distributed voice chat server built on modern cloud-native technologies. It provides real-time communication capabilities with a focus on scalability, reliability, and low latency.
- Real-time Voice Communication: Built on LiveKit for high-quality, low-latency voice chat
- Distributed Architecture: Leverages Orleans virtual actors for scalable, distributed computing
- Multi-Region Support: CockroachDB cluster with multi-region replication
- Event-Driven: NATS messaging with JetStream for reliable event streaming
- S3-Compatible Storage: SeaweedFS for scalable object storage
- High-Performance Caching: DragonflyDB for Redis-compatible in-memory operations
| Component | Technology |
|---|---|
| Framework | .NET 10.0 (Preview) |
| Language | C# (Latest) |
| Actor Model | Microsoft Orleans |
| Database | CockroachDB (3-node cluster) |
| NoSQL | ScyllaDB (Cassandra-compatible) |
| Cache | DragonflyDB (Redis-compatible) |
| Messaging | NATS with JetStream |
| Storage | SeaweedFS (S3-compatible) |
| Media Server | LiveKit |
| Reverse Proxy | Caddy |
Before getting started, ensure you have:
- .NET 10.0 SDK (Preview)
- Docker Desktop (or Docker Engine + Compose)
- mkcert β for generating local TLS certificates
- PowerShell (for Windows) or Bash (for Linux/macOS) for running setup scripts
git clone https://github.com/argon-chat/server.git
cd serverNavigate to the deploy directory and start the local development environment:
cd deploy
./ensure-certs.ps1 # Generate local TLS certificates
docker compose -f docker-compose.local.yml up -dThis will start all required services (databases, caching, messaging, media server, etc.).
From the repository root:
dotnet restore
dotnet buildcd src/Argon.Api
dotnet runThis section explains the complete local infrastructure for development using Docker Compose.
The local environment includes the following services:
| Service | Description |
|---|---|
| NATS | Messaging bus with JetStream enabled for event streaming |
| ScyllaDB | High-performance Cassandra-compatible NoSQL database |
| CockroachDB (3 nodes) | Distributed SQL database cluster with multi-region support |
| SeaweedFS (S3) | Local S3-compatible object storage |
| KineticaFS | Argon's file lifecycle manager and S3 bridge |
| DragonflyDB | High-performance Redis-compatible in-memory cache |
| LiveKit | Real-time media server for voice/video communication |
| Caddy | HTTPS reverse proxy for LiveKit |
All services are connected through the argon Docker bridge network.
Before starting the containers, generate local certificates used by Caddy and LiveKit.
Run:
cd deploy
./ensure-certs.ps1This script will:
- Check for existing certificates in the
certs/directory - Create new certificates via
mkcertif they don't exist
The
docker-compose.local.ymlfile is located in the/deploydirectory.
To launch the local infrastructure, run:
cd deploy
docker compose -f docker-compose.local.yml up -dThis will start all services in detached mode (-d).
The first startup may take a few minutes as the databases initialize.
Alternative: You can also use the provided PowerShell script:
cd deploy
./start.ps1| Service | URL/Port | Notes |
|---|---|---|
| NATS | localhost:4222 |
NATS client port |
| ScyllaDB CQL | localhost:9042 |
CQL port |
| CockroachDB SQL | localhost:26257 |
SQL port |
| CockroachDB UI | http://localhost:8080 | Admin console |
| SeaweedFS S3 | http://localhost:8333 | S3 API endpoint |
| SeaweedFS UI | http://localhost:9321 | Admin interface |
| KineticaFS | http://localhost:3000 | File lifecycle manager |
| DragonflyDB | localhost:6379 |
Redis-compatible port |
| LiveKit | localhost:7880 |
LiveKit server port |
| LiveKit (HTTPS) | https://localhost:9443 | Served via Caddy proxy |
To stop all containers:
cd deploy
docker compose -f docker-compose.local.yml downAlternative: Use the PowerShell script:
cd deploy
./stop.ps1To stop all containers and remove related volumes (resetting all data):
cd deploy
docker compose -f docker-compose.local.yml -p argonlocal down --volumes --remove-orphansThis will:
- Stop and remove all running containers
- Remove persistent volumes
- Clean up orphaned resources
.
βββ src/ # Source code
β βββ Argon.Api/ # Main API server
β βββ Argon.Core/ # Core business logic
β βββ Argon.Cassandra/ # ScyllaDB/Cassandra integration
β βββ Argon.CodeGen/ # Code generation utilities
β βββ Argon.Ion/ # Ion protocol implementation
βββ tests/ # Test projects
βββ deploy/ # Deployment configurations
β βββ certs/ # Local TLS certificates (generated)
β βββ docker/ # Docker-related scripts/configs
β βββ dynamicconfig/ # Temporal dynamic configuration
β βββ docker-compose.local.yml # Main Docker Compose file
β βββ ensure-certs.ps1 # Certificate generation script
β βββ start.ps1 # Start infrastructure script
β βββ stop.ps1 # Stop infrastructure script
β βββ Caddyfile # Caddy reverse proxy configuration
β βββ livekit.yaml # LiveKit server configuration
βββ Argon.Server.slnx # Solution file
βββ README.md # This file
- The CockroachDB cluster automatically bootstraps with 3 nodes (
cockroach1,cockroach2,cockroach3) in different regions. - KineticaFS waits for ScyllaDB to become healthy before starting.
- DragonflyDB provides a fast Redis-compatible cache and stores data in the
argon-cache-datavolume. - Caddy uses certificates from
./certsto serve LiveKit over HTTPS on port 9443.
| Issue | Possible Fix |
|---|---|
mkcert not found |
Install it from mkcert GitHub |
| Database healthcheck failures | Wait 1β2 minutes; some databases (Scylla/CockroachDB) have long startup times |
| Ports already in use | Check for conflicting local services and stop them |
| SSL errors in browser | Run mkcert -install to add the local CA to your OS trust store |
| CockroachDB cluster init fails | Run docker compose logs init to see initialization logs |
To build the entire solution:
dotnet restore
dotnet buildTo run the Argon API server:
cd src/Argon.Api
dotnet runThe server will start and connect to the local infrastructure services.
The server configuration is managed through:
appsettings.json- Application settings- Environment variables - Runtime configuration
- User secrets - Development secrets (use
dotnet user-secrets)
To run tests:
dotnet testContributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow the existing code style and conventions
- Write tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
This project is licensed under the Business Source License 1.1.
- Licensor: Argon Inc. LLC
- Change Date: 4 years from publication
- Change License: MPL 2.0
See LICENSE.md for full details.
- β Free for internal use within organizations
- β Free for non-production use
- β Free for modifications and derivative works
β οΈ Cannot offer as a competing hosted service- β° Automatically becomes MPL 2.0 after 4 years
For alternative licensing arrangements, contact: privacy@argon.gl
- Repository: https://github.com/argon-chat/server
- Issues: GitHub Issues
- Email: privacy@argon.gl
Built with β€οΈ by the Argon team and contributors.
Special thanks to all the open-source projects that make Argon possible:
- Microsoft Orleans
- CockroachDB
- ScyllaDB
- LiveKit
- NATS
- And many more...
β
Ready to build!
You now have everything you need to start developing with Argon Server.