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

Uploaded Python 3

File details

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

File metadata

  • Download URL: zablo_cli-0.4.0.tar.gz
  • Upload date:
  • Size: 13.0 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.4.0.tar.gz
Algorithm Hash digest
SHA256 685bce5815129130a77fb22c615ef0d3ede9c68994529bdd652031945f7c68b8
MD5 206c850da669bfb86a67b26680a60511
BLAKE2b-256 7c0ca98796d33d16d757e22cd5018071369f3176f528deed5ee659f849815ce7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zablo_cli-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 15.4 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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dc7f667d2cddabcfd504904d3c310b7840884084ef83e026b89480a6673166b8
MD5 83a43791f73dc3fc0974e6ec23aad6aa
BLAKE2b-256 ceb83616a48ffb5c655edee0158108ff0123f1a5e2844afddc553325d693458f

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