Skip to main content

Zablo — zero-knowledge secrets for machines. CLI client.

Project description

Zablo CLI

PyPI Python License

Command-line client for Zablo — zero-knowledge secrets for machines.

The server never sees your plaintext. Encryption happens on the client with your passphrase; only the ciphertext leaves the process.

Requires a running Zablo server. Point the CLI at your instance with ZABLO_API_URL or zablo configure.

Install

pip install zablo

Requires Python 3.9+. Installs two executables: zablo (canonical) and zx (short alias).

Quick start

# One-time setup
zablo configure

# Write / read a secret
echo -n "super-secret-42" | zablo put prod/db/password
zablo get prod/db/password

# List, delete
zablo ls prod/
zablo rm prod/db/password

# Sidecar: inject secrets into a subprocess. Plaintext never touches disk.
zablo exec --env DB_PASSWORD=prod/db/password -- ./run-migrations.sh

# Verify cryptographic lineage of a secret (Merkle-chained rotations)
zablo verify prod/db/password

Environment variables

Override config on the fly:

Var Purpose
ZABLO_API_URL Base URL of the Zablo API (default https://api.zablo.io)
ZABLO_API_KEY Bearer token (long-lived vk_... or session vks_...)
ZABLO_PASSPHRASE Client-side passphrase for AES-256-GCM decryption

Workload identity federation (GitHub Actions, Kubernetes, GCP, AWS, Azure)

Instead of a long-lived API key, exchange a signed OIDC token from your runner for a short-lived (~15 min) Zablo session token:

# .github/workflows/deploy.yml
permissions:
  id-token: write   # <— tells GitHub to mint OIDC tokens for the job

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Get Zablo session
        run: |
          pip install zablo jq-cli
          TOKEN=$(curl -sS -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
                   "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=zablo.io" | jq -r .value)
          eval "$(zablo federate --subject-token "$TOKEN" --export)"
          zablo get prod/db/password  # or use zablo exec
        env:
          ZABLO_API_URL: https://api.acme.zablo.io
          ZABLO_PASSPHRASE: ${{ secrets.ZABLO_PASSPHRASE }}

No long-lived API key in secrets.*. The runner's ambient OIDC identity is the credential.

Zero-knowledge model

Every secret you put is encrypted on your machine with an AES-256-GCM key derived from your passphrase (PBKDF2-SHA256, 600,000 iterations, 16-byte salt, 12-byte IV). The server receives only ciphertext.

Even if the Zablo database is compromised, an attacker cannot decrypt anything without your passphrase — which never leaves your machine. This is a mathematical property of the architecture, not a policy.

Interop with the Node CLI (vk)

Zablo also ships a Node.js CLI. Both CLIs use the exact same envelope format — a secret written by one can be read by the other, provided the same passphrase.

Development

git clone https://github.com/zablo/zablo
cd zablo
python -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]'
pytest

Build a distribution locally:

pip install build
python -m build
ls dist/

Release

Tag & push:

git tag v0.1.0
git push origin v0.1.0

The publish-pypi.yml workflow runs the test matrix across Python 3.9–3.13, builds sdist + wheel, and publishes to PyPI via Trusted Publishing (no long-lived API tokens required).

License

Apache-2.0. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zablo_cli-0.3.1.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zablo_cli-0.3.1-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

Details for the file zablo_cli-0.3.1.tar.gz.

File metadata

  • Download URL: zablo_cli-0.3.1.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for zablo_cli-0.3.1.tar.gz
Algorithm Hash digest
SHA256 0aec414fda1bd53bbb3ce3891a4dc06e7a4c791db57241a9e2fa2bcd81b869ff
MD5 7457e0a750249cf5f27d7db4c637912a
BLAKE2b-256 21f8e5975d82f36d325a3cf6c9f96b67327f5b8c160f150b1c8667e1b5465142

See more details on using hashes here.

File details

Details for the file zablo_cli-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: zablo_cli-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for zablo_cli-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e56ed9b3487d0c131f6212f43dcaec1d945edf27906eb074d3227a19fedd4227
MD5 20c8a75bd683c74321475dec2ef6cb83
BLAKE2b-256 8c5c2e8223618b97fa1fea5b24de3f2ed4baa61f7dea8c2e82b6e4a801b38105

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page