Server Options
Complete reference for server configuration options.
Release Downloads
Section titled “Release Downloads”The latest release archives are available from GitHub Releases and these stable URLs:
https://releases.mikrosuite.com/mikromeet_app_latest.zip- static browser apphttps://releases.mikrosuite.com/mikromeet_api_latest.zip- Node API bundle
Environment Variables
Section titled “Environment Variables”Configure the server via .env file or environment variables.
Server Configuration
Section titled “Server Configuration”MIKROMEET_PORT
Section titled “MIKROMEET_PORT”Server port number.
- Type: Number
- Default:
3000 - Example:
MIKROMEET_PORT=8080
PORT is also supported as a generic fallback.
MIKROMEET_PORT=8080 node mikromeet.mjsUSE_HTTPS
Section titled “USE_HTTPS”Enable HTTPS server.
- Type: Boolean (
trueorfalse) - Default:
false - Requires:
SSL_CERT_PATHandSSL_KEY_PATH
USE_HTTPS=trueSSL_CERT_PATH
Section titled “SSL_CERT_PATH”Path to SSL certificate file.
- Type: String (file path)
- Required when:
USE_HTTPS=true - Example:
/etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSL_CERT_PATH=/path/to/cert.pemSSL_KEY_PATH
Section titled “SSL_KEY_PATH”Path to SSL private key file.
- Type: String (file path)
- Required when:
USE_HTTPS=true - Example:
/etc/letsencrypt/live/yourdomain.com/privkey.pem
SSL_KEY_PATH=/path/to/key.pemTURN Server Configuration
Section titled “TURN Server Configuration”TURN_SERVER_URL
Section titled “TURN_SERVER_URL”TURN server URL for NAT traversal.
- Type: String (URL)
- Format:
turn:hostname:portorturns:hostname:port - Example:
turn:turn.example.com:3478
TURN_SERVER_URL=turn:turn.yourdomain.com:3478TURN_SERVER_USERNAME
Section titled “TURN_SERVER_USERNAME”TURN server authentication username.
- Type: String
- Required with:
TURN_SERVER_URL
TURN_SERVER_USERNAME=mikromeetTURN_SERVER_CREDENTIAL
Section titled “TURN_SERVER_CREDENTIAL”TURN server authentication password.
- Type: String
- Required with:
TURN_SERVER_URL - Security: Keep secret, don’t commit to git
TURN_SERVER_CREDENTIAL=your-secure-passwordRoom Management
Section titled “Room Management”MAX_LATENT_ROOMS
Section titled “MAX_LATENT_ROOMS”Maximum number of pre-created empty rooms.
- Type: Number
- Default:
10 - Range: 1-1000
MAX_LATENT_ROOMS=20LATENT_ROOM_MAX_AGE_HOURS
Section titled “LATENT_ROOM_MAX_AGE_HOURS”Hours before empty pre-created rooms are cleaned up.
- Type: Number (hours)
- Default:
24 - Range: 1-168 (1 week)
LATENT_ROOM_MAX_AGE_HOURS=48Frontend Configuration
Section titled “Frontend Configuration”Configure the extracted app archive with config.json. mikromeet.config.json remains available as a legacy alias.
apiUrl
Section titled “apiUrl”WebSocket URL for signaling server.
- Type: String (WebSocket URL)
- Required: Yes
- Format:
ws://orwss://
{ "apiUrl": "wss://api.yourdomain.com/ws"}Examples:
- Local testing:
"ws://127.0.0.1:3000/ws" - Production:
"wss://yourdomain.com/ws" - Separate API:
"wss://api.yourdomain.com/ws"
iceServers
Section titled “iceServers”Array of STUN/TURN servers for WebRTC.
- Type: Array of ICE server objects
- Optional: Yes (uses default STUN if omitted)
{ "iceServers": [ { "urls": "stun:stun.cloudflare.com:3478" }, { "urls": "turn:turn.yourdomain.com:3478", "username": "mikromeet", "credential": "password" } ]}ICE Server Object:
urls(string or array): STUN/TURN server URLsusername(string, optional): Authentication usernamecredential(string, optional): Authentication password
Common STUN servers:
stun:stun.cloudflare.com:3478stun:stun.l.google.com:19302stun:stun1.l.google.com:19302
Configuration Examples
Section titled “Configuration Examples”Local Testing
Section titled “Local Testing”.env:
MIKROMEET_PORT=3000config.json:
{ "apiUrl": "ws://127.0.0.1:3000/ws"}Production (Basic)
Section titled “Production (Basic)”.env:
PORT=8080config.json:
{ "apiUrl": "wss://meet.yourdomain.com/ws"}Production (With TURN)
Section titled “Production (With TURN)”.env:
PORT=443USE_HTTPS=trueSSL_CERT_PATH=/etc/letsencrypt/live/yourdomain.com/fullchain.pemSSL_KEY_PATH=/etc/letsencrypt/live/yourdomain.com/privkey.pemTURN_SERVER_URL=turn:turn.yourdomain.com:3478TURN_SERVER_USERNAME=mikromeetTURN_SERVER_CREDENTIAL=strong-password-hereMAX_LATENT_ROOMS=20LATENT_ROOM_MAX_AGE_HOURS=48config.json:
{ "apiUrl": "wss://meet.yourdomain.com/ws", "iceServers": [ { "urls": "stun:stun.cloudflare.com:3478" }, { "urls": "turn:turn.yourdomain.com:3478", "username": "mikromeet", "credential": "strong-password-here" } ]}Behind Reverse Proxy
Section titled “Behind Reverse Proxy”.env (Server runs on HTTP internally):
MIKROMEET_PORT=3000TURN_SERVER_URL=turn:turn.yourdomain.com:3478TURN_SERVER_USERNAME=mikromeetTURN_SERVER_CREDENTIAL=passwordconfig.json (public-facing is HTTPS):
{ "apiUrl": "wss://meet.yourdomain.com/ws", "iceServers": [ { "urls": "stun:stun.cloudflare.com:3478" }, { "urls": "turn:turn.yourdomain.com:3478", "username": "mikromeet", "credential": "password" } ]}Security Considerations
Section titled “Security Considerations”Rate Limiting
Section titled “Rate Limiting”Built-in rate limits:
- WebSocket: 10 connections/minute per IP
- Room creation: 10 requests/minute per IP
For additional protection, use:
- Reverse proxy rate limiting (Nginx, Cloudflare)
- CDN with DDoS protection
- IP allowlisting for admin endpoints
Performance Tuning
Section titled “Performance Tuning”Node.js Options
Section titled “Node.js Options”# Increase memory limitNODE_OPTIONS="--max-old-space-size=4096" node mikromeet.mjs
# Enable debuggingnode --inspect mikromeet.mjsPM2 Configuration
Section titled “PM2 Configuration”module.exports = { apps: [{ name: 'mikromeet', script: './mikromeet.mjs', instances: 'max', exec_mode: 'cluster', env: { NODE_ENV: 'production', MIKROMEET_PORT: 3000 } }]}Start with PM2:
pm2 start ecosystem.config.jsNext Steps
Section titled “Next Steps”- API Reference - HTTP and WebSocket API documentation
- Configuration Guide - Detailed configuration examples