dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
Share encrypted secrets with your team. The server never sees a value.
SecurityGo · TypeScriptGitHub @YagoLagrottiBraccoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Encrypted environment variables from the command line. Keep secrets in a local vault, reference them by name in a versionable envrune.yml, and inject them straight into your process. Argon2id + XChaCha20-Poly1305. Windows, macOS and Linux.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A deliberate command-line workspace for encrypted environment variables. EnvRune keeps secret values in an encrypted vault and lets projects refer to them by name. A small, versionable envrune.yml describes which reference is injected into which environment variable; the secret value never belongs in that file. It is designed for a calm workflow: unlock once in an interactive session, manage references without printing their values, and launch the command that needs them directly. [README 설치·사용 부분 발췌] Getting started and Daily workflow.Read the full README ↗
EnvRune keeps secret values in an encrypted vault and lets projects refer to
them by name. A small, versionable envrune.yml describes which reference is
injected into which environment variable; the secret value never belongs in
that file.
It is designed for a calm workflow: unlock once in an interactive session, manage references without printing their values, and launch the command that needs them directly.
| Capability | What it means in practice | |
|---|---|---|
| Vault | Encrypted secret storage | Store values behind readable references such as payments.development. |
| Projects | Versionable bindings | Keep variable-to-reference mappings in envrune.yml, with no plaintext values. |
| Runtime | Direct process launch | Inject an environment into one child process with envrune run, a named command such as envrune dev, or several services at once with envrune up. |
| Unlock | One password a day | envrune unlock --ttl 8h or the system keychain unlocks every terminal, editor, and hook. |
| Teams | Shared secrets without a server | Commit envrune.team.json, encrypted to each member's key; CI gets its own identity. |
| Cloud | End-to-end encrypted sharing, on a server you run | Roles, machine tokens for CI, guided rotation when someone leaves, and an audit log. The server stores ciphertext and never sees a value. Optional: everything else works without it. |
| Managed keys | Replace a key in one place; let people use one they never receive | A replaced value reaches every device and running command by itself. A key marked sensitive stays off the developer's machine: their program's requests go through the server, which adds it. Works for any service. |
| Safety net | Recovery, history, doctor | A recovery key, encrypted backups, rotation with rollback, and envrune doctor for forgotten .env files. |
| Overview | Local dashboard | Inspect references and project bindings without exposing values in the browser. |
Download the installer for your system from the latest release:
| System | Download | How to install |
|---|---|---|
| Windows | envrune_<version>_windows_setup.exe | Run it. It installs for your user (no administrator prompt) and adds envrune to your PATH. |
| macOS | envrune_<version>_macos_universal.pkg | Open it and follow the installer. Works on Apple Silicon and Intel. |
| Debian / Ubuntu | envrune_<version>_linux_<arch>.deb | sudo apt install ./envrune_<version>_linux_amd64.deb |
| Fedora / RHEL | envrune_<version>_linux_<arch>.rpm | sudo dnf install ./envrune_<version>_linux_amd64.rpm |
Or with a package manager:
brew install --cask yagolagrottibracco/tap/envrune # macOS
scoop bucket add envrune https://github.com/YagoLagrottiBracco/scoop-bucket && scoop install envrune
winget install YagoLagrottiBracco.EnvRune # Windows, once Microsoft accepts the package
On Debian and Ubuntu, add EnvRune's apt repository once, and apt upgrade
keeps it up to date:
curl -fsSL https://yagolagrottibracco.github.io/envrune/apt/envrune.gpg \
| sudo tee /usr/share/keyrings/envrune.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/envrune.gpg] https://yagolagrottibracco.github.io/envrune/apt ./" \
| sudo tee /etc/apt/sources.list.d/envrune.list
sudo apt update && sudo apt install envrune
On macOS or Linux you can also install with one command:
curl -fsSL https://raw.githubusercontent.com/YagoLagrottiBracco/envrune/main/install.sh | sh
Then open a new terminal and check it:
envrune --help
The installers are not code-signed yet. On Windows, SmartScreen may ask you to
choose More info → Run anyway; on macOS, a blocked .pkg can be allowed
from System Settings → Privacy & Security → Open Anyway. Portable archives
(.zip / .tar.gz) and a checksums.txt file are attached to every release.
Or build from a source checkout with Go 1.27:
go build -trimpath -o bin/envrune ./cmd/envrune
Run it from the repository root. Before managing another project, place the
binary on your PATH or use the absolute path to this bin/envrune file. The
examples below use envrune so they work from the project directory.
If your Go binary directory is already on PATH, Go can install the command
for you instead:
go install github.com/YagoLagrottiBracco/envrune/cmd/envrune@latest
envrune --help
Run EnvRune with no command and follow the secure terminal prompts:
envrune
It asks for explicit confirmation before creating a vault, then asks you to set and confirm a master password. That password is not stored. EnvRune then shows a recovery key once: write it down and keep it offline, because it is the only way back in if you forget the password.
From the root of a project, create an envrune.yml. It contains only
metadata:
envrune project init
version: 1
project: example-service
default_env: development
environments:
development: {}
Unlock for the day, bind a variable (EnvRune offers to store the value when the reference is new), and run your application:
envrune unlock --ttl 8h
envrune link SERVICE_TOKEN service.development
envrune run -- ./your-application
Name the commands you run often in envrune.yml and start them with
envrune dev, or start several at once with envrune up. See
Getting started and
Daily workflow.
secret value ──> encrypted vault ──> named reference ──> envrune.yml ──> child process
never a plaintext value
The vault is the source of truth for values. Project files only map a process
variable, such as SERVICE_TOKEN, to a vault reference, such as
service.development. This makes project configuration reviewable without
turning it into a secret-bearing file.
| Command | Use it for |
|---|---|
unlock [--ttl 8h] / lock | Unlock the vault for new terminals for a while, or forget the key now. |
keychain enable | Unlock through Windows Credential Manager, the macOS Keychain, or libsecret. |
shell | Open one foreground session and enter the master password once. |
set <reference> | Store or replace a value through a hidden prompt, asked twice. |
list [--long] / info / usage <reference> | Review references, their metadata, and where they are bound. |
link <VAR> <reference> [--env e] | Add a binding to the nearest envrune.yml, and offer to store a new value. |
migrate [--siblings] | Move .env files into the vault and envrune.yml, after showing the plan. |
setup [--env e] | Walk through the variables documented in envrune.yml, storing and linking each one. |
diff <env> <env> | Compare the variables two environments define, by name only. |
types [ts|python] | Generate env.d.ts or a pydantic Settings class from variables:. |
run [--env e] [--no-redact] -- <command> | Start one direct child process with resolved variables; values it prints show as ****. |
<name> / up | Run a command from commands: in envrune.yml, or several at once. |
copy <reference> | Copy a value to the clipboard; cleared after 30 seconds. |
rotate / rollback / history | Replace a value and keep the previous ones. |
doctor | Find missing references, forgotten .env files, pasted values, and secrets nobody uses. |
check [name...] | Run the project's own checks that its secrets still work. |
Run envrune help for every command and option. Every command also works
inside envrune shell. Set NO_COLOR=1 for plain terminal output; redirected
output is already plain.
| Guide | Read it when you want to… |
|---|---|
| Why EnvRune | Migrate in two minutes, and an honest comparison with dotenv, 1Password CLI, Doppler, and Infisical. |
| Getting started | Build EnvRune, create a vault, and connect a first project. |
| Moving from .env files | Import every .env file of a project, or of several, with envrune migrate. |
| Daily workflow | Unlock once, use a default environment, named commands, up, copy, doctor, rotation, and recovery. |
| Advanced usage | Work with environments, imports, exports, generated values, and sessions. |
| Integrations | Use EnvRune from VS Code (extension, tasks, debugging), Docker Compose, and a direnv-style terminal hook. |
| Vault state in your prompt | Show locked or unlocked in Starship, Oh My Posh, or any prompt. |
| More in envrune.yml | Environments that extend each other, a personal override, workspaces, secrets as files, templates, and checks. |
| Documented variables |
run launches the requested child process directly, without a shell in the
middle. On Linux, the runner marks itself non-dumpable immediately before
exec.run and up replace any value a child prints with ****, which keeps
values out of terminals, screen recordings, and logs by accident. It does
not stop a program that leaks a value on purpose; see
Output redaction.export is intentionally different: it writes plaintext. EnvRune names the
variables, warns before writing, asks for YES, and asks again for a
destination inside a Git worktree.Security is also operational. Do not paste values into terminals, issue trackers, or configuration files; do not treat an exported dotenv file as a safe long-term copy. Read the security model before using EnvRune for sensitive credentials.
EnvRune currently builds with Go 1.27.
go test ./...
go build -trimpath -o bin/envrune ./cmd/envrune
./bin/envrune --help
The build guide describes the expected toolchain, local verification, and the distinction between a source build and a release asset.
Prebuilt binaries for Linux, macOS, and Windows (amd64 and arm64) are
published on the releases page.
Releases are built by GitHub Actions whenever a v* tag is pushed:
git tag v1.0.0
git push origin v1.0.0
Versions follow Semantic Versioning: a release with only fixes raises the patch number, a release with a new feature raises the minor number, and the major number changes only when something that worked before stops working.
Treat main as active development.
EnvRune is available under the Apache License 2.0.
render <template> -- <command> | Fill in a configuration template for one run. |
guard install | Block commits that stage a vault value. |
scan [path...] | Find vault values already in files, logs, and Git history. |
mcp | MCP server for AI agents: run named commands with masked output, never read values. |
team … | Share secrets through envrune.team.json. |
login / cloud … | Share secrets through an EnvRune Cloud server: members, roles, CI tokens, rotation, audit. |
pull vercel|1password / push github|vercel | Copy values between the vault and a service. |
recover / backup / restore | Reset a forgotten password with the recovery key; keep encrypted copies. |
export [--env e] [--output path] [--force] | Deliberately create a plaintext dotenv file after confirmation. |
ui [--port <port>] [--no-browser] | Start the metadata-only local dashboard. |
Describe each variable, validate values, and onboard with envrune setup. |
| Keeping values out of Git | Block commits that contain vault values, and find old leaks. |
| AI agents | Let Claude Code, Cursor, or Copilot run commands with secrets they cannot read. |
| Replacing dotenv in code | Load variables from the vault in Node or Python, like dotenv. |
| Pulling and pushing with services | Bring values in from Vercel or 1Password; send them to Vercel or GitHub Actions. |
| Teams and CI | Share secrets with a team file and give pipelines access. |
| EnvRune Cloud | Share secrets with roles, CI tokens, guided rotation, and an audit log, end-to-end encrypted. |
| Your first team | Two people share a secret for the first time, step by step: fingerprints, roles, a changed value, and someone leaving. |
| Self-hosting EnvRune Cloud | Run the server on your own infrastructure with Docker. |
| Running a team on EnvRune Cloud | A lost device, a compromised project, rules about who may fetch, notifications, and access for a limited time. |
| Keys managed by their owner | See how a replaced value distributes itself, and how a sensitive secret is used without reaching a machine. |
| EnvRune Cloud's cryptographic design | Check what the server stores, what a compromised one can and cannot do, and how devices verify everything. |
| Windows and WSL | Keep one vault or two across Windows and WSL. |
| Local dashboard | Understand the loopback UI, its token flow, and its limits. |
| Security model | Review encryption, the agent and keychain, team files, and operating guidance. |
| Building from source | Run checks and produce a local CLI binary. |
| Distribution | Set up Homebrew, Scoop, winget, and apt publishing (maintainers). |