Blueprint: Windows Product Surface and Distribution
Status: initial blueprint. Captures the shift from Linux/CLI-shaped distribution to Windows GUI/product experience.
Owner: runtime
Companions:../windows-development.md(contributor/build side), modeld release artifacts,beam/http-ui-revival.md, vscode/ docs.
Problem
The current distribution and first-run story is shaped for Linux CLI users:
curl -fsSL https://contenox.com/install.sh | shinstall.shexplicitly rejects non-Linux/Darwin.- After “install” the user is expected to open a terminal, run
contenox setup,contenox serve, etc. - No desktop icon, no Start Menu entry, no “double-click and use” path.
- Local inference (
modeld) Windows prebuilts exist in the release pipeline but are repeatedly described as “unverified” and require a dedicated Windows worker.
This is a mismatch with the intended Windows audience (gamers, prosumers, developers) who expect something closer to Docker Desktop:
- Install the thing.
- Double-click an icon.
- Get a working local agent on their GPU (with a sensible default model).
- Primary interaction surfaces: VS Code (canvas/chat), Beam (the web UI), possibly others.
The CLI remains important (especially for ACP, scripts, editors), but on Windows the product surface is the installed experience, not the terminal command.
Vision
On Windows, Contenox is a GUI-first product:
- User installs once (Store or PowerShell one-liner).
- Gets a desktop icon / Start Menu entry.
- Clicks it → Beam opens (or a launcher starts the local server + UI).
- Local GPU inference “just works” with a default model we can distribute (Gemma-class or similar) via the existing S3-backed modeld store.
- Strong integration with VS Code as a primary usage surface.
- The underlying
contenoxbinary andmodelddaemon power everything, but the user doesn’t have to think about them at first.
The goal is “install → agent on my GPU” with minimal terminal friction for the target Windows users.
Current State (as of mid-2026)
- CLI binary: Pure Go (
CGO_ENABLED=0). Cross-compiles cleanly.make build-contenox-windowsand the release workflow producecontenox-windows-amd64.exe.contenox updatehas Windows-specific replacement logic. - local_shell: Has real Windows support (detects
pwsh/ PowerShell /cmd.exeand uses correct invocation flags). - VS Code extension: Already builds and embeds the Windows binary for
win32-x64. Uses it via a bridge process. - Beam: Functional local web UI served by
contenox serve. Shows modeld console, providers, chat, approvals, etc. Not packaged or auto-launched as a desktop app today. - modeld Windows: Packaging infrastructure exists (
package-modeld-release-windows,scripts/modeld-deps-bundle-windows.sh, launchermodeld.cmd, zip extraction inmodeldinstall). Repeatedly marked “unverified” in docs. Requires native Windows toolchain for trustworthy DLLs. - Distribution:
- GitHub Releases only (raw
.exe+ ACP zip). install.sh(bash only, hard-rejects Windows).- No MSIX, no code signing, no Store presence, no shortcuts.
- GitHub Releases only (raw
- Onboarding: Terminal
contenox setup+ manualmodel pull. No first-run GUI flow. - Website / docs / landing: Only show the Linux curl command.
Result: A Windows user following the advertised path immediately hits an error, and even a manual download leaves them with a bare executable and no obvious “app” experience.
Distribution Strategy
Primary channel: Microsoft Store (MSIX)
- Users search/install from the Store (or via
winget --source msstore). - Microsoft provides signing and hosting.
- Clean “installed app” experience with shortcuts.
- Auto-updates.
- Good for the gamer/prosumer side of the audience who may discover it in the Store.
Fallback / power-user channel: PowerShell one-liner
iwr -useb https://contenox.com/install.ps1 | iex
This is “more than good enough” for the non-Store population (devs, people without Store, automation, immediate latest bits). The script can create the same shortcuts and run initial setup that the Store package provides.
Direct downloads (GitHub Releases + website button) remain available but are secondary.
We deprioritize (at least initially) a traditional GUI installer (Inno Setup .exe wizard) because the Store + PowerShell combo covers the main needs. A full wizard can be added later if demand appears.
Why this is realistic
- The Store is no longer “just for consumer apps.” Many dev tools ship there.
- winget + the new Store CLI make Store bits accessible from the terminal.
- A well-written PowerShell script gives the same practical outcome as a simple installer for most users.
- We still need to solve the experience inside the package (shortcuts, first-run GPU setup, Beam launch).
Packaging Approach (MSIX)
MSIX packaging is not developed in Go. Go produces the executables; the MSIX is a Windows packaging container.
Typical flow:
- Build on a
windows-latestGitHub runner:contenox.exe(pure Go).modeld.exe+ runtime DLLs (when we have reliable Windows prebuilts).- Beam SPA assets (embedded or copied).
- Icons, license, etc.
- Create / validate an
AppxManifest.xmlthat declares:- Identity, display name, version.
- Entry points / shortcuts (desktop, Start Menu).
- Capabilities needed for a local agent tool (file system, execution, etc.).
- Any protocol or file associations (future).
- Package with
makeappx, the MSIX Packaging Tool,winappCLI, or a Windows Application Packaging Project. - (For Store) Submit via Partner Center (requires a Microsoft developer account). Store can provide the final signing.
For direct / PowerShell users we can also publish the raw binaries or a minimal archive. The PowerShell script can optionally register an MSIX or just place files + shortcuts.
What goes into the package for the Windows product vision
- The
contenoxbinary (providesserve,setup, model management, ACP, etc.). - Beam web assets (so
contenox serveworks out of the box). - (When ready) modeld Windows artifacts or a post-install step that pulls them.
- Icons and branding from
website/public/. - A manifest that creates a “Contenox” entry that launches the Beam experience (or a small launcher that starts the server + browser).
The CLI remains available in PATH for power users and editors.
Launch and First-Run Experience
Target flow after install (Store or PowerShell):
- Desktop / Start Menu icon appears.
- Click → starts the local server (if not running) and opens Beam (or a welcome surface).
- First-run detects GPU capabilities.
- Offers / auto-pulls a default local model we curate and distribute via the existing S3 modeld store (e.g. a Gemma-class model).
- Runs the equivalent of
contenox setup(or a GUI version of it) to pick provider + model. - User is immediately productive in Beam or can open VS Code.
The PowerShell script and the MSIX manifest should both produce the same shortcuts and the same post-install hook behavior.
Local Inference (modeld) on Windows
This is a critical dependency for the “agent on your GPU” promise.
- The Go-side download/install logic in
runtime/internal/modeldinstallalready understands Windows (.zip,modeld.cmdlauncher). - The blocker is reliable production of Windows
modeldprebuilts (llama.cpp + optional OpenVINO + CUDA). - We need a repeatable Windows worker path (or improved CI) that produces the bundles consumed by
package-modeld-release-windows. - Default models we want to ship must be available in the public index so
contenox modeld install+model pullwork on first run.
Until this is solid, the Windows product story is incomplete even if the packaging is perfect.
VS Code and Other Surfaces
- The VS Code extension is already one of the most “Windows native” surfaces we have (it embeds the platform binary).
- On Windows we should treat the extension experience (chat, canvas, autocomplete) as a first-class way to use the installed Contenox.
- Beam remains the local “cockpit” / full UI.
- The underlying engine (chains, HITL, tools, local_shell) must continue to work excellently under PowerShell/cmd.exe.
Implementation Pieces (initial cut)
-
Distribution plumbing
- Create
https://contenox.com/install.ps1(and update website/landing to surface Windows options). - Add Windows packaging job(s) in
.github/workflows/that produce MSIX artifacts on tags (or on demand). - Set up Microsoft developer account + Partner Center app registration.
- Create
-
MSIX manifest and packaging
- Minimal
AppxManifest.xmldeclaring the app, shortcuts, and capabilities. - CI step that assembles the package (using
windows-latest+ SDK tools orwinapp/ msstore CLI). - Test installation on clean Windows images.
- Minimal
-
Launch experience
- Decide on launcher strategy (direct
contenox serve+ browser, or a small native stub). - Create desktop/Start Menu shortcut(s) in both the PowerShell script and the MSIX.
- Post-install hook that can trigger
contenox setupor a welcome flow.
- Decide on launcher strategy (direct
-
First-run / model experience
- Curate and make available at least one good default local model for Windows GPU users.
- Improve
contenox setup(or add a Beam onboarding path) to be friendly after a fresh install. - GPU detection + clear messaging when no accelerator is present.
-
modeld Windows hardening
- Make Windows prebuilt production reliable (repeatable worker, tests, smoke).
- Ensure
contenox modeld install+ model pull works cleanly on Windows.
-
Website and docs
- Prominent Windows install path (Store button + PowerShell one-liner).
- Quickstart that shows the Windows flow first or in parallel.
- Update any “unsupported OS” messages.
-
Signing & trust
- Rely on Store signing for the MSIX path.
- For direct/PowerShell artifacts, consider a code-signing certificate later (not required on day one if we push Store hard).