Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 2 additions & 13 deletions .github/workflows/os-iso.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,9 @@
# point os-latest/latest.json at it for w3bs.org/os.
name: os-iso

# Retired 2026-10-23: W3BS OS moved to Debian 13 (os/debian, os-debian.yml). Kept for manual
# Alpine builds only; it no longer runs on push, so it cannot move os-latest back to Alpine.
on:
push:
branches: [main]
paths:
- "os/iso/**"
- "os/docker/zshrc"
- "os/docker/init.sh"
- "package-manager/crates/**"
- "package-manager/Cargo.lock"
- "desktop/crates/**"
- "desktop/Cargo.lock"
- "registry/FINGERPRINT"
- ".github/workflows/os-iso.yml"
- ".github/workflows/os-install-test.yml"
workflow_dispatch:
inputs:
publish:
Expand Down
6 changes: 3 additions & 3 deletions src/site.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -822,7 +822,7 @@ function osInstall(iso) {
'Upload the ISO in your provider\u2019s panel (on netcup: Media \u203a DVD drive, upload by FTP, pick it under Own DVDs and turn on DVD boot), boot the server from it, open the provider\u2019s web console and run <code>w3bs-os-install</code>. KVM servers with virtio disks, BIOS or UEFI, are what we test on.';
if (iso)
routes.push(
`<article><span class="card-index">PCS, INTEL MACS AND VPS SERVERS · ISO ${e(iso.version)}${iso.preview ? ' · PREVIEW' : ''}</span><h3>One installer ISO for x86-64.</h3><p>The same ISO installs on Intel and AMD PCs, Intel Macs and VPS servers. Boot it with Secure Boot off and pick the <strong>graphical installer</strong> (the default on a machine with a screen) or the <strong>text installer</strong>, the first question it asks. Either one asks for a <strong>desktop</strong> install (Hyprland, or Plasma, GNOME, Xfce; the default when the machine has a display adapter) or a <strong>server</strong> install (command line only; the default when it has none, or <code>--server</code>), then zsh, an encrypted disk and the desktop layer, with one review screen before anything is written. In VirtualBox set Display to VMSVGA with 128 MB of video memory. Packages download during the install.</p><p><a class="button primary" href="${e(iso.url)}">Download the ISO (${e(iso.size)})</a>${iso.torrentUrl ? ` <a class="text-link" href="${e(iso.torrentUrl)}">.torrent</a>` : ''}${iso.magnet ? ` <a class="text-link" href="${e(iso.magnet)}">Magnet link</a>` : ''}</p>${iso.torrentUrl || iso.magnet ? '<p class="muted">The torrent is seeded by our seedboxes and falls back to the download above as a web seed.</p>' : ''}<p class="muted">SHA-256 <code class="break">${e(iso.sha256)}</code></p>${code(`curl -fLO ${iso.url}\ncurl -fLO ${iso.sumsUrl} && sha256sum -c SHA256SUMS`)}<p><strong>PC or Intel Mac:</strong> write it to a USB stick and boot from it.</p>${code(`sudo dd if=${iso.name} of=/dev/sdX bs=4M status=progress oflag=sync`)}<p><strong>VPS:</strong> ${vpsSteps}</p>${iso.preview ? '<p class="muted">Preview build: its automated install test is still running. Use it on a machine or server you can wipe.</p>' : ''}</article>`,
`<article><span class="card-index">PCS, INTEL MACS AND VPS SERVERS · ISO ${e(iso.version)}${iso.preview ? ' · PREVIEW' : ''}</span><h3>One installer ISO for x86-64.</h3><p>W3BS OS 1.2 is Debian 13 "trixie" with systemd (no snap, no cloud-init). The same ISO installs on Intel and AMD PCs and VPS servers, BIOS or UEFI, with Secure Boot off. The live system brings up the network by itself (DHCP and IPv6 on every card) and shows <code>ssh root@&lt;address&gt;</code> with a one-time password, so you can install from your own terminal. <code>w3bs-os-install</code> asks for a root password, your user (sudo), the domain (its web page gets HTTPS), and encrypts the disk unless you say no, with one review screen before anything is written. 1.2 installs servers; the desktop follows. Packages download during the install.</p><p><a class="button primary" href="${e(iso.url)}">Download the ISO (${e(iso.size)})</a>${iso.torrentUrl ? ` <a class="text-link" href="${e(iso.torrentUrl)}">.torrent</a>` : ''}${iso.magnet ? ` <a class="text-link" href="${e(iso.magnet)}">Magnet link</a>` : ''}</p>${iso.torrentUrl || iso.magnet ? '<p class="muted">The torrent is seeded by our seedboxes and falls back to the download above as a web seed.</p>' : ''}<p class="muted">SHA-256 <code class="break">${e(iso.sha256)}</code></p>${code(`curl -fLO ${iso.url}\ncurl -fLO ${iso.sumsUrl} && sha256sum -c SHA256SUMS`)}<p><strong>PC or Intel Mac:</strong> write it to a USB stick and boot from it.</p>${code(`sudo dd if=${iso.name} of=/dev/sdX bs=4M status=progress oflag=sync`)}<p><strong>VPS:</strong> ${vpsSteps}</p>${iso.preview ? '<p class="muted">Preview build: its automated install test is still running. Use it on a machine or server you can wipe.</p>' : ''}</article>`,
);
else {
routes.push(
Expand Down Expand Up @@ -867,7 +867,7 @@ async function osPage() {
const defaults = [
[
'Base',
'Alpine Linux (13 MB base): the same OS in Docker, on servers, PCs and Macs; Nura (postmarketOS) on phones',
'Debian 13 "trixie" with systemd on servers and PCs (the installer ISO); the Docker images are still Alpine; Nura (postmarketOS) on phones',
],
[
'First release',
Expand Down Expand Up @@ -917,7 +917,7 @@ async function osPage() {
const suiteLine = suite
? `The draft suite manifest resolves <strong>${suite.entries}</strong> Profullstack packages from the <a class="inline-link" href="/packages">catalog</a>, including all ${suite.named} named inclusions (MoshCode, PairUX, DiskPush, the Agentic Desktop Layer, Training and more). <strong>${suite.blocking_tasks}</strong> packaging tasks block M0: ${suite.publisher_scripts} packages install only through publisher scripts and need signed artifacts, ${suite.unpinned} has no pinned release, and ${suite.command_collisions.length} command names have two claimants.`
: 'The draft suite manifest is generated from the package catalog.';
return `<section class="page-head"><div class="eyebrow">W3BS OS · SPECIFICATION</div><h1>An OS people<br><em>and agents can run.</em></h1><p>A lightweight Alpine Linux-based operating system with Hyprland (or KDE Plasma, GNOME), zsh, a full setup wizard and every Profullstack app installed, plus a desktop agents can operate under your control. ${OS_RELEASES.docker ? 'Docker images are the first release; the hardware installer and phone builds follow.' : 'There are no images to download yet: this page tracks the specification and its progress.'}</p><div class="actions"><a class="button primary" href="/docs/os-prd.md">Read the specification <span aria-hidden="true">→</span></a><a class="text-link" href="https://github.com/profullstack/w3bs.org/blob/main/os/suite-manifest.json" rel="noopener">Suite manifest ↗</a></div></section>${osScreens(iso)}${osInstall(iso)}${osStudio()}<section class="section"><div class="section-heading"><div><div class="eyebrow">DEFAULTS</div><h2>What you get.</h2></div></div><div class="table-wrap"><table class="platform-table"><tbody>${rows(defaults)}</tbody></table></div></section><section class="section"><div class="section-heading"><div><div class="eyebrow">INCLUDED SOFTWARE</div><h2>The whole suite, offline.</h2></div></div><p>${suiteLine}</p></section><section class="section"><div class="section-heading"><div><div class="eyebrow">APPS FROM OTHER PLATFORMS</div><h2>One launcher, honest labels.</h2></div></div><p><code>w3bs run</code> picks the best route for each app and labels its window, so a remote or guest app is never passed off as local.</p><div class="table-wrap"><table class="platform-table"><tbody>${rows(runtimes)}</tbody></table></div></section><section class="section"><div class="section-heading"><div><div class="eyebrow">HARDWARE</div><h2>Certified, preview, research, unsupported.</h2></div></div><p>Only certified devices get an install button. A device with no supported image is offered the companion app instead.</p><div class="table-wrap"><table class="platform-table"><tbody>${rows(hardware)}</tbody></table></div></section><section class="section"><div class="section-heading"><div><div class="eyebrow">ALSO IN THE SPEC</div><h2>For publishers and developers.</h2></div></div><p><strong>W3BS Publish:</strong> ship one signed release and reach users on every OS, with deb, Flatpak, Homebrew, winget, MSIX, dmg and APK built from it. <strong>Providers:</strong> <code>w3bs install</code> drives apt, dnf, pacman, Homebrew, winget, Flatpak, Nix and the app stores, and records what it installed. <strong>W3BS Fleet:</strong> one desktop app and cloud app for every server, desktop, laptop and phone you own (<a class="inline-link" href="/docs/fleet-prd.md">spec</a>).</p></section><div class="draft-note"><strong>Status: specification.</strong> Docker editions are out; the installer ISO and phone builds are in testing. Links and supported-hardware results appear here only once those artifacts and checks exist.</div>`;
return `<section class="page-head"><div class="eyebrow">W3BS OS · SPECIFICATION</div><h1>An OS people<br><em>and agents can run.</em></h1><p>A Debian 13 based operating system (systemd, no snap) with zsh, sudo, the w3bs CLI, mise, pnpm and bun, and every Profullstack app a command away, plus a desktop agents can operate under your control. ${OS_RELEASES.docker ? 'Docker images are the first release; the hardware installer and phone builds follow.' : 'There are no images to download yet: this page tracks the specification and its progress.'}</p><div class="actions"><a class="button primary" href="/docs/os-prd.md">Read the specification <span aria-hidden="true">→</span></a><a class="text-link" href="https://github.com/profullstack/w3bs.org/blob/main/os/suite-manifest.json" rel="noopener">Suite manifest ↗</a></div></section>${osScreens(iso)}${osInstall(iso)}${osStudio()}<section class="section"><div class="section-heading"><div><div class="eyebrow">DEFAULTS</div><h2>What you get.</h2></div></div><div class="table-wrap"><table class="platform-table"><tbody>${rows(defaults)}</tbody></table></div></section><section class="section"><div class="section-heading"><div><div class="eyebrow">INCLUDED SOFTWARE</div><h2>The whole suite, offline.</h2></div></div><p>${suiteLine}</p></section><section class="section"><div class="section-heading"><div><div class="eyebrow">APPS FROM OTHER PLATFORMS</div><h2>One launcher, honest labels.</h2></div></div><p><code>w3bs run</code> picks the best route for each app and labels its window, so a remote or guest app is never passed off as local.</p><div class="table-wrap"><table class="platform-table"><tbody>${rows(runtimes)}</tbody></table></div></section><section class="section"><div class="section-heading"><div><div class="eyebrow">HARDWARE</div><h2>Certified, preview, research, unsupported.</h2></div></div><p>Only certified devices get an install button. A device with no supported image is offered the companion app instead.</p><div class="table-wrap"><table class="platform-table"><tbody>${rows(hardware)}</tbody></table></div></section><section class="section"><div class="section-heading"><div><div class="eyebrow">ALSO IN THE SPEC</div><h2>For publishers and developers.</h2></div></div><p><strong>W3BS Publish:</strong> ship one signed release and reach users on every OS, with deb, Flatpak, Homebrew, winget, MSIX, dmg and APK built from it. <strong>Providers:</strong> <code>w3bs install</code> drives apt, dnf, pacman, Homebrew, winget, Flatpak, Nix and the app stores, and records what it installed. <strong>W3BS Fleet:</strong> one desktop app and cloud app for every server, desktop, laptop and phone you own (<a class="inline-link" href="/docs/fleet-prd.md">spec</a>).</p></section><div class="draft-note"><strong>Status: specification.</strong> Docker editions are out; the installer ISO and phone builds are in testing. Links and supported-hardware results appear here only once those artifacts and checks exist.</div>`;
}
const TRAINING_INSTALL = 'curl -fsSL https://w3bs.org/training/install.sh | sh';
const TRAINING_INSTALL_WIN = 'irm https://w3bs.org/training/install.ps1 | iex';
Expand Down
Loading