chore(deps): update dependency fnox to v1.30.0 #5
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "renovate/fnox-1.x"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
1.28.0→1.30.0Release Notes
jdx/fnox (fnox)
v1.30.0: : Paranoid env mode and Proton Pass PAT authCompare Source
A focused release that hardens fnox's secret exposure model with an exec-only env mode, expands Proton Pass authentication for CI and agent use, and cleans up
fnox exportdefaults.Added
Exec-only env mode and top-level
envdefault (#604) -- @jdxThe per-secret
envfield gains a new"exec"state, and a new top-levelenvsets the default for all secrets. This lets you keep secrets out of the interactive shell -- where AI coding agents and other inherited processes would see them -- while still injecting them intofnox execsubprocesses.envfnox exportfnox execfnox gettrue(default)"exec"(new)falseOne line flips a project to default-deny:
Per-secret
envoverrides the top-level default, and the default rides normal config merge order sofnox.local.tomlcan tighten or loosen it per machine. Existing configs parse with identical semantics.fnox doctoralso warns when a shell-hiding top-levelenvis combined with an ambientFNOX_AGE_KEYin the environment, since that would undermine the whole posture. This eliminates ambient exposure but is not a hard boundary -- anything that can run commands in your shell can still callfnox get/fnox execitself.Proton Pass PAT and agent auth (#598) -- @TyceHerrman
The
proton-passprovider now supports headless authentication via personal access tokens and audited agent access, so CI and scripted jobs no longer need an interactivepass-cli login --interactive.New provider config field:
fnox now passes through the full set of
PROTON_PASS_*variables (PAT, agent reason, session dir, key provider, encryption key, Linux keyring) plus matchingFNOX_PROTON_PASS_*aliases, and includes them in the daemon config fingerprint so cached values invalidate when auth env changes. Error messages point at the right knob when a session, key, or agent reason is missing.Fixed
Daemon respects
daemon_cache = falsefor default-provider secrets (#599) -- @TyceHerrmanThe daemon's cache check only consulted a secret's explicit
provider, so secrets that resolved throughdefault_providerskipped the effective provider'sdaemon_cachesetting. Cache decisions now use the effective provider in all paths (explicit provider,default_provider, and auto-selection), so opting out of daemon caching actually opts you out.fnox exportno longer leaksenv = falsesecrets (#604) -- @jdxfnox exportpreviously resolved withinclude_env_false=trueand never filtered onenv, so secrets marked "only accessible viafnox get" were still included in export output -- and picked up by tools like mise-env-fnox that consumefnox export --format json. Export now follows the same shell semantics as hook-env. Pass--allfor the full dump when you want it explicitly.Changed
fnox exportomits the metadata header by default (#603) -- @jdxThe env and shell export formats no longer emit the
# Exported from profile: .../# Total secrets: ...comment block by default -- output is now clean assignment lines only, easier tosourceor feed into other tooling. Pass--headerto restore the previous behavior:JSON, YAML, and TOML output are unchanged.
Redesigned logo (#595) -- @jdx
New fox-in-keyhole mark matching the fnox.jdx.dev site theme.
Full Changelog: https://github.com/jdx/fnox/compare/v1.29.0...v1.30.0
💚 Sponsor fnox
fnox is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, hk, and more. Keeping fnox secure, maintained, and free is funded by sponsors.
If fnox is handling secrets or config for you or your team, please consider sponsoring at jdx.dev. Sponsorships are what let fnox stay independent and the project keep moving.
v1.29.0: : Age plugins, config-relative paths, and Nix flakesCompare Source
A feature release focused on hardware-backed age encryption, more predictable path handling in config files, and faster GCP Secret Manager batches -- plus a Nix flake for the flake-curious.
Added
Age plugin recipients and identities (#569) -- @nightvisi0n
The
ageprovider now supports age plugins, so hardware-backed and specialty recipients work end to end. That includesage-plugin-yubikey(YubiKey/PIV),age-plugin-se(Apple Secure Enclave),age-plugin-tpm, and friends.Previously a plugin recipient like
age1yubikey1...failed at config load withFailed to parse recipient ... incorrect HRPbecause the provider only understood native X25519 and SSH recipients. It now parsesage::plugin::Recipientvalues, spawns the matchingage-plugin-*binary for encryption, and attachesUiCallbacksto identity files soAGE-PLUGIN-*identities get PIN/touch prompts on decrypt.Nix flake (#583) -- @o-az
fnox is now packaged as a Nix flake. Consume it from another flake:
Or run it directly without installing:
The flake also exposes a
devShells.defaultwithcargo,clippy, andrustfmt.Fixed
Defaults are used when a provider is inactive (#572) -- @jdx
If a secret declared a
defaultand the active profile did not have the referenced provider configured, resolution would fail instead of falling back. Single-secret and batch resolution now share the same fallback path, sofnox getandfnox execreturn thedefault(including interpolated${...}defaults that reference other secrets resolved in the same batch) when the provider is missing, batch fetch fails, or non-interactive auth aborts. A provider value still wins when the provider succeeds; cycles between fallback defaults are rejected explicitly.Config paths resolve relative to the config file that declares them (#582) -- @jdx
Filesystem paths in provider configuration are now interpreted against the config file that defines them, not the current working directory. This matters especially for nested/imported configs, where a parent
fnox.tomlcould point atkeys/age.keyand a child config in a subdirectory would silently miss it.Affected fields:
age.key_filekeepass.database,keepass.keyfilepassword-store.store_dirfoks.homeimports, and paths reported byfnox config-filesRules:
~expands to the user home.fnox daemon clearclears every running daemon (#581) -- @jdxfnox daemon clearpreviously only talked to the daemon socket for the current profile, so caches on daemons started under other profiles were left stale. It now scans the daemon runtime directory, sendsClearto every live profile-scoped daemon, and ignores stale sockets during the sweep. When no live daemon responds, you still get the familiar "daemon not running" error.Changed
Faster batch reads from GCP Secret Manager (#580) -- @nils-degroot
google-secret-managerpreviously used the default batch implementation, which created a fresh client per secret. The provider now implementsget_secrets_batchdirectly: a single client is reused across the batch and up to 10 secrets are fetched concurrently, which noticeably reduces latency for configs with many GCP secrets. Missing payloads and non-UTF-8 values are handled more explicitly, and client-creation errors surface provider-specific auth guidance.New Contributors
Full Changelog: https://github.com/jdx/fnox/compare/v1.28.0...v1.29.0
💚 Sponsor fnox
fnox is maintained by @jdx under en.dev — a small independent studio building developer tooling like mise, aube, hk, and more. Keeping fnox secure, maintained, and free is funded by sponsors.
If fnox is handling secrets or config for you or your team, please consider sponsoring at en.dev. Sponsorships are what let fnox stay independent and the project keep moving.
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate.
chore(deps): update dependency fnox to v1.29.0to chore(deps): update dependency fnox to v1.30.0f8599987132cf252bccf