Supported Protocols

SMPP 3.3/3.4/5.0 HTTP API EMI/UCP AT Commands

Features

Admin Dashboard

Built-in web UI for monitoring traffic, SMSCs and message queues in real-time.

JSON API

/status.json, /health, and /api/sendsms endpoints for easy integration.

DLR Storage

Redis/Valkey, MySQL, PostgreSQL, SQLite backends for delivery reports.

High Performance

16,000+ msg/sec throughput with sub-80ms latency on commodity hardware.

Health Checks

/health endpoint for load balancers and Kubernetes readiness probes.

Production Ready

Systemd units, RPM packages, Docker images, reproducible builds.

Prometheus Metrics

/metrics endpoint for Grafana dashboards. SMS rates, queue depths, SMSC status.

JSON Structured Logs

log-format = json for ELK, Loki, Splunk integration.

Config Hot-Reload

SIGHUP reloads config, adds/removes SMSCs without restart.

Environment Variables

${VAR} syntax in config for Docker/K8s secrets injection.

Async Logging

Non-blocking logging with dedicated writer thread. Zero I/O blocking.

Enterprise Ready

SBOM, reproducible builds, config validation, structured logs. Compliance-friendly.

Quick Start

Enterprise image based on Red Hat UBI 10:

mkdir kamex && cd kamex

# Create docker-compose.yml
cat > docker-compose.yml <<'EOF'
services:
  bearerbox:
    image: ghcr.io/vaska94/kamex:latest
    container_name: kamex-bearerbox
    command: ["/usr/sbin/bearerbox", "/etc/kamex/kamex.conf"]
    volumes:
      - ./kamex.conf:/etc/kamex/kamex.conf:ro
      - kamex-spool:/var/spool/kamex
      - kamex-logs:/var/log/kamex
    ports:
      - "13000:13000"
    networks:
      - kamex
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://localhost:13000/health"]
      interval: 10s
      timeout: 5s
      start_period: 10s
    restart: unless-stopped

  smsbox:
    image: ghcr.io/vaska94/kamex:latest
    container_name: kamex-smsbox
    command: ["/usr/sbin/smsbox", "/etc/kamex/kamex.conf"]
    volumes:
      - ./kamex.conf:/etc/kamex/kamex.conf:ro
      - kamex-logs:/var/log/kamex
    ports:
      - "13013:13013"
    networks:
      - kamex
    depends_on:
      bearerbox:
        condition: service_healthy
    restart: unless-stopped

  valkey:
    image: valkey/valkey:9-alpine
    container_name: kamex-valkey
    volumes:
      - valkey-data:/data
    networks:
      - kamex
    restart: unless-stopped

volumes:
  kamex-spool:
  kamex-logs:
  valkey-data:

networks:
  kamex:
    driver: bridge
EOF

# Download example config
curl -LO https://raw.githubusercontent.com/vaska94/Kamex/main/doc/examples/kannel.conf
mv kannel.conf kamex.conf
# Edit kamex.conf with your SMSC settings

docker compose up -d

Lightweight image based on Alpine Linux (~20MB):

mkdir kamex && cd kamex

# Create docker-compose.yml
cat > docker-compose.yml <<'EOF'
services:
  bearerbox:
    image: ghcr.io/vaska94/kamex:alpine
    container_name: kamex-bearerbox
    command: ["/usr/sbin/bearerbox", "/etc/kamex/kamex.conf"]
    volumes:
      - ./kamex.conf:/etc/kamex/kamex.conf:ro
      - kamex-spool:/var/spool/kamex
      - kamex-logs:/var/log/kamex
    ports:
      - "13000:13000"
    networks:
      - kamex
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://localhost:13000/health"]
      interval: 10s
      timeout: 5s
      start_period: 10s
    restart: unless-stopped

  smsbox:
    image: ghcr.io/vaska94/kamex:alpine
    container_name: kamex-smsbox
    command: ["/usr/sbin/smsbox", "/etc/kamex/kamex.conf"]
    volumes:
      - ./kamex.conf:/etc/kamex/kamex.conf:ro
      - kamex-logs:/var/log/kamex
    ports:
      - "13013:13013"
    networks:
      - kamex
    depends_on:
      bearerbox:
        condition: service_healthy
    restart: unless-stopped

  valkey:
    image: valkey/valkey:9-alpine
    container_name: kamex-valkey
    volumes:
      - valkey-data:/data
    networks:
      - kamex
    restart: unless-stopped

volumes:
  kamex-spool:
  kamex-logs:
  valkey-data:

networks:
  kamex:
    driver: bridge
EOF

# Download example config
curl -LO https://raw.githubusercontent.com/vaska94/Kamex/main/doc/examples/kannel.conf
mv kannel.conf kamex.conf
# Edit kamex.conf with your SMSC settings

docker compose up -d

Admin panel: http://localhost:13000/ | HTTP API: http://localhost:13013/

For Rocky Linux 10, RHEL 10, AlmaLinux 10:

# Download RPMs from releases
curl -LO https://github.com/vaska94/Kamex/releases/latest/download/kamex-1.8.3-1.el10.x86_64.rpm
curl -LO https://github.com/vaska94/Kamex/releases/latest/download/kamex-sqlbox-1.8.3-1.el10.x86_64.rpm
curl -LO https://github.com/vaska94/Kamex/releases/latest/download/kamex-opensmppbox-1.8.3-1.el10.x86_64.rpm

# Install core (required)
sudo dnf install -y ./kamex-1.8.3-*.rpm

# Install optional modules
sudo dnf install -y ./kamex-sqlbox-*.rpm      # Database queue storage
sudo dnf install -y ./kamex-opensmppbox-*.rpm # SMPP proxy/load balancer

# Configure
sudo cp /usr/share/doc/kamex/examples/kannel.conf /etc/kamex/kamex.conf
# Edit /etc/kamex/kamex.conf with your SMSC settings

# Start services
sudo systemctl enable --now kamex-bearerbox kamex-smsbox

Admin panel: http://localhost:13000/ | HTTP API: http://localhost:13013/

Build from source for custom configurations:

# Install dependencies (RHEL/Rocky)
sudo dnf install epel-release && sudo crb enable
sudo dnf install gcc make autoconf automake libtool \
    openssl-devel mariadb-devel libpq-devel hiredis-devel

# Clone and build
git clone https://github.com/vaska94/Kamex.git
cd Kamex
autoreconf -fi
./configure --enable-ssl --with-mysql --with-pgsql --with-redis
make -j$(nproc)
sudo make install-strip

# Configure and run
sudo mkdir -p /etc/kamex
sudo cp doc/examples/kannel.conf /etc/kamex/kamex.conf
# Edit config with your SMSC settings

bearerbox /etc/kamex/kamex.conf &
smsbox /etc/kamex/kamex.conf &

Admin panel: http://localhost:13000/ | HTTP API: http://localhost:13013/

Send SMS

# JSON API
curl -X POST http://localhost:13013/cgi-bin/sendsms \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your-api-token" \
  -d '{"from":"Kamex","to":"+1234567890","text":"Hello"}'

# Query string (legacy)
curl "http://localhost:13013/cgi-bin/sendsms?user=test&pass=test&from=Kamex&to=+1234567890&text=Hello"

Production Use

Kamex powers SENDER.GE - tested on millions of SMS messages in production.

About

Kamex is a fork of Kannel, the open-source SMS gateway. The codebase has been cleaned up and optimized for modern systems.

Removed Legacy Code