Skip to content

#247 was closed as completed, but four of its five distribution channels do not exist — and install friction is now a competitive position, not a convenience #501

Description

@sotashimozono

What #247 promised and what shipped

#247 ("Multiplatform Distribution Channels — npm/npx, Homebrew, deb/apt, curl, Nix") was closed as completed on 2026-06-20. Measured against the v0.8.9 release on 2026-08-25, what actually exists is:

channel promised in #247 present today
curl installer yes yesscripts/install.sh, scripts/install.ps1
npm / npx yes no — no npm package; nothing in the release assets
Homebrew tap yes no
Debian / apt yes no — no .deb asset
Nix flake yes partial/unknown — a flake.nix exists in the tree, but whether it exposes an installable package output rather than a dev shell was not checked

The v0.8.9 release assets are: four raw binaries (linux-x86_64, macos-aarch64, macos-x86_64, windows-x86_64.exe), one .mcpb, one CycloneDX SBOM, plus .sha256 and .cosign.bundle for each. Good artifacts, narrow channels.

README.md:114 still tells readers these channels are "tracked in #247" — a link to a closed issue. So the README currently points a reader at a completed ticket for work that was not done.

That is the same pattern #493 and #472 are about: a status claim that outran the thing it described. Reopening or superseding #247 is the smaller half of this issue; the larger half is below.

Why this stopped being a convenience item

The comparable MCP server in this niche (openags/paper-search-mcp, 2.5k stars, 249 forks, Python/MIT, actively maintained) ships seven install paths: Smithery, uvx, uv, pip, npx, Docker, and clone-from-source.

doiget's equivalent for a non-Rust user is: download a binary and put it on PATH, or install a C toolchain and cargo install doiget-cli. README.md:101-110 spends ten lines explaining that Windows users need Visual Studio Build Tools or MinGW-w64 before cargo install will link. That paragraph is an accurate description of a real barrier.

For an MCP server specifically, the channel that matters most is the one an agent config can name inline. npx -y <pkg> and uvx <pkg> are single lines in a config file with no prior install step; a downloaded binary is not. Every Claude Desktop / agent-runner config example in the ecosystem is written in that shape, and a tool that cannot be written that way is compared unfavourably before its behaviour is ever evaluated.

Suggested priority, highest first

  1. npx — the MCP ecosystem's default invocation shape. A thin npm wrapper that downloads the matching signed release binary on first run, verifying the existing .sha256 / .cosign.bundle, keeps the Rust build out of the user's path while preserving the supply-chain story.
  2. Docker — what enterprise and CI environments ask for, and the shape in which a security team can pin and scan an artifact. Also the natural answer to "run it inside our network with our own credentials", which is the only architecture the Tier-3 features can legally be used in.
  3. Homebrew tap — macOS developer default; a tap is cheap to maintain from existing assets.
  4. .deb — lower value; most Linux users will take the binary or the container.

cargo binstall deserves a mention: it needs no new channel, only correctly-named release assets, and may already work or nearly work. Worth checking before building anything.

Constraints worth stating up front

  • Whatever is added must not weaken the release posture. Every current asset is cosign-keyless signed with a published SBOM; a wrapper that downloads a binary must verify it, not merely fetch it.
  • ADR-0015 forbids self-update and phone-home. A first-run downloader is close enough to that boundary that it needs an explicit decision rather than an assumption — it downloads on install, not on use, and never checks for versions afterwards.
  • More channels means more places a release can half-land. Proposal: Multiplatform Distribution Channels (npm/npx, Homebrew, deb/apt, curl, Nix) #247 was closed as completed while four fifths of it was not; whatever lands here should be asserted by the release pipeline, not by a checkbox.

Refs #247, #483, ADR-0015.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions