# inrok CLI quickstart

Put a public HTTPS URL on any local port in under a minute. inrok is a managed
tunneling service: the `inrok` CLI runs on your machine, and inrok's hosted edge
gives your tunnel a stable public URL like `https://demo.share.inrok.in`.

## 1. Install

macOS / Linux:

```sh
curl -fsSL https://inrok.in/install.sh | sh
```

Windows (PowerShell):

```powershell
irm https://inrok.in/install.ps1 | iex
```

The installer downloads the right binary for your platform. Verify with
`inrok version`.

## 2. Log in (once per machine)

1. Create an account at [app.inrok.in](https://app.inrok.in/register) (free —
   no card required).
2. Generate an API key at
   [app.inrok.in/settings](https://app.inrok.in/settings) → **CLI access**.
3. Run:

```sh
inrok login
```

Paste the key (`inrok_…`) when prompted. Non-interactive alternative:

```sh
inrok login --key "$INROK_API_KEY"
```

Credentials are saved to `~/.inrok/config.json` (mode 0600). One key per
machine is the recommended setup — keys are listed and revocable in the
dashboard.

## 3. Expose a port

```sh
inrok http 8080
```

Output:

```
Forwarding  https://http-8080-x7k2.share.inrok.in
         →  http://localhost:8080
TLS 1.3 · persistent name · Ctrl-C to stop
```

The command runs in the foreground and streams request logs. **Ctrl-C stops
serving but keeps the name reserved** — the next `inrok http 8080` re-binds the
same URL.

## Stable names

Pass `--name` to choose the URL label:

```sh
inrok http 3000 --name demo
# → https://demo.share.inrok.in
```

Without `--name`, a default like `http-8080-x7k2` is derived from the port plus
a per-account suffix. Names are reserved to your account until you release
them.

## What you can expose

Today `inrok` exposes local **HTTP** services — one positional argument
(the port, or `host:port`) plus an optional `--name`:

```sh
inrok http 8080          # HTTP reverse proxy to a local port
inrok http 192.168.1.5:80 # …or a host:port on your network
```

Raw **TCP** and **UDP** endpoints are coming soon. Static sites, Caddyfile,
and file-drive modes aren't supported.

## Manage tunnels

```sh
inrok status        # list tunnels: NAME, URL, TARGET, STATE (aliases: list, ls)
inrok stop demo     # release a tunnel by name (frees the URL and the slot)
inrok logout        # remove this machine's credentials and device identity
inrok update        # self-update to the latest release (--check to only look)
```

`inrok stop` deletes the reservation — the name becomes available to others.
Just pressing Ctrl-C in a running `inrok http` keeps it reserved.

## Plan limits

The free beta plan includes **100 GiB of bandwidth per month and 3 tunnels**.
Current usage is on your [dashboard](https://app.inrok.in/dashboard); tunnels
pause when the monthly cap is reached and resume when the cycle resets.

## Next steps

- [Configuration](https://inrok.in/docs/cli/configuration.md) — config file,
  environment variables, state directories.
- [Troubleshooting](https://inrok.in/docs/cli/troubleshooting.md) — every error
  message explained.
- [inrok for AI agents](https://inrok.in/docs/cli/agents.md) — a paste-ready
  block for CLAUDE.md / AGENTS.md.
- [Command reference](https://inrok.in/docs/cli/reference/inrok.md) — generated
  from the CLI itself.
