Cambium

Documentation

Cambium Client

Using the CLI and Commands

The CLI is the same engine as the app. One parser, one executor, one config directory are shared so the two never differ, and on a given machine they are one client wearing two faces. The app's Console panel runs these same verbs; there you drop the cambium prefix and just type the verb.

Naming files

Anything that takes a path accepts two forms:

  • Filesystem path, resolved against your working directory. A leading ./, ../ or an absolute path forces this reading — ./Assets/player.fbx.
  • Repository path, project-rooted, written with a leading ////Assets/player.fbx addresses that file in the active project no matter where you are on disk.

A bare Assets/player.fbx is treated as a filesystem path. A path can be a file or a folder; a folder means everything under it, the same as selecting that folder in the tree.

Session and connection

CommandEffect
login [--server HOST:PORT] [--user @handle] [--remember]Authenticates. The password is prompted, or read from CAMBIUM_PASSWORD. The first connection to a server triggers the fingerprint prompt. --remember stores a device-bound token, valid 90 days, in the shared config directory — the app's "Remember me" writes the same store.
logoutDrops this device's session and revokes its remember-token.
trust --fingerprint <fp>Pins a server's fingerprint without the prompt, for when an admin hands it to you.
whoamiPrints the server, your handle, the device, and the active project and workspace.

Projects and workspaces

CommandEffect
projectsLists the projects you are a member of.
link <project> <folder>Maps a project to a local workspace folder.
use <project>Sets the active project. Stored per machine, not per shell.

Looking around

CommandDefault targetEffect
status [<path>...]Whole workspaceYour pending changelist plus every file's status. The workhorse.
locks [<path>...]Whole projectWho holds which locks, and on which device.

Building a changelist

CommandDefault targetEffect
checkout <path>...Every modified-without-checkout fileLocks files for editing. Scoped to you on this device. All-or-nothing: ask for twelve paths where one is taken and you get none of them, plus the conflicts.
add [<path>...]Every "not added" fileMarks local-only files to be created on the next submit.
delete <path>...None — requiredMarks files or folders for delete and removes the local copy. Refuses if you give it no target.
revert [<path>...] [-f]Whole changelistUndo a pending change: discards edits, un-marks adds and deletes, releases checkouts. Needs -f when it would throw away real work.

Submitting and syncing

CommandDefault targetEffect
submit [<path>...] -m "message"Whole changelistSubmits as a new revision. With a path, only the changes under it.
pull [<path>...] [-f]Whole workspaceDownloads the latest. Needs -f before overwriting local changes.
rollback <path> <revision> [-f]Sets the server's head for a file back to the content from that revision, recorded as a new revision.
cambium checkout ./Assets/player.fbx
# …work…
cambium submit ./Assets/player.fbx -m "adding blocking animations"

Administration

These are thin wrappers over the server's admin endpoints. Handles are @handles; the parser tidies up stray @s.

CommandEffect
unlock -f <path>...Force-releases someone else's lock and alerts them. -f is mandatory.
adduser @handle <password>Creates a user, or reinstates a disabled handle.
deluser @handleDisables a user and drops their sessions. Not the owner, not yourself.
password @handle <password>Resets a password. Your own handle needs the current one; any other is an admin reset.
setrole @handle <member|admin>Changes a role. The owner's role is fixed and you cannot change your own.
assignmember @handle <project>Adds a user to a project roster.
removemember @handle <project>Removes them again.

Scripting

  • --json works on every verb, with documented exit codes.
  • Non-interactive auth reads CAMBIUM_SERVER, CAMBIUM_USER and CAMBIUM_PASSWORD.
  • A non-interactive run never prompts and hangs — where the console would ask you to confirm, the CLI wants -f instead.
  • -p, --project <name> overrides the active project for one command.