CLI Reference

One binary, and it talks back.

The same executable is every process in the gateway and every tool for running it — provisioning, settings, migrations and restore. There is no second package to install to administer it.

Usage

yakugate --help
$ yakugate --help
usage: yakugate [--config FILE] <role>   |   yakugate --version
       yakugate [--config FILE] console          the setup menu
       yakugate [--config FILE] migrate [--seed]
       yakugate [--config FILE] config [list [--all] | get NAME |
                set NAME=VALUE... [--new] | unset NAME... | path]
       yakugate backup-verify <run-dir>
       yakugate [--config FILE] backup-restore <run-dir> --db config|cold|hot
                [--table NAME]... [--into-nonempty] [--dry-run]

Roles

Run the shape you need. Each role is the same binary with a different first argument, so they scale independently — several edges, one billing process, or everything on one box.

http-serverClient HTTP edge — accepts submits, runs the 19-stage pipeline
smpp-serverClient SMPP edge — binds, windowing, concat assembly
http-vendorSends to HTTP carriers; config-driven adapter, no code per vendor
smpp-vendorSends to SMPP carriers
dlrDelivery receipts — correlate, render, push to the client
moInbound (mobile-originated) messages
billingRates and charges accepted traffic against the rate cards
retryRe-attempts what failed, with increasing gaps
expiryGives up on what outlived its validity period
retentionMoves aged records out of the hot store
backupDumps the stores with a verifiable manifest
abuse-monitorSliding-window scoring; warn, throttle, suspend
blackholeVendor simulator — accepts and discards, for load tests
run a role
$ yakugate http-server
$ yakugate --config /etc/yakugate/yakugate.config smpp-vendor

Commands

yakugate console

Provision the whole gateway from a menu

Companies, accounts, vendors, HTTP calls, routing rules, dialects, rate cards, credentials, spam rules, blocked numbers and operators — asked for field by field, never as JSON. It writes the same rows the Admin API writes, so a gateway can be set up and run with no portal at all.

console
$ yakugate console

  1  Companies        6  Routing rules
  2  Accounts         7  Rate cards
  3  Vendors          8  Spam rules
  4  HTTP calls       9  Blocked numbers
  5  Dialects        10  Operators

  ↑↓ move · enter choose · esc back
yakugate config

Edit settings without a text editor

Reads and rewrites yakugate.config in place. Only the named lines change, a commented line is uncommented where it stands, the previous file is kept as .bak, and every write is re-parsed through the loader before it replaces anything. A name the binary does not know is refused unless you pass --new. Secrets and DSN passwords are masked unless you ask for them.

config
$ yakugate config set YAKU_API_ADDR=:8080
✓ YAKU_API_ADDR set

$ yakugate config get YAKU_CONFIG_DSN
YAKU_CONFIG_DSN=root:****@tcp(127.0.0.1:3306)/yakugate_config

$ yakugate config list --all --show-secrets
$ yakugate config path
yakugate migrate

Build the stores

The gateway creates every database it needs and applies its own migrations — you can run it without the Admin API at all. --seed adds the development accounts. It runs on every start unless you turn that off, so this is for doing it deliberately, ahead of time.

migrate
$ yakugate migrate
✓ config store: applied 8 migration(s)
✓ queue store: applied 2 migration(s)
✓ hot store: applied 5 migration(s)
  stores are up to date

$ yakugate migrate --seed
yakugate backup-restore

Put a backup back, carefully

The manifest is verified before anything is written, then every table is pre-checked. A table that already has rows is refused unless you say --into-nonempty. It never drops and never truncates, creates missing tables from the run itself, and does one transaction per table. --dry-run tells you what it would do and stops.

backup-restore
$ yakugate backup-verify /backups/2026-09-28T02:00Z
✓ manifest OK — 41 files, 2,318,004 rows

$ yakugate backup-restore /backups/2026-09-28T02:00Z \
    --db config --table companies --dry-run

Where settings come from

Pass --config FILE, or let the binary find one. It takes the first yakugate.config it meets, walking up from the working directory, then the binary's own folder, then the usual system locations. A file still named sms.config (the name until 2 October 2026) is read in each of those places too, and the log asks you to rename it.

  1. --config FILE, if you passed it
  2. ./yakugate.config, then each parent directory
  3. the folder the binary itself sits in
  4. ~/.config/yakugate/yakugate.config
  5. /etc/yakugate/yakugate.config

Environment variables override any line in the file. That is what makes one image work across environments: bake the file, override the DSN per deployment. A line the parser cannot read stops the start rather than being skipped quietly.

See it on your own traffic.

A fully functional gateway with its portal, free for 60 days.