Skip to content

docs: simplify OS detection in tool plugin development#6287

Merged
jdx merged 5 commits intomainfrom
simplify-plugin-os-detection
Sep 13, 2025
Merged

docs: simplify OS detection in tool plugin development#6287
jdx merged 5 commits intomainfrom
simplify-plugin-os-detection

Conversation

@jdx
Copy link
Owner

@jdx jdx commented Sep 13, 2025

Summary

Simplifies OS detection in the tool plugin development documentation by using the RUNTIME object provided by vfox/mise instead of complex manual detection patterns.

Changes

  • Replace complex OS detection using package.config:sub(1,1) and os.capture("uname") with the simpler RUNTIME.osType
  • Replace architecture detection using shell commands with RUNTIME.archType
  • Update all examples to use the cleaner approach
  • Add documentation about the RUNTIME object properties

Benefits

The new approach:

  • Eliminates dependency on non-standard os.capture() function
  • Removes need for shell command execution
  • Provides consistent, reliable platform detection
  • Makes plugin code cleaner and easier to understand
  • Works consistently across all platforms (Windows, Linux, macOS)

Example

Before:

if package.config:sub(1,1) == '\\' then
    return "win"
else
    local os_name = os.capture("uname"):lower()
    if os_name:find("darwin") then
        return "darwin"
    else
        return "linux"
    end
end

After:

local os = RUNTIME.osType:lower()
if os == "windows" then
    return "win"
elseif os == "darwin" then
    return "darwin"
else
    return "linux"
end

🤖 Generated with Claude Code

Replace complex OS detection patterns with the simpler RUNTIME object
provided by vfox/mise. This eliminates the need for:
- Non-standard os.capture() function calls
- Shell command execution for platform detection
- Complex string parsing with package.config

The RUNTIME object provides clean, consistent access to:
- RUNTIME.osType: "Windows", "Linux", or "Darwin"
- RUNTIME.archType: "amd64", "arm64", "386", etc.

This makes plugin development simpler and more reliable.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings September 13, 2025 14:10
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 simplifies OS detection in the tool plugin development documentation by replacing complex manual platform detection with the built-in RUNTIME object provided by vfox/mise.

  • Replaces manual OS detection using package.config:sub(1,1) and os.capture("uname") with RUNTIME.osType
  • Replaces architecture detection using shell commands with RUNTIME.archType
  • Adds documentation about the RUNTIME object properties and their values

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.


-- Set executable permissions on Unix systems
if helper.get_os() ~= "win" then
if RUNTIME.osType ~= "Windows" then
Copy link

Copilot AI Sep 13, 2025

Choose a reason for hiding this comment

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

Inconsistent OS name casing. Use lowercase 'windows' for consistency with other OS checks in the file (line 280, 356, 407, 438).

Copilot uses AI. Check for mistakes.
-- Configure npm to use local cache
local npm_cmd = path .. "/bin/npm"
if helper.get_os() == "win" then
if RUNTIME.osType == "Windows" then
Copy link

Copilot AI Sep 13, 2025

Choose a reason for hiding this comment

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

Inconsistent OS name casing. Use lowercase 'windows' for consistency with other OS checks in the file (line 280, 356, 407).

Copilot uses AI. Check for mistakes.

function M.is_windows()
return package.config:sub(1,1) == '\\'
return RUNTIME.osType == "Windows"
Copy link

Copilot AI Sep 13, 2025

Choose a reason for hiding this comment

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

Inconsistent OS name casing. Use lowercase 'windows' for consistency with other OS checks in the file.

Suggested change
return RUNTIME.osType == "Windows"
return RUNTIME.osType == "windows"

Copilot uses AI. Check for mistakes.
Comment on lines +656 to +659
if RUNTIME.osType == "Windows" then
-- Windows-specific installation
return install_windows(version)
elseif platform:match("darwin") then
elseif RUNTIME.osType == "Darwin" then
Copy link

Copilot AI Sep 13, 2025

Choose a reason for hiding this comment

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

Inconsistent OS name casing. Use lowercase 'windows' and 'darwin' for consistency with other OS checks in the file.

Copilot uses AI. Check for mistakes.
Comment on lines +656 to +659
if RUNTIME.osType == "Windows" then
-- Windows-specific installation
return install_windows(version)
elseif platform:match("darwin") then
elseif RUNTIME.osType == "Darwin" then
Copy link

Copilot AI Sep 13, 2025

Choose a reason for hiding this comment

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

Inconsistent OS name casing. Use lowercase 'windows' and 'darwin' for consistency with other OS checks in the file.

Copilot uses AI. Check for mistakes.
-- Platform-specific additions
local helper = require("lib/helper")
if helper.get_os() == "darwin" then
if RUNTIME.osType == "Darwin" then
Copy link

Copilot AI Sep 13, 2025

Choose a reason for hiding this comment

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

Inconsistent OS name casing. Use lowercase 'darwin' for consistency with other OS checks in the file.

Suggested change
if RUNTIME.osType == "Darwin" then
if RUNTIME.osType == "darwin" then

Copilot uses AI. Check for mistakes.
cursor[bot]

This comment was marked as outdated.

@github-actions
Copy link

github-actions bot commented Sep 13, 2025

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2025.9.9 x -- echo 19.5 ± 0.6 18.9 23.0 1.00
mise x -- echo 19.5 ± 0.7 18.7 25.7 1.00 ± 0.05

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2025.9.9 env 18.7 ± 0.3 18.0 22.6 1.00
mise env 18.8 ± 0.5 18.3 23.6 1.01 ± 0.03

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2025.9.9 hook-env 18.3 ± 0.3 17.8 22.1 1.00
mise hook-env 18.5 ± 0.8 17.8 29.5 1.01 ± 0.05

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2025.9.9 ls 16.3 ± 0.4 15.8 18.0 1.00
mise ls 16.4 ± 0.4 15.8 18.0 1.01 ± 0.03

xtasks/test/perf

Command mise-2025.9.9 mise Variance
install (cached) 167ms ✅ 103ms +62%
ls (cached) 63ms 63ms +0%
bin-paths (cached) 69ms 69ms +0%
task-ls (cached) 470ms 477ms -1%

✅ Performance improvement: install cached is 62%

cursor[bot]

This comment was marked as outdated.

jdx and others added 2 commits September 13, 2025 09:28
Add documentation references to the mise-tool-plugin-template repository
across multiple documentation files to guide developers to use the template
as a starting point for plugin development. This includes:

- Tool plugin development guide with template quick start
- Backend plugin development adaptation instructions
- Plugin publishing repository setup recommendations
- Plugin overview pages with template links
- Contributing guide plugin creation guidance
- Migration path from asdf plugins
- vfox backend resources section

The template provides pre-configured structure, linting, testing setup,
and GitHub Actions workflows to help developers create plugins faster.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@jdx jdx merged commit 424cbb4 into main Sep 13, 2025
19 checks passed
@jdx jdx deleted the simplify-plugin-os-detection branch September 13, 2025 15:05
@jdx jdx mentioned this pull request Sep 13, 2025
jdx added a commit that referenced this pull request Sep 13, 2025
### 📦 Registry

- use asdf to install semver-tool by @jylenhof in
[#6233](#6233)

### 🐛 Bug Fixes

- **(tool-stub)** detect binary names from single-file downloads by @jdx
in [#6281](#6281)

### 🚜 Refactor

- allow any collection types in deserialize_arr by @risu729 in
[#6282](#6282)
- use deserialize_arr for task runs by @risu729 in
[#6253](#6253)

### 📚 Documentation

- **(getting-started)** add backends step with diagram, github example,
env vars and simple tasks by @jdx in
[#6288](#6288)
- simplify OS detection in tool plugin development by @jdx in
[#6287](#6287)
- update backend plugin template references by @jdx in
[942f5eb](942f5eb)

### 📦️ Dependency Updates

- update rust crate chrono to v0.4.42 by @renovate[bot] in
[#6274](#6274)
- update taiki-e/install-action digest to 0154864 by @renovate[bot] in
[#6273](#6273)

### Chore

- **(schema)** fix schema for subtasks by @risu729 in
[#6289](#6289)
- update render:schema task by @risu729 in
[#6275](#6275)

Co-authored-by: mise-en-dev <release@mise.jdx.dev>
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Sep 19, 2025
## [2025.9.12](https://github.com/jdx/mise/compare/v2025.9.11..v2025.9.12) - 2025-09-16

### 🐛 Bug Fixes

- **(ci)** properly exclude aqua-registry files from hk linting by @jdx in [42d7758](jdx/mise@42d7758)

### Chore

- **(release)** embed aqua-registry under crate and publish like vfox by @jdx in [#6306](jdx/mise#6306)
- ignore aqua-registry assets from prettier by @jdx in [047d77b](jdx/mise@047d77b)
- disable "useless cat" shellcheck by @jdx in [a6def59](jdx/mise@a6def59)

## [2025.9.11](https://github.com/jdx/mise/compare/v2025.9.10..v2025.9.11) - 2025-09-16

### 📦 Registry

- indicate aws-cli is v2 by @jayvdb in [#6300](jdx/mise#6300)

### 🚀 Features

- **(ci)** run all registry tools when workflow_dispatch is triggered by @jdx in [#6295](jdx/mise#6295)
- **(cli)** handle non-existent working directories gracefully by @jdx in [#6304](jdx/mise#6304)
- **(set)** add -E/--env flag to mise set command by @jdx in [#6291](jdx/mise#6291)
- **(tasks)** make auto outputs default by @risu729 in [#6137](jdx/mise#6137)

### 🐛 Bug Fixes

- align crate versions to fix release-plz script by @jdx in [5a464e9](jdx/mise@5a464e9)

### 🚜 Refactor

- **(aqua)** extract aqua registry into internal subcrate by @jdx in [#6293](jdx/mise#6293)

### 📚 Documentation

- fix mkdir paths by @risu729 in [#6298](jdx/mise#6298)
- fix rust profile default by @risu729 in [#6305](jdx/mise#6305)

### Chore

- **(aqua-registry)** remove unused aqua-registry files by @jdx in [#6294](jdx/mise#6294)
- **(release)** make release-plz idempotent for existing crate versions by @jdx in [dbdfd6a](jdx/mise@dbdfd6a)
- **(release)** skip publishing mise when aqua-registry is a path dep by @jdx in [47efffd](jdx/mise@47efffd)
- keep aqua-registry LICENSE file by @risu729 in [#6297](jdx/mise#6297)

### New Contributors

- @jayvdb made their first contribution in [#6300](jdx/mise#6300)

## [2025.9.10](https://github.com/jdx/mise/compare/v2025.9.9..v2025.9.10) - 2025-09-13

### 📦 Registry

- use asdf to install semver-tool by @jylenhof in [#6233](jdx/mise#6233)

### 🐛 Bug Fixes

- **(tool-stub)** detect binary names from single-file downloads by @jdx in [#6281](jdx/mise#6281)

### 🚜 Refactor

- allow any collection types in deserialize_arr by @risu729 in [#6282](jdx/mise#6282)
- use deserialize_arr for task runs by @risu729 in [#6253](jdx/mise#6253)

### 📚 Documentation

- **(getting-started)** add backends step with diagram, github example, env vars and simple tasks by @jdx in [#6288](jdx/mise#6288)
- simplify OS detection in tool plugin development by @jdx in [#6287](jdx/mise#6287)
- update backend plugin template references by @jdx in [942f5eb](jdx/mise@942f5eb)

### 📦️ Dependency Updates

- update rust crate chrono to v0.4.42 by @renovate[bot] in [#6274](jdx/mise#6274)
- update taiki-e/install-action digest to 0154864 by @renovate[bot] in [#6273](jdx/mise#6273)

### Chore

- **(schema)** fix schema for subtasks by @risu729 in [#6289](jdx/mise#6289)
- update render:schema task by @risu729 in [#6275](jdx/mise#6275)

## [2025.9.9](https://github.com/jdx/mise/compare/v2025.9.8..v2025.9.9) - 2025-09-11

### 🐛 Bug Fixes

- **(backend)** make HTTP installs atomic and serialize with cache lock by @jdx in [#6259](jdx/mise#6259)
- **(env)** allow nested env._.path directives by @risu729 in [#6160](jdx/mise#6160)
- **(env)** disallow nested env objects by @risu729 in [#6268](jdx/mise#6268)
- **(schema)** allow nested arrays in task.depends by @risu729 in [#6265](jdx/mise#6265)
- **(task)** resolve jobs=1 hang and keep-order panic; improve Ctrl-C handling by @jdx in [#6264](jdx/mise#6264)
- **(tasks)** stop CLI group after first failure without --continue-on-error by @jdx in [#6270](jdx/mise#6270)

### 📚 Documentation

- fixed toml issues in URL replacements settings documentation by @ThomasSteinbach in [#6269](jdx/mise#6269)

### Chore

- **(schema)** strict oneOf branches and DRY env_directive in schemas by @jdx in [#6271](jdx/mise#6271)
- add schema linter by @risu729 in [#6267](jdx/mise#6267)

## [2025.9.8](https://github.com/jdx/mise/compare/v2025.9.7..v2025.9.8) - 2025-09-10

### 🐛 Bug Fixes

- **(tasks)** prevent hang when task fails in sequence by @jdx in [#6260](jdx/mise#6260)
- **(version)** fetch mise version if cached version is older than the current by @risu729 in [#6252](jdx/mise#6252)

### 📦️ Dependency Updates

- update rhysd/action-setup-vim action to v1.4.3 by @renovate[bot] in [#6249](jdx/mise#6249)

## [2025.9.7](https://github.com/jdx/mise/compare/v2025.9.6..v2025.9.7) - 2025-09-09

### 🐛 Bug Fixes

- **(env)** allow mixed map for env._.file by @risu729 in [#6148](jdx/mise#6148)
- **(tasks)** restore parallel starts with poetry via list_paths cache and stable exec-env cache by @jdx in [#6237](jdx/mise#6237)
- add 'unknown' to the list of OS patterns by @efussi in [#6235](jdx/mise#6235)
- propagate errors from backend installs by @jdx in [#6236](jdx/mise#6236)

### 📦️ Dependency Updates

- update taiki-e/install-action digest to 0c5db7f by @renovate[bot] in [#6244](jdx/mise#6244)
- update golang docker tag to v1.25.1 by @renovate[bot] in [#6247](jdx/mise#6247)
- update dependency vitepress to v1.6.4 by @renovate[bot] in [#6246](jdx/mise#6246)

### New Contributors

- @efussi made their first contribution in [#6235](jdx/mise#6235)
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