jdx Release Notes

Follow

336 release notes curated from 3 sources by the Releasebot Team. Last updated: Sep 3, 2026

Get this feed:

jdx Products

  • Sep 3, 2026
    • Date parsed from source:
      Sep 3, 2026
    • First seen by Releasebot:
      Sep 3, 2026
    jdx logo

    fnox by jdx

    v1.35.0: Selective Profile Inheritance

    fnox releases selective profile inheritance and tighter secret handling, with fixes for sync caching, batch Age secret resolution, daemon stability, quieter default fallbacks, and less reload churn on directory changes. Docs and CLI help were also audited and corrected.

    This release introduces selective profile inheritance, letting profiles compose their secrets, providers, and lease backends from other named profiles, alongside a batch of correctness fixes to secret resolution, sync caching, and the background daemon.

    Added

    Selective profile inheritance (#770) -- @jdx. Named profiles can now declare an ordered inherits list so their configuration is layered from ancestor profiles before the profile itself, with later entries winning on conflicts. Inheritance applies to secrets, providers, lease backends, and default_provider, and supports nested inheritance. Unknown inherited profiles and inheritance cycles are reported as actionable configuration errors, and inherited fnox.<profile>.toml files are discovered automatically.

    [profiles.openai.secrets]
    OPENAI_API_KEY = { provider = "age", value = "encrypted-key..." }
    
    [profiles.database-local.secrets]
    DATABASE_PASSWORD = { provider = "age", value = "encrypted-password..." }
    
    [profiles.api-local]
    inherits = ["openai", "database-local"]
    
    fnox -P api-local exec -- ./api
    

    Fixed

    Sync refreshes from current sources, not stale caches (#774) -- @davdroman. fnox sync --local-file could resolve secrets from its previously generated local cache instead of the current source configuration, so changes to a tracked provider or value were ignored on refresh. Cached sync entries are now excluded when resolving refresh sources, stale entries (including inherited profiles and both local override filenames) are removed during full refreshes, and ordinary local overrides, providers, profile inheritance, and --no-defaults behavior are preserved.

    fnox check batches Age secret resolution (#779) -- @davdroman. check previously resolved each secret separately, repeatedly unwrapping the same shared key for batch-encrypted Age values backed by a hardware or plugin identity, which could require one authorization per secret. Eligible Age-backed secrets are now resolved in batches per provider, unwrapping each shared batch key once, while preserving per-secret errors for invalid ciphertexts.

    Background daemon detaches from the client working directory (#795) -- @jdx. Background daemons now start from / instead of inheriting the client's working directory, so the daemon keeps serving requests even after the directory that auto-started it is deleted. Per-request resolution is unchanged, since clients still send their cwd on each request.

    Intentional default fallbacks stay quiet (#771) -- @jdx. When a secret uses if_missing: ignore and falls back from a failed provider to a default (including interpolated defaults), the fallback message is now logged at debug instead of warn. Interpolated default resolution also no longer re-runs the already-failed root provider, while still surfacing genuine interpolation cycle errors.

    Performance

    Skip redundant secret reloads on cd (#766) -- @jdx. fnox hook-env no longer forces a full secret reload on every working-directory change. Sessions now refresh only when the effective config hierarchy or relevant FNOX_* environment variables change, so navigating between directories within the same fnox.toml tree preserves the loaded environment.

    Documentation

    Docs and CLI help audited against actual behavior (#798) -- @jdx. Every docs page and CLI help string was checked against the code and corrected. Notable fixes include the secret resolution order in how-it-works (provider, then default, then environment), the Bitwarden auth hint (FNOX_BW_SESSION, not FNOX_BW_SESSION_TOKEN), FIDO2/YubiKey setup using a positional type instead of a nonexistent --type flag, http_timeout documented as a duration string, import examples that require --provider and --force, corrected keychain/Linux Secret Service requirements, and README additions for the fido2, yubikey, foks, and keeper-sm providers.

    Full Changelog: v1.34.1...v1.35.0

    πŸ’š Sponsor fnox

    fnox is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.

    If fnox handles secrets or config for you or your team, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps fnox secure, free, and independent.

    Original source
  • Sep 2, 2026
    • Date parsed from source:
      Sep 2, 2026
    • First seen by Releasebot:
      Sep 2, 2026
    jdx logo

    mise by jdx

    vfox-v2026.9.1

    mise ships vfox 2026.9.1 release.

    Release vfox 2026.9.1

    Original source
  • All of your release notes in one feed

    Join Releasebot and get updates from jdx and hundreds of other software products.

    Create account
  • Sep 2, 2026
    • Date parsed from source:
      Sep 2, 2026
    • First seen by Releasebot:
      Sep 2, 2026
    jdx logo

    mise by jdx

    v2026.9.1: Bootstrap firewall limiting, scoped locked mode, and lazy tools in tasks

    mise adds safer bootstrap and config controls, including firewall rate limiting, more systemd directives, scoped locked mode, and better lazy tool installs in tasks and mise x. It also improves env cleanup, reshim safety, install errors, and registry command handling.

    This release expands bootstrap system setup with firewall rate limiting and more systemd directives, adds a scoped locked mode for mixing distribution and user tool policies, and fixes lazy tools so they install when invoked from tasks and mise x.

    Added

    • bootstrap: New action = "limit" for incoming TCP firewall rules rate-limits connections per source. It maps to UFW's native limiting and bounded per-source IPv4/IPv6 nftables meters; firewalld fails closed since it cannot express safe per-source limiting. Limit rules are treated as preserving SSH access by the lockout guard. (#12669 by @jdx)
    • bootstrap: Bootstrap systemd units now support requires (Requires=), repeatable environment_file (EnvironmentFile=), nice, and umask, with validation for nice ranges (-20 to 19) and octal umasks. Note that requires does not imply ordering; use after for that. (#12683 by @jdx)
    • config: New global-only locked_scopes setting (also MISE_LOCKED_SCOPES) lets you scope locked mode to specific config sources, so a distribution can ship rolling or lazy tools through /etc/mise/config.toml without forcing users to maintain a system lockfile. Defaults to all three scopes to preserve existing behavior. (#12667 by @jdx)
    • [settings]
    • locked_scopes = ["project", "global"]

    Fixed

    • task: Lazy tools (lazy = true) now install when their command is invoked from a mise run task or mise x, matching the behavior of an activated shell. mise inserts the shim farms after real tool paths for lazy toolsets and reconciles missing bootstrap shims for hand-edited declarations, so tasks no longer fail with command: not found. (#12687 by @jdx)
    • env: Environment variables configured for removal (false values and unset directives) are now consistently unset across mise exec, tasks, mise env, hook-env, deps, and tool stubs, so inherited or secret variables are no longer leaked back into child processes. (#12664 by @jdx)
    • shim: mise reshim can now safely target shared executable directories like ~/.local/bin or /usr/local/bin. It identifies mise-owned shims and only replaces or prunes those, leaving unmanaged files and symlinks in place, and --force rebuilds mise-owned shims rather than wiping the whole directory. (#12675 by @jdx)
    • brew-cask: Cask binaries that reference their surrounding extracted payload now keep that payload beside the staged binary, so tools like codex that exec helpers or read manifests from their own tree continue working after temporary install files are cleaned up. (#12686 by @azohra)
    • upgrade: Fixed recursive deferred tool pruning that could hang new terminals when prompt hooks triggered a full tracked-config scan. Deferred cleanup now takes a non-blocking lock and is skipped for shell-integration and --no-config commands. (#12676 by @jdx)
    • install: Install failures caused by a missing marker file now name the affected file and operation instead of reporting a bare OS error. (#12624 by @JamBalaya56562)
    • install: mise install --dry-run for an s3 tool that only declares a URL for another platform now reports the missing platform and available options instead of falsely claiming it would install. (#12641 by @hktitof)

    Changed

    • registry: Registry command (shim) names are now inferred from the preferred Aqua package at build time, removing redundant bins declarations from hundreds of registry entries. Explicit bins are kept only where mise intentionally exposes a different command set, and mise registry --json exposes the inferred names. (#12668 by @jdx)

    New Contributors

    • @azohra made their first contribution in #12686
    • @hktitof made their first contribution in #12641

    Full Changelog: v2026.9.0...v2026.9.1

    πŸ’š Sponsor mise

    mise is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.

    If mise saves you or your team time, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep mise fast, free, and independent.

    Original source
  • Sep 2, 2026
    • Date parsed from source:
      Sep 2, 2026
    • First seen by Releasebot:
      Aug 4, 2026
    • Modified by Releasebot:
      Sep 2, 2026
    jdx logo

    mise by jdx

    aqua-registry-v2026.9.0

    mise releases aqua-registry 2026.9.0.

    Release aqua-registry 2026.9.0

    Original source
  • Sep 1, 2026
    • Date parsed from source:
      Sep 1, 2026
    • First seen by Releasebot:
      Sep 1, 2026
    jdx logo

    mise by jdx

    vfox-v2026.9.0

    mise releases vfox 2026.9.0.

    Release vfox 2026.9.0

    Original source
  • Similar to jdx with recent updates:

  • Sep 1, 2026
    • Date parsed from source:
      Sep 1, 2026
    • First seen by Releasebot:
      Sep 1, 2026
    jdx logo

    mise by jdx

    v2026.9.0: Lazy Tool Shims

    mise adds lazy tool shims that install tools on first use, plus an opt-in Erlang precompiled OS override and a fix for nested mise calls during postinstall hooks.

    This release introduces lazy tool shims, which install a tool automatically the first time one of its commands is invoked, plus an opt-in Erlang precompiled OS override and a fix for nested mise calls during postinstall hooks.

    Added

    tools: Declare a tool as lazy in [tools] with lazy = true and mise generates bootstrap shims into its normal user/system shim farms. The provider is installed only when one of its commands is first called, then executes immediately; subsequent calls run the real binary without another mise dispatch. Registry tools derive their command names from registry bins, while explicit or non-registry backends declare them with lazy_bins. A bare mise install skips lazy declarations; use mise install --include-lazy to provision them all. New global path settings (shims_dir/MISE_SHIMS_DIR, system_installs_dir/MISE_SYSTEM_INSTALLS_DIR, system_shims_dir/MISE_SYSTEM_SHIMS_DIR) and mise reshim --system support system-scoped and collocated layouts. (#12594 by @jdx)

    [tools]
    node = { version = "24", lazy = true }
    "github:example/acme" = { version = "1.2.3", lazy = true, lazy_bins = ["acme", "acmectl"] }

    erlang: New erlang.precompiled_os setting (and MISE_ERLANG_PRECOMPILED_OS) opts into a specific Bob Ubuntu build targetβ€”including Ubuntu 26.04β€”on compatible glibc distributions. Automatic target detection is unchanged, and lockfiles now preserve the selected OS for reproducible builds. Note the portability constraints around shared-library SONAMEs documented with the setting. (#12637 by @jdx)

    Fixed

    install: Postinstall hooks now activate the exact tool version being installed, so nested mise invocations (such as mise which or mise ls) resolve that version instead of an older discoverable oneβ€”or losing the tool entirely when it was declared through a custom config path with mise use --path. (#12635 by @jdx)

    Registry

    Added engram (#12480 by @AndryOre)

    Added gentle-ai (aqua:Gentleman-Programming/gentle-ai) (#12444 by @AndryOre)

    New Contributors

    @AndryOre made their first contribution in #12444

    Full Changelog: v2026.8.16...v2026.9.0

    πŸ’š Sponsor mise

    mise is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools. Development is funded by sponsors.

    If mise saves you or your team time, please consider sponsoring at jdx.dev. Individual and company sponsorships keep mise fast, free, and independent.

    Original source
  • Aug 31, 2026
    • Date parsed from source:
      Aug 31, 2026
    • First seen by Releasebot:
      Aug 31, 2026
    jdx logo

    mise by jdx

    vfox-v2026.8.21

    mise releases vfox 2026.8.21

    Release vfox 2026.8.21

    Original source
  • Aug 31, 2026
    • Date parsed from source:
      Aug 31, 2026
    • First seen by Releasebot:
      Aug 31, 2026
    jdx logo

    mise by jdx

    v2026.8.16: Command wrappers and Windows shell fixes

    mise adds configurable command wrappers and ships shell, PATH, and Windows activation fixes that make upgrades and errors clearer. It also improves task argument handling, isolates npm installs, expands Windows support for more registry tools, and refines version and prerelease resolution.

    This release adds configurable command wrappers for intercepting ordinary commands, alongside a batch of shell and PATH fixes that make Windows activation more reliable and clearer upgrade and error messaging.

    Added

    shims: New [wrappers] config lets you intercept an ordinary command name with a different command, arguments, and environment. Wrappers take precedence over mise-managed tools, and mise strips its dispatch directories before delegating so the underlying tool still resolves from mise or the system. Works with normal activation, activate --shims, and mise exec; managed wrapper shims are refreshed by mise reshim. (#12617 by @jdx)

    [tools]
    mr-boxington = "1.1.0"
    [wrappers.cargo]
    command = "mbx"
    env = { MBX_CARGO_SHIM_MODE = "1" }

    Fixed

    elvish: mise env and mise activate --shims now emit valid Elvish quoting instead of bash's. This fixes several corruptions that mostly surfaced on Windows: stray quotes and the wrong PATH separator in activate --shims, apostrophes and ! arriving with backslashes, and \n sequences in paths like C:\nodejs being turned into newlines. (#12584 by @JamBalaya56562)

    fish: mise env -s fish now splits PATH on the host's separator and recognizes the Path spelling on Windows, so semicolon-separated Windows paths are no longer severed at each drive letter. Empty PATH segments are dropped rather than adding the current directory. (#12582 by @JamBalaya56562)

    http: The "No URL for platform" error now lists every platform key a tool actually declares in mise.toml, including typos and unrecognized names, instead of falling back to a misleading "requires 'url' option" message with an empty available list. (#12580 by @JamBalaya56562)

    upgrade: When tools are current for their configured version ranges but newer releases exist beyond those ranges, mise upgrade no longer prints "All tools are up to date". It now lists the affected tools with their current and available versions plus the config source, and points to mise upgrade --bump. (#12613 by @jdx)

    Newer versions are available but do not match the configured version ranges:
    node 26.7.0 β†’ 26.8.1 (~/.config/mise/config.toml)
    Run mise upgrade --bump to update the configuration and upgrade.

    task: Double-dash task arguments are now preserved with double_dash="preserve". The first -- separator was previously consumed by the outer CLI parser and lost before reaching the task. (#12628 by @jdx)

    npm: Embedded Aube npm installs are now isolated as a standalone one-package workspace, so a pnpm-workspace.yaml above MISE_DATA_DIR can no longer redirect the install into the outer workspace or mutate it. This mainly affects GitLab CI layouts where the data dir lives under CI_PROJECT_DIR. (#12630 by @jdx)

    bootstrap: Repository status checks now honor the global --jobs limit, so mise bootstrap status, apply, and update run these read-only git checks with bounded concurrency. (#12629 by @jdx)

    Changed

    registry: acli, mimirtool, and specstory are no longer restricted to Linux and macOS and can now be installed and run on Windows. (#12627 by @JamBalaya56562)

    registry: llama.cpp resolution now includes prereleases, since upstream began flagging its rolling bNNNN builds as GitHub prereleases. The existing minimum-release-age and b version prefix behavior is unchanged. (#12614 by @jdx)

    Full Changelog: v2026.8.15...v2026.8.16

    πŸ’š Sponsor mise

    mise is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools. Development is funded by sponsors.

    If mise saves you or your team time, please consider sponsoring at jdx.dev. Individual and company sponsorships keep mise fast, free, and independent.

    Original source
  • Aug 30, 2026
    • Date parsed from source:
      Aug 30, 2026
    • First seen by Releasebot:
      Aug 31, 2026
    jdx logo

    mise by jdx

    v2026.8.15: Dotfiles diff and capture, scoped config updates, and per-tool postinstall hooks

    mise releases a major update with a richer dotfiles and bootstrap workflow, safer upgrades, stronger config and task handling, and broad fixes across Windows, shims, lockfiles, and schema validation. It also adds new registry tools and performance improvements.

    This release expands the dotfiles/bootstrap workflow with previews, bulk capture, git-tracked manifests, and profile reconciliation, adds scoped config collection updates and per-tool postinstall hooks, and rounds it out with a large batch of fixes across tasks, schema validation, Windows, lockfiles, and shims.

    Highlights

    Dotfiles management grows a full preview-and-capture workflow: mise bootstrap dotfiles diff, bulk add --changed, git-tracked directory manifests, and automatic reconciliation when a profile switches a target's source.

    mise config set learns idempotent list updates (--append/--remove) and explicit --global/--system targeting, and mise use gains per-tool --postinstall hooks.

    Safer upgrades: replaced tool versions now linger for a grace period instead of being deleted immediately, so a bad upgrade is easier to recover from.

    Added

    dotfiles: New mise bootstrap dotfiles diff previews exactly what apply would change without writing anything, printing unified content patches for copy, template, and inline entries and structural summaries for symlinks and directories. Optional target filters use the same selection semantics as apply. (#12511 by @jdx)

    dotfiles: mise bootstrap dotfiles add --changed captures every drifted copy-mode target back into its source in one command, without naming each path. Directory copies, symlinks, templates, and inline content are skipped, and untrusted configs are blocked. (#12512 by @jdx)

    dotfiles: Directory copy and symlink-each entries can now set manifest = "git" to manage only paths returned by git ls-files, so a dotfiles repo that gitignores everything and force-adds selected paths no longer traverses (or links) ignored home-directory content. Links are removed when a file drops out of the index. (#12523 by @jdx)

    dotfiles: symlink-each apply now reconciles stale links when a profile change (for example toggling MISE_ENV between home and work) points a target at a different source. Only links still pointing at the previously recorded source are removed; unmanaged paths and paths desired by another active source are left alone, and dry-run previews the removals. (#12524 by @jdx)

    bootstrap: mise bootstrap --from <git-url> clones a setup/dotfiles repo (into $MISE_DATA_DIR/bootstrap-repo by default, or --from-dir), then runs bootstrap from that checkout. Existing checkouts are reused when the origin matches, --update fast-forwards them, and --dry-run only prints the planned git clone/git pull. (#12525 by @jdx)

    use: mise use --postinstall <COMMAND> attaches a per-tool post-install hook that runs only when that tool is installed or reinstalled. Repeat the flag before each tool to give each its own hook. (#12609 by @jdx)

    mise use --postinstall "mbx setup --defaults" mr-boxington

    config: mise config set gains --append and --remove for list-like keys (append without duplicates, remove matching entries, promote scalars to arrays as needed) while preserving TOML comments and formatting, plus explicit --global/--system targeting for config get/set. Tool postinstall hooks now also receive MISE_CONFIG_FILE, MISE_GLOBAL_CONFIG_FILE, MISE_CONFIG_ROOT, and MISE_PROJECT_ROOT. (#12603 by @jdx)

    config: Templates can now reference config_source, the absolute path of the config file the template lives in (not resolved through symlinks). This lets a shared config symlinked into conf.d add its own real directory to PATH, for example {{ config_source | canonicalize | dirname }}/bin. Available in mise.toml, .tool-versions, [env] directives, and [settings.age]. (#12454 by @Marukome0743)

    task: task_source_files(only_changed=true) returns only the sources written since the task last succeeded, so linters and formatters can run against just what changed. A failed run keeps its files outstanding until the task passes. (#12470 by @Marukome0743)

    outdated: mise outdated --json now includes a release_url field pointing at the release page for the offered version (from the versions host, aqua, GitHub/GitLab, or the rust core plugin). The key is omitted rather than null when no page is available. (#12494 by @Marukome0743)

    Changed

    upgrade: mise upgrade no longer deletes the replaced install immediately. When upgrade.auto_prune is on, the old version stays on disk and is scheduled for removal after upgrade.prune_after (default 24h), cleaned up opportunistically on later runs. --prune still removes immediately and --no-prune keeps the old tree with no scheduled cleanup. mise ls surfaces deferred removals. (#12593 by @jdx)

    Fixed

    env,tasks: .env files written as UTF-16 (the default from Windows PowerShell 5.1's > and Out-File) are now decoded and loaded instead of being silently dropped, and a UTF-16 task file now gets a clear hint to save it as UTF-8. (#12507 by @JamBalaya56562)

    install: mise install --dry-run no longer claims it would install a tool that cannot actually be installed on this platform. (#12568 by @JamBalaya56562)

    exec: mise exec now reports clearly when a requested tool is not available on the current platform. (#12547 by @JamBalaya56562)

    config: Request-specific tool options are preserved rather than dropped during config merges. (#12060 by @risu729)

    config: A bare tool_alias value is now resolved through the registry. (#12506 by @Marukome0743)

    config: Minimum-release-age exclusions from multiple configs are merged instead of overwritten. (#12460 by @jdx)

    lockfile: Version ties are broken correctly when a legacy lockfile answers latest, and links belonging to other backends are ignored. (#12583, #12605 by @Marukome0743, @jdx)

    monorepo: Idiomatic version files are resolved from the task's own config root. (#12565 by @kaii-zen)

    task: Several ordering fixes so injected and dependency tasks keep their intended slots, tasks that link back into themselves are skipped, and taskkill output is suppressed on Windows. (#12450, #12466, #12482, #12510, #12563 by @Marukome0743, @jrandolf, @JamBalaya56562, @sortA0329)

    shims/generate: Arguments are now delivered intact for file-mode shims and Windows launchers, and mise generate explains when a --mise-bin path has no Windows launcher. Non-executable system fallbacks are skipped. (#12502, #12463, #12496, #12545 by @JamBalaya56562, @jdx)

    http: Raw binaries are copied on Windows where a junction cannot name a file, and a download that fails because the path is too long now explains itself. (#12465, #12550 by @Marukome0743, @JamBalaya56562)

    link/file: Links whose target no longer exists can now be shown and removed. (#12468, #12469 by @JamBalaya56562)

    trust: The ignore list is now read by what its entries point at, matching how trust links are stored. (#12428 by @JamBalaya56562)

    watch: The terminal is restored when the watched process is signalled. (#12451 by @Marukome0743)

    activate: The pwsh deactivation preamble no longer pollutes $Error. (#12483 by @JamBalaya56562)

    backend: Rolling updates behind a versions host are now detected. (#12440 by @jdx)

    github: Stale cached attestations are retried. (#12495 by @jdx)

    ls-remote: Recorded listing errors now cause a failure instead of returning stale/empty results. (#12551 by @jdx)

    npm: Dangling aube-backed tool installs are repaired. (#12570 by @jdx)

    bootstrap: Brew cask dependencies are preserved during prune. (#12461 by @jdx)

    azure: The CLI now includes pip for extension support. (#12555 by @esteve)

    registry: Windows/arm64 can fall back to x64 backends, as aqua already does. (#12560 by @JamBalaya56562)

    doctor: The self-update leftover check is gated so it does not fire for installs that manage updates elsewhere. (#12438 by @salim-b)

    schema: Several JSON schema corrections so registry, plugin, tool-option, and settings definitions match what the build consumers actually accept. (#12514, #12515, #12520, #12522, #12527 by @risu729)

    Performance

    brew: Homebrew bootstrap bottles are now downloaded concurrently (bounded by MISE_JOBS), while pouring, source builds, and prefix linking stay in dependency order. (#12604 by @jdx)

    Registry

    New tools: pkgx, onefetch, syncthing, ols, spin-framework, cursor-agent, 7zip, mosh, pastel, broot, exiftool, spotify-player, yt-dlp-nightly, and cliamp. magika and sbt now install from their GitHub releases, and pre-commit uses the pipx backend on Windows. Various dependency and OS-limit cleanups were also applied. (#12272, #12437, #12448, #12484, #12485, #12478, #12486, #12532, #12535, #12533, #12538, #12539, #12542, #12581, #12553, #12567, #12549)

    New Contributors

    @sortA0329 made their first contribution in #12563

    @seuros made their first contribution in #12519

    @pb3975 made their first contribution in #12478

    @ThorstenHans made their first contribution in #12485

    Full Changelog: v2026.8.14...v2026.8.15

    πŸ’š Sponsor mise

    mise is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools. Development is funded by sponsors.

    If mise saves you or your team time, please consider sponsoring at jdx.dev. Individual and company sponsorships keep mise fast, free, and independent.

    Original source
  • Aug 30, 2026
    • Date parsed from source:
      Aug 30, 2026
    • First seen by Releasebot:
      Aug 31, 2026
    jdx logo

    hk by jdx

    v1.57.0: Faster cold starts, workspace-aware directories, and safer partial fixes

    hk ships offline Pkl validation, workspace-aware templated dirs, and smarter partial fix handling. It also adds new Go and lint builtins, including go fix, golangci-lint fmt, ls-lint, and staged gitleaks, plus fixes for Go linters, Windows shims, workspace paths, and stashing.

    This release seeds hk with an embedded Pkl package so matching-version configs validate offline on a cold cache, adds templated dir support for workspace-aware steps, and lands a new check_after_diff mechanism that lets partial fixers (like ShellCheck) apply what they can while still reporting what they cannot. It also brings several new Go and lint builtins plus a batch of correctness fixes for Go linters, gitleaks, workspace paths, Windows shims, and stashing.

    Added

    Embedded matching-version Pkl package (@sahidvelji) #1218. hk now ships the Pkl package built for its own version and seeds HK_PKL_CACHE_DIR with it before evaluating hk.pkl, so a config pinned to that version validates with no network round trip on a cold cache β€” a fresh clone, CI runner, new container, or upgrade. Cached content always wins over the embedded copy, and other versions are fetched as before. Set HK_PKL_EMBEDDED=0 to disable seeding. Addresses discussion #1216.

    Templated dir through Tera (@sahidvelji) #1219. A step's dir is now rendered through Tera, so a workspace-aware step can point its working directory at the workspace it was matched for instead of prefixing every command with cd {{workspace}} && .... The eight workspace-aware builtins (the Go ones plus cargo_deny) drop their cd prefix as a result. Literal dir values are unaffected.

    ["go-vet"] {
    glob = "**/*.go"
    workspace_indicator = "go.mod"
    dir = "{{workspace}}"
    check = "go vet ./..."
    }
    

    check_after_diff for partial fixers (@jdx) #1243. New opt-in step setting that reruns check on the original file batch after a check_diff patch applies, so non-fixable findings stay visible instead of being masked by a clean apply. Requires both check and check_diff to be defined. This underpins ShellCheck's new fixer and other partial fixers.

    ShellCheck autofix via check_diff (@sahidvelji) #1237. shellcheck now applies the fixes it can via --format=diff, and thanks to check_after_diff a file with both fixable and non-fixable findings is fixed and still fails on what remains. Implements proposal 2 of #1234.

    go_fix builtin (@sahidvelji) #1224. Wraps Go's go fix (the Go 1.26+ analyzer-driven modernizer) β€” interface{} β†’ any, sort.Slice β†’ slices.Sort, wg.Add/go/wg.Done β†’ wg.Go, and more. check_diff runs go fix -diff ./... and hk applies the patch directly. Requires Go 1.26+.

    golangci_lint_fmt formatter builtin (@sahidvelji) #1244. Wraps golangci-lint fmt, the formatter half of golangci-lint, formatting only the changed files via check_diff (using fmt --diff) β€” separate from the existing golangci_lint builtin that runs the full linter.

    ls_lint builtin (@sahidvelji) #1238. Adds a builtin for ls-lint, which enforces directory and filename naming conventions against .ls-lint.yml. Runs once per invocation. Implements proposal 3 of #1234.

    gitleaks_staged builtin (@jdx) #1248. A new builtin that runs gitleaks git --pre-commit --staged to scan only the staged index, suited to pre-commit hooks.

    Per-step allow_failure (@jdx) #1291. Steps can report a non-zero command exit without failing the overall hook, including conditional policies via expressions such as env('KNOWN_BROKEN') == 'true'. hk's own execution and configuration errors remain blocking, and allowed failures are surfaced in structured output.

    Fixed

    Go linters that reported success on bad code (@sahidvelji) #1225. go_imports, go_lines, revive, and go_fumpt silently passed in check mode even with real findings; they now take their exit code correctly. gomod_tidy could not run outside the repo root and is now scoped like the other Go builtins.

    gitleaks scan modes (@jdx) #1248. Builtins.gitleaks now explicitly scans the repository working tree rather than silently changing behavior when {{files}} expanded to multiple paths.

    gomod_tidy now runs on .go changes (@sahidvelji) #1236. Broadened the glob to **/*.go, **/go.mod, and **/go.sum so the common drift (editing an import) is caught at commit time, and its go.mod/go.sum updates are now staged when triggered by a Go change (@jdx) #1240.

    Partial diff fixes no longer pass silently (@jdx) #1245. Enabled check_after_diff for rumdl, ryl, ryl_markdown, zizmor, and pinact_v3, so remaining violations surface after hk applies each partial patch.

    Workspace paths in literal dir steps (@jdx) #1242. {{workspace}} and {{workspace_indicator}} are now rendered relative to a literal step directory, preventing duplicated paths like ui/ui/tsconfig.json in subprojects. Addresses discussion #1233.

    Windows command shims (@jdx) #1221. Structured argv steps now resolve .cmd/.bat targets (including npm node_modules/.bin shims) via the effective PATH/PATHEXT and run them through cmd.exe with argument-boundary-preserving escaping. Fixes discussion #1220.

    Empty pathspec stashes (@jdx) #1283. Pre-commit runs no longer reset the index and leave an orphaned stash when a path-limited stash has no HEAD-to-worktree diff (e.g. mode-only staged changes). Addresses discussion #1281.

    New Contributors

    @sahidvelji made their first contribution in #1218

    Full Changelog: v1.56.1...v1.57.0

    πŸ’š Sponsor hk

    hk is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, and more. Work on hk is funded by sponsorships.

    If hk has sped up your pre-commit loop or made linting feel less painful, please consider sponsoring at jdx.dev. Sponsorships are what keep hk moving and the project independent.

    AI-assisted β€” Tool: Codex; model: openai/gpt-5; version: unavailable.

    Original source
  • Aug 30, 2026
    • Date parsed from source:
      Aug 30, 2026
    • First seen by Releasebot:
      Aug 30, 2026
    jdx logo

    hk by jdx

    chore: release v1.57.0 (#1223)

    hk releases v1.57.0 with new builtins and step-engine improvements, plus Go, shellcheck, Pkl, stash, and Windows path fixes. It also refreshes CLI metadata, docs, and release packaging with no runtime logic changes.

    Features

    • (builtins) add go_fix linter by @sahidvelji in #1224
    • (builtins) add ls_lint linter by @sahidvelji in #1238
    • (builtins) add golangci_lint_fmt formatter by @sahidvelji in #1244
    • (builtins) add shellcheck fix via check_diff by @sahidvelji in #1237
    • (pkl) embed the matching-version pkl package by @sahidvelji in #1218
    • (step) render dir through tera by @sahidvelji in #1219
    • (step) recheck applied diffs by @jdx in #1243
    • (step) allow configured command failures by @jdx in #1291

    Bug Fixes

    • (builtins) repair Go linters that report success on bad code by @sahidvelji in #1225
    • (builtins) broaden gomod_tidy glob to run tidy on .go changes by @sahidvelji in #1236
    • (builtins) stage gomod_tidy manifest updates by @jdx in #1240
    • (builtins) recheck partial diff fixes by @jdx in #1245
    • (builtins) correct gitleaks scan modes by @jdx in #1248
    • (stash) skip empty pathspec stashes by @jdx in #1283
    • (step) resolve Windows command shims by @jdx in #1221
    • (step) relativize workspace paths to step directory by @jdx in #1242

    Documentation

    • clarify subproject monorepo setup by @jdx in #1239
    • improve onboarding and navigation by @jdx in #1247
    • disable code ligatures by @jdx in #1264
    • publish llms.txt index by @jdx in #1272

    Security

    • add sponsor logos to readme by @jdx in #1250

    Other Changes

    • (ci) adopt mbx for Rust builds by @jdx in #1229
    • (ci) restrict trusted mbx runs to jdx by @jdx in #1254
    • (ci) isolate mbx OIDC permissions by @jdx in #1258
    • (ci) compare mbx with rust-cache by @jdx in #1267
    • (ci) adopt mbx 0.5.4 by @jdx in #1279
    • (ci) pin mr-boxington-action v1.0.1 by @jdx in #1280
    • (ci) use default Rust for cache benchmark by @jdx in #1284
    • (ci) bump mr-boxington action by @jdx in #1282
    • (ci) use server cache for dispatched benchmarks by @jdx in #1285
    • (ci) adopt mbx 0.7.0 by @jdx in #1286
    • (sponsors) replace 37signals with omacom foundation by @jdx in #1249
    • generate release notes before publishing by @jdx in #1227
    • automate generated cli versions by @jdx in #1252
    • seed mbx cache for fork PRs by @jdx in #1262
    • notarize the macOS release binary by @jdx in #1266
    • benchmark mbx against rust-cache on Linux by @jdx in #1275
    • remove pinned rust toolchain by @jdx in #1235
    • back mbx with the GitHub Actions cache alone by @jdx in #1287

    Dependency Updates

    • update rust crate pklr to v1.5.0 by @renovate[bot] in #1222
    • lock file maintenance by @renovate[bot] in #1226
    • bump usage to 6.4.0 by @jdx in #1228
    • update anthropics/claude-code-action action to v1.0.194 by @renovate[bot] in #1230
    • update jdx/mise-action action to v4.2.5 by @renovate[bot] in #1231
    • update rust crate demand to v2.1.0 by @renovate[bot] in #1241
    • update anthropics/claude-code-action action to v1.0.195 by @renovate[bot] in #1251
    • update rust crate pklr to v1.5.1 by @renovate[bot] in #1260
    • bump usage to 6.4.1 by @jdx in #1273
    • bump tak and mbx by @jdx in #1274
    • remove rust toolchain pins by @jdx in #1276

    New Contributors

    • @sahidvelji made their first contribution in #1237

    Note

    Low Risk

    Mechanical version and documentation URL updates with no runtime code changes in the diff.

    Overview

    Cuts release v1.57.0 by bumping the hk crate and CLI metadata from 1.56.1 to 1.57.0 (Cargo.toml, Cargo.lock, hk.usage.kdl, generated CLI docs).

    Adds the [1.57.0] CHANGELOG entry (features, fixes, CI/release work, and dependency updates since 1.56.1) and updates every Pkl amends / import package URL in README, docs, examples, and hk-example.pkl to point at the new GitHub release artifacts.

    No application logic changes in this diff; it packages already-merged work. Notable themes called out in the new changelog include new builtins (go_fix, ls_lint, golangci_lint_fmt, shellcheck fix), step-engine improvements (Tera dir, diff recheck, optional command failures), embedded matching-version Pkl, and assorted builtin/stash/Windows path fixes.

    Reviewed by Cursor Bugbot for commit 57fec76. Bugbot is set up for automated code reviews on this repo. Configure here.

    Co-authored-by: mise-en-dev [email protected]

    Original source
  • Aug 30, 2026
    • Date parsed from source:
      Aug 30, 2026
    • First seen by Releasebot:
      Aug 11, 2026
    • Modified by Releasebot:
      Aug 31, 2026
    jdx logo

    mise by jdx

    mise-cache-core-v2026.8.9

    mise releases mise-cache-core 2026.8.9.

    Release mise-cache-core 2026.8.9

    Original source
  • Aug 30, 2026
    • Date parsed from source:
      Aug 30, 2026
    • First seen by Releasebot:
      Aug 4, 2026
    • Modified by Releasebot:
      Aug 31, 2026
    jdx logo

    mise by jdx

    vfox-v2026.8.20

    mise notes Release vfox 2026.8.20.

    Release vfox 2026.8.20

    Original source
  • Aug 26, 2026
    • Date parsed from source:
      Aug 26, 2026
    • First seen by Releasebot:
      Aug 27, 2026
    jdx logo

    fnox by jdx

    v1.34.1: Safer profiles, exports, and macOS binaries

    fnox ships a security-focused patch that tightens profile handling, preserves dotenv exports for Docker Compose, restores terminal prompts for interactive daemon cache misses, batches age sync prompts, and notarizes macOS release binaries.

    A patch release focused on safety and correctness: unknown profiles now fail loudly instead of silently falling back to defaults, dotenv exports survive Docker Compose interpolation, interactive daemon cache misses regain access to your terminal, and macOS release binaries are now notarized.

    Fixed

    Unknown profiles are rejected (#741) -- @jdx. An active profile that has neither a [profiles.<name>] table nor a matching fnox.<name>.toml overlay now errors (listing the available profiles) instead of silently falling back to top-level secrets, which could leak defaults on a typo. Shell integration (hook-env) also refuses unknown profiles. Creating new profiles via set, import, and provider add still works.

    Dotenv export preserves dollar signs (#746) -- @jdx. Secrets containing $ are now emitted in single quotes so Docker Compose no longer interpolates them, falling back to double quotes with $ escaping when needed. Dotenv import was aligned to match: it reassembles multiline single-quoted values, unescapes ', and treats $ in double quotes as a literal dollar sign.

    Interactive daemon cache misses resolve in the foreground (#743) -- @jdx. When the daemon misses its cache for an interactive client, the missing keys are now resolved in the foreground so PIN, touch, browser, and auth-command prompts reach the invoking terminal; resolved values are then sent back to the daemon for reuse. Non-interactive callers continue to resolve daemon-side and never prompt.

    age batch decryption prompts once (#755) -- @jdx. fnox sync now wraps a single random key with age per batch and encrypts each secret under it, so age (and hardware-backed plugins) only prompt once per sync instead of once per secret. Existing sync caches remain readable, and re-running fnox sync migrates them to the batched format.

    Security

    Hardened secret injection boundaries (#763) -- @jdx. Secret names must now be valid environment identifiers (^[A-Za-z_][A-Za-z0-9_]*$), enforced when loading, validating, running set, and import, with shell emitters quoting names defensively across Bash, Zsh, Fish, and PowerShell. exec and MCP exec now strip ambient FNOX_AGE_KEY and FNOX_AGE_KEY_FILE before spawning child processes while still injecting explicitly configured secrets.

    Changed

    macOS release binaries are now notarized (#764) -- @jdx. The signed macOS binary is submitted to Apple's notary service and built with a hardened runtime, so downloads (which carry the quarantine bit) no longer hit the Gatekeeper "cannot be verified" dialog.

    Documentation

    Generated CLI configuration docs now HTML-encode angle brackets so placeholders like <path> render correctly instead of being parsed as Vue elements (#739) -- @jdx.

    Sync docs now call out the golden path and hardware-backed decryption (#748) -- @jdx.

    Full Changelog: v1.34.0...v1.34.1

    πŸ’š 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.

    Original source
  • Aug 26, 2026
    • Date parsed from source:
      Aug 26, 2026
    • First seen by Releasebot:
      Aug 26, 2026
    jdx logo

    mise by jdx

    v2026.8.14: npm/aube install fixes and cleaner temp/prune handling

    mise releases a small bug fix update for npm installs, HTTP cache cleanup, and Windows config pruning. It fixes aube-backed npm behavior, cleans up failed tarball extractions, and removes broken trusted config links on Windows.

    This is a small release focused on bug fixes for npm (aube-backed) installs, HTTP cache cleanup, and Windows config pruning.

    Fixed

    • npm: Aube-backed npm installs no longer drop a synthetic .npmrc into the per-tool install directory. Install-scoped settings such as minimumReleaseAge, trustPolicyExclude, allowedUnpopularPackages, and (for CLI installs) globalDir/globalBinDir now go into .config/aube/config.toml as typed TOML, while allowBuilds stays in package.json. Inline-table trust_policy_excludes / allow_low_downloads in mise.toml still round-trip correctly. (#12425 by @jdx)

    • npm: mise now intercepts the private __node-gyp-bootstrap trampoline that embedded aube's lazy node-gyp shim re-execs. Previously naked-run rewriting turned it into mise run __node-gyp-bootstrap … and failed with "no tasks defined", breaking allow_builds installs whose lifecycle scripts call node-gyp (for example gemini-cli via node-pty). (#12429 by @jdx)

    • http: A failed extraction (truncated download, unreadable archive, full disk, or Ctrl-C mid-extraction) no longer leaves a permanent hash-named temp directory behind in http-tarballs. All failure paths now clean up the temp directory. (#12420 by @Marukome0743)

    • prune: mise prune --configs on Windows now removes trusted config links whose target no longer exists. Because Windows stores these links as plain files holding the target path, the previous existence check never fired; the link's target is now resolved before deciding whether to prune. (#12418 by @JamBalaya56562)

    Full Changelog: v2026.8.13...v2026.8.14

    πŸ’š Sponsor mise

    mise is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools. Development is funded by sponsors.

    If mise saves you or your team time, please consider sponsoring at jdx.dev. Individual and company sponsorships keep mise fast, free, and independent.

    Original source
Releasebot

Curated by the Releasebot team

Releasebot is an aggregator of official release notes from hundreds of software vendors and thousands of sources.

Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.