CLI Overview
There is no standalone tinysystems CLI. Two real command-line surfaces exist, with different jobs:
- The module binary — every module compiles into a single binary that embeds the SDK's CLI (
github.com/tiny-systems/module/cli). This is what you use while developing and testing a module: it runs the module against a cluster and ships introspection tools. tiny— the local front door to the Tiny Systems runtime. This is what you use to install and operate the runtime and modules on your own cluster.
The Module Binary
Your cmd/main.go builds a cobra root command and calls cli.RegisterCommands(rootCmd). The resulting binary is also the container entrypoint (CMD ["/manager", "run"] in the Dockerfile).
<module-binary> [command] [flags]
Commands:
run Run the module (connects to the cluster, serves components)
tools components-info List registered components; --json emits the discovery shape
tools rbac-values Print the operator-chart rbac values overlay from SetRequirements
tools rbac-check Report Kubernetes calls not covered by declared RBAC; --strict exits non-zero
pre-install Helm hook: validate the install namespace
pre-delete Helm hook: clean up before uninstall
run flags
| Flag | Default | Description |
|---|---|---|
--name, -n | main | Module name (required; usually the container image repo) |
--version, -v | — | Module version (required; no leading v) |
--namespace | tinysystems | Namespace the module is installed in |
--kubeconfig, -k | ~/.kube/config | Kubeconfig path (falls back to in-cluster config) |
--grpc-server-bind-address, -g | :0 | gRPC bind address (the operator chart sets :8483) |
--metrics-bind-address, -m | :0 | Metrics endpoint bind address |
--health-probe-bind-address, -t | :0 | Probe endpoint bind address |
Environment variables the run command reads:
| Variable | Effect |
|---|---|
OTLP_DSN | Enables OpenTelemetry export (traces); unset = telemetry disabled |
TINY_NATS_URL | Routes cross-module messages over NATS instead of gRPC |
TINY_NATS_TRANSPORT | core (default) or jetstream (durable work-queue wire) |
The tiny CLI
Install from the tiny releases; tiny upgrade self-updates after that.
tiny [command] [flags]
Commands:
(none) Start the dev server (MCP endpoint + editor)
up Provision the runtime (CRDs + NATS broker + OTEL collector + core modules)
install Install a module from the configured repos: tiny install <module>[@version]
repo Manage module repos: list, add, remove, update, index
status Show the runtime + installed modules on the target cluster
edit Open the web canvas (served by the dev server)
upgrade Update tiny itself to the latest release
Persistent flags: --context (kubeconfig context), --namespace/-n (default tinysystems), --yes/-y (skip the target confirmation), --project/-p, plus cluster install settings (--ingress-class, --domain, --storage-class, --cluster-issuer). Every mutating command shows the target context and namespace and asks for confirmation before touching the cluster.
Quick Start
Develop a module
# Scaffold from the template (see Module Scaffold), then:
cd my-module
# Run against your cluster from source
go run ./cmd run --name my-module --version 0.0.1 \
--kubeconfig ~/.kube/config --namespace tinysystems
# Inspect what your binary registers
go run ./cmd tools components-info
Operate a cluster
tiny up # provision the runtime
tiny install http-module # install a module from the configured repos
tiny status # what's running
tiny repo add myrepo https://example.com/index.yaml
There is no init, generate, build, deploy, or watch command, and no .tinysystems.yaml config file. Scaffolding is a GitHub template repo, builds are plain docker build, and deployment is the shared operator Helm chart driven by tiny install (or helm directly).
Next Steps
- Development Commands - Module binary command reference
- Module Scaffold - Start from the template repo
- Local Testing - Run and test locally