# nomctl

nomctl is Nominal’s command-line tool. Use it to manage assets, datasets, runs, and other resources, upload files, and send requests to the REST and gRPC APIs.

## Install

**Windows**

In PowerShell:

```powershell
irm https://raw.githubusercontent.com/nominal-io/nominal-client-rs/main/scripts/install.ps1 | iex
```

The installer also adds nomctl to your `PATH`.

**Linux**

```bash
curl -fsSL https://raw.githubusercontent.com/nominal-io/nominal-client-rs/main/scripts/install.sh | sh
```

If `nomctl` is not found afterwards, add `~/.local/bin` to your `PATH` and open a new terminal:

```bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
```

**macOS**

```zsh
curl -fsSL https://raw.githubusercontent.com/nominal-io/nominal-client-rs/main/scripts/install.sh | sh
```

If `nomctl` is not found afterwards, add `~/.local/bin` to your `PATH` and open a new terminal:

```zsh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
```

## Set up a profile

A profile is a named set of credentials: an API key, your Nominal instance’s base URL, and a workspace. nomctl keeps profiles in the same file as Nominal’s other clients (`~/.config/nominal/config.yml`, or `%USERPROFILE%\.config\nominal\config.yml` on Windows), so a profile you create here works in them too. [API keys setup](https://dev.nominal.io/quickstart/api-keys-setup.md) shows where to find each value.

To create a profile, run:

```shell
nomctl config init
```

It asks for each value in turn:

1. **Profile name:** a short name for the profile. Name your first one `default`, the name the examples in these docs use.
2. **API base URL:** press Enter to keep `https://api.gov.nominal.io/api`, or paste your organization’s URL.
3. **API token or bearer token:** paste your API key.
4. **Select a workspace:** pick one of the workspaces your key can access, or choose **Enter a workspace RID manually**.

nomctl then checks the key against your instance and saves the profile. If the instance can’t be reached, it asks whether to save the profile without checking it. Running `nomctl config init` again with an existing profile name replaces that profile.

## Choose a profile

Commands that talk to Nominal need to know which profile to use. Pass `--profile <name>` with each command, or set `NOMINAL_PROFILE` once. These commands set it to `default`; use your profile’s name if it’s different:

**Windows**

```powershell
[Environment]::SetEnvironmentVariable("NOMINAL_PROFILE", "default", "User")
```

Then open a new terminal.

**Linux**

```bash
echo 'export NOMINAL_PROFILE=default' >> ~/.bashrc
```

Then open a new terminal.

**macOS**

```zsh
echo 'export NOMINAL_PROFILE=default' >> ~/.zshrc
```

Then open a new terminal.

The [command reference](https://dev.nominal.io/nomctl/commands.md) lists every command and option.
