Releases: zildac/u64deck
Release list
linux-preview-4
u64deck v1.9.0 — Linux Preview 4
Identity: u64deck v1.9.0 · Linux Preview 4 · build 4606bef
Base lineage: Windows v1.9.0 RC44 · build fc1e0fb
Linux Preview 4 is a source-run preview published alongside the Windows release in the same repository. It is not a frozen ELF or AppImage. Windows remains the stable, supported distribution; this Linux preview is provided as-is for testing and issue reports.
Install & run (Linux)
Download the .tar.gz below, then:
tar xzf u64deck-v1.9.0-linux-preview.4.tar.gz
cd u64deck
./install.sh
./u64deck.shinstall.sh sets up a private virtualenv and adds an app-menu entry — no sudo, no system changes. ./u64deck.sh launches u64deck. After first run you can start it from your apps list. Data lives under ~/.config/u64deck and ~/.local/share/u64deck (not beside the scripts). See the bundled README.md / LINUX-PREVIEW.md for upgrade, import-from-Windows, and troubleshooting.
Hardware-tested Linux environment
- Ubuntu 24.04.4 LTS
- amd64 / x86-64
- Linux kernel 6.8.0-136-generic
- Ubuntu GNOME under Wayland
- Python 3.12.3
- Chromium 150.0.7871.128 from Canonical's stable Snap channel
The maintainer hardware-tested installation and application-menu launch, Chromium app-window mode, Ultimate discovery and connection, screen mirror at approximately 50 fps, HDMI audio, fullscreen, recording, Legacy physical-F7 guidance, local SID/HVSC and storage indexing, SID Search, SIDFlow download/verify/import and recommendations, SID playback, Storage browsing, Mount & Run, upgrade-state retention and clean Exit.
Storage and migration
- Windows stores
config.json, indexes, SIDFlow data, favourites and playlists besideu64deck.exe. - Linux stores
config.jsonin${XDG_CONFIG_HOME:-~/.config}/u64deck/. - Linux stores SQLite indexes, SIDFlow data, favourites, playlists and other persistent data in
${XDG_DATA_HOME:-~/.local/share}/u64deck/. import-existing-data.shimports supported Windows or older-preview files, backs up replaced Linux files, skips WAL/SHM files and warns about Windows paths.
Validation
- Source tests: 409 passed, 1 warning in 5.08s
- Extracted-tarball tests: 409 passed, 1 warning in 4.75s
- Core-integrity manifest: passed
- Python compile, JavaScript syntax and shell syntax: passed
- Clean XDG install, API identity, config save and graceful Exit: passed
- Owned Chromium-process cleanup: passed
- Data import, backup and Windows-path warning checks: passed
- Update and rollback smoke: passed
- Archive hygiene and personal-path scan: passed
- Archive entries: 132 files
The dependency-download path was hardware-tested on the Ubuntu NUC. The packaging sandbox had no public package-index access, so its clean installer validation used the same installed dependency versions exposed to an isolated virtual environment.
Artifact
u64deck-v1.9.0-linux-preview.4.tar.gz
SHA-256: 6f2686aa6fe72cd2a21d96b45df6f357a4963aa3ff681ee6f7a83c4aeb39236f
The archive contains no config.json, SQLite databases, WAL/SHM files, downloaded SIDFlow data, caches, bytecode, .git, .venv, diagnostics or personal runtime data.
u64deck v1.9.0 — Release Candidate 44
u64deck v1.9.0 Release Candidate 44
v1.9.0 · Release Candidate 44 · fc1e0fb
RC44 is the first public release candidate after RC25. It promotes the hardware-tested RC44 runtime, adds packaging-time build stamping so the Windows executable reports its true build identity, completes the deferred local-Exit hardening, and consolidates the cumulative RC26–RC44 work. Ultimate-control behaviour is the hardware-tested behaviour.
Highlights
- Honest executable identity. The Windows build now carries a packaging-time build stamp, so the frozen
u64deck.exebanner and API report the exact documented build ID. The build workflow refuses to publish unless the frozen executable reports the documented version, release and build. - Local-Exit hardening. The loopback-only
/api/app/exitendpoint now accepts IPv4-mapped IPv6 loopback correctly, ignores spoofed forwarding headers (proxy_headers=False), schedules shutdown exactly once under concurrent requests, and the Exit control is hidden by default until local availability is confirmed. The executable workflow verifies that an unconfirmed Exit request is rejected with HTTP 403. - Cartridge-aware Retro Replay handoff. Mount & Run reads the live firmware Cartridge setting before acting. Retro Replay retains automatic matrix F7 on CIA1-capable devices; on Legacy devices a persistent Screen-Mirror prompt requests the reliable physical C64 F7 instead of an injected key that could open the Freeze Menu.
- Stale manual-operation protection. Legacy screen-mirror keys and manual Reset/Reboot can no longer sit behind a long Mount & Run and execute against a later cartridge state.
- Disk-image naming analysis. A read-only analyser (Settings → Search Index & Cache → Analyse Disk-Image Names) groups multi-disk families using constrained, approved rules — never arbitrary regular expressions, never touching files.
- SID Jukebox refinements. Optional streamed-ending fade with no old-SID return between tracks, a Year filter, clearer Now-Playing presentation, and current-row reveal with ◎ Current.
- System Health dashboard, Assembly64 disk-swap arming, and connection-ready Settings startup (no raw
WinError 10061on Ctrl+F5).
Cumulative changes since RC25
- RC26 — inline Mount & Run reset; stale manual-operation protection (2-second admission deadline, Reset/Reboot coalescing); honest Cartridge-boot-menu documentation.
- RC27 — Settings Ctrl+F5 connection-ready startup; no transient
WinError 10061. - RC28–RC43 — System Health dashboard and telemetry; cold-start drive status; configurable Jukebox end-grace (0.5 s default) and streamed-ending fade; playlist-first queue; SIDFlow candidate-union fix; Year filter and Now-Playing presentation; Assembly64 first-mount disk-swap arming; terminal
-a/-bswap matching; the read-only disk-image naming analyser; and presentation/casing polish. - RC44 — packaging-time build stamp with CI identity assertions; full local-Exit hardening; cumulative documentation, tests and line-ending controls for stable cross-platform build IDs.
Retro Replay / Legacy input (honest limitations)
Hardware testing isolated Retro Replay's intermittent Freeze Menu entry to F7 injected through the Legacy KERNAL keyboard buffer. A physical C64 F7 key is reliable, and the CIA1 matrix-input path is unaffected. Legacy cartridge control remains best-effort on the tested C64 Ultimate + Retro Replay combination: allow approximately 3–5 seconds between Reset/Reboot actions and before starting Mount & Run. Other freezer/fastload cartridges have not been comprehensively tested. This behaviour is not present on the CIA1 matrix-input path, where automatic matrix F7 remains available.
Preserved behaviour
Discovery, dual-interface routing, streaming, SIDFlow 0.8.0 download/import/recommendation, SID playback, Mount & Run gating and the frozen discovery files are unchanged. Both canonical dual-interface best-effort README warnings remain verbatim in their required positions, and the Screenshots gallery is unchanged.
Validation
- 399 tests passed from the source tree and again from a clean extraction of the release ZIP.
- Python compilation and JavaScript syntax checks passed.
- Startup and graceful-Exit smoke tests passed from source and clean extraction with exit code 0 and the correct reported identity.
- Targeted hardening tests pass: IPv4-mapped loopback accepted, spoofed
X-Forwarded-Fordoes not change the loopback decision, concurrent Exit schedules shutdown once, and the Exit control is hidden by default. - The tagged CI run built the Windows executable and verified, on the real frozen binary, that the packaging build stamp and API/banner report
1.9.0 / Release Candidate 44 / fc1e0fb, the embedded icon resources are present, an unconfirmed Exit returns HTTP 403, and the executable exits cleanly. - Canonical
u64deck.icoSHA-2569fb9e41724ba83f15f2f2f1986513cfa49f3b9730895a06a1de2b4e46c90fd5f, six frames, embedded viau64deck.spec; frozen discovery files matchDISCOVERY-FROZEN.sha256.
Attribution
SID recommendations are Powered by SIDFlow, created by Christian (Chris) Gleissner — SIDFlow, sidflow-data 0.8.0. Recommendation work is local; u64deck uploads no listening activity, ratings, favourites or queue contents.
u64deck v1.9.0 — Release Candidate 25
u64deck v1.9.0 Release Candidate 25
v1.9.0 · Release Candidate 25 · bd0bbaf
RC25 is the first public release candidate after RC18. It promotes the exact hardware-tested RC25 runtime: no application functionality differs between the tested build and this package.
Cumulative changes since RC18
RC19 — System Health foundation
- Added the System Health tab with cached Ultimate identity and REST route, session latency, video/audio throughput, packet age and drop counts, u64deck process resources, host resources, coordinator state, index totals and retained diagnostic counts.
- Refreshes every two seconds only while the Health tab is visible and does not create another recurring Ultimate request.
- Added stream byte/last-packet counters, coordinator active-duration reporting and a complete Health snapshot in Diagnostics.
- Explicitly reports that current Ultimate REST firmware does not expose CPU utilisation, FPGA utilisation or temperature rather than inventing values.
RC20 — Expanded readable telemetry
- Added REST reliability totals, success rate, failure streaks, p95 latency, last-success/failure age and client replacement history.
- Added current operation, queue wait averages/p95/maximum, priority totals, cancellations and bounded operation history.
- Added stream gaps, longest delays, restart/WebSocket lifecycle, browser rendered FPS, Web Audio queue depth, underruns and reconnects.
- Added active task phases, index rate/ETA, cache hit rates, config-save history, route history and shutdown timing.
- Added a restrained HEALTHY / DEGRADED / ATTENTION summary, grouped cards, compact badges and collapsed detail panels without adding a telemetry database or extra Ultimate polling.
RC21 — Current-state health and UI corrections
- Health status is based on current or recent unresolved conditions rather than cumulative session history.
- Recovered startup/network errors and old packet gaps remain inspectable but no longer leave the panel permanently amber.
- Added Recent warnings and errors with age and recovered/unresolved state.
- Removed the redundant manual Refresh button because the visible Health panel auto-updates every two seconds.
- Corrected duplicated/wide badges, consolidated stream state and made history outcome markers compact and centred.
RC22 — Cold-start drive status
- Orders startup so
/api/infosucceeds before the first automatic mounted-drive request. - Drive A and Drive B populate without opening Storage.
- Shows a neutral waiting state during startup or backend handover rather than a connection-refused drive fault.
- Retries three transient drive-status lifecycle/connection failures without polluting Diagnostics; a persistent fourth failure becomes a genuine visible fault and can degrade Health.
RC23 — Configurable SID Jukebox end grace
- Replaced the fixed matched-Songlengths one-second auto-advance allowance with
sid_jukebox_end_grace_secs. - Kept the original Songlengths duration unchanged in the compact
.sslattachment and Ultimate native display; only u64deck's own next-track deadline uses the grace. - Added duration source, base length, grace and final deadline to Diagnostics.
- Unknown-duration tunes retain their established
sid_default_secsplus one-second fallback behaviour.
RC24 — 0.5-second default and playlist-first UI
- Set the packaged matched-Songlengths Jukebox grace to 0.5 seconds after listening tests found this produced natural transitions on the tested Ultimate 64.
- Kept the value configurable and bounded to 0–30 seconds.
- Kept the Play Queue and saved-play-queue controls visible with no active tunes, with a clear No tunes queued state.
- A saved play queue can now be selected and loaded before playback from every empty-queue entry state: fresh/direct Jukebox entry, after Clear Queue, and before Search, folder-browser or local-upload selection. The shared empty-state renderer also remains available while Storage, Favourites or Recent Items entry is waiting to populate.
- Save and Clear Queue require active queue items; Delete requires a selected saved queue; Load remains available immediately.
RC25 — SIDFlow 0.8.0 / HVSC 85 integration
- Pins the supported data contract to immutable
sidflow-datarelease 0.8.0, rather than following a mutable latest release. - Downloads
sidcorr-hvsc-full-sidcorr-1.sqlite.gzfrom the official SIDFlow data release: 194,351,886 bytes (about 194 MB), expanding temporarily to the 982,155,264-byte full SQLite export. - Verifies release metadata,
SHA256SUMS, the compressed and uncompressed pinned digests, schemasidcorr-1, HVSC 85 identity, weighted-cosine model, all 58 vector weights, track count and populated neighbour graph. - Streams download and gzip decompression, checks for roughly 1.8 GiB free space and reports separate metadata, download, verification, decompression, import and promotion stages.
- Builds and atomically promotes a compact local database only after validation. The real hardware-tested run produced 269,389,824 bytes (about 257 MiB / 269 MB) and completed the full download/import in approximately 48 seconds on the tested Windows PC; slower network or storage will take longer.
- Preserves the existing working database if download, decompression, validation, import or promotion fails.
- Uses SIDFlow's official 58-dimensional weighted-cosine neighbour graph as the primary engine. The imported graph contains 2,196,700 neighbour rows for 87,868 tracks.
- More like this prefers different SID files before sibling subtunes. Radio excludes the current SID file, recently played files and files already queued.
- Keeps u64deck's local 48-dimensional feature scan only as a clearly labelled
u64deck-fallbackwhen filtering exhausts the fixed-depth graph. Queue tooltips and Diagnostics distinguish the source; Diagnostics recordssidflow-neighborsandu64deck-fallbackcounts. - Hardware validation recorded two More like this requests with
sidflow-neighbors=20and no fallback results.
Older data and offline behaviour
- An older installed SIDFlow database is retained but shown as Update required and is not used by More like this or Radio.
- Selecting a recommendation feature offers the pinned 0.8.0 update and opens Settings.
- With no network available, the download error is shown and the old database remains untouched but gated. Normal SID browsing, queueing and playback continue; recommendations remain unavailable until 0.8.0 is installed.
- With no SIDFlow database, recommendation features offer installation and otherwise remain unavailable.
Credit
SIDFlow integration and recommendation data are Powered by SIDFlow, created by Christian (Chris) Gleissner:
Recommendation work remains local; u64deck does not upload listening activity, ratings, favourites or queue contents.
Canonical carries
- In-archive
u64deck.icoSHA-256:9fb9e41724ba83f15f2f2f1986513cfa49f3b9730895a06a1de2b4e46c90fd5f— exactly six frames (16, 32, 48, 64, 128, 256), embedded in the executable viau64deck.spec. - The Windows workflow retains the
RT_ICON/RT_GROUP_ICONPE-resource gate and the Edge-attached graceful-Exit smoke test. - The complete RC17/RC18 Exit lifecycle is unchanged: loopback-only endpoint, confirmation header, idempotency, response-before-shutdown, bounded frozen-build watchdog and dedicated-Edge-only closure.
- Both canonical dual-interface README warning blocks remain verbatim in their required positions.
- The Screenshots section is unchanged: the same 13 images in the same order.
discovery.pyanddiscovery_transport.pymatchDISCOVERY-FROZEN.sha256.
Validation
- 289 tests passed from the source tree and again from the extracted release ZIP.
- Python compilation and JavaScript syntax checks passed.
- Startup and graceful-Exit smoke tests passed from source and clean extraction with exit code 0.
- Targeted suites cover the SIDFlow 0.8.0 contract (strict manifest/digest validation, disk preflight, neighbour import, primary-graph selection, sibling/Radio filtering, explicit fallback labelling, old-dataset gating and atomic promotion fallback) and the RC17/RC18 Exit, icon and canonical-carry contracts.
- The tagged CI run built the Windows executable, confirmed the embedded icon resources, and passed the Edge-attached graceful-Exit smoke test.
- Archive integrity, path safety and hygiene checks passed: 36 files, no bundled configuration, databases, SIDFlow payloads, caches, bytecode or Git metadata.
- Independent review verified the archive hash, icon byte-identity, README warning blocks, gallery ordering, frozen discovery files, the full cumulative RC19–RC25 source delta, and the SIDFlow download pipeline's pinned-digest verification and atomic promotion.
SHA-256
0eda797abba69234351cdcf9d37df170ceb57bd1e000bc9c67a6c0380ac5f75f
u64deck v1.9.0 — Release Candidate 18.
u64deck v1.9.0 Release Candidate 18
v1.9.0 · Release Candidate 18 · 0118f1c
RC18 is a tightly scoped correction to the RC17 desktop-exit release. It fixes the two issues confirmed during Windows field testing: the frozen executable console could remain after the dedicated Edge app closed, and the generated executable had no embedded u64deck icon.
Changes
Frozen executable exits completely
- The local Exit u64deck endpoint still returns its successful response before shutdown begins.
- Uvicorn still performs its normal lifespan shutdown and existing resource cleanup first.
- A frozen PyInstaller build now starts a bounded, non-daemon exit watchdog.
- The watchdog waits for an explicit cleanup-complete marker and then retires the frozen process with a zero exit code.
- If graceful cleanup does not finish within the bounded deadline, the frozen process is still terminated with a non-zero exit code rather than leaving a resident console indefinitely.
- This guarantees that a normally launched
u64deck.exeand its associated console disappear after Exit u64deck.
The source version continues to exit naturally after Server.run() returns.
Embedded Windows icon
- The canonical multi-resolution
u64deck.ico(16, 32, 48, 64, 128 and 256 pixel images) is now embedded in the executable. - Updated
u64deck.specfromicon=Nonetoicon="u64deck.ico". - The Windows workflow now inspects the built PE and requires both
RT_ICONandRT_GROUP_ICONresources before publication.
Source launcher correction
start.batno longer ends with an unconditionalpauseafter a successful exit.- A normal source shutdown now returns to an existing terminal or closes a double-clicked launcher window.
- Non-zero exits still display the error code and pause for troubleshooting.
Stronger Windows executable test
The GitHub workflow now launches the executable through the normal dedicated Edge app path rather than using --no-browser. It verifies:
- the local UI becomes available;
- the dedicated Edge profile process is observed;
- the exit endpoint returns successfully;
- the dedicated Edge process closes;
u64deck.exeterminates;- the executable returns exit code 0;
- the frozen console cannot remain attached to a live u64deck process.
Preserved behaviour
RC18 retains RC17's loopback-only exit endpoint, confirmation header, idempotency, response-before-shutdown ordering and local/remote UI handling.
No Finder, discovery, connection routing, Mount & Run, SID, streaming, recording, storage, settings, indexing, disk-swap, keyboard-input or Ultimate machine-control behaviour changed.
Both canonical dual-interface best-effort README warnings remain verbatim in their required positions. The Screenshots section and gallery ordering are unchanged.
Validation
- 255 tests passed from the RC18 source tree.
- 255 tests passed again from the extracted release ZIP.
- Python compilation checks passed.
- JavaScript syntax checks passed for
app.jsandhelp_content.js. - Source-tree and extracted-ZIP startup/exit smoke tests both returned the exit response and terminated with exit code 0.
- The frozen-process watchdog, cleanup-complete marker, icon contract, launcher behaviour and Windows workflow assertions have dedicated regression tests.
- The extracted API reports the expected version, release label and build ID.
- In the tagged CI run, the PE icon-resource check confirmed
RT_ICONandRT_GROUP_ICONare embedded in the builtu64deck.exe, and the Edge-app exit smoke test passed on the Windows runner: the executable started with its dedicated Edge app window, accepted the confirmed local exit, closed the dedicated Edge process, and terminated itself with exit code 0. - The README screenshot gallery gate passed in CI against the repository's
docs/screenshot set; the Screenshots section, filenames and gallery ordering were not changed. - ZIP integrity and path-safety checks passed.
- Archive contains 36 files plus five directory entries: the RC17 manifest plus
u64deck.ico. - No
config.json, SQLite databases, WAL/SHM files, caches, bytecode, Git metadata or personal runtime files are present.
Deferred to v1.9.0 final
The five non-blocking observations recorded at RC17 (IPv4-mapped IPv6 loopback handling, exit-scheduling idempotency hardening, explicitly disabling proxy-header trust, hiding the Exit button by default until local availability is confirmed, and rejected-request coverage in the executable smoke test) remain deferred to the final release. None affects the shipped default configuration.
SHA-256
41dc3cd38a55b8f0a7b0ddce0cb20fd6ce97a83813e05dfbe79cbb273faab514
u64deck v1.9.0 — Release Candidate 17.
u64deck v1.9.0 Release Candidate 17
v1.9.0 · Release Candidate 17 · bf05aa9
RC17 is a deliberately narrow desktop-lifecycle release built directly from the RC16 source.
Changes
Exit u64deck
- Added Exit u64deck to the main header so the application can be stopped without manually terminating the Python console process.
- The action displays an explicit confirmation explaining that the local u64deck server will stop while the connected Ultimate continues running.
- The browser receives a successful response before shutdown begins and displays a final stopped page if its window cannot be closed automatically.
- The managed Uvicorn server exits normally, invoking the existing lifespan cleanup for SID timers, held matrix keys, indexing, SQLite, REST/command clients, and video/audio receivers.
- When u64deck launched Microsoft Edge in dedicated app mode, it retains that process and closes only that dedicated window during an explicit application exit.
- System/default browser windows are never terminated.
Local-only safety
/api/app/exitaccepts requests only from a loopback client on the same PC.- The request must include the custom
X-U64deck-Local-Exitconfirmation header. - The Exit button is hidden when the UI is opened remotely from another device on the LAN.
- Repeated clicks are idempotent and cannot schedule multiple shutdowns.
Documentation carried forward
- Included both canonical dual-interface best-effort README warning blocks verbatim in their required positions.
- Retained the existing Screenshots section and gallery ordering unchanged.
- Updated the quick-start guidance to explain that closing the browser alone does not stop the server.
Preserved RC16 behaviour
No discovery, connection routing, Finder, Mount & Run, SID, streaming, recording, storage, settings, indexing, disk-swap, keyboard-input, or device-control behaviour changed.
Dual-interface operation remains documented as best-effort. Ethernet-only remains the recommended stable configuration.
Validation
- 251 tests passed from the RC17 source tree.
- 251 tests passed again from the extracted release ZIP.
- Python compilation checks passed.
- JavaScript syntax checks passed for
app.jsandhelp_content.js. - Live source-tree smoke test passed: startup, rejected unconfirmed exit, accepted confirmed local exit, and clean process termination.
- Live extracted-ZIP smoke test passed with the API reporting the expected version, release label and build ID.
- The Windows executable workflow now verifies the graceful local exit endpoint instead of force-killing the executable after its startup test, and this check passed in the tagged CI run: the built
u64deck.exestarted, served the UI, accepted the confirmed local exit and terminated on its own. - The README
u64deck v1.9.0-rc.16 — Finder, SID Stop and diagnostics fixes
v1.9.0 Release Candidate 16
RC16 is a small, contained follow-up to RC13 — no new features, just fixes for a
handful of niggles found while using the published candidate day-to-day.
What's fixed:
- Finder no longer stalls on stale remembered addresses. Previously, if your
config.jsonhad old device addresses in it, a network scan could sit through a
full timeout phase before the fresh scan even started. Remembered addresses are
now checked as part of the same fast scan pass as everything else — a stale
entry costs nothing. Opening the Finder also pauses background polling
immediately so the scan gets the network to itself. - Stop actually stops the SID. Pressing Stop in the Jukebox now cuts browser
audio instantly instead of letting a few seconds of buffered tail play out
while the machine resets behind it. - Diagnostics export is cleaner. In browsers that support it you now get a
proper save-location picker, and the success message only appears once the
file is genuinely written. Everything sensitive stays redacted as before. - Connect feedback. You'll see "Connecting…" the moment you pick a device,
and the success message tells you how long it took.
Everything from RC13 — Mount & Run on both input paths, split Ethernet/Wi-Fi
routing, cartridge-safe SID Stop — is unchanged and re-verified on hardware.
Known issue: running the Ultimate with both Ethernet and Wi-Fi enabled
can make control intermittently unreliable — the firmware delays wired REST
responses by ~2.5 s in this state, and u64deck's split routing reduces but
can't eliminate the effect. For reliable operation, enable a single
interface (ideally Ethernet-only: disable Wi-Fi in the Ultimate's network
settings, then power-cycle). See the README for details.
Still a release candidate: if you hit anything odd, please report it via
Issues. u64deck.exe below is built by CI from this tag; if you prefer to run
from source, grab the code and use start.bat.
u64deck v1.9.0 — Release Candidate 13
This is a release candidate — it's been tested on real hardware and it's solid in day-to-day use, but it's up here so people can give it a proper shakedown before I call 1.9.0 final. If something misbehaves, open an issue on the repo, or just drop me a comment or a DM and I'll log it. Genuinely, that's what an RC is for.
What's the big deal with this one
1.9.0 is all about finding your Ultimate and getting out of your way. You shouldn't have to know its IP address or fiddle with settings — you open u64deck, it goes looking, it finds the machine, and it works out the best way to talk to it.
The main stuff
It finds your Ultimate for you. Hit the Finder and it scans the network, spots your Ultimate, and shows it as a single device with both its Ethernet and Wi-Fi addresses (Ethernet's the recommended one). Doesn't matter if one interface is up or both.
Split routing. If your Ultimate's on both Ethernet and Wi-Fi, u64deck keeps the video, audio and commands on Ethernet — that's where streaming has to live — but sends the chatty status polling over Wi-Fi, which is quicker. You'll see "Ethernet · REST via Wi-Fi" in the header when that's happening. This works around a firmware thing where wired REST gets slow if Wi-Fi is also switched on (more on that below).
Mount & Run that actually runs. It waits for the machine to be ready before it starts typing, so a slow cartridge boot can't swallow the LOAD and a slow load can't lose the RUN. Click it, walk away, the program's running.
It knows streaming needs Ethernet. Streaming's wired-only (firmware, not me), so if you're on Wi-Fi it tells you straight and gives you a one-click Switch to Ethernet — everything else keeps working in the meantime.
SID Jukebox with instant HVSC search, plus "More like this" and Radio, both powered by Chris Gleissner's SIDFlow — cheers Chris. Stop behaves itself across firmwares now too.
Multi-disk handling groups disk sets automatically and pops a swap bar on screen for those "please insert disk 2" moments.
What it's been tested on
- Ultimate 64 on firmware 3.15 — full CIA1 matrix input, so games, cracktros and the Ultimate menu all see the remote keys.
- Older Ultimate 64 firmware and every current C64 Ultimate firmware (official, Spiffy, prkl) — Legacy keyboard-buffer input. Fine for BASIC, menu navigation and most things.
You don't set any of this — it figures out what the machine can do when it connects and adapts on its own.
Running it
Grab u64deck.exe from the assets below, drop it in its own folder, double-click, open http://localhost:8064, and hit "Select Ultimate…". No Python, no config, no IP to type in.
One tip on your network
If you want the smoothest ride, plug your Ultimate in over Ethernet and — if you're able to — turn Wi-Fi off on the device. There's a firmware quirk where having Wi-Fi enabled makes the wired REST side sluggish. u64deck copes with both being on (that's what the split routing is for), so it'll work fine either way — but Ethernet-only is the setup I'd recommend, especially if anything feels laggy. The README goes into it if you're curious.
Full technical changelog's in CHANGELOG.md if you want the gory detail. Last public build was Public Beta 10.4 — this candidate rolls up everything since, mainly the whole discovery and split-routing effort.
u64deck v1.8.0 — Public Beta 9
u64deck v1.8.0 — Public Beta 9
Public Beta 9 corrects the native SID-duration implementation introduced in Public Beta 8.
Corrected SID duration metadata
- Generates the compact per-SID
.sslduration array expected by the Ultimate firmware. - Encodes each subtune as two packed-BCD bytes: minutes followed by seconds.
- Limits the optional duration attachment to the firmware maximum of 512 bytes.
- Never uploads the complete multi-megabyte
Songlengths.md5database to the Ultimate. - Falls back to the original single-file SID request when no matching duration is available.
- Preserves the selected
songnrand the required multipart order: SID first,.sslsecond. - Applies to SID Jukebox, local uploads, Quick Launch library SIDs and Assembly64 SID playback.
This removes the large repeated upload responsible for the SID-player lag and unrelated REST timeouts seen in Public Beta 8. Physical-device testing confirmed that the Ultimate's native SID-player screen now displays the supplied song duration.
Retained from earlier public betas
- Capability-detected CIA1 keyboard input with legacy KERNAL-buffer fallback.
- Full-height Assembly64 workspace with readable categories, ratings and Mount & Run.
- Stable merged SQLite index and Windows migration/file-lock handling.
- SID metadata indexing, chip/format filters, native video/audio streaming and recording.
Publication checks
- 111 automated tests passed from the packaged source archive.
- Python compilation and JavaScript syntax checks passed.
- README and Help-content consistency checks passed.
config.example.jsonand the GitHub Actions workflow parsed successfully.- Live source smoke test served the UI and reported v1.8.0 / Public Beta 9 / build
8b3f7e8. - ZIP integrity, archive layout and clean extraction checks passed.
- No
config.json, SQLite databases, WAL/SHM files, personal data, caches, compiled Python files or detected secrets are included. - GitHub Actions refreshed to
actions/checkout@v7,actions/setup-python@v7,actions/upload-artifact@v7andsoftprops/action-gh-release@v3.
Release identifiers
- Build ID:
8b3f7e8 - SHA-256:
544d81ee019130539143606455defb170d6f43908b457c754c745b1a8fe966cb - Git tag:
v1.8.0-beta.9
u64deck v1.8.0 — Public Beta 10.4
u64deck v1.8.0 — Public Beta 10.4
Public Beta 10.4 improves SID Jukebox queue information and makes Stop respond without waiting behind ordinary device-status traffic.
Queue lengths
- Renamed the Play Queue column from Len to Length.
- Queue durations are populated as soon as tunes are added, before lazy SID files are fetched from the Ultimate.
- u64deck uses the canonical HVSC path/subsong catalogue already present in
Songlengths.md5, then continues to use the SID digest when available. - Multi-subtune entries display the duration for the selected subtune.
- Tunes without a matching Songlengths entry display an em dash rather than an invented duration.
- The existing compact
.sslattachment remains unchanged, so the Ultimate's native SID player continues to show the documented length too.
Faster Stop response
- The Stop control updates the browser state immediately and pauses periodic Jukebox refreshes while the stop request is pending.
- u64deck now sends the low-latency TCP command-socket reset packet first.
- REST
/v1/machine:resetremains the compatibility fallback when the command socket is unavailable. - Stop retains the existing Ultimate behaviour: SID playback ends by resetting to the C64 command line because the firmware does not expose a separate native SID-player stop operation.
- Matrix-input cleanup remains in place so remotely held keys are released safely.
Documentation
- Updated built-in Help to explain immediate Length population and Stop/reset behaviour.
- Corrected remaining README wording for Search and Random Dive so it matches the one-tune queue model introduced in Public Beta 10.3.
- Retained the canonical screenshot gallery, standalone-executable Quick start and SIDFlow/Chris Gleissner attribution.
Validation
- 145 tests passed from the packaged source.
- Python compilation passed.
- JavaScript syntax validation passed.
- README and built-in Help regression checks passed.
- GitHub Actions YAML and example configuration parsed successfully.
- Live packaged-source smoke test passed.
- ZIP integrity and archive-hygiene checks passed.
- No configuration, SQLite databases, SIDFlow artefacts, caches, playlists, favourites or personal data are included.
Release identifiers
- Version:
1.8.0 - Release:
Public Beta 10.4 - Build ID:
bc51287 - Git tag:
v1.8.0-beta.10.4 - SHA-256:
c82840923782393f2e999478b26c718a481d2b2001c04648527e4de0a65a3ad2
u64deck v1.8.0 — Public Beta 6
u64deck v1.8.0 — Public Beta 6
Public Beta 6 completes the Assembly64 workspace improvements introduced in Beta 5.
Assembly64 fixes
- Added a genuine Mount & Run action for D64, D71, D81 and G64 disk images.
The image is mounted in drive A using the selected safety mode, the C64 is reset,
and u64deck entersLOAD"*",8,1followed byRUNafter the configured boot delay. - Numeric Assembly64 category identifiers are now displayed using readable labels,
including Demos instead of1. A built-in canonical map is used as a fallback
when the service's preset metadata does not include numeric identifiers. - Added the Assembly64 Rating column to search results.
- Replaced raw microsecond-precision timestamps with concise values such as
21 Jul 2026, 12:59. The original service value remains available as a tooltip. - Retained the full-height responsive two-pane workspace, selected-release state,
sticky headings, polished empty/error states and safe filename handling from Beta 5.
Documentation
- Moved the source launch instructions to a prominent Quick start section directly
after the README introduction, so the normal unzip →start.bat→ browser →
Select Ultimate… path is visible before contributor build and release material. - Kept the cross-platform Python launch commands and the persistent
config.json
upgrade note together in Quick start.
Included from earlier public betas
- Stable SQLite index migration with validation, backup and Windows file-lock handling.
- Correct Image Parse Details notifications.
- Release-neutral built-in Help and hardened GitHub Actions packaging workflow.
- SID metadata indexing, chip/format filters and player favourites.
Validation
- 95 tests passed.
- README body text was verified unchanged apart from the renamed and relocated heading.
- Help-content and README consistency regression tests passed.
- Python and JavaScript syntax checks passed.
- GitHub Actions workflow and example configuration parsed successfully.
- Live source smoke test returned
v1.8.0 · Public Beta 6with build7420354. - Public archive hygiene checks passed; no database, configuration, favourites,
cache, backup or compiled Python artefacts are included.