Skip to content

feat(kiro-extension): universal VSIX that installs on any OS - #36

Merged
AlleyBo55 merged 1 commit into
masterfrom
kiro/extension-publishing
Jul 28, 2026
Merged

AlleyBo55 merged 1 commit into
masterfrom
kiro/extension-publishing

Conversation

@AlleyBo55

Copy link
Copy Markdown
Owner

A platform-specific VSIX declares TargetPlatform in its manifest, and a mismatched host refuses to install it. That is right for a registry, which serves each user their own build, but wrong for handing someone a download link: the darwin-arm64 file cannot be installed on Windows or Linux at all.

Adds npm run release:universal, which packages with no --target and carries every companion binary staged in bin/. One file, any OS.

  • release.mjs gains --universal: omits --target, names the output -universal, lists which platforms are bundled and warns loudly about any that are missing, since those users silently get window mode instead of the floating mascot
  • build-companion.mjs honours DORAEMON_SKIP_COMPANION so a universal build can package binaries downloaded from other runners without rebuilding over them
  • CI: each platform job now also uploads its bare binary, and a new universal job assembles all four into a single VSIX. upload-artifact drops the executable bit, so it is restored during staging.

This does not remove the need to build per platform. A native binary still has to be compiled for each target; the universal VSIX only changes how they are packaged and distributed. Per-platform VSIXs remain the better choice for Open VSX, where each user should not download three binaries they cannot run.

Verified locally: the universal manifest contains zero TargetPlatform entries, installs into Kiro, and the binary it resolves runs ("mascot window ready"). Adds a check that drives the real resolver with each of darwin-arm64, darwin-x64, win32-x64 and linux-x64 and asserts it selects the matching bin// path, including the .exe suffix on Windows.

A platform-specific VSIX declares TargetPlatform in its manifest, and a
mismatched host refuses to install it. That is right for a registry, which serves
each user their own build, but wrong for handing someone a download link: the
darwin-arm64 file cannot be installed on Windows or Linux at all.

Adds `npm run release:universal`, which packages with no --target and carries
every companion binary staged in bin/. One file, any OS.

- release.mjs gains --universal: omits --target, names the output -universal,
  lists which platforms are bundled and warns loudly about any that are missing,
  since those users silently get window mode instead of the floating mascot
- build-companion.mjs honours DORAEMON_SKIP_COMPANION so a universal build can
  package binaries downloaded from other runners without rebuilding over them
- CI: each platform job now also uploads its bare binary, and a new `universal`
  job assembles all four into a single VSIX. upload-artifact drops the
  executable bit, so it is restored during staging.

This does not remove the need to build per platform. A native binary still has to
be compiled for each target; the universal VSIX only changes how they are
packaged and distributed. Per-platform VSIXs remain the better choice for Open
VSX, where each user should not download three binaries they cannot run.

Verified locally: the universal manifest contains zero TargetPlatform entries,
installs into Kiro, and the binary it resolves runs ("mascot window ready").
Adds a check that drives the real resolver with each of darwin-arm64,
darwin-x64, win32-x64 and linux-x64 and asserts it selects the matching
bin/<target>/ path, including the .exe suffix on Windows.
@AlleyBo55
AlleyBo55 merged commit 451cb1c into master Jul 28, 2026
4 of 5 checks passed
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.

1 participant