feat(deps): update fnox ( v1.27.1 ➔ v1.31.0 )#1483
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/fnox-1.x
branch
from
July 2, 2026 03:12
fc48d20 to
ccfcb2f
Compare
renovate
Bot
force-pushed
the
renovate/fnox-1.x
branch
from
July 9, 2026 23:32
ccfcb2f to
35d7092
Compare
renovate
Bot
force-pushed
the
renovate/fnox-1.x
branch
3 times, most recently
from
July 17, 2026 12:57
8dbcf8f to
4a9e434
Compare
| datasource | package | from | to | | --------------- | -------- | ------- | ------- | | github-releases | jdx/fnox | v1.27.1 | v1.31.0 |
renovate
Bot
force-pushed
the
renovate/fnox-1.x
branch
from
July 20, 2026 19:59
4a9e434 to
a250433
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.27.1→1.31.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
jdx/fnox (fnox)
v1.31.0: : Composable ProfilesCompare Source
A small release headlined by composable multi-profile support, plus a friendlier Proton Pass error when your session is locked.
Added
Compose multiple active profiles (#605) -- @gaojunran
You can now activate more than one profile at a time as an ordered overlay stack. The top-level config is the base, and each profile is layered on top in order, with later profiles overriding earlier ones on key conflicts.
The effective config resolves as
top-level config + profiles.aws + profiles.prod, andfnox.<profile>.tomlfiles are loaded for each active profile in order. Write commands (set,remove,import,sync,provider add/remove) target the last active profile by default, and the full profile stack is factored into the daemon's request protocol, socket path, and cache key. Library users get a newwith_profiles()builder.Fixed
Proton Pass suggests unlocking a locked session (#612) -- @TyceHerrman
pass-clireports locked sessions as "Session is locked. Please unlock your session and try again.", but fnox previously fell through to a generic configuration/authentication hint. Locked sessions are now recognized and fnox points you atpass-cli session unlockinstead of offering the configured login command. All other Proton Pass error mappings (login, key storage, agent reason, missing fields, missing secrets, generic CLI errors) are unchanged.New Contributors
Full Changelog: jdx/fnox@v1.30.0...v1.31.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.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:fnox export --format env --headerJSON, YAML, and TOML output are unchanged.
Redesigned logo (#595) -- @jdx
New fox-in-keyhole mark matching the fnox.jdx.dev site theme.
Full Changelog: jdx/fnox@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: jdx/fnox@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.
v1.28.0: : Non-interactive execCompare Source
A small feature release that adds a global
--non-interactivemode forfnox execand other resolve paths, so CI and scripted runs can rely on cached credentials and fail fast instead of hanging on auth prompts or device flows.Added
Global
--non-interactive/FNOX_NON_INTERACTIVE(#565) -- @jdxA new top-level flag (and matching env var) disables prompts and browser-based auth flows for the entire invocation. It is propagated through the daemon protocol, so daemon-backed resolution behaves the same way as direct resolution -- including when fnox auto-starts
daemon serveto handle the request.In non-interactive mode:
should_prompt_authno longer prompts, regardless of TTY orprompt_authconfig.github-oauthlease backend still happily reuses cached and refreshable tokens, but fails immediately with a clearinteractive auth required for GitHub OAuth device authorizationerror instead of printing a user code and polling. The error hint points you at runningfnox lease create <lease-name>from an interactive terminal first.This is intended for CI jobs, cron tasks, and other scripted runs where a hung prompt is worse than a fast failure.
Fixed
hashicorp/tap/vaultformula on macOS so Homebrew treats it as an explicitly chosen tap formula under current tap-trust rules (#567) -- @jdxFull Changelog: jdx/fnox@v1.27.1...v1.28.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: (in timezone America/Detroit)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.