Download Latest Version neos-Bonito-Beta-testing-x86_64.iso (2.8 GB) Google Add to Preferred Sources
Name Modified Size InfoDownloads / Week
Parent folder
NeOS-Appliance.vbox 2026-10-03 1.6 kB
NeOS-Appliance.vmx 2026-10-03 1.4 kB
Totals: 2 Items   3.0 kB 0

Polish release: a clean, professional image from the boot menu to the installed desktop. Every user-visible surface was walked and checked against what the image actually ships; the plan is reports/v2026.10.03/00-polish-plan.md, the outcome and before/after renders are in reports/v2026.10.03/02-review-report.md and reports/v2026.10.03/screenshots/.

Website alignment

The OS, README and docs were checked claim by claim against the project website (uthsarad/NeOSweb); the findings, including the claims the website should change, are in reports/v2026.10.03/website-alignment.md.

  • Rollback now works. The Operations Hub's rollback ran snapper rollback, which switches the Btrfs default subvolume — but NeOS mounts its root by name (subvol=/@ in fstab and on the kernel command line), so the machine rebooted into the same system and nothing changed. The new neos-rollback <number> keeps the current root as @.pre-rollback-<date> and makes a writable copy of the snapshot the new @; the Hub uses it. tests/verify_rollback.sh exercises the restore, refusal and failure paths.
  • Snapshots are bootable from the GRUB menu on installed systems, as the manual promises: grub-btrfs is installed, grub-btrfsd keeps a NeOS snapshots submenu current, and a grub-btrfs-overlayfs initramfs hook gives a booted read-only snapshot a temporary writable layer so it reaches the desktop. TROUBLESHOOTING documents both recovery paths.
  • Installed systems now get NeOS's GRUB settings. Calamares' grubcfg ran with overwrite: true and no defaults, so it replaced the shipped /etc/default/grub with three lines: no boot-menu theme, no NeOS kernel parameters, and os-prober silently off (GRUB 2.06+ needs GRUB_DISABLE_OS_PROBER=false), so Windows was missing from the boot menu on dual-boot installs. It now edits the file in place; the timeout is 3 s so the menu and the snapshot submenu can be reached when recovering. Guarded by verify_grub_config.sh.
  • Wayland by default, with an automatic X11 fallback (maintainer's decision). The new neos-session-select.service picks the session before SDDM starts, on the live image and installed systems: Plasma on Wayland (with a Wayland login screen on kwin_wayland) for Intel, AMD and proprietary NVIDIA graphics; X11 in virtual machines (KWin on Wayland stops servicing input on software rendering), with nomodeset / Safe Graphics (no KMS device) and on other drivers such as nouveau, where the live session used to hang. Override with SESSION= in /etc/neos/session.conf or neos.session= on the kernel command line; a session picked on the login screen is remembered. The static SDDM files stay on X11 as the safe floor if the service does not run. neos-display-sync steps aside on Wayland, where KWin handles rotation and scaling itself. Covered by tests/verify_session_select.sh (13 hardware/override cases).
  • The Screen Reader boot entry now makes the desktop speak. It only started espeakup, which speaks the text consoles, so a blind user arrived at a silent Plasma desktop although Orca was installed. neos-accessibility --session (autostarted in the Plasma session) now turns on Plasma's screen-reader setting and starts Orca when the system was booted with accessibility=on; on any other boot it does nothing. The installer is read aloud too: Calamares runs as root, and the user's accessibility bus turned root away, so on a screen reader boot root is allowed onto that bus and neos-welcome hands Calamares its address (AT_SPI_BUS_ADDRESS, Qt accessibility forced on). And the installed system keeps speaking: an install from a screen reader boot writes a system-wide /etc/xdg/kaccessrc (Orca on for every user, switchable per user) and enables espeakup. Covered by tests/verify_accessibility.sh.
  • Installer slideshow without overclaims: "Snapshot-Gated Stability … No more broken updates" is now "Updates You Can Undo" (snapshots before and after every update, roll back from the boot menu); "optimized I/O scheduling", which NeOS does not do, is replaced by its real disk-write tuning; drivers are described as preinstalled.
  • Release naming matches the website. os-release reads PRETTY_NAME="NeOS 2026.10 (Beta)"; CI inserts the build codename (e.g. NeOS 2026.10 (Marlin Beta)) and sets VERSION_CODENAME, and stamps the same name into the installer's window and welcome page.
  • The Operations Hub no longer claims a "Stable" channel fed by staging deployments; it says what is true: the Beta channel, straight from the Arch repositories, protected by snapshots.
  • README rewritten for the public: the website's positioning, an accurate feature list (network install for published ISOs, the real tools), requirements and verification steps. Removed: credits for projects and personas the OS does not use (ALCI, NeoCortex, "Sovereign Core", an AI persona), "Zen kernels" (NeOS ships linux-lts) and a named QA lead.
  • ARCHITECTURE.md separates what ships from what is planned: the NeOS curated/staging/stable repositories and the promotion pipeline do not exist yet and are now labelled as the target design; the core-app list matches the image (Firefox, not Brave; no Thunderbird or nomacs).

Fixed

  • The installer's progress bar stalled for the whole package download (uthsarad/NeOS#980). Without a terminal, pacman 6/7 print <file> downloading..., but the Calamares pacstrap job only recognised the older downloading <file>... form, so it counted no downloads; the total-packages regex also missed pacman's Packages (N) summary and stayed at a hard-coded 178. Both parsers are fixed, database refreshes no longer count as packages, and the job's status text lost its emoji. The new tests/verify_installer_progress.sh feeds the real module pacman output in the CI log's format.
  • The installer slideshow never left its first slide. showSlide() mutated a QML var array in place, which does not notify bindings, so "Welcome to NeOS" stayed up for the whole install. It now assigns a new array; tests/verify_ui_render.sh renders every slide and fails if their content does not differ.
  • The welcome app's feature cards rendered empty and its buttons overflowed the window (the card's QFrame style cascaded onto its labels; three 220 px buttons did not fit 860 px). Layout rebuilt; focus starts on the primary action.
  • Every user's app menu showed 16 dead launchers (Basecamp, HEY, X, WhatsApp, Docker, Zoom, …): their commands (neos-launch-webapp, xdg-terminal-exec, foot, imv, mpv, dua) were never shipped. Removed with their 39 icons; tests/verify_desktop_entries.sh requires every .desktop command to resolve.
  • KDE's About page showed a generic logo: os-release named LOGO=neos-logo, but no such icon existed. The logo now ships as a full neos-logo icon set (PNG sizes plus a scalable SVG).
  • Unreadable buttons: white text on the #38bdf8 accent is 2.1:1 (WCAG AA needs 4.5:1). It was used on the installer's Next button, current step, selected tab and menu item, the welcome app's primary button and the login button. All now use the dark onAccent text (9:1).

Changed

  • Boot splash: the NeOS logo with three pulsing accent dots and a clean disk-unlock prompt replaces the cartoon-cat loader (maintainer's decision). The cat frames and their generator are removed.
  • One brand palette: accent #38bdf8, hover #7dd3fc, pressed #0ea5e9, onAccent #0A0E1A (tools/palette.json). Three files had defined three different hover/pressed pairs, and the old #1F6FD6 lingered as tints. The installer, slideshow, login screen, welcome app, KDE colour scheme and os-release now agree, and verify_palette_consistency.sh rejects retired shades and white-on-accent text.
  • One logo, the website's: the image now uses the NeOS website's mark (a hexagon around a dot, from uthsarad/NeOSweb), kept as tools/brand/neos-logo.svg and rendered to every size by tools/gen-logo.py --all. It replaces the generated "N" badge and the old blue/white swirl.
  • Brand images regenerated: new installer welcome banner (the old one was AI swirl clip-art still carrying an image generator's watermark); BIOS boot-menu background on the night-sky theme (it was a Gothic cathedral); the login theme preview is a real headless render (tools/render-sddm-preview.py). The README screenshots are real renders of the current image.
  • No emoji in shipped UI: slideshow and welcome-app icons are monochrome glyphs in the accent colour, and the login avatar is a drawn silhouette.
  • Boot menus: the default entry reads "Start NeOS" and accessibility reads "NeOS (Screen Reader)" in both menus. GRUB gains UEFI Firmware Settings, Reboot and Power Off.
  • Cleaner new home directories: /etc/skel keeps only NeOS's own autostart/ksplash settings and the Bluetooth A2DP rule. Gone: configs for 15 applications that are not installed, Omarchy branding and hook samples, GNOME Nautilus extensions, and a personal git/tmux setup that changed git's behaviour (pull.rebase, rerere.autoupdate).
  • Leaner installs: 39 rescue-ISO or dormant-installer packages are removed (archinstall, gum, clonezilla, drbl, irssi, lynx, mc, wvdial, refind, memtest86+, …). The installed-system developer block shrinks from ~25 toolchains to base-devel, python-pip, nodejs and npm; the HANDBOOK lists one-line installs for the rest (maintainer's decision).

Merged

  • main merged into testing (83 persona-agent commits since Sep 12; nothing pushed to main). Kept from main: validated progress-dialog handling, a rollback progress dialog and crash-reporting opt-in in the Operations Hub; umask 077, input sanitising and clearer notifications in neos-autoupdate.sh; stderr errors, a zstd check and a cached key list in build.sh; retargeting of bot PRs aimed at main to testing in the auto-merge workflow. Also ported from the four PR-less Jules branches: pacman --needed for the keyring, install hints in dependency errors, and hkps:// keyserver fetches. Dropped: main's re-added 2 GiB size gate, the placebo telemetry checkbox, and root-level persona report copies.

Removed

  • Dormant Omarchy runtime (maintainer's decision): usr/share/neos/neos/, the archinstall-based installer (usr/share/neos-iso/, neos-iso-install, neos-install-dashboard, neos-cidata-load, neos-iso-cleanup-disk, neos-install-diagnose-media), neos-debug*, neos-upload-log and profile/packages_omarchy.x86_64. They could not run on NeOS and were copied onto every install. Restore steps are in docs/architecture/OMARCHY_INTEGRATION.md.
  • graphify-out/ (a 600 KB generated knowledge graph, committed on 2026-09-18): nothing used it, it could not be regenerated here, and it described a file tree that no longer exists. Its graph.html was most of the repository's HTML, which is why GitHub's language bar showed so much of it. The directory is now ignored, and the remaining design-reference HTML is marked as documentation for GitHub's language statistics.
  • Installer log upload: Calamares sent the full installer log (hostname, user name, disk layout) to a public pastebin over plain HTTP. The log stays local; TROUBLESHOOTING says where it is.
  • The "send anonymous usage data" checkbox in the welcome app: nothing ever collected or sent data.

Tests and tooling

  • New: verify_accessibility.sh, verify_session_select.sh, verify_rollback.sh, verify_desktop_entries.sh, verify_package_hygiene.sh, and verify_ui_render.sh (headless renders of the login theme, slideshow and welcome app; CI installs python-pyqt6 + qt6-declarative).
  • verify_palette_consistency.sh and verify_boot_gui.sh are extended. verify_installer_secrets.sh is retired along with the installer it covered.
  • New generators: tools/gen-brand-images.py, tools/render-sddm-preview.py, tools/render-installer-slides.py. tools/gen-logo.py --all renders every logo copy from tools/brand/neos-logo.svg.
  • Version bumped to 2026.10.03.

💿 Downloads

Source: README.md, updated 2026-10-03