Install the CLI, authenticate with GitHub, create a project, and make your first submission — step by step, for your OS.
You need Node.js ≥ 18, npm ≥ 9, and git before installing the CLI. Follow the steps for your OS.
①Install Node.js ≥ 18 + npm
# Recommended — nvm (no sudo, no permission issues)curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashsource ~/.zshrc # zsh default on macOS 10.15+ — use ~/.bashrc for bashnvm install --ltsnvm use --ltsnvm alias default node# Alternative — Homebrew# brew install nodenvm installs Node.js entirely in your home directory — no sudo or permission fixes ever needed. If you already have a system Node.js and hit EACCES, see step 10.
②Install Git
# Xcode Command Line Tools (built-in to macOS)xcode-select --install# Or via Homebrew:# brew install git③Verify all three tools
node --version # must be v18.x or highernpm --version # must be 9.x or highergit --versionAll three commands must return version numbers. If any fails, revisit the install step above and open a new terminal after installing.
node --version returns v18 or highernpm --version returns 9 or highergit --version returns any versionInstall the current CLI release directly from GitHub. This pins the install to v1.0.2 and makes the nibras command available everywhere in your terminal.
The npm package is not yet published. npm install -g @nibras/cli and npx @nibras/cli will fail with a 404 until then. Install from the Git tag instead.
npm install -g git+https://github.com/NibrasPlatform/nibras-cli.git#v1.0.2Verify: nibras --version should start with v1.0.2, for example v1.0.2-499d7f9.
To reinstall later: nibras update --version v1.0.2. To remove the CLI: nibras uninstall.
Use nibras update --check to compare your installed version against the latest GitHub release before updating.
If the install fails with EEXIST or ENOTDIR, you have a stale global link. Remove it and reinstall:
npm uninstall -g nibras @nibras/cli || truerm -f "$(npm config get prefix)/bin/nibras"rm -rf "$(npm root -g)/nibras" "$(npm root -g)/@nibras/cli"npm install -g git+https://github.com/NibrasPlatform/nibras-cli.git#v1.0.2Use an explicit --api-base-url for hosted onboarding so the CLI targets this deployment instead of the local dev default at http://127.0.0.1:4848. The login flow prints a one-time URL and short code, then tries to open the browser automatically unless you pass --no-open.
Checking which API this deployment uses before rendering the hosted login command…
Credentials are saved in ~/Library/Application Support/nibras/config.json. Run nibras whoami after login to confirm the active session and linked GitHub account.
Before students can use the CLI, create a course and at least one project from the web dashboard.
cs101), title, and termcs101/assignment-1)Run nibras setup with the project key to bootstrap the local directory. It writes .nibras/project.json and .nibras/task.md, initialises git if needed, and adds origin for the student repo.
nibras setup --project cs101/assignment-1For bundle-backed projects, setup may download starter files and create the initial commit. If the target directory already has .git, setup refreshes the .nibras metadata instead of re-extracting starter files.
Specify a target directory: nibras setup --project cs101/a1 --dir ~/projects/a1
Use nibras test to run the manifest-configured test command for your OS. Pass --previous only when the project manifest supports it.
nibras testnibras test --previous # include previous milestone testsA non-zero exit means the configured test command failed. Projects that do not opt in to previous-milestone runs will reject --previous.
nibras submit runs the configured local test command, stages only allowed files, creates a commit, pushes to origin, registers the submission, and polls for server-side verification.
nibras submitOnly files matching submission.allowedPaths in your manifest are included — students can't accidentally submit test or grading files.
A failing local test run does not abort submission. The CLI records the local result and server-side verification continues regardless.
Two diagnostic commands are available at any time:
nibras ping # check API, auth, GitHub, GitHub App, and project statusnibras whoami # show signed-in user and linked GitHub accountnibras ping is the fastest way to diagnose any problem — run it first. When run inside a project directory it also shows the project key and origin remote.
Students follow the same flow: install the CLI, run nibras login --api-base-url <api-url>, and nibras setup --project <key>. Share the project key with your class.
Waiting for a reachable hosted API before rendering the student login command…
Students can view assignment instructions at any time with nibras task.
Start with nibras ping — it checks API reachability, auth, GitHub linkage, and App install status in one command. Use the OS tab above to filter fixes for your platform.
Still stuck? Run nibras ping, copy the full output, and share it with your instructor or open an issue at github.com/nibras-platform/nibras-cli.
Use this appendix for commands outside the main onboarding path or when you need the full CLI surface at a glance.
nibras login --api-base-url <api-url>Start hosted device login against a specific Nibras deployment.
Use the explicit API URL for hosted onboarding. The CLI default remains the local dev API.
nibras setup --project <key>Bootstrap or refresh a local project.
nibras taskPrint cached task text or fetch it if missing.
nibras testRun the manifest test command.
nibras submitTest, stage allowed files, commit, push, and wait for verification.
nibras whoamiShow the signed-in user and linked GitHub account.
nibras pingShow API, auth, GitHub, GitHub App, and project status.
Inside a project, it also reports the project key and origin remote.
nibras logoutClear the local session.
nibras update --version <tag>Reinstall a pinned Git-tag release.
Use `nibras update --check` to compare the installed CLI against the latest GitHub release.
nibras update --force --version <tag>Force reinstall the same pinned tag.
nibras uninstallRemove the global CLI install and keep local config.
nibras update-buildpack --node <version>Edit the Node buildpack version in .nibras/project.json.
Advanced manifest maintenance only; standard students usually do not need this.
nibras legacy ...Run the older CLI entrypoint for compatibility.
Compatibility-only. It is not part of the hosted default workflow.