A TUI application for managing etcd key-value stores (v2 and v3)
Project description
tetcd
A keyboard-driven terminal UI for browsing and managing etcd key-value stores. Supports both the etcd v2 HTTP API and the etcd v3 gRPC-gateway API, and feels like a file manager for your etcd namespace.
Features
- Browse the etcd key space as a hierarchical tree (using
/as a separator) - View values in a side panel
- Add, edit, and delete keys
- Add and recursively delete directories
- Lazy loading: children are fetched only when a node is expanded
- Layered configuration via CLI flags, environment variables, or a config file
- Confirmation prompts before destructive operations
- Works with both etcd v2 and v3
Installation
Install from PyPI with your tool of choice:
# pipx (recommended for CLI tools)
pipx install tetcd
# uv
uv tool install tetcd
# pip
pip install tetcd
Requires Python 3.12 or newer.
Usage
# Launch the TUI (defaults: v3, localhost:2379)
tetcd
# Connect to a specific etcd
tetcd --host my-etcd.internal --port 2379 --api v3
# Use the v2 API
tetcd --api v2
# Show version
tetcd --version
Keybindings
| Key | Action |
|---|---|
a |
Add key |
d |
Add directory |
D |
Delete |
e |
Edit value |
r |
Refresh tree |
q |
Quit |
Configuration
Configuration is layered (highest priority first):
- CLI flags —
--host,--port,--api - Environment variables — prefix
TETCD_, e.g.TETCD_ETCD_HOST=my-etcd settings.toml— committed defaults.secrets.toml— local overrides and credentials (gitignored)
Default settings.toml:
[default]
etcd_version = "v3"
etcd_host = "localhost"
etcd_port = 2379
log_level = "INFO"
Development
The project uses uv for dependency management, Ruff for linting and formatting, ty for type checking, and pytest for tests.
# Install dependencies
uv sync
# Run the TUI from source
uv run tetcd
# Run tests
uv run pytest
# Lint and format
uv run ruff check src tests
uv run ruff format src tests
# Type check
uv run ty check
Dev container
Open the project in VS Code and choose "Reopen in Container". The container
starts an etcd 3.5 service on port 2379 and pre-sets TETCD_ETCD_HOST=etcd,
so uv run tetcd connects out of the box.
License
Licensed under the Apache License 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tetcd-0.1.0.tar.gz.
File metadata
- Download URL: tetcd-0.1.0.tar.gz
- Upload date:
- Size: 174.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ada4f794ee87ee4d1e3788e7e6d5408ca3b95923f9452e9afabe4807718ad36
|
|
| MD5 |
c54f6087d301a679a08d381e421e86a0
|
|
| BLAKE2b-256 |
bcc74eec381427534d44fb22a750af2226893ad7a10f54c93e1689f6a3825e36
|
Provenance
The following attestation bundles were made for tetcd-0.1.0.tar.gz:
Publisher:
publish.yml on ffaraone/tetcd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tetcd-0.1.0.tar.gz -
Subject digest:
9ada4f794ee87ee4d1e3788e7e6d5408ca3b95923f9452e9afabe4807718ad36 - Sigstore transparency entry: 1667798996
- Sigstore integration time:
-
Permalink:
ffaraone/tetcd@8e72c01c0a4756cdc9512c38f2b5c7d88d52a9fd -
Branch / Tag:
refs/tags/0.0.1 - Owner: https://github.com/ffaraone
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8e72c01c0a4756cdc9512c38f2b5c7d88d52a9fd -
Trigger Event:
release
-
Statement type:
File details
Details for the file tetcd-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tetcd-0.1.0-py3-none-any.whl
- Upload date:
- Size: 27.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3af0126035921d8328138a44718f40310622cf8d69b25cd3f066beb68a670ffe
|
|
| MD5 |
dacb775a344c3fadd352d390b154bd21
|
|
| BLAKE2b-256 |
e0762ddee00fd9abdf14339ef934d70283c141c522ce05d8ef45e1a21a460910
|
Provenance
The following attestation bundles were made for tetcd-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on ffaraone/tetcd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tetcd-0.1.0-py3-none-any.whl -
Subject digest:
3af0126035921d8328138a44718f40310622cf8d69b25cd3f066beb68a670ffe - Sigstore transparency entry: 1667799093
- Sigstore integration time:
-
Permalink:
ffaraone/tetcd@8e72c01c0a4756cdc9512c38f2b5c7d88d52a9fd -
Branch / Tag:
refs/tags/0.0.1 - Owner: https://github.com/ffaraone
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8e72c01c0a4756cdc9512c38f2b5c7d88d52a9fd -
Trigger Event:
release
-
Statement type: