tzctl
tzctl manages Tenzir pipelines on a remote node through the Tenzir Platform.
It treats a local directory of .tql files as the source of truth, compares
that desired state with the pipelines that already exist on a node, and then
shows or applies the changes needed to bring them back in sync.
What you can do with tzctl
- Sign in to the Tenzir Platform.
- List workspaces, nodes, and pipelines.
- Create, update, start, stop, and delete individual pipelines.
- Inspect a pipeline's diagnostics and throughput with
pipeline status. - Run a
.tqlfile or inline TQL ad hoc and stream results (stdout) and diagnostics (stderr) to your terminal withrun. - Plan and apply declarative changes from a local project.
- Export machine-readable output with
--output json.
How it works
A tzctl project is a directory of .tql files plus a tenzir.toml
configuration file.
- Each
.tqlfile defines one pipeline. tzctl project applycreates, updates, deletes, or changes pipeline state to match your files.tzctl project pullfetches pipeline definitions from the platform and writes them back into your project as.tqlfiles.
Installation
uvx tzctl
uv tool install tzctl
cargo install tzctl
nix run github:tenzir/tzctl -- --help
nix profile add github:tenzir/tzctl
Quick start
-
Authenticate:
tzctl auth login
-
Select the target workspace and inspect available nodes:
tzctl workspace list tzctl workspace select <workspace> tzctl node list
-
Configure your project in
tenzir.toml:[workspace] id = "t-abcd1234" [node] id = "n-w2tjezz3" [pipelines] glob = "pipelines/**/*.tql" [defaults] state = "running"
-
Review changes before applying them:
tzctl project plan
-
Apply the project:
tzctl project apply
Common commands
tzctl auth login
tzctl auth logout
tzctl workspace list
tzctl workspace select <id|name|#>
tzctl node list
tzctl pipeline list
tzctl pipeline create path/to/pipeline.tql
tzctl pipeline set path/to/pipeline.tql
tzctl pipeline start <name>
tzctl pipeline stop <name>
tzctl pipeline delete <name>
tzctl pipeline status <name>
tzctl pipeline status <name> --range 7d --limit 50
tzctl run --file path/to/query.tql
tzctl run -f path/to/query.tql
tzctl run --code 'version'
tzctl run -c 'from {x: 1, y: 2}'
tzctl project plan
tzctl project apply
tzctl project apply --dry-run
tzctl project apply --prune
tzctl project pull
tzctl project pull --prune
tzctl project pull --dry-run
tzctl project destroy
Run tzctl --help for the full command reference.
Declarative pipeline projects
tzctl is most useful when you manage pipelines declaratively.
In this model, your repository contains the desired pipeline definitions and
states. tzctl compares that local project with the current node state and
reconciles the difference.
This approach helps you:
- Review changes before applying them.
- Keep pipeline definitions in version control.
- Reapply the same state safely and idempotently.
- Avoid accidental drift between environments.
Pipeline files
A pipeline file can contain optional YAML frontmatter in line comments:
// ---
// name: zeek-import
// description: Import Zeek logs
// state: running
// ---
from file "/var/log/zeek/conn.log"
read zeek-tsv
Supported frontmatter fields:
namedescriptionstate(running,paused, orstopped)node
If a file has no frontmatter, tzctl uses the file stem as the pipeline name.
Configuration
tzctl reads configuration from tenzir.toml and resolves values in this
order:
CLI flags → TENZIR_PLATFORM_CLI_* environment variables → tenzir.toml → built-in defaults
Example:
[platform]
api_endpoint = "https://rest.tenzir.app/production-v1"
[platform.oidc]
client_id = "vzRh8grIVu1bwutvZbbpBDCOvSzN8AXh"
# client_secret_file = "/run/secrets/tenzir-client-secret"
[workspace]
id = "t-abcd1234"
[node]
id = "n-w2tjezz3"
[pipelines]
glob = "pipelines/**/*.tql"
[defaults]
state = "running"
Authentication
tzctl auth login authenticates with the Tenzir Platform and caches the token
for later commands.
You can authenticate in these ways:
- Interactive device-code login.
- Non-interactive client-credentials login through
tenzir.toml. - A pre-supplied token from configuration or environment variables.
Safety and output
tzctl project planis read-only.- Destructive actions prompt for confirmation unless you pass
--yes. --prunedeletes pipelines that exist on the node but not in your project.--output jsonprints structured output for automation and CI.
Global options
| Option | Description |
|---|---|
--dir <DIR> |
Project directory to use. |
--config <FILE> |
Path to tenzir.toml. |
--workspace <ID> |
Workspace ID to target. |
--node <ID> |
Node ID to target. |
--yes |
Skip confirmation prompts. |
--output text|json |
Output format. |
-v, --verbose |
Increase logging verbosity. |
--api-endpoint <URL> |
Override the platform API endpoint. |
Metadata
Release files for tzctl 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tzctl-0.2.0.tar.gz | 114.4 kB | With provenance | Details for tzctl-0.2.0.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| tzctl-0.2.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details for tzctl-0.2.0-py3-none-win_amd64.whl |
| tzctl-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details for tzctl-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
| tzctl-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details for tzctl-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
| tzctl-0.2.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details for tzctl-0.2.0-py3-none-macosx_11_0_arm64.whl |
Total release size: 14.9 MB
Release files / tzctl-0.2.0.tar.gz
| Download URL | tzctl-0.2.0.tar.gz |
|---|---|
| Size | 114.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4a623ea4a669c79c64fff77db766fef1eebd8d4c5f522123a6d2dcf844fefaa0
|
|
BLAKE2b-256 checksum How to use checksums |
79ba337f58cbb5a8257d3eb9401a0cefc50c1e000e5097b2db2b833e59fbdf07
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / tzctl-0.2.0-py3-none-win_amd64.whl
| Download URL | tzctl-0.2.0-py3-none-win_amd64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
31bd85d3b0db5b9371f0eaa3ccb659898484901857db9a10161e286e1faf67cf
|
|
BLAKE2b-256 checksum How to use checksums |
8eb9855aa716ea5e827d2755ab9b719b746a5eb14717e6114c69ebbbc93197af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / tzctl-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | tzctl-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
de146df2b653c9c8dcff62d74223d63ad8e3bb49baed122ba565f9af0d58fed2
|
|
BLAKE2b-256 checksum How to use checksums |
fa84aa87451c77c6de621a4ba7d9ec69e907466513f3cbfcd70b90abe5bdd445
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / tzctl-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | tzctl-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
cd33762f240adb964e54d52a282597d4ce15c0058b12814d83861b421117c3db
|
|
BLAKE2b-256 checksum How to use checksums |
2d5f53be302f9861ccd95c4d92bead34f036fd34df59e93e022e1b20c0e30bed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / tzctl-0.2.0-py3-none-macosx_11_0_arm64.whl
| Download URL | tzctl-0.2.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.5 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f9ec1c074ac438182a4e1283f89017412fcbd37ec10a54bef031df4055e5a17e
|
|
BLAKE2b-256 checksum How to use checksums |
dc32e8f2d853de98f4c04331d56d9dc866938e636c865c930b29d990b1920201
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logSecurity for tzctl 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 5 files in this release have been uploaded with provenance metadata.
Attestation for tzctl-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.