Skip to content

FTN CLI

OxideBBS exposes FTN administration under oxidebbs-server net.

Implemented read-only, import, toss, scan, poll, and metadata commands:

bash
oxidebbs-server net toss <network>
oxidebbs-server net scan <network>
oxidebbs-server net status <network>
oxidebbs-server net links list [--network <network>]
oxidebbs-server net links show <link>
oxidebbs-server net areas list [--network <network>]
oxidebbs-server net areas subscribe <area-tag> <link> [--network <network>]
oxidebbs-server net areas unsubscribe <area-tag> <link> [--network <network>]
oxidebbs-server net queue <link>
oxidebbs-server net packets summary [--network <network>]
oxidebbs-server net packets show <packet-id>
oxidebbs-server net packets retry <packet-id>
oxidebbs-server net packets mark-quarantined <packet-id> --reason <text>
oxidebbs-server net packets inbound [--network <network>] [--limit N]
oxidebbs-server net packets outbound [--network <network>] [--limit N]
oxidebbs-server net packets quarantine [--network <network>] [--limit N]
oxidebbs-server net packets cleanup [--network <network>] [--dry-run]
oxidebbs-server net logs [link] [--limit N]
oxidebbs-server net poll <link>
oxidebbs-server net poll --all
oxidebbs-server net poll <link> --dry-run
oxidebbs-server net poll --all --dry-run
oxidebbs-server net areafix send <link> "<commands>" --password <password> [--network <network>]
oxidebbs-server net nodelist import <file> [--network <network>]
oxidebbs-server net nodelist apply-diff <file> --base <full-list-file> [--network <network>]
oxidebbs-server net nodelist list [--network <network>] [--limit N]
oxidebbs-server net nodelist lookup <address> [--network <network>]
oxidebbs-server net nodelist count [--network <network>]
oxidebbs-server net rescan list [--network <network>] [--status <status>]
oxidebbs-server net rescan process <rescan-id>
oxidebbs-server net rescan cancel <rescan-id>
oxidebbs-server net oxidenet status
oxidebbs-server net oxidenet install-hub --host <host>
oxidebbs-server net oxidenet apply --board-name <name> --sysop-alias <alias> --contact-email <email> --host <host> --description <text> --reason <text>
oxidebbs-server net oxidenet applications list
oxidebbs-server net oxidenet applications approve <application-id> --package-dir <dir>
oxidebbs-server net oxidenet nodes list
oxidebbs-server net oxidenet nodes suspend <address>
oxidebbs-server net oxidenet nodes activate <address>
oxidebbs-server net oxidenet nodes rotate-password <address>
oxidebbs-server net oxidenet tokens issue <address>
oxidebbs-server net oxidenet tokens revoke <credential-id>
oxidebbs-server net oxidenet package generate <address> --session-password <password> --output <dir>
oxidebbs-server net oxidenet package import <dir>
oxidebbs-server net oxidenet nodelist --output <file>

--json is supported through the global CLI flag for these commands.

net links list, net links show, net queue, net logs, and net poll --dry-run redact link passwords in JSON output. Poll dry-run output includes a transport-security preflight plan showing whether the link requires TLS, attempts TLS, allows plaintext, or carries an operator warning.

net toss <network> scans paths.runtime/network/<network>/inbound/drop, imports known echomail AREA messages from raw .pkt files and safe top-level .pkt entries inside ZIP or ARJ bundles, records packet/message state in DecentDB, moves successful inputs to inbound/archive, and moves malformed or unauthorized inputs to inbound/quarantine. The packet origin address and packet password must match an enabled link on the selected network profile. Local netmail is delivered to a configured local netmail area, non-local netmail is queued for forwarding, and inbound AreaFix netmail queues reply netmail plus targeted rescan requests.

net scan <network> scans subscribed local echomail areas, materializes pending outbound netmail rows, and writes outbound Type-2+ .pkt files under paths.runtime/network/<network>/outbound/<link>/ready. It records outbound packet rows as pending and network-message rows as exported. For links configured with ZIP compression, ready packet files are bundled into pending ZIP arcmail rows under outbound/<link>/bundled.

net poll <link> connects to a BinkP peer, authenticates with M_ADR and M_PWD, sends pending outbound packet files for that link, receives the peer batch into paths.runtime/network/<network>/inbound/drop, marks sent packet rows processed after M_GOT, and records network_poll_log state. net poll --all repeats that workflow for enabled links. TLS-required and TLS-opportunistic links use TLS session support, with plaintext fallback only for explicitly legacy-compatible opportunistic links. Use --dry-run to inspect their security plan.

net packets summary, net packets show, net packets retry, and net packets mark-quarantined operate on DecentDB packet state. retry resets failed or quarantined packet rows to pending, clearing processed/error metadata. mark-quarantined records a quarantine reason and processed timestamp. These state controls do not move files.

net areas subscribe and net areas unsubscribe update DecentDB subscription metadata and audit the change. net areafix send executes AreaFix command text locally for a link after password authentication, mutates network_area_subscriptions, audits the activity, queues the reply as outbound netmail, prints the reply text, and creates pending rescan rows for +AREA !. net rescan process exports historical messages from the requested area to the requested link, materializes pending outbound netmail, and bundles the target link's ready packets when that link uses ZIP compression.

net nodelist import parses a full nodelist file and atomically replaces the stored nodelist rows for the selected network profile. net nodelist apply-diff applies a plain text FTS-style NODEDIFF.xxx file to a supplied full base list, optionally validates the base CRC with --validate-crc, parses the resulting nodelist, and uses the same atomic replacement path. net nodelist list, lookup, and count expose structured nodelist fields stored in DecentDB.

net packets cleanup applies configured or supplied retention thresholds. Dry-run output lists affected packet counts and examples; deletion only removes terminal processed/failed packet rows and dependent message/path metadata. When --network is supplied, count, example, and delete operations are scoped to that network profile.

OxideNet commands build on the same shared network state. The hub-side commands install defaults, review applications, assign addresses, rotate credentials, and publish a nodelist. Member-side package import creates the oxidenet profile, the hub link, local areas, and subscriptions when they are missing.

Apache-2.0 licensed.