feat: add 0install as an installation method on the downloads page - #9026
feat: add 0install as an installation method on the downloads page#9026bastianeicher wants to merge 1 commit into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
PR SummaryLow Risk Overview A new A ZeroInstall SVG icon is added to Reviewed by Cursor Bugbot for commit dd73fcf. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
Pull request overview
Adds 0install as a community installation method on the Downloads page, including a new UI icon and snippet logic to support installing pnpm via 0install’s feed instead of Corepack.
Changes:
- Added a new
ZeroInstallinstallation-method icon and exported it through the UI icon index (plus Storybook coverage). - Added
ZEROINSTALLto the downloads install-method constants and theInstallationMethodtype union. - Introduced a new 0install download snippet and adjusted snippet processing to skip Corepack installation when using
ZEROINSTALL + PNPM; updated the English pnpm snippet accordingly.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/ui-components/src/Icons/InstallationMethod/ZeroInstall.tsx | Adds the 0install SVG icon component. |
| packages/ui-components/src/Icons/InstallationMethod/index.ts | Exports the new ZeroInstall icon. |
| packages/ui-components/design/platform-logos.stories.tsx | Displays the new icon in the design Storybook. |
| packages/i18n/src/locales/en.json | Adds English platform info text for 0install. |
| apps/site/util/download/constants.json | Registers ZEROINSTALL as a new install method (name/icon/url/info). |
| apps/site/types/release.ts | Extends the InstallationMethod union with ZEROINSTALL. |
| apps/site/snippets/en/download/zeroinstall.bash | Adds the English 0install installation snippet. |
| apps/site/snippets/en/download/pnpm.bash | Uses 0install feed for pnpm when installMethod === 'ZEROINSTALL'. |
| apps/site/components/Downloads/Release/ReleaseCodeBox.tsx | Skips Corepack-install snippet when using ZEROINSTALL + PNPM. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 9 out of 9 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
apps/site/snippets/en/download/zeroinstall.bash:7
0install adddoes not support a--versionflag (per 0install CLI docs, version constraints are handled via0install select --version=.../ selections). As written, these commands will likely fail with an unknown option error, breaking the generated download snippet for 0install.
If you don't intend to pin an exact version here, remove the --version templating from the add commands (or switch to the documented 0install select flow if pinning is required).
0install add node https://apps.0install.net/javascript/node.xml${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npm https://apps.0install.net/javascript/node.xml --command=npm${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npx https://apps.0install.net/javascript/node.xml --command=npx${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
|
Note Your Pull Request seems to be updating Translations of the Node.js Website. Whilst we appreciate your intent; Any Translation update should be done through our Crowdin Project. Thank you! |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 23 out of 23 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
packages/ui-components/src/Icons/InstallationMethod/ZeroInstall.tsx:9
- This new SVG icon component omits default
width/heightattributes on the root<svg>, unlike the other InstallationMethod icons in this folder (they default to 32×32). Without explicit sizing props, the browser default (300×150) can cause inconsistent rendering in consumers.
<svg
xmlns="http://www.w3.org/2000/svg"
xmlnsXlink="http://www.w3.org/1999/xlink"
viewBox="0 0 68 68"
{...props}
>
This comment was marked as outdated.
This comment was marked as outdated.
|
Please only update the english site |
|
3ff16a6 to
0f5fa0b
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
apps/site/snippets/en/download/zeroinstall.bash:6
- These
0install addcommands use--command=...for npm/npx. The published 0install man pages and user guide foradddocument the form0install add NAME URIand do not list--commandas a supported option foradd, which makes this snippet likely to fail for users on some 0install versions/platforms.
0install add node https://apps.0install.net/javascript/node.xml${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npm https://apps.0install.net/javascript/node.xml --command=npm${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npx https://apps.0install.net/javascript/node.xml --command=npx${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0f5fa0b to
732e67f
Compare
572ff80 to
ac15bab
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (2)
apps/site/snippets/en/download/zeroinstall.bash:6
- The 0install CLI syntax in this snippet places options after the URI/positional args (e.g.
0install download <URI> --version=... --pinand0install add npm <URI> --command=npm ...). In the documented synopsis for these subcommands, options are expected before positional arguments; with many CLIs this means the flags can be ignored or treated as extra args, producing a non-working snippet for users.
${props.os === 'WIN' ? '\n# Download specific Node.js version:\n0install download https://apps.0install.net/javascript/node.xml --version=' + props.release.version + ' --pin\n' : ''}
# Add Node.js and NPM to PATH:
0install add node https://apps.0install.net/javascript/node.xml${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npm https://apps.0install.net/javascript/node.xml --command=npm${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npx https://apps.0install.net/javascript/node.xml --command=npx${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
packages/ui-components/src/Icons/InstallationMethod/ZeroInstall.tsx:9
- Other installation-method icons in this directory set a default
width/heighton the root<svg>(typically32x32). This icon omits them, so rendering it without explicit sizing (outside helper call sites like Storybook/dropdowns) will fall back to the SVG default size, which can break layout consistency.
<svg
xmlns="http://www.w3.org/2000/svg"
xmlnsXlink="http://www.w3.org/1999/xlink"
viewBox="0 0 68 68"
{...props}
| # Enable global package installation: | ||
| npm config set prefix ${props.os === 'WIN' ? '"$env:appdata\\npm"' : '~/.npm-global'} |
There was a problem hiding this comment.
Is this needed? Why does 0install require changing npm configs?
There was a problem hiding this comment.
By default, npm install -g ... installs packages into lib/node_modules/ relative to the Node.js installation directory.
0install treats extracted archive directories as immutable. It stores them in a content-addressable store (conceptually similar to PNPM) and makes them read-only (chmod -R a-w) to ensure their contents cannot be modified.
As a result, running npm install -g somepackage would fail with an error like:
npm error code EACCES
npm error syscall mkdir
npm error path /home/bastian/.cache/0install.net/implementations/sha256new_YB5SJCPHCJGA6PZ7HPEFM3OFEZ3N7S6PKTMDTTTVL3DFEUTPQDMQ/lib/node_modules/somepackage
The npm config set prefix ... command-line isn't strictly necessary, but it helps users avoid this pitfall.
ac15bab to
5f9dd72
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7692e1b. Configure here.
|
@bastianeicher Sorry to make you do this but you have to rebase, we recently changed some directory things. No need to resolve conflicts, just |
| ${props.os === 'WIN' ? '\n# Download specific Node.js version:\n0install download https://apps.0install.net/javascript/node.xml --version=' + props.release.version + ' --pin\n' : ''} | ||
| # Add Node.js and NPM to PATH: | ||
| 0install add node https://apps.0install.net/javascript/node.xml${props.os === 'WIN' ? '' : ' --version=' + props.release.version} | ||
| 0install add npm https://apps.0install.net/javascript/node.xml --command=npm${props.os === 'WIN' ? '' : ' --version=' + props.release.version} | ||
| 0install add npx https://apps.0install.net/javascript/node.xml --command=npx${props.os === 'WIN' ? '' : ' --version=' + props.release.version} |
There was a problem hiding this comment.
Forgive me not fully understanding 0install, I'm sure my questions can be annoying 😓, but why are the command slightly different on Windows vs Linux/MacOS, e.g.
0install download https://apps.0install.net/javascript/node.xml --version=[something]Wouldn't that either be needed on all systems or none, maybe I just misunderstand?
There was a problem hiding this comment.
Forgive me not fully understanding 0install, I'm sure my questions can be annoying 😓
Not at all, I've found the process of iterating on this PR very productive. 👍
why are the command slightly different on Windows vs Linux/MacOS
This is an inconsistency between the Windows and POSIX versions of 0install at the moment.
An upcoming releases of the Windows version is likely to unify this, so that both can use the 0install add --version=[something] syntax. But since that's not released yet (and users might be on older versions of 0install for a while), so I'd rather keep the separate 0install download --version=[something] --pin step for Windows for now. This will also keep working in new releases.
0install is a cross-platform decentralized package manager. Applications are packaged as "feeds": XML files listing available versions, where to download them, and how to extract and execute them. The 0install project maintains a feed for Node.js: https://apps.0install.net/javascript/node.xml This adds 0install alongside the other community installation methods such as asdf and Chocolatey.
b9a138a to
dd73fcf
Compare
@avivkeller Done 👍 |

Description
0install is a cross-platform decentralized package manager. Applications are packaged as "feeds": XML files listing available versions, where to download them, and how to extract and execute them. The 0install project maintains a feed for Node.js: https://apps.0install.net/javascript/node.xml
This adds 0install alongside the other community installation methods such as asdf and Chocolatey.
Validation
Check List
pnpm formatto ensure the code follows the style guide.pnpm testto check if all tests are passing.pnpm buildto check if the website builds without errors.