jdx Release Notes

Follow

444 release notes curated from 3 sources by the Releasebot Team. Last updated: Oct 21, 2026

Get this feed:

jdx Products

  • Oct 21, 2026
    • Date parsed from source:
      Oct 21, 2026
    • First seen by Releasebot:
      Oct 21, 2026
    jdx logo

    mise by jdx

    v2026.10.17: Shell names in bootstrap login_shell, templated doctor checks, and a per-plugin vfox cache directory

    mise releases portable shell configuration, templated doctor checks, expanded vfox plugin support, and keyring access for private PyPI indexes. It also improves task and environment handling, fixes platform-specific bugs, and updates certificate trust for a more reliable experience.

    bootstrap.user.login_shell now accepts a shell name such as fish instead of a full path. [doctor.checks] can use templates, and vfox backend plugins get their own cache directory. This release also fixes PATH handling in zsh setups that deduplicate PATH, stale task cache hits, a pipx interpreter mix-up on macOS, and removes trust in the compromised eMudhra CA certificates.

    It also includes the changes prepared for 2026.10.16, which was tagged but never published: relative and templated write_targets paths, version aliases from vfox backend plugins, keyring passwords for private PyPI indexes, vfox-backend: packslip plugin sources, and a change to where find_up starts (see Changed and Upgrading).

    Added

    [bootstrap.user].login_shell accepts a shell name. A config shared across machines no longer needs to know where each system installs the shell. mise looks up the name when it checks or applies the setting, which happens after bootstrap.packages has installed the shell. It searches PATH first (never the mise shims directory), then common package-manager locations: /opt/homebrew/bin, /usr/local/bin, /home/linuxbrew/.linuxbrew/bin, ~/.linuxbrew/bin, /usr/bin and /bin. If no executable is found, mise bootstrap user apply fails without changing /etc/shells or the account, and status reports not installed. mise bootstrap user status shows the path it found, and --json output has a new resolved field. Absolute paths work as before. #14770 (@jdx)

    [bootstrap.packages]
    "brew:fish" = "latest"
    [bootstrap.user]
    login_shell = "fish"
    

    Doctor checks support templates. run, description and hint in [doctor.checks.*] are rendered with the template context of the config file that declares them, the same way hooks are. A check can now use a value from [vars] instead of hard-coding it. dir is not rendered. If a template fails, only that check reports ERROR and the other checks still run. Text that already contains {{ or {% in these fields is now parsed as a template. #14771 (@jdx)

    [doctor.checks."project-a:env"]
    description = "project-a has a .env file"
    run = 'test -f {{ vars.repos_dir | quote }}/project-a/.env'
    hint = "cp {{ vars.repos_dir }}/project-a/.env.example {{ vars.repos_dir }}/project-a/.env"
    

    vfox plugins get RUNTIME.cacheDirPath. This is a cache directory for each plugin at $MISE_CACHE_DIR/plugins/<plugin-name>. mise creates it before running any hook, and every hook of the plugin sees the same path. Unlike pluginDirPath, it is kept when the plugin is reinstalled. mise cache clear deletes it, so plugins must handle it being missing. It is nil when no cache directory is available. #14776 (@jdx)

    settings.write_targets accepts relative and templated paths. Before, only absolute or ~/ paths worked, so dotfiles shared between machines with different MISE_CONFIG_DIR or XDG_CONFIG_HOME had to hardcode the config directory. Templates are now rendered, and a relative result is joined to the config_root of the settings file that declares it. For a global file that is $HOME, so the portable spelling uses the file's own directory. The resolved path must still be a global config file that mise loads. If a template fails to render, mise warns, and mise use --global fails with "must resolve to an absolute path" instead of writing to the default file. #14742 (@jdx)

    # ~/.config/mise/conf.d/settings.toml
    [settings.write_targets]
    tools = "{{ config_source | dirname }}/tools.toml"
    

    vfox backend plugins can report version aliases. BackendListVersions can return an aliases table, so a registry's moving names resolve to real versions. Before, "mise-ghcup:ghc" = "recommended" passed the literal string to the plugin, installed into installs/.../recommended, never followed the tag when it moved, and showed recommended in mise ls and the lockfile. Now ghc@recommended resolves to 9.10.3, installs into 9.10.3/, and the lockfile records 9.10.3. Aliases you define in config still win. They are cached like the version list, and an expired cache still answers offline. Older mise versions ignore the aliases field, so plugins can adopt it right away. #14732 (@jdx, @cprecioso)

    return {
    versions = { "9.8.4", "9.10.3", "9.14.1" },
    aliases = { recommended = "9.10.3" },
    }
    

    mise lock and version listing work with a PyPI index that uses a keyring. With an index such as Azure Artifacts and artifacts-keyring, mise install worked because uv read the password from its keyring provider, but mise's own requests sent no credentials and failed with 401 Unauthorized. Set the new pypi.keyring_provider (disabled by default, or subprocess; env var MISE_PYPI_KEYRING_PROVIDER) and give the registry URL a username without a password. mise then runs keyring get <url> <username>, as uv does, and sends the result as HTTP Basic credentials when it lists versions and when mise lock reads a release's requires-python. The password is never written to the lockfile or the version cache. The keyring executable must be on PATH. If it is missing or has no entry, mise sends the request without credentials. #14733 (@jdx)

    [settings.pypi]
    keyring_provider = "subprocess"
    registry_url = "https://[email protected]/org/project/_packaging/feed/pypi/simple/{}/"
    

    vfox-backend: works as a prefix for packslip plugin sources. A vfox backend plugin can be installed from a signed packslip archive, both from the CLI and in [plugins]. Before, mise plugins install vfox-backend:foo 'packslip:owner/repo#1.0.0' failed with packslip plugin sources require the vfox plugin type. An explicit asdf: or package: prefix is still rejected, and the error now says "vfox or vfox-backend". The archive still declares extensions.mise.plugin = "vfox". #14727 (@jdx)

    mise plugins install vfox-backend:my-backend 'packslip:your-org/my-backend#1.0.0'
    

    mise bootstrap packages list is now an alias for status, alongside ls. #14709 (@himkt)

    Changed

    find_up in env._.file starts at the config root. Every other relative path in a config resolves against the config root, but find_up started at the current directory. A relative find_up path now starts at the config root and walks up through its parents, which suits a monorepo whose root .env applies to every package. An absolute path starts at its own directory. A global config that wants to search from wherever mise runs can use cwd. The env_file setting still discovers dotenv files up from the current directory and is unchanged. See Upgrading. #14734 (@jdx, @thernstig)

    # ~/.config/mise/config.toml
    [env]
    _.file = { path = "{{cwd}}/.env", find_up = true }
    

    allow_builds approves only the packages it lists. With the embedded aube installer, allow_builds = ["re2"] also ran the install scripts of every package on aube's bundled trusted-dependencies list, such as dtrace-provider. For a package list, mise now turns that default list off, so only the packages you name build. allow_builds = true and the default with no option are unchanged. This updates the embedded aube to 2.8.0. #14731 (@jdx)

    Fixed

    exec() in [env] values, and other commands mise runs with the pre-activation environment, can now find commands in a _.path directory that was already on PATH before activation, even if the shell deduplicates PATH (for example zsh with typeset -U path PATH). #14772 (@jdx)

    With task.source_freshness_hash_contents = true, a task now re-runs when a source file is changed to content of the same size and its old mtime is restored (for example by rsync -a, cp -p or touch -r). On Unix, mise now also compares the file's ctime. Cache entries written by older versions are rehashed once. #14778 (@jdx)

    On macOS, pipx: installs no longer fail when aqua:aws/aws-cli is in the toolset. Because macOS filesystems ignore case by default, mise's lookup for python matched aws-cli's executable Python shared library and passed it to uv as the interpreter. This lookup now requires the exact case. #14769 (@jdx)

    An aqua registry template with an unterminated string literal now fails with an "unterminated string literal" error instead of hanging. Escaped quotes after backslashes are also detected correctly. #14752 (@Huge, @jdx)

    The built-in npm backend no longer trusts the eight eMudhra intermediate CA certificates whose private keys were compromised. The fix comes from updating its bundled root certificates (webpki-root-certs 1.0.10, rustls-webpki 0.103.16). Builds that use the OS trust store are fixed by OS updates instead. #14781 (@jdx)

    A [bootstrap.compose] project no longer reports drift on every run when a service uses a service: reference such as network_mode: service:vpn. Compose hashes the reference as written but stamps the container with the hash of the resolved container:<id>, so the two never matched. mise now pins these references (network_mode, ipc, pid, volumes_from) to the running container before it asks compose for the hash. This needs an explicit files list in the project's config. Projects without one hash as before. #14729 (@jdx)

    vfox plugins now keep symlinks when they extract .zip archives returned by PreInstall. Before, entries such as bin/npm -> ../lib/node_modules/npm/bin/npm-cli.js became regular files holding the link target, and the tool failed with No such file or directory. Links that resolve outside the install directory are still rejected. The http: backend and tarballs were not affected. #14730 (@jdx)

    [daemons.<name>] task = "worker" now finds a file task such as .mise/tasks/worker.sh, as mise run worker does. Before, it failed with daemon srv runs unknown task "worker" unless you wrote worker.sh. #14741 (@jdx)

    On Windows, mise self-update no longer replaces the winget mise-shim.exe link with a copy. It updates the real mise-shim.exe next to the real mise.exe. Before, mise reshim kept warning that the shim was older than mise. #14737 (@jdx)

    An inherited [dotfiles] entry turned off with only enabled = false no longer prints no recognized operation (block, source, or line), ignoring entry on every command. Other tables with no recognized operation, such as a misspelled line, still warn. #14726 (@jdx, @ponko2)

    Upgrading

    find_up in a global config: a relative find_up entry in env._.file used to search from the current directory. It now searches from the config root, which is ~ for a global config, so it no longer finds project files. To keep the old behavior, put {{cwd}}/ in front of the path. find_up was added in 2026.10.12.

    Documentation

    The dotfiles docs now explain that a group entry with only permissions does not inherit the group's mode, so it deploys nothing. Removing mode from an entry that used to deploy a file leaves that file orphaned, and --prune deletes it. To deploy a file and set its permissions, use { mode = "copy", permissions = "0600" }. #14768 (@jdx)

    New Contributors

    @Huge made their first contribution in #14752

    Full Changelog: v2026.10.15...v2026.10.17

    πŸ’š 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
  • Oct 20, 2026
    • Date parsed from source:
      Oct 20, 2026
    • First seen by Releasebot:
      Oct 21, 2026
    jdx logo

    mise by jdx

    vfox-v2026.10.17

    mise lists the vfox 2026.10.17 release, but provides no details about its changes.

    Release vfox 2026.10.17

    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
  • Oct 20, 2026
    • Date parsed from source:
      Oct 20, 2026
    • First seen by Releasebot:
      Oct 21, 2026
    jdx logo

    mise by jdx

    vfox-v2026.10.16

    mise releases the vfox 2026.10.16 update.

    Release vfox 2026.10.16

    Original source
  • Oct 20, 2026
    • Date parsed from source:
      Oct 20, 2026
    • First seen by Releasebot:
      Oct 21, 2026
    jdx logo

    mise by jdx

    v2026.10.16

    mise resolves relative and templated write_targets paths in configuration.

    (config) resolve relative and templated write_targets paths by …

    Original source
  • Oct 20, 2026
    • Date parsed from source:
      Oct 20, 2026
    • First seen by Releasebot:
      Oct 21, 2026
    jdx logo

    fnox by jdx

    v1.42.0: Export selected secrets by name, managed identity for azure-token leases

    fnox releases 1.42.0 with selective secret exports, Azure managed identity support, fixes for AWS SSO prompts and local secret syncing, and updated TLS certificates that no longer trust compromised eMudhra intermediates.

    In fnox 1.42.0, fnox export can export only the secrets you name, and the azure-token lease can authenticate with an Azure managed identity. This release also fixes the AWS SSO login prompt for templated profiles, stops fnox sync --local-file from deleting personal secrets, and updates the bundled TLS root certificates after the eMudhra CA compromise.

    Added

    Export only named secrets (#1002) by @jdx. fnox export now takes optional KEY arguments. When you pass keys, fnox resolves and exports only those secrets, so it doesn't need to authenticate to providers for the rest of the profile. It still resolves the secrets they depend on for interpolation, but doesn't export them. A named key is exported whatever its env setting, so you don't need --all. An unknown key fails with the same "did you mean" suggestions as fnox get. Format, --output, --dry-run and as_file work the same as before, and running fnox export without keys behaves as it did.

    fnox export API_KEY
    fnox export --format json DATABASE_URL API_KEY
    

    Managed identity for the azure-token lease (#1003) by @jdx. The lease now accepts the same auth and managed_identity_client_id settings as azure-sm, azure-kms and azure-ac. CI jobs on Azure-hosted runners no longer need to install the Azure CLI and run az login --identity just for the lease. You have to turn managed identity on with auth = "managed-identity"; fnox never tries it on its own. Without it, fnox still uses service principal environment variables and then az/azd. In managed identity mode, fnox doesn't check for az on PATH. Setting managed_identity_client_id without auth = "managed-identity", or using an unknown auth value, is a config error.

    [leases.azure-openai-access-token]
    type = "azure-token"
    scope = "https://ai.azure.com/.default"
    env_var = "AI_ACCESS_TOKEN"
    auth = "managed-identity"
    managed_identity_client_id = "00000000-0000-0000-0000-000000000000" # omit for system-assigned
    

    Fixed

    AWS SSO login prompt with templated or secret-based profiles (#998) by @balintant. When profile was a template such as "{{ fnox.profile }}", the aws-kms, aws-ps and aws-sm providers offered to run aws sso login --profile '{{ fnox.profile }}', and that command failed. The prompt now uses the provider's resolved profile, for example aws sso login --profile production. A profile set with profile = { secret = "..." } also gets its resolved name now; before, fnox ran a bare aws sso login. An auth_command you configure still takes precedence.

    fnox sync --local-file deleting personal secrets (#1004) by @jdx. When you ran the sync a second time, fnox mistook secrets defined only in fnox.local.toml for cached copies of shared secrets and deleted their source references. Synced entries for these secrets now record local_source = true in their sync block. fnox keeps and refreshes those entries on every sync. Cached copies of shared fnox.toml secrets are still removed when the shared secret is deleted. Existing files work without changes. If this bug already removed one of your secrets, add it back to fnox.local.toml once and it will be kept from then on.

    Revoked eMudhra intermediate certificates (#1005) by @jdx. The private keys of eight eMudhra intermediate CA certificates were compromised. fnox now uses rustls-webpki 0.103.16 and webpki-root-certs/webpki-roots 1.0.10, which stop trusting those certificates for HTTPS connections.

    Full Changelog: v1.41.0...v1.42.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 keep fnox secure, free, and independent.

    Original source
  • Similar to jdx with recent updates:

  • Oct 20, 2026
    • Date parsed from source:
      Oct 20, 2026
    • First seen by Releasebot:
      Oct 21, 2026
    jdx logo

    hk by jdx

    v2.8.0: YAML formatting with ryl and a builtin for global mise config repositories

    hk 2.8.0 adds YAML and Markdown formatting builtins and support for formatting repositories with global mise configuration. It also fixes tests affected by Git commit signing and updates trusted certificates to remove compromised eMudhra intermediates.

    hk 2.8.0 adds builtins that format YAML with ryl format and a builtin for repositories that hold a global mise config. It also stops commit signing from breaking hk test, and updates the bundled TLS certificate crates after the eMudhra CA compromise.

    Added

    • ryl_format and ryl_markdown_format builtins (#1737, @jdx). Builtins.ryl_format formats YAML files. Builtins.ryl_markdown_format formats YAML front matter and fenced yaml/yml blocks in Markdown files. check runs ryl format --check, check_diff runs ryl format --diff, and fix runs ryl format. Set formatting options in the [format] table of .ryl.toml. These builtins need ryl 0.25 or later. The existing ryl and ryl_markdown linters work as before.
    ["ryl_format"] = Builtins.ryl_format
    ["ryl_markdown_format"] = Builtins.ryl_markdown_format
    
    • mise_config_dir builtin (#1733, @jdx). This opt-in builtin formats a repository checked out at ~/.config/mise, for example one set up with mise bootstrap --adopt. It matches config.toml, config.*.toml, conf.d/*.toml, conf.d/*/mise.toml and conf.d/*/mise.*.toml. Each file goes through mise fmt --stdin, so files outside the repository are never touched. Builtins.mise is unchanged, which means repositories that use config.toml for other tools aren't affected. fix uses sh, so on Windows it needs a POSIX shell.
    hooks { ["check"] { steps { ["mise"] = Builtins.mise_config_dir } } }
    

    Fixed

    • hk test passes when commit signing is turned on (#1735, @jdx). The tests for the no_commit_to_branch and destroyed_symlinks builtins create commits in a scratch repository. If your git config set commit.gpgsign without a signing key that applies to that repository, those commits failed and so did the tests. The test commits now turn signing off.

    Security

    • Compromised eMudhra intermediate CAs are no longer trusted (#1742, @jdx). rustls-webpki is updated to 0.103.16 and webpki-root-certs to 1.0.10. hk ships its own list of trusted root certificates, and the updated list stops trusting eight eMudhra intermediate certificates whose private keys were compromised.

    Full Changelog: v2.7.1...v2.8.0

    πŸ’š Sponsor hk

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

    If hk speeds up your pre-commit loop or makes linting less painful, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep hk fast, free, and independent.

    Original source
  • Oct 20, 2026
    • Date parsed from source:
      Oct 20, 2026
    • First seen by Releasebot:
      Oct 18, 2026
    • Modified by Releasebot:
      Oct 21, 2026
    jdx logo

    mise by jdx

    mise-ui-v2026.10.4

    mise releases mise-ui 2026.10.4, marking a new version of its user interface.

    Release mise-ui 2026.10.4

    Original source
  • Oct 20, 2026
    • Date parsed from source:
      Oct 20, 2026
    • First seen by Releasebot:
      Oct 18, 2026
    • Modified by Releasebot:
      Oct 21, 2026
    jdx logo

    mise by jdx

    mise-system-v2026.10.4

    mise releases mise-system 2026.10.4, marking a new software release with no further changes detailed.

    Release mise-system 2026.10.4

    Original source
  • Oct 20, 2026
    • Date parsed from source:
      Oct 20, 2026
    • First seen by Releasebot:
      Oct 2, 2026
    • Modified by Releasebot:
      Oct 21, 2026
    jdx logo

    mise by jdx

    mise-util-v2026.10.17

    mise releases mise-util 2026.10.17.

    Release mise-util 2026.10.17

    Original source
  • Oct 19, 2026
    • Date parsed from source:
      Oct 19, 2026
    • First seen by Releasebot:
      Oct 21, 2026
    jdx logo

    fnox by jdx

    v1.41.0: gopass provider and profile-aware config templates

    fnox 1.41.0 adds a gopass secrets provider and profile-aware Tera templates, while reducing unnecessary secret decryption and fixing AWS SSO login to honor configured profiles. It also improves CLI help and refreshes documentation.

    fnox 1.41.0 adds a gopass provider and lets secret defaults and provider fields use the active profile through Tera templates. fnox exec no longer decrypts env = false secrets that nothing uses, and the AWS SSO login prompt now logs in to the profile your provider is configured with.

    Added

    • gopass provider (#980) by @jdx. Teams that already keep secrets in gopass can now read them through fnox. fnox reads values with gopass cat, writes them with gopass insert -f (fnox set --provider gopass), and tests the connection with gopass ls --flat. The optional mount setting is added to the front of every secret path. fnox removes one trailing newline from each value and leaves other whitespace alone. Errors tell you whether gopass is missing, the GPG key is locked or unavailable, or the secret path doesn't exist. You can also add the provider with fnox provider add <name> gopass.

      [providers]
      gopass = { type = "gopass", mount = "company" } # mount is optional
      [secrets]
      # read with: gopass cat company/apps/myapp/database_url
      DATABASE_URL = { provider = "gopass", value = "apps/myapp/database_url" }
      
    • Profile-aware templates in config (#993) by @jdx. A secret default and literal string provider fields are now rendered as Tera templates if they contain {{, {% or {#. Two variables are available: fnox.profile (the selected profile with the highest priority, or default if none is selected) and fnox.profiles (all selected profiles, lowest priority first). This means you can write values that follow the profile, such as AWS profiles or SST stages, once instead of repeating them for every profile. FNOX_PROFILE is still not exported to child processes.

      [providers.aws]
      type = "aws-ps"
      region = "eu-central-1"
      profile = "{{ fnox.profile }}"
      [secrets]
      SST_STAGE = { default = "{{ fnox.profile }}" }
      

      Templates are rendered before ${NAME} interpolation. A default is only rendered when it's actually used, and only the ${NAME} references left after rendering must exist. So a branch of an {% if %} that isn't taken requires nothing.

      An undefined variable or a syntax error fails with a message that names the field. To keep a marker as literal text, wrap it in {% raw %}...{% endraw %}.

      These fields are not templated: value, description, list fields such as age recipients, and credential_command, which keeps its own template context.

      Check existing configs: a default or provider field that already contains {{, {% or {# as plain text will now be treated as a template. Wrap it in {% raw %} to keep the old value.

    • More detailed --help (#990) by @jdx. Every public command now shows a description, examples and links to the relevant guides when you run fnox --help. This is the same content as the CLI reference at fnox.jdx.dev/cli. Flags and behavior are unchanged.

    Fixed

    • fnox exec no longer resolves unused env = false secrets (#984) by @andersonkrs. Previously, fnox exec resolved every secret in the profile and then removed the env = false ones from the child's environment. With a PIN-protected age identity, each extra decrypt asked for the PIN again. fnox exec now selects secrets the same way as fnox env --json. It resolves only the secrets it injects plus what they depend on: ${NAME} references in defaults, provider secret references such as token = { secret = ... }, and the inputs of selected leases. If a command lease is selected, it still resolves the whole profile. The aws-sts lease's list of inputs now also includes the environment variables for web identity, container credentials and EC2 instance metadata, so those can still be supplied as env = false secrets. The child's environment is the same as before.

    • AWS SSO login prompt uses the provider's profile (#991) by @balintant. When authentication fails for an aws-ps, aws-sm or aws-kms provider that sets profile, the default prompt now runs aws sso login --profile instead of a bare aws sso login. Before, the bare command logged in to the default profile and failed if your AWS config had none. The profile is only added when it's a literal value and no auth_command is set. On Windows, it's only added when the name uses ASCII letters, digits, -, _ and ..

    Documentation

    The guides, landing page, README, provider pages, lease pages and configuration and environment variable references were reorganized and rewritten (#987, #988, #990) by @jdx. This fixes some wrong statements, for example: an earlier import takes precedence over a later one, and imports are not recursive. The sync docs now cover TPM PIN protection and hardware-backed service tokens (#986) by @andersonkrs.

    New Contributors

    • @balintant made their first contribution in #991

    Full Changelog: v1.40.0...v1.41.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 keep fnox secure, free, and independent.

    Original source
  • Oct 19, 2026
    • Date parsed from source:
      Oct 19, 2026
    • First seen by Releasebot:
      Oct 21, 2026
    jdx logo

    hk by jdx

    v2.7.1: Global pre-commit hook keeps partial commits intact

    hk releases 2.7.1 with safer global pre-commit stashing, more reliable Vite+, oxfmt, and standard_rb checks, and a fix for hk init’s editorconfig-checker configuration. The update prevents unstaged changes from slipping into commits and smooths common linting workflows.

    hk 2.7.1 fixes the global pre-commit hook adding unstaged changes to commits. It also fixes spurious failures in the Vite+, oxfmt and standard_rb builtins, and makes hk init write a valid identifier for editorconfig-checker.

    Fixed

    • Global pre-commit hook now stashes unstaged changes (#1715, @jdx). The hook installed by hk install --global runs hk run pre-commit --from-hook --staged. Because --staged always turned stashing off, the hook ignored its stash setting, including the default stash = "git". If you staged part of a file with git add -p and a fixer then changed that file, the unstaged hunks ended up in the commit. When --staged is used together with --from-hook, hk now follows the hook's stash setting. HK_STASH is ignored in that case, so a global HK_STASH can't override a repository's stash = "none". Running hk run pre-commit --staged yourself still doesn't stash.
    • vp_check, vp_fmt and vp_lint pass when no files match (#1716, @jdx). These Vite+ builtins now pass --no-error-on-unmatched-pattern, as the oxfmt builtin already does. Steps no longer fail when the Vite+ config ignores every staged file, and you don't need custom check/fix overrides for this.
    • oxfmt skips lockfiles (#1717, @jdx). Commits that staged pnpm-lock.yaml or package-lock.json used to print oxfmt failed / Unsupported file type for stdin-filepath. The builtin now excludes both lockfiles from check, check_diff and fix.
    • standard_rb respects .standard.yml exclusions (#1719, @beauraF). Standard ignores exclusions for paths passed to it directly, so hk could report offenses in excluded files. The builtin's check and fix commands now pass --force-exclusion, as the RuboCop builtin already does.
    • hk init writes a valid editorconfig-checker step (#1726, @jdx). hk init --interactive used to write Builtins.editorconfig-checker, which Pkl can't resolve. It now writes ["editorconfig_checker"] = Builtins.editorconfig_checker. The picker now shows this builtin's category and description. hk builtins lists it as editorconfig_checker, the name you use in hk.pkl.

    Full Changelog: v2.7.0...v2.7.1

    πŸ’š Sponsor hk

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

    If hk speeds up your pre-commit loop or makes linting less painful, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep hk fast, free, and independent.

    Original source
  • Oct 18, 2026
    • Date parsed from source:
      Oct 18, 2026
    • First seen by Releasebot:
      Oct 19, 2026
    jdx logo

    mise by jdx

    vfox-v2026.10.14

    mise releases vfox 2026.10.14, with no further product changes described.

    Release vfox 2026.10.14

    Original source
  • Oct 18, 2026
    • Date parsed from source:
      Oct 18, 2026
    • First seen by Releasebot:
      Oct 19, 2026
    jdx logo

    mise by jdx

    v2026.10.14: Global override config, mise config explain, and stricter tool option checks

    mise releases global configuration overrides, clearer config explanations, and more precise paranoid trust controls for environment files. The update also strengthens validation, improves task and environment-file handling, speeds up status and sync commands, and fixes several backend and runtime issues.

    A global config.override.toml can now take precedence over project config, and mise config explain describes each key in a config file. Paranoid mode can be turned on per category, and in that mode dotenv files need their own content-bound trust. Installs now fail when a tool has an option its backend doesn't read, which affects existing configs (see Changed).

    Added

    Global override files. ~/.config/mise/config.override.toml, and config.<env>.override.toml for each MISE_ENV, rank above every project file, including mise.local.toml and mise.<env>.toml. This covers [env], [tools], [settings], [tasks], hooks and the other sections. Anything the override file doesn't set still comes from the project. mise never writes to these files by default. To write to one, pass --override to use, unuse, set, unset, settings set|add|unset or config get|set. A tool declared in an override file resolves from the global mise.lock and is exempt from the project's --locked check. If MISE_GLOBAL_CONFIG_FILE is set, override files are not loaded. mise config ls shows a Tier column and mise doctor labels the files. #14610 (@jdx)

    # ~/.config/mise/config.override.toml
    [env]
    AWS_PROFILE = "personal"
    [tools]
    node = "24"
    

    mise config explain [KEY] lists each key a config file sets, with its line number and its description from the schema. It flags unknown keys with a "did you mean" suggestion and marks deprecated keys. It reads the file as plain TOML, so it also works on a config mise refuses to load. Pass a key such as tasks to show only that section, --json for machine-readable output, and --file, --global, --system or --override to pick a file. #14642 (@jdx)

    Paranoid mode can be turned on per category. paranoid now accepts a list of config, env_files, plugins and provenance in addition to true/false. MISE_PARANOID=config,env_files also works. true still turns on all four categories. An unknown category name is an error. #14609 (@jdx, @thernstig)

    [settings]
    paranoid = ["env_files"]
    

    env_file takes several filenames, for example env_file = [".env", ".env.local"] or MISE_ENV_FILE=.env:.env.local. The file nearest the current directory wins. Within one directory, a name later in the list wins. A single string still works. #14606 (@jdx, @thernstig)

    A find_up entry in env._.file can search several names together. Give one entry a path list, and mise searches directory by directory. The closest directory wins, then the later name within a directory. With two separate entries, a .env.local in a parent directory still overrides the project's .env. The docs now explain this difference and how env_file differs from _.file. #14620, #14602 (@jdx)

    [env]
    _.file = { path = [".env", ".env.local"], find_up = true }
    

    #MISE headers in file tasks accept the same keys as [tasks.<name>], including timeout, vars and the deny_*/allow_* sandbox keys. Before, these keys were ignored with a warning. If one header value is invalid, mise warns and skips that key, and every other task still loads. An invalid confirm or deny_* value is still an error, so a typo can't remove a confirmation prompt or a sandbox restriction. Before, a template named with extends overrode a header's silent. Now the header's value wins. #14637 (@jdx)

    Interactive mise.toml reference in the docs at configuration/reference. It lists every key with its type, choices and default, and you can filter keys and link to them directly. Plain Markdown copies are also published for agents. #14641 (@jdx)

    Changed

    Installs fail on tool options the backend doesn't read. Before, such options were silently ignored. A typo or a key meant for another backend now stops the install, and the error names the option: cargo:eza: option 'asset_pattern' is not used by the cargo backend. Keys under platforms are checked too. So far this applies to the cargo, conda, gem, github, gitlab, forgejo, go, http, npm, packslip, pipx, s3, spinel, spm and ubi backends. aqua, plugin and core-language tools are not checked. The npm backend accepts the checksum option that comes from a packageManager field in package.json. #14629, #14655 (@jdx)

    Paranoid mode needs content-bound trust for env files. In paranoid mode, files loaded through _.file, found by the env_file setting, or run by _.source each need their own trust. Editing one of these files revokes its trust. Before, trusting mise.toml also approved these files, and later edits went unchecked. Running mise trust with no path trusts the project's config and every env file it loads. The error names the file but prints none of its values. To exempt a file by path, add it to trusted_config_paths in your global config. With a category list, this check belongs to env_files. #14604 (@jdx, @thernstig)

    More specific config error messages.

    A warning about an unknown mise.toml key now gives the line and column, and suggests a close match, for example mise.toml:5:1: settings.experimantal (did you mean experimental?). #14639 (@jdx)

    A wrong value for a hook, a task run/depends entry or an [env] variable now says which forms are accepted, or names the unknown key. Before, the error was data did not match any variant of untagged enum. An unknown key in a run or depends table now gets a warning. Before, it was silently ignored. #14640 (@jdx)

    [bootstrap.linux.firewall] is validated on every OS. macOS and Windows still skip the section at bootstrap time, but an invalid value such as backend = "iptables" is now an error there too. #14615 (@jdx)

    Editor schema updates. Editors now flag unknown keys in most [bootstrap] tables and in [dotfiles] entries. The schema now documents launchd keep_alive_on_failure and nice, and dotfile autosave and enabled. It also accepts valid configs it used to reject: templated login_shell, queue_directories and umask, nested macOS defaults values, and tools on [vars] entries. On Windows, [bootstrap.brew].adopt no longer causes an unknown-field warning. #14616, #14644, #14613 (@jdx)

    mise dot status and mise dot sync are faster with many tracked files. They start one git process per tracked file instead of three, which took about 10s down to 4s for 860 files. #14607 (@waynehoover)

    Fixed

    With an external rustup that keeps its proxies in a shared directory, such as pacman's /usr/bin, mise no longer puts that directory ahead of its own tools. Before, mise exec -- node could run the system Node. Only the Rust proxies are now exposed, through a directory that mise owns. #14597 (@jdx)

    The cargo backend now honors rename_exe. Before, it ignored the option and installed the executable under its original name. #14626 (@jdx)

    Locked pypi: installs through uv now pass the configured mise Python to uv sync. Before, mise passed an empty path, so uv could pick another interpreter and fail on --no-build tools such as yamllint. #14593 (@jdx, @hollow)

    When the TLS root store or a CA file can't be loaded, the npm backend now reports an error instead of crashing mise with a core dump. #14595 (@jdx)

    On fish, mise no longer recurses until fish hits its call stack limit after mise implode. #14594 (@jdx, @thernstig)

    mise bootstrap now finds Nix in /nix/var/nix/profiles/default/bin when a pre-packages hook installed it earlier in the same run, so nix: packages install. #14596 (@jdx)

    MISE_WATCH_FILES_GIT_REWRITTEN is no longer set when HEAD stayed on the same commit, for example after git checkout -b, git reset or git branch -m. Before, format-on-edit hooks skipped files you had just edited. #14585 (@JamBalaya56562)

    Command wrapper templates can now use config_root and config_source. Relative paths in template functions resolve from the wrapper's config file instead of the current directory. #14628 (@JamBalaya56562)

    Upgrading

    • Unsupported tool options: if an install now fails with option '...' is not used by the ... backend, remove the option or fix its spelling. mise config explain tools shows which keys mise doesn't recognize.
    • Paranoid mode: after upgrading, run mise trust in each project to approve its env files. Run it again after editing them. If you only want the env-file check, set paranoid = ["env_files"].
    • Firewall config on macOS and Windows: if a shared config has an invalid [bootstrap.linux.firewall] value, it now fails to load on macOS and Windows too. Correct the value.

    Full Changelog: v2026.10.13...v2026.10.14

    πŸ’š 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
  • Oct 18, 2026
    • Date parsed from source:
      Oct 18, 2026
    • First seen by Releasebot:
      Oct 19, 2026
    jdx logo

    mise by jdx

    mise-config-v2026.10.0

    mise releases mise-config 2026.10.0.

    Release mise-config 2026.10.0

    Original source
  • Oct 18, 2026
    • Date parsed from source:
      Oct 18, 2026
    • First seen by Releasebot:
      Oct 18, 2026
    • Modified by Releasebot:
      Oct 19, 2026
    jdx logo

    mise by jdx

    mise-system-packages-v2026.10.1

    mise releases mise-system-packages 2026.10.1.

    Release mise-system-packages 2026.10.1

    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.