# License

###### Activate, deactivate, and inspect your LocalCan license from the terminal. LocalCan also runs unlicensed (`.local` only).

#### Unlicensed vs activated

LocalCan starts without a key. Unlicensed, it serves `.local` domains over the HTTP/HTTPS proxy with full traffic inspection. Activating a license unlocks Public URLs and `localcan tcp`.

To try out all features, sign up for a 14-day trial on the [LocalCan dashboard](https://www.localcan.com/dashboard). No credit card required.

#### First-run consent

The first time you run LocalCan, it asks you to accept the [Terms of Service](https://www.localcan.com/terms). Review the [Terms](https://www.localcan.com/terms) and [Privacy Policy](https://www.localcan.com/privacy), then answer `y`. Acceptance is recorded and you are not asked again until the Terms change.

Without a license the app never asks about usage data, it stays off until you opt in.

On a headless host or in a script (no terminal on stdin) the command exits with an error instead of prompting. Accept the Terms ahead of time:

```sh
localcan accept-terms
```

You can also pass `--accept-terms` to any engine command to accept non-interactively:

```sh
localcan start --accept-terms
```

#### Activate

```sh
localcan license activate localcan_xxxxxxxxxxxxx
```

The first activation runs an interactive flow: you'll be asked to accept the Terms of Service and to opt in or out of anonymous usage data. To skip both prompts, for CI, headless servers, or scripts, pass the answers as flags:

```sh
localcan license activate localcan_xxxxxxxxxxxxx \
  --accept-terms \
  --no-usage-data
```

If the key is already activated on a different machine and you want to move it, add `--reassign`:

```sh
localcan license activate localcan_xxxxxxxxxxxxx --accept-terms --reassign
```

When `--json` is set, all prompts are suppressed and `--accept-terms` becomes mandatory.

#### Deactivate

```sh
localcan license deactivate
```

Frees the seat so you can activate the key on another machine. The daemon keeps running and drops to unlicensed, so `.local` and the HTTP/HTTPS proxy keep serving. Only Public URLs and TCP tunnels pause until a new key is activated. Run `localcan stop` if you want the daemon down too.

#### Usage data

Telemetry is opt-in and off by default. Turn anonymous usage data on or off at any time, with or without a license:

```sh
localcan license set-usage-data yes
localcan license set-usage-data no
```

#### Status

```sh
localcan license status
```

Reports the current mode (`unlicensed` or `licensed`), the masked key, device ID and name, platform, CLI and desktop versions, and your update window:

```plaintext
Mode                   licensed
License key            localcan_xxxxxxxxxxxx****
Device ID              c5b1...
Device name            my-laptop
Platform               darwin/arm64
CLI version            1.0.0
Terms accepted         2026-05-20
Desktop version        3.0.0
Updates allowed until  Jan 1, 2027
Updates expired        no
```

If `Updates expired` is `yes`, the line below tells you how many CLI releases you're behind and points to the dashboard to renew. Your existing license keeps working, only access to *newer* releases is gated.

Pass `--json` to consume the same data as a structured object.

