FPS beta identity is intentionally simple:
client_uuid per device/profile;There is no config hot reload in this increment. Apply allowlist or key changes by updating config, validating it, then restarting/redeploying the affected FPS daemon.
Use this when a device is replaced, a profile is suspected to have leaked, or an operator wants to move a user to a fresh UUID.
Generate a new UUID:
NEW_UUID="$(fps_client --generate-client-uuid)"
Add the new UUID to security.zero_rtt.allowed_client_uuids in the server
config.
Generate and deliver a new client profile or URI:
fps_server --generate-client-profile \
--config server.json \
--client-uuid "$NEW_UUID" \
--server-endpoint fps.example.net:443 \
--format uri
Remove the old UUID from allowed_client_uuids.
Revoke the old lease and prune stale leases:
fps_server --lease-revoke-client-uuid "$OLD_UUID" --config server.json
fps_server --lease-prune --config server.json
Validate and restart the server:
fps_server --check-config --config server.json
Verify with:
fps_server --lease-list --config server.json
fps_server --status --config server.json
allowed_client_uuids.Revoke its lease:
fps_server --lease-revoke-client-uuid "$LOST_UUID" --config server.json
fps_server --lease-prune --config server.json.--lease-list no longer shows the revoked lease fingerprint.The lease file stores public-key fingerprints and IP metadata, not UUID strings or private material.
Server key rotation changes server_public_key_base64, so every client profile
must be regenerated. Treat it as a planned outage.
Generate a new server key pair:
fps_server --generate-server-keypair
Replace server_private_key_base64 and server_public_key_base64 in the
server config.
Regenerate every client JSON profile or fps://v1 URI. Existing client
profiles cannot authenticate against the new server public key.
Validate and restart the server:
fps_server --check-config --config server.json
Redeploy client configs and confirm new carrier authentication through
--status.
Existing lease assignments are derived from client identity, not the server key, but a conservative rotation can still prune leases and let clients reacquire addresses if the operator wants a clean state.
The current beta candidate has been exercised with a local Docker rotation drill:
--lease-revoke-client-uuid and --lease-prune, the
stale old profile no longer authenticated;server_public_key_base64 no longer authenticated;Repeat this drill for release candidates or after changing profile, lease or
server-key tooling. When generating profile files from a root-running Docker
container into a bind mount, use host redirection, --user "$(id -u):$(id -g)"
or an explicit ownership fix so the host operator can read the 0600 output.
replace_old,
where the newer active instance supersedes older carriers for the same UUID.fps://v1 URIs as public links; they contain the client UUID
bearer secret.allowed_client_uuids changes to affect a running daemon until
it is restarted or redeployed.