Reis CLI

Your infrastructure, from the command line

Reis (pronounced "ra-ees", Turkish / Arabic for "captain") is the Bahriya CLI. Create projects, deploy containers, manage secrets, and automate your entire infrastructure workflow from a single binary — no browser required.

One binary, zero dependencies

Reis ships as a single self-contained binary for macOS and Linux, or as a multi-arch Docker image for CI/CD and container-first workflows. No PHP runtime, no interpreters, no package managers — download it, make it executable, and you are ready to go. Install via Homebrew, the shell installer, the Docker image, or download directly from the releases page.

Three ways to work

Use Reis interactively with guided prompts that walk you through every option. Pass flags explicitly for scripted workflows. Or define your entire infrastructure in YAML files and apply them declaratively with reis apply -f. All three modes hit the same API and produce the same result.

Built for CI/CD pipelines

Set the REIS_TOKENenvironment variable and Reis authenticates automatically — no interactive login required. Use exit code 2 for auth failures so your pipeline can distinguish between credential problems and application errors. Output as JSON or YAML for machine-readable results.

Full API coverage

Every resource you manage in the console — organisations, projects, containers, memcached instances, registries, and secrets — is available as a Reis command. Create, list, show, update, and delete resources with the same semantics as the web console and API.

Commands

Everything you need, nothing you don’t

Reis commands follow a consistent resource:action pattern. Every command supports table, JSON, and YAML output formats.

Authentication

auth:login & auth:status

Authenticate with a personal access token. Reis stores your credentials locally in ~/.reis/config.yml and validates them against the API. Check your auth status any time with reis auth:status.

Organisations

org:list & org:switch

List all organisations you belong to and switch your active organisation context. All subsequent commands operate against your selected organisation until you switch again.

Projects

project:list, create, logs

Create projects with interactive region selection or explicit flags. Tail logs across every container in a project with reis project:logs -f— deploy on Bahriya, debug locally.

Containers

container:create, update, logs

Full container lifecycle management. The interactive create flow walks you through image, port, resources, regions, environment variables, secrets, and autoscaling configuration. Tail container logs in real time with reis container:logs -f.

Secrets & Registries

secret:create, registry:create

Store encrypted secrets and private registry credentials from the command line. Secret values and registry passwords are prompted securely with hidden input — they never appear in your shell history.

Infrastructure as Code

apply & export

Define resources in YAML and apply them with reis apply -f. Export existing resources to YAML with reis export. Supports multi-document files with create-or-update semantics.

Getting started

Install in seconds, deploy in minutes

Three installation methods, all producing the same single binary.

Homebrew

$ brew tap bahriya/tap https://1x.ax/bahriya/library/homebrew-tap.git

$ brew install reis

Tap the Bahriya formula and install with two commands. Updates via brew upgrade.

Shell installer

$ curl -sSL https://get.bahriya.cloud/reis | bash

Detects your OS and architecture, downloads the right binary, and installs to /usr/local/bin.

Docker

$ docker pull 1x.ax/bahriya/library/reis:latest

$ docker run --rm -e REIS_TOKEN \

1x.ax/bahriya/library/reis:latest auth:status

Public multi-arch image (linux/amd64 and linux/arm64) with reis as the entrypoint. Pin a release with 1x.ax/bahriya/library/reis:<version>. Ideal for CI/CD — git and ca-certificates are pre-installed.

Direct download

Select your platform, then copy the commands below to download, make executable, and install.

$ curl -Lo reis https://get.bahriya.cloud/reis/releases/latest/reis-darwin-arm64

$ chmod +x reis

$ sudo mv reis /usr/local/bin/reis

Uninstalling

Shell uninstaller

$ curl -sSL https://get.bahriya.cloud/reis/uninstall | bash

Removes the binary and ~/.reis config directory. Use --keep-config to preserve your credentials.

Homebrew

$ brew uninstall reis

Removes the Reis binary. Optionally remove ~/.reis manually to clean up credentials.

Infrastructure as code

Declarative YAML for repeatable deployments

Define your infrastructure once, apply it anywhere. Reis reads flat YAML files with a kind header and friendly field aliases.

Define

infrastructure.yml

kind: container

project: my-project

name: Web API

handle: web-api

image: ghcr.io/myorg/api:v2.1.0

port: "8080"

cpu: "500"

memory: "512"

healthcheck: /healthz

replicas: "2"

max_replicas: "8"

regions:

- falkenstein-1

- virginia-1

env:

NODE_ENV: production

LOG_LEVEL: info

Apply

terminal

$ reis apply -f infrastructure.yml

Applying container web-api...

Container "Web API" updated successfully.

$ reis apply -f infrastructure.yml --dry-run

Dry run — no changes will be made.

Would apply container: web-api

project: my-project

$ reis export container web-api \

--project my-project > backup.yml

Multi-document YAML files let you define secrets, registries, and containers in a single file separated by ---. Reis applies them in order with create-or-update semantics.

Observability

Deploy on Bahriya, debug locally

Tail container logs in real time without leaving your terminal. Follow a single container or stream every container in a project.

Container logs

terminal

$ reis container:logs web-api -f

Fetching logs for container web-api...

2026-04-26T10:32:01Z INFO [web-api] Server started on :8080

2026-04-26T10:32:05Z INFO [web-api] GET /healthz 200 1ms

2026-04-26T10:32:12Z INFO [web-api] POST /api/orders 201 42ms

2026-04-26T10:32:18Z WARN [web-api] Slow query: 320ms

2026-04-26T10:32:25Z INFO [web-api] GET /api/orders 200 8ms

Use -fto follow — Reis polls every 5 seconds and deduplicates entries so you only see new lines. Adjust the time window with --range and cap results with --limit.

Project-wide logs

terminal

$ reis project:logs my-project -f

Tailing logs for project my-project (3 containers)...

2026-04-26T10:32:01Z INFO [web-api] Server started on :8080

2026-04-26T10:32:02Z INFO [worker] Connected to queue

2026-04-26T10:32:05Z INFO [web-api] POST /api/jobs 201 15ms

2026-04-26T10:32:06Z INFO [worker] Processing job abc-123

2026-04-26T10:32:09Z ERROR [worker] Job abc-123 failed: timeout

2026-04-26T10:32:10Z INFO [scheduler] Retry queued for abc-123

Stream logs from every container in a project, interleaved chronologically. Each line is tagged with the container handle so you can trace requests across services. New containers deployed while tailing are picked up automatically.

Why teams choose Reis

Interactive when you want it

Omit flags and Reis walks you through every option with guided prompts, fetching available choices from the API.

Scriptable when you need it

Pass flags explicitly and pipe JSON output to jq, yq, or your own tooling for fully automated workflows.

Declarative when it matters

Define infrastructure in YAML, commit it to version control, and apply it from CI/CD for repeatable deployments.

Secure by default

Secrets and passwords use hidden input. Tokens are stored locally. REIS_TOKEN env var keeps credentials out of shell history in CI.

Documentation

Full Reis CLI documentation

For detailed command references, usage examples, YAML spec schemas, and troubleshooting guides, head to the Reis CLI documentation on the Bahriya Hub.

Read the docs on the Hub →

Take Bahriya to the terminal

Install Reis in seconds and start managing your infrastructure from the command line.