Skip to content

feat(s3): add S3 backend for private artifact storage#7668

Merged
jdx merged 8 commits intomainfrom
feat/s3-backend
Jan 14, 2026
Merged

feat(s3): add S3 backend for private artifact storage#7668
jdx merged 8 commits intomainfrom
feat/s3-backend

Conversation

@jdx
Copy link
Owner

@jdx jdx commented Jan 14, 2026

Summary

  • Adds new S3 backend for downloading tools from Amazon S3 or S3-compatible storage
  • Enables enterprise teams to host proprietary tools in private S3 buckets
  • Supports custom endpoints for MinIO and other S3-compatible services

Features

  • S3 URL support: s3://bucket/path/to/tool-{version}.tar.gz
  • AWS credential chain: Environment vars, ~/.aws/credentials, IAM roles
  • Custom endpoints: Support for MinIO and other S3-compatible services
  • Version discovery: Both manifest files (version_list_url) and S3 object listing (version_prefix + version_regex)
  • Checksum verification: SHA256 and lockfile support
  • Platform-specific URLs: Different URLs per platform

Configuration Examples

# Simple S3 download
[tools]
"s3:mytool" = { version = "1.0.0", url = "s3://bucket/tools/mytool-{version}.tar.gz" }

# With version discovery from manifest
[tools."s3:mytool"]
version = "latest"
url = "s3://bucket/tools/mytool-{version}.tar.gz"
version_list_url = "s3://bucket/tools/versions.json"

# With custom endpoint (MinIO)
[tools."s3:mytool"]
version = "1.0.0"
url = "s3://bucket/tools/mytool-{version}.tar.gz"
endpoint = "http://minio.internal:9000"
region = "us-east-1"

Test plan

  • Unit tests for S3 URL parsing (6 tests)
  • E2E tests for URL validation and error handling (e2e/backend/test_s3)
  • E2E tests with MinIO integration (e2e/backend/test_s3_minio_slow)
    • Basic S3 download and install
    • Version listing from manifest file
    • Version listing from S3 object listing
    • Checksum verification
    • Invalid checksum failure

🤖 Generated with Claude Code


Note

Adds an experimental s3 backend to install tools from Amazon S3 or S3‑compatible endpoints (e.g., MinIO), with version discovery and checksum/lockfile support.

  • New src/backend/s3.rs; registered in backend type routing and option key filtering
  • Supports s3:// URLs with templating, custom endpoint/region, manifest (version_list_url/version_json_path) or S3 listing (version_prefix/version_regex) discovery, bin_path, and checksum/size verification
  • Adds AWS SDK deps (aws-config, aws-sdk-s3); static_helpers now accepts explicit format override for archives without extensions
  • Docs: new docs/dev-tools/backends/s3.md and index entry
  • Tests: unit tests for URL parsing; E2E coverage incl. MinIO (e2e/backend/test_s3*)
  • CI: refresh advisory DB before cargo deny; deny.toml ignores RUSTSEC-2026-0002 (lru via aws-sdk-s3)

Written by Cursor Bugbot for commit c7343b1. This will update automatically on new commits. Configure here.

Copilot AI review requested due to automatic review settings January 14, 2026 17:39
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds S3 backend support to mise, enabling users to download and install tools from Amazon S3 or S3-compatible storage services like MinIO. This feature allows enterprise teams to host proprietary tools in private S3 buckets with full credential chain support and version discovery capabilities.

Changes:

  • New S3 backend implementation with support for AWS credential chain, custom endpoints, and checksum verification
  • Version discovery via manifest files or S3 object listing
  • Comprehensive E2E tests including MinIO integration tests

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src/backend/s3.rs Core S3 backend implementation with S3 URL parsing, download logic, version discovery, and checksum verification
src/backend/mod.rs Registration of S3 backend in the backend module system
src/backend/backend_type.rs Addition of S3 to the BackendType enum
e2e/backend/test_s3_minio_slow E2E tests with real MinIO server testing download, version listing, and checksum verification
e2e/backend/test_s3 E2E tests for URL validation and error handling without requiring S3 credentials
Cargo.toml Addition of AWS SDK dependencies for S3 support

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@jdx jdx force-pushed the feat/s3-backend branch 2 times, most recently from d7b244f to 8db8190 Compare January 14, 2026 17:48
Adds a new S3 backend for downloading tools from Amazon S3 or
S3-compatible storage (MinIO, etc). This enables enterprise teams
to host proprietary tools in private S3 buckets.

Features:
- S3 URL support (s3://bucket/path/to/tool-{version}.tar.gz)
- AWS SDK credential chain (env vars, ~/.aws/credentials, IAM roles)
- Custom endpoint support for MinIO and other S3-compatible services
- Version discovery via manifest files (version_list_url)
- Version discovery via S3 object listing (version_prefix + version_regex)
- Checksum verification and lockfile support
- Platform-specific URL support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@jdx
Copy link
Owner Author

jdx commented Jan 14, 2026

bugbot run

@jdx jdx force-pushed the feat/s3-backend branch from 27a7854 to 9770955 Compare January 14, 2026 17:59
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no bugs!

let endpoint = lookup_with_fallback(opts, "endpoint");
create_s3_client(region.as_deref(), endpoint.as_deref()).await
})
.await
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S3 client cached with stale endpoint/region configuration

Medium Severity

The OnceCell<S3Client> caches the S3 client after first initialization with region and endpoint options. Since backends are cached globally by tool name (e.g., s3:my-tool), if the same tool is configured with different endpoint or region values across different projects, the cached client from the first access will be reused, connecting to the wrong S3 server. This could cause authentication failures or download wrong artifacts without clear error messaging.

Fix in Cursor Fix in Web

@jdx jdx enabled auto-merge (squash) January 14, 2026 18:08
@github-actions
Copy link

github-actions bot commented Jan 14, 2026

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.2 x -- echo 19.5 ± 0.2 18.9 21.2 1.00
mise x -- echo 20.1 ± 0.4 19.4 24.0 1.03 ± 0.03

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.2 env 19.1 ± 0.6 18.4 24.7 1.00
mise env 19.5 ± 0.3 18.9 23.5 1.02 ± 0.04

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.2 hook-env 19.1 ± 0.2 18.6 20.2 1.00
mise hook-env 19.7 ± 0.4 19.1 24.1 1.03 ± 0.02

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.2 ls 17.3 ± 1.1 16.8 38.9 1.00
mise ls 17.8 ± 0.5 17.2 24.3 1.03 ± 0.07

xtasks/test/perf

Command mise-2026.1.2 mise Variance
install (cached) 110ms 110ms +0%
ls (cached) 66ms 66ms +0%
bin-paths (cached) 70ms 70ms +0%
task-ls (cached) 279ms 279ms +0%

Workaround for RustSec advisory database using CVSS 4.0 format
that cargo-deny doesn't support yet.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@jdx jdx force-pushed the feat/s3-backend branch from c11fea0 to 2b4c238 Compare January 14, 2026 18:41
@jdx jdx disabled auto-merge January 14, 2026 18:50
@jdx
Copy link
Owner Author

jdx commented Jan 14, 2026

bugbot run

The format option was documented but not actually used. Now install_artifact
checks for the format option and uses it to override format detection from
the file extension.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
jdx and others added 3 commits January 14, 2026 13:48
The lru crate has a soundness issue reported in RUSTSEC-2026-0002.
This is a transitive dependency from aws-sdk-s3 which hasn't been
updated yet with a fixed lru version. Ignoring until upstream fix.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move verify_checksum before install_artifact to match the github
backend's secure ordering. This ensures lockfile checksum is verified
before potentially tampered files are extracted to disk.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@jdx jdx changed the title feat(backend): add S3 backend for private artifact storage feat(s3): add S3 backend for private artifact storage Jan 14, 2026
@jdx jdx merged commit cd058d6 into main Jan 14, 2026
36 checks passed
@jdx jdx deleted the feat/s3-backend branch January 14, 2026 20:11
jdx pushed a commit that referenced this pull request Jan 16, 2026
### 🚀 Features

- **(s3)** add S3 backend for private artifact storage by @jdx in
[#7668](#7668)
- **(upgrade)** use installed_tool completer for mise upgrade by @jdx in
[#7670](#7670)
- **(upgrade)** add --exclude flag to mise upgrade command by @jdx in
[#7669](#7669)
- add no hooks and no env flags by @aacebedo in
[#7560](#7560)

### 🐛 Bug Fixes

- **(backend)** allow upgrading vfox backend tools with symlinked
installations by @TyceHerrman in
[#7012](#7012)
- **(backend)** reject architecture mismatches in asset selection by
@jdx in [#7672](#7672)
- **(backend)** canonicalize symlink target before installs check by
@jdx in [#7671](#7671)
- **(self-update)** skip update when already at latest version by @jdx
in [#7666](#7666)
- fall back to GITHUB_TOKEN for github.com by @subdigital in
[#7667](#7667)
- GitHub token fallback by @subdigital in
[#7673](#7673)
- inherit tasks from parent configs in monorepos by @chadxz in
[#7643](#7643)

### 📚 Documentation

- **(contributing)** update registry examples by @scop in
[#7660](#7660)
- **(contributing)** update registry PR title rule by @scop in
[#7663](#7663)
- remove 404 link from contributing by @opswole in
[#7692](#7692)

### 📦️ Dependency Updates

- update ghcr.io/jdx/mise:alpine docker digest to 11f659e by
@renovate[bot] in [#7685](#7685)
- update ghcr.io/jdx/mise:copr docker digest to 3adaea4 by
@renovate[bot] in [#7686](#7686)
- update ghcr.io/jdx/mise:deb docker digest to 8bbca53 by @renovate[bot]
in [#7687](#7687)
- update ghcr.io/jdx/mise:rpm docker digest to de81415 by @renovate[bot]
in [#7688](#7688)
- update mcr.microsoft.com/devcontainers/rust:1 docker digest to 282e805
by @renovate[bot] in [#7690](#7690)
- update rust docker digest to bed2d7f by @renovate[bot] in
[#7691](#7691)

### 📦 Registry

- add oh-my-posh by @scop in
[#7659](#7659)
- add bibtex-tidy (npm:bibtex-tidy) by @3w36zj6 in
[#7677](#7677)
- remove misconfigured bin_path option from kscript by @risu729 in
[#7693](#7693)

### New Contributors

- @opswole made their first contribution in
[#7692](#7692)
- @subdigital made their first contribution in
[#7673](#7673)
- @aacebedo made their first contribution in
[#7560](#7560)

## 📦 Aqua Registry Updates

#### New Packages (5)

- [`BeaconBay/ck`](https://github.com/BeaconBay/ck)
- [`d-kuro/gwq`](https://github.com/d-kuro/gwq)
-
[`kubernetes/cloud-provider-gcp/gke-gcloud-auth-plugin`](https://github.com/kubernetes/cloud-provider-gcp/gke-gcloud-auth-plugin)
- [`smithy-lang/smithy`](https://github.com/smithy-lang/smithy)
- [`tassiovirginio/try-rs`](https://github.com/tassiovirginio/try-rs)

#### Updated Packages (1)

- [`dprint/dprint`](https://github.com/dprint/dprint)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 22, 2026
## [2026.1.5](https://github.com/jdx/mise/compare/v2026.1.4..v2026.1.5) - 2026-01-19

### 🚀 Features

- **(complete)** add PowerShell completion support by @jdx in [#7746](jdx/mise#7746)
- **(release)** add LLM-generated prose summary to release notes by @jdx in [#7737](jdx/mise#7737)
- **(vfox)** add semver Lua module for version sorting by @jdx in [#7739](jdx/mise#7739)
- **(vfox)** add rolling release support with checksum tracking by @jdx in [#7757](jdx/mise#7757)
- dry filetask parsing and validation by @makp0 in [#7738](jdx/mise#7738)

### 🐛 Bug Fixes

- **(completions)** bump usage-cli to 2.13.1 for PowerShell support by @jdx in [#7756](jdx/mise#7756)
- schema missing env required string variant by @vadimpiven in [#7734](jdx/mise#7734)
- validate unknown fields in filetask headers by @makp0 in [#7733](jdx/mise#7733)
- disable schemacrawler test by @jdx in [#7743](jdx/mise#7743)
- replace double forward slash with single slash in get_task_lists by @collinstevens in [#7744](jdx/mise#7744)
- require LLM for release notes and include aqua section by @jdx in [#7745](jdx/mise#7745)
- preserve {{ version }} in tool options during config load by @jdx in [#7755](jdx/mise#7755)

### 📚 Documentation

- add documentation URL structure guidance to CLAUDE.md by @jdx in [#7740](jdx/mise#7740)
- add pitchfork promotion by @jdx in [#7747](jdx/mise#7747)

### 📦️ Dependency Updates

- relax version constraints and update dependencies by @jdx in [#7736](jdx/mise#7736)
- lock file maintenance by @renovate[bot] in [#7749](jdx/mise#7749)

### Chore

- bump xx to 2.3.1 by @jdx in [#7753](jdx/mise#7753)

### New Contributors

- @collinstevens made their first contribution in [#7744](jdx/mise#7744)
- @makp0 made their first contribution in [#7738](jdx/mise#7738)
- @vadimpiven made their first contribution in [#7734](jdx/mise#7734)

## [2026.1.4](https://github.com/jdx/mise/compare/v2026.1.3..v2026.1.4) - 2026-01-17

### 🚀 Features

- **(conda)** add dependency locking for reproducible installations by @jdx in [#7708](jdx/mise#7708)
- **(http)** add JSON filter syntax for version extraction by @jdx in [#7707](jdx/mise#7707)
- **(http)** add version_expr support and Tera templating by @jdx in [#7723](jdx/mise#7723)
- **(task)** add [monorepo].config_roots for explicit config root listing by @jdx in [#7705](jdx/mise#7705)
- **(task)** support env vars in task dependencies by @jdx in [#7724](jdx/mise#7724)

### 🐛 Bug Fixes

- **(conda)** fix hardcoded library paths in conda packages by @jdx in [#7713](jdx/mise#7713)
- **(env)** avoid venv/go backend deadlock during env resolution by @stk0vrfl0w in [#7696](jdx/mise#7696)
- **(locked)** exempt tool stubs from lockfile requirements by @jdx in [#7729](jdx/mise#7729)
- **(python)** sort CPython versions at end of ls-remote output by @jdx in [#7721](jdx/mise#7721)
- **(task)** resolve remote task files before display and validation commands by @yannrouillard in [#7681](jdx/mise#7681)
- **(task)** support monorepo paths in `mise tasks deps` by @chadxz in [#7699](jdx/mise#7699)
- **(task)** resolve all monorepo path hints in deps by @chadxz in [#7698](jdx/mise#7698)

### 📚 Documentation

- remove outdated roadmap page by @jdx in [#7726](jdx/mise#7726)

### ⚡ Performance

- **(task)** fix task-ls cached performance regression by @jdx in [#7716](jdx/mise#7716)

### 📦️ Dependency Updates

- replace dependency @tsconfig/node22 with @tsconfig/node24 by @renovate[bot] in [#7618](jdx/mise#7618)

### 📦 Registry

- add aqua backend for smithy by @jdx in [#7661](jdx/mise#7661)
- remove low-usage asdf plugins by @jdx in [#7701](jdx/mise#7701)
- disable mirrord test by @jdx in [#7703](jdx/mise#7703)
- use vfox-dotnet as default backend by @jdx in [#7704](jdx/mise#7704)
- use vfox-lua as default lua backend by @jdx in [#7706](jdx/mise#7706)
- add vfox backend for redis by @jdx in [#7709](jdx/mise#7709)
- use vfox-postgres as default postgres backend by @jdx in [#7710](jdx/mise#7710)
- use github backend for kotlin by @jdx in [#7711](jdx/mise#7711)
- add vfox backend for leiningen by @jdx in [#7714](jdx/mise#7714)
- use pipx backend for meson by @jdx in [#7712](jdx/mise#7712)
- use github backend for crystal by @jdx in [#7715](jdx/mise#7715)
- use conda backend for sqlite by @jdx in [#7718](jdx/mise#7718)
- use conda backend for make by @jdx in [#7719](jdx/mise#7719)
- swift-package-list use github backend by @jdx in [#7720](jdx/mise#7720)

### Chore

- increase macos release build timeout to 90 minutes by @jdx in [#7725](jdx/mise#7725)

### New Contributors

- @yannrouillard made their first contribution in [#7681](jdx/mise#7681)
- @stk0vrfl0w made their first contribution in [#7696](jdx/mise#7696)

## [2026.1.3](https://github.com/jdx/mise/compare/v2026.1.2..v2026.1.3) - 2026-01-16

### 🚀 Features

- **(s3)** add S3 backend for private artifact storage by @jdx in [#7668](jdx/mise#7668)
- **(upgrade)** use installed_tool completer for mise upgrade by @jdx in [#7670](jdx/mise#7670)
- **(upgrade)** add --exclude flag to mise upgrade command by @jdx in [#7669](jdx/mise#7669)
- add no hooks and no env flags by @aacebedo in [#7560](jdx/mise#7560)

### 🐛 Bug Fixes

- **(backend)** allow upgrading vfox backend tools with symlinked installations by @TyceHerrman in [#7012](jdx/mise#7012)
- **(backend)** reject architecture mismatches in asset selection by @jdx in [#7672](jdx/mise#7672)
- **(backend)** canonicalize symlink target before installs check by @jdx in [#7671](jdx/mise#7671)
- **(npm)** avoid circular dependency when npm is in dependencies by @AprilNEA in [#7644](jdx/mise#7644)
- **(self-update)** skip update when already at latest version by @jdx in [#7666](jdx/mise#7666)
- fall back to GITHUB_TOKEN for github.com by @subdigital in [#7667](jdx/mise#7667)
- GitHub token fallback by @subdigital in [#7673](jdx/mise#7673)
- inherit tasks from parent configs in monorepos by @chadxz in [#7643](jdx/mise#7643)

### 📚 Documentation

- **(contributing)** update registry examples by @scop in [#7660](jdx/mise#7660)
- **(contributing)** update registry PR title rule by @scop in [#7663](jdx/mise#7663)
- remove 404 link from contributing by @opswole in [#7692](jdx/mise#7692)
- clarify that backend plugins should sort the version list by @ofalvai in [#7680](jdx/mise#7680)

### 📦️ Dependency Updates

- update ghcr.io/jdx/mise:alpine docker digest to 11f659e by @renovate[bot] in [#7685](jdx/mise#7685)
- update ghcr.io/jdx/mise:copr docker digest to 3adaea4 by @renovate[bot] in [#7686](jdx/mise#7686)
- update ghcr.io/jdx/mise:deb docker digest to 8bbca53 by @renovate[bot] in [#7687](jdx/mise#7687)
- update ghcr.io/jdx/mise:rpm docker digest to de81415 by @renovate[bot] in [#7688](jdx/mise#7688)
- update mcr.microsoft.com/devcontainers/rust:1 docker digest to 282e805 by @renovate[bot] in [#7690](jdx/mise#7690)
- update rust docker digest to bed2d7f by @renovate[bot] in [#7691](jdx/mise#7691)

### 📦 Registry

- add oh-my-posh by @scop in [#7659](jdx/mise#7659)
- add bibtex-tidy (npm:bibtex-tidy) by @3w36zj6 in [#7677](jdx/mise#7677)
- remove misconfigured bin_path option from kscript by @risu729 in [#7693](jdx/mise#7693)

### New Contributors

- @AprilNEA made their first contribution in [#7644](jdx/mise#7644)
- @opswole made their first contribution in [#7692](jdx/mise#7692)
- @subdigital made their first contribution in [#7673](jdx/mise#7673)
- @aacebedo made their first contribution in [#7560](jdx/mise#7560)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 25, 2026
## [2026.1.5](https://github.com/jdx/mise/compare/v2026.1.4..v2026.1.5) - 2026-01-19

### 🚀 Features

- **(complete)** add PowerShell completion support by @jdx in [#7746](jdx/mise#7746)
- **(release)** add LLM-generated prose summary to release notes by @jdx in [#7737](jdx/mise#7737)
- **(vfox)** add semver Lua module for version sorting by @jdx in [#7739](jdx/mise#7739)
- **(vfox)** add rolling release support with checksum tracking by @jdx in [#7757](jdx/mise#7757)
- dry filetask parsing and validation by @makp0 in [#7738](jdx/mise#7738)

### 🐛 Bug Fixes

- **(completions)** bump usage-cli to 2.13.1 for PowerShell support by @jdx in [#7756](jdx/mise#7756)
- schema missing env required string variant by @vadimpiven in [#7734](jdx/mise#7734)
- validate unknown fields in filetask headers by @makp0 in [#7733](jdx/mise#7733)
- disable schemacrawler test by @jdx in [#7743](jdx/mise#7743)
- replace double forward slash with single slash in get_task_lists by @collinstevens in [#7744](jdx/mise#7744)
- require LLM for release notes and include aqua section by @jdx in [#7745](jdx/mise#7745)
- preserve {{ version }} in tool options during config load by @jdx in [#7755](jdx/mise#7755)

### 📚 Documentation

- add documentation URL structure guidance to CLAUDE.md by @jdx in [#7740](jdx/mise#7740)
- add pitchfork promotion by @jdx in [#7747](jdx/mise#7747)

### 📦️ Dependency Updates

- relax version constraints and update dependencies by @jdx in [#7736](jdx/mise#7736)
- lock file maintenance by @renovate[bot] in [#7749](jdx/mise#7749)

### Chore

- bump xx to 2.3.1 by @jdx in [#7753](jdx/mise#7753)

### New Contributors

- @collinstevens made their first contribution in [#7744](jdx/mise#7744)
- @makp0 made their first contribution in [#7738](jdx/mise#7738)
- @vadimpiven made their first contribution in [#7734](jdx/mise#7734)

## [2026.1.4](https://github.com/jdx/mise/compare/v2026.1.3..v2026.1.4) - 2026-01-17

### 🚀 Features

- **(conda)** add dependency locking for reproducible installations by @jdx in [#7708](jdx/mise#7708)
- **(http)** add JSON filter syntax for version extraction by @jdx in [#7707](jdx/mise#7707)
- **(http)** add version_expr support and Tera templating by @jdx in [#7723](jdx/mise#7723)
- **(task)** add [monorepo].config_roots for explicit config root listing by @jdx in [#7705](jdx/mise#7705)
- **(task)** support env vars in task dependencies by @jdx in [#7724](jdx/mise#7724)

### 🐛 Bug Fixes

- **(conda)** fix hardcoded library paths in conda packages by @jdx in [#7713](jdx/mise#7713)
- **(env)** avoid venv/go backend deadlock during env resolution by @stk0vrfl0w in [#7696](jdx/mise#7696)
- **(locked)** exempt tool stubs from lockfile requirements by @jdx in [#7729](jdx/mise#7729)
- **(python)** sort CPython versions at end of ls-remote output by @jdx in [#7721](jdx/mise#7721)
- **(task)** resolve remote task files before display and validation commands by @yannrouillard in [#7681](jdx/mise#7681)
- **(task)** support monorepo paths in `mise tasks deps` by @chadxz in [#7699](jdx/mise#7699)
- **(task)** resolve all monorepo path hints in deps by @chadxz in [#7698](jdx/mise#7698)

### 📚 Documentation

- remove outdated roadmap page by @jdx in [#7726](jdx/mise#7726)

### ⚡ Performance

- **(task)** fix task-ls cached performance regression by @jdx in [#7716](jdx/mise#7716)

### 📦️ Dependency Updates

- replace dependency @tsconfig/node22 with @tsconfig/node24 by @renovate[bot] in [#7618](jdx/mise#7618)

### 📦 Registry

- add aqua backend for smithy by @jdx in [#7661](jdx/mise#7661)
- remove low-usage asdf plugins by @jdx in [#7701](jdx/mise#7701)
- disable mirrord test by @jdx in [#7703](jdx/mise#7703)
- use vfox-dotnet as default backend by @jdx in [#7704](jdx/mise#7704)
- use vfox-lua as default lua backend by @jdx in [#7706](jdx/mise#7706)
- add vfox backend for redis by @jdx in [#7709](jdx/mise#7709)
- use vfox-postgres as default postgres backend by @jdx in [#7710](jdx/mise#7710)
- use github backend for kotlin by @jdx in [#7711](jdx/mise#7711)
- add vfox backend for leiningen by @jdx in [#7714](jdx/mise#7714)
- use pipx backend for meson by @jdx in [#7712](jdx/mise#7712)
- use github backend for crystal by @jdx in [#7715](jdx/mise#7715)
- use conda backend for sqlite by @jdx in [#7718](jdx/mise#7718)
- use conda backend for make by @jdx in [#7719](jdx/mise#7719)
- swift-package-list use github backend by @jdx in [#7720](jdx/mise#7720)

### Chore

- increase macos release build timeout to 90 minutes by @jdx in [#7725](jdx/mise#7725)

### New Contributors

- @yannrouillard made their first contribution in [#7681](jdx/mise#7681)
- @stk0vrfl0w made their first contribution in [#7696](jdx/mise#7696)

## [2026.1.3](https://github.com/jdx/mise/compare/v2026.1.2..v2026.1.3) - 2026-01-16

### 🚀 Features

- **(s3)** add S3 backend for private artifact storage by @jdx in [#7668](jdx/mise#7668)
- **(upgrade)** use installed_tool completer for mise upgrade by @jdx in [#7670](jdx/mise#7670)
- **(upgrade)** add --exclude flag to mise upgrade command by @jdx in [#7669](jdx/mise#7669)
- add no hooks and no env flags by @aacebedo in [#7560](jdx/mise#7560)

### 🐛 Bug Fixes

- **(backend)** allow upgrading vfox backend tools with symlinked installations by @TyceHerrman in [#7012](jdx/mise#7012)
- **(backend)** reject architecture mismatches in asset selection by @jdx in [#7672](jdx/mise#7672)
- **(backend)** canonicalize symlink target before installs check by @jdx in [#7671](jdx/mise#7671)
- **(npm)** avoid circular dependency when npm is in dependencies by @AprilNEA in [#7644](jdx/mise#7644)
- **(self-update)** skip update when already at latest version by @jdx in [#7666](jdx/mise#7666)
- fall back to GITHUB_TOKEN for github.com by @subdigital in [#7667](jdx/mise#7667)
- GitHub token fallback by @subdigital in [#7673](jdx/mise#7673)
- inherit tasks from parent configs in monorepos by @chadxz in [#7643](jdx/mise#7643)

### 📚 Documentation

- **(contributing)** update registry examples by @scop in [#7660](jdx/mise#7660)
- **(contributing)** update registry PR title rule by @scop in [#7663](jdx/mise#7663)
- remove 404 link from contributing by @opswole in [#7692](jdx/mise#7692)
- clarify that backend plugins should sort the version list by @ofalvai in [#7680](jdx/mise#7680)

### 📦️ Dependency Updates

- update ghcr.io/jdx/mise:alpine docker digest to 11f659e by @renovate[bot] in [#7685](jdx/mise#7685)
- update ghcr.io/jdx/mise:copr docker digest to 3adaea4 by @renovate[bot] in [#7686](jdx/mise#7686)
- update ghcr.io/jdx/mise:deb docker digest to 8bbca53 by @renovate[bot] in [#7687](jdx/mise#7687)
- update ghcr.io/jdx/mise:rpm docker digest to de81415 by @renovate[bot] in [#7688](jdx/mise#7688)
- update mcr.microsoft.com/devcontainers/rust:1 docker digest to 282e805 by @renovate[bot] in [#7690](jdx/mise#7690)
- update rust docker digest to bed2d7f by @renovate[bot] in [#7691](jdx/mise#7691)

### 📦 Registry

- add oh-my-posh by @scop in [#7659](jdx/mise#7659)
- add bibtex-tidy (npm:bibtex-tidy) by @3w36zj6 in [#7677](jdx/mise#7677)
- remove misconfigured bin_path option from kscript by @risu729 in [#7693](jdx/mise#7693)

### New Contributors

- @AprilNEA made their first contribution in [#7644](jdx/mise#7644)
- @opswole made their first contribution in [#7692](jdx/mise#7692)
- @subdigital made their first contribution in [#7673](jdx/mise#7673)
- @aacebedo made their first contribution in [#7560](jdx/mise#7560)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants