Overview

This page is a reference for server-side operation of RemoteRF. It covers the primary commands used upon starting the RemoteRF server via serverrf -s.

As usual, be sure to activate the remoterf-server environment using conda before starting the server. This can be done by opening a new terminal and then typing in:

Run:
conda activate remoterf-server
serverrf -s

Server Management Scope

The server management surface is split across two command contexts:

  • the static shell, where serverrf and hostrf configure certificates, ports, host identity, host tokens, gist settings, and startup
  • the runtime shell, where the running server manages users, groups, enrollment codes, reservations, devices, hosts, and live state

Version Note: This page tracks the command surface used by the current RemoteRF deployment docs. If your installed package prints different help text, treat serverrf --help and help inside the running server shell as the source of truth for that installation.

Static Shell

Static shell commands are typed into the normal operating-system terminal, before you enter the running server@remoterf: prompt. Use them to check CLI help, write local configuration, create host tokens, configure optional metadata, or start the long-running server and host processes. Run each command from the Conda environment or virtual environment where the corresponding package is installed.

This section is a compact reference. For first-time setup order and worked examples, use the Server Deployment and Host Deployment pages first, then return here for command lookup.

Server

Server-Side Commands

serverrf
Help / Start
serverrf --help serverrf --serve serverrf -s
Config
serverrf --config --main-port <port> --cert-port <port> serverrf --config --show
Certificates
serverrf --gen-certs <static_ip> --days <days> --force serverrf --gen-certs <static_ip> --dns <name> --days <days> --force serverrf --show-certs
Hosts / Gist
serverrf --host --token-create "host" --length 8 --force serverrf --host --show serverrf --gist --set --id <gist_id> --file <filename> serverrf --gist --show
1
Verify the CLI

Run serverrf --help to confirm the command is available in the active Python environment.

2
Set Ports

Use serverrf --config --main-port ... --cert-port ..., then verify with serverrf --config --show.

3
Generate Certificates

Use serverrf --gen-certs with the server's stable IP or DNS name, then inspect them with serverrf --show-certs.

4
Create Host Tokens

Use serverrf --host --token-create to create the token a remote host will later apply with hostrf.

5
Set Gist Metadata

Use serverrf --gist --set and serverrf --gist --show only when the deployment uses the optional gist-backed metadata path.

Start Server Runtime

Start the long-running server process from the server shell when configuration is ready.

serverrf --serve serverrf -s

After changing certificates, ports, host tokens, or gist settings, stop the active serverrf --serve process and start it again so the runtime reloads the updated state.

Host

Host-Side Commands

hostrf
Help / Start
hostrf --help hostrf --serve hostrf -s
Server Address
hostrf --config --addr <server_addr:port> hostrf -c -a <server_addr:port>
Host Token
hostrf --config --host <host_name> "TOKEN" hostrf -c -h <host_name> "TOKEN"
1
Verify the Host CLI

Run hostrf --help to confirm the host package is installed in the active Python environment.

2
Point at the Server

Use hostrf --config --addr with the server address and main port that clients and hosts should reach.

3
Apply the Host Token

Run the hostrf --config --host ... command returned by serverrf --host --token-create.

4
Start the Host

Use hostrf --serve after the server address and host token are configured.

Start Host Runtime

Start the long-running host process after the server address and host token are configured.

hostrf --serve hostrf -s

After changing the host server address or host token, stop the active hostrf --serve process and start it again so the host reloads the updated state.

Runtime Shell

Runtime commands are typed after the RemoteRF server is already running. Once serverrf --serve opens the server@remoterf: prompt, use help to print the runtime command list for the installed package. These are useful first checks at the prompt.

Runtime Prompt
help status devices list groups list

Complete Command Reference

Use this as the condensed runtime command index. Destructive reset commands are denoted in yellow; use these with caution.

Server
help clear status quit
Users
users list users manage users purge users perms
Devices
devices list devices status
Reservations
reservations list reservations purge
User Groups
groups list groups create groups edit groups delete groups csv
Enrollment Codes
codes list codes create codes delete codes csv
Hosts / DB
hosts status hosts wipe db purge

Server State

Use the server-state commands first when you are diagnosing a live deployment. They do not change stored data, and they give you the fastest picture of what the runtime can currently see.

Runtime Areas

Start with read-only state before editing records.

Server Shell
1
Server

Use status, help, and clear for general runtime inspection and shell housekeeping.

2
Users

Use users list, users manage, users purge, and users perms for registered accounts and legacy permission tiers.

3
Groups and Codes

Use groups create, groups edit, codes create, and their list/export commands for cohort onboarding.

4
Devices and Hosts

Use devices list, devices status, and hosts status to inspect local and host-provided devices.

5
Reservations and Cleanup

Use reservations list for normal inspection. Treat reservations purge, hosts wipe, and db purge as intentional reset commands.

Safe Checks
help status devices list devices status hosts status reservations list users list groups list codes list

Users and Permissions

Use user commands when you need to inspect who has registered, change an individual user’s access, delete an account, or manage that user’s reservations directly.

Users
users list users manage users purge users perms
  • users list prints registered accounts, including username, current permission tier, email, and creation time.
  • users manage opens an interactive flow for one username. From there, you can set legacy permission details, delete the user, or add, view, and cancel that user’s reservations.
  • users perms prints the underlying permission tables for Users, PowerUsers, and Admins.
  • users purge deletes all account records after confirmation.

Account note: Registration emails are recorded but are not currently used for password recovery in the documented user onboarding flow. If a user loses access, the practical recovery path may be to delete or ignore the old account and issue a fresh enrollment code.

Permission note: Group membership is the preferred mechanism for normal class and lab onboarding. Direct per-user management is best saved for exceptions, debugging, manual reservations, or account cleanup.

User Groups and Enrollment Codes

User Groups

User groups are mechanisms used by RemoteRF to scope access without manually configuring each student account one-by-one.

  • User Groups: A user group defines the permissions and privileges of its members. It determines which SDRs are accessible to members of the group, the number of reservations each member may hold, and the duration of each reservation.
  • Enrollment Codes: An enrollment code is a token that allows a student to self-enroll into a user group without you manually editing their account on the RemoteRF server.
User Groups
groups list groups create groups edit groups delete groups csv

The usual group setup flow is:

  1. Run devices list and record the device IDs users should be allowed to use.
  2. Run groups create.
  3. Enter a clear group name, such as ee101-2026-spring.
  4. Enter an explicit device whitelist, such as 0,1,2.
  5. Set max_reservation_time_sec for the longest allowed single reservation.
  6. Set max_reservations for the maximum concurrent reservations per user.
  7. Set lifetime_sec to 0 for no automatic expiration, or to a positive lifetime for temporary cohorts.
  8. Run groups list and record the generated group_id.
Example terminal session:
server@remoterf: groups create
Enter group name (c to cancel): ee101-2026-spring
Devices whitelist (e.g. 0,1,2) (c to cancel): 0,1,2
Max reservation time (sec) [1800] (c to cancel): 3600
Max concurrent reservations [3] (c to cancel): 1
Group lifetime (sec) [0=forever] (c to cancel): 0

Use groups edit when a cohort needs a different whitelist or reservation policy after users have already registered. Use groups csv to export the group table to the machine’s Downloads folder for record keeping.

Note: A user can belong to more than one group. For a device that appears in multiple groups, the server uses the highest applicable reservation duration and concurrent reservation limit for that user.


Enrollment Codes

Enrollment Codes
codes list codes create codes delete codes csv

The usual code-generation flow is:

  1. Confirm the target group with groups list.
  2. Run codes create.
  3. Enter how many codes to generate.
  4. Enter the target group_id.
  5. Choose the character count per code name, or accept the default.
  6. Confirm the generated code names.
  7. Set uses per code.
  8. Set duration_sec, using 0 only when the code should never expire.
  9. Export a copy with codes csv if you need a distribution or audit record.
Example terminal session:
server@remoterf: codes create
How many enrollment codes? (c to cancel): 25
Group ID to attach codes to? (c to cancel): 1
Characters per code name? [10] (c to cancel): 10
Uses per code? [1] (c to cancel): 1
Duration in seconds? [3600] (0=never expires) (c to cancel): 604800

Use codes delete to delete one code by name or all codes attached to a group ID. Use codes csv to export all current enrollment codes to the machine’s Downloads folder.

Note: Enrollment codes are credentials that allow a user to make an account on the RemoteRF server. Share them only with the intended cohort, and avoid posting a reusable code in a public course page unless that is deliberate.

For field-by-field class guidance, see Class Setup and Generating Enrollment Codes.

Devices, Hosts, and Reservations

Device, host, and reservation commands help you verify what clients will be able to reserve before users arrive.

Devices / Hosts
devices list devices status hosts status hosts wipe
  • devices list prints the device inventory visible to the server runtime.
  • devices status prints tunnel-aware device state, which is especially useful when hosts contribute devices.
  • hosts status prints the host tunnel status and host-provided device state.
  • hosts wipe clears persisted host-directory state and in-memory host tunnel state after confirmation.

Host-state note: The command hosts wipe is for runtime tunnel state, not normal client onboarding. If hosts are still connected, they may repopulate live host state after the wipe.

Reservations
reservations list reservations purge
  • reservations list prints reservation IDs, usernames, device IDs, start times, and end times.
  • reservations purge deletes all reservation records after confirmation.
  • users manage can also add, view, and cancel reservations for one user at a time.

Reservation note: Use reservations list before changing account, group, device, or host state. It is much easier to explain a cleanup action when you have captured the current reservation IDs first.

Destructive Commands

The runtime shell includes several reset commands. Use them deliberately, avoid running them during active labs, and prefer the narrowest command that matches the cleanup target.

Reset Commands
users purge reservations purge hosts wipe db purge
users purge
Deletes all account records.

Pre-checkRun users list and export group/code data if you need a roster trail.

reservations purge
Deletes all reservation records.

Pre-checkRun reservations list and confirm no one is actively using devices.

hosts wipe
Clears host-directory and live host tunnel state.

Pre-checkRun hosts status and confirm host reconnection behavior is understood.

db purge
Deletes database-backed account and reservation state, then exits the server process.

Pre-checkRun status, users list, and reservations list; treat this as a full reset.

Reset note: Use reservations purge when the target is reservation history only. Use db purge only for an intentional full reset of database-backed server state.

Operating Pattern

For a normal class or lab rollout, use this sequence.

Before Users Arrive

Run the management path once from the server shell.

This keeps onboarding predictable when the first client machines connect.

Recommended
1
Confirm Runtime

Start serverrf --serve, then run status.

2
Confirm Devices

Run devices list and devices status. Use hosts status if the deployment has host machines.

3
Create Group

Run groups create with the intended whitelist and limits.

4
Create Codes

Run codes create against the group's group_id.

5
Export Records

Run groups csv and codes csv if you need external tracking.

6
Test One Account

Register with one code from a real client workflow, then confirm with users list and reservations list.

After this path works, send users to the Onboarding Users checklist or the end-user Client Documentation, along with the correct server address, network requirement, enrollment code, and Python import pattern.

Next Steps

If the server starts cleanly, devices are visible, groups and codes are ready, and a test client can reserve a device, this can be the end of the server-management path. Navigate to one of the pages below only for the cases where the deployment needs deeper configuration work or diagnosis.