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.2.0.tar.gz (10.7 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.2.0-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: zablo_cli-0.2.0.tar.gz
  • Upload date:
  • Size: 10.7 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.2.0.tar.gz
Algorithm Hash digest
SHA256 e2395c164791bc6f41c8b967f3af128ece92e80ee19c55b43d5fd9978eafdc45
MD5 8c63c2e6cd97a8bfaab2ce07cbe3febd
BLAKE2b-256 0991bb3cf295793dd1738faf73361ebc8c3585ee3d066cefc6eae9dac97c9e4f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zablo_cli-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 13.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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 efdbd2ee769f773aae4eb16d0c1a665fede2f98d70045da8d2d9a794e2080d65
MD5 df1e095bf050eaaf06a7a7efcc1c8ad6
BLAKE2b-256 9c4c890a1edab6c9e9b0c59c55f72a2551b0a059e9562f2c9d80e9c85588eccb

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