Release v1.7.0
VR CyberDeck v1.7.0 — NO_COMMITS_TO_DECODE
> ACCESS GRANTED. JACK IN. OPERATE. DEPLOY. CONTROL.
VR CyberDeck is a cross-platform desktop deck for managing, sideloading, and uploading content to Meta Quest devices. It started as a fork of ApprenticeVR by jimzrt (huge thanks — the core engine is theirs) and grew into a full neon-terminal rebrand of the experience.
// CHANGELOG
A big release focused on install reliability, download integrity, and a wave of quality-of-life features — plus stability fixes for launch-time freezes.
Since 1.6.7 · PRs #28 and #29 · fixes #25
🛠️ Install & OBB reliability
-
Fixed the main cause of games crashing after install (missing OBB resources).
OBB files are pushed to the headset one at a time, but a failed or truncated
push was being silently ignored — the transfer helper returned a failure
the caller never checked, so a partial OBB copy was reported as a successful
install. The game then launched with missing assets and crashed. Every OBB
push site now checks the result and fails the install loudly instead:- Standard APK + OBB installs abort with a clear error if any file fails to copy.
install.txt-scriptedpushsteps are now treated as critical (likeinstall),
so a failed resource push no longer counts as success.
-
Added on-device OBB verification after every install.
Once the OBB folder is pushed, the app reads the file sizes back off the
headset and compares them to what was sent. A missing or wrong-sized file
fails the install with a specific message (which file, expected vs actual
bytes) rather than leaving you with a silently broken game. This is a single
shell round-trip, so it runs on every install with negligible overhead.
📦 Download integrity — release.manifest verification
- Every download is now verified against the release's own manifest.
Each release ships arelease.manifestlisting the exact byte size of every
file (APK,asset-config.json, and each OBB). After extraction, VR CyberDeck
checks every extracted file against it — a missing or size-mismatched file
means the download/extraction was incomplete or corrupt, and the item fails
with a clear error before you try to install it. This catches truncated
or partially-corrupted downloads that would otherwise surface later as a
crashing game.- Authoritative (exact byte sizes) and needs no extra input from you.
- Gracefully skipped for older releases that ship without a manifest, so it
never blocks an otherwise-good install.
💾 Save Backup (BETA) — Walkabout Mini Golf restore (#25)
- Restores now handle games that regenerate their save folder on reinstall.
Walkabout Mini Golf stores its save at
Android/data/.../files/Profiles/Oculus/<random>/Profile_Default.data, but
the game creates a new random-numbered profile folder when reinstalled —
so restoring the old folder verbatim left the game reading an empty one and
the save appeared lost.- Added a profile-driven post-restore fixup (
profileFolderSync) that
copies the restored save file into every current profile folder on the
device, so whichever one the game reads actually contains it. - The fixup is best-effort and never fatal — any problem is written to
the backup log (included in bug reports) but never fails the restore. - Enabled for Walkabout Mini Golf via the backup-profiles registry.
- Tip: for best results, launch the game once after reinstalling (so it
creates its new profile folder) before restoring.
- Added a profile-driven post-restore fixup (
✨ Quality-of-life features
- Reorder the download queue. Move queued items up or down, plus the
existing bump-to-front button, so you control what downloads next. - Download-complete desktop notifications. Get a system notification (and
sound) when a game finishes downloading. - Right-click context menu on games. Right-click any game card or table row
for quick actions: Details, Download & Install, Update,
Reinstall, Uninstall, and Copy Package Name.
🩹 Stability fixes
- Fixed a launch-time freeze caused by an infinite console-forwarding loop.
- The app now degrades gracefully when the ADB server fails to start
instead of hard-failing. - Fixed the intro animation freezing on the boot cursor (React StrictMode,
dev builds).
🧰 Under the hood
- Added a Prettier config matching the project's real style (single quotes,
no semicolons, 100-column, no trailing commas) and normalized formatting
repo-wide — eliminating ~1,750 spurious lint warnings on every run. - Resolved long-standing TypeScript blockers — the project now typechecks
with 0 errors (web + main). - Added unit tests for the new
release.manifestparser and the save-restore
fixup planner; full node test suite passing; production build verified.
Notes for testers
- Walkabout restore (#25) is newly implemented and benefits from a real
on-device pass: reinstall Walkabout, launch it once, then restore a backup —
the backup log should showSynced Profile_Default.data → …/<newRandom>/…. - The right-click context menu is new; a quick pass on both a game card and
a table row is worthwhile.
## // HEADLINE FEATURES (Click to Expand - ITS A SPOILER!)
[ LIBRARY ] — optional, when you add a server
- Sideloader-first: works first launch with zero config; add your own server (a server config or an rclone config) under Manage Remotes for a browsable library
- Card view and table view (table now stretches edge-to-edge in wide windows)
- Persistent sort, density presets, 18+ filter, mirror management with public fallback
NEW/UPDATEDbadges driven off reallastUpdatedtimestamps
[ TRANSFERS ]
- Up to 5 parallel downloads with live progress
- Live
// TRANSFER_BUSstrip in the header — rotates through active transfers with name, stage, %, speed, and ETA - Unified Transfers drawer with stage-aware labels (
Installing APK...,Copying OBB...) - Cyberdeck warns you with
[ TRANSFERS IN PROGRESS ]if you try to close the window mid-transfer (works for both X and Cmd+Q) - Scan existing downloads folder, retry, clear-completed, per-item delete
[ DEVICE / ADB ]
- Auto-connect Quest on launch, WiFi bookmarks for wireless ADB
- ADB Shell with built-in quick-command shortcuts:
PERFORMANCE— pin CPU/GPU level, swap refresh rate (72/90/120Hz), reset textureUPDATES— block / unblock the OS updater and Meta StoreSYSTEM— reboot variants, battery, storage, wifi, IP, proximity togglePACKAGES— list 3rd-party / all / current focused appWIRELESS—tcpip 5555,adb devices
- Custom user macros — define your own labelled pill for any command you spam (right-click to edit/delete, persisted across sessions)
- Disable-sideloading toggle for safety
[ TRAILERS ]
- Switched from youtube trailers to meta trailers... and back again.
- No ads, no suggested videos, no subscribe buttons, no comments, no end-screen "Watch next" grid — just the trailer, then it stops
- Autoplays as soon as you open the trailer drawer
[ INTERFACE ]
- Glitch
UNAUTHORIZED → AUTHORIZEDboot intro - Matrix-style random
g33ky_u$3rn4m3$per session - Neon Hacker Console in the header (live SYS_STATUS readout — now properly fits the 88px header without clipping)
- Font picker — swap Courier New for Console / Terminal / System Mono if the default is hard to read
- Optional sound effects (drop-in) — drop
click.wav,type.wav, ormatrix.wavinto your user-datasounds/folder (no rebuild) orresources/sounds/(bundled), and the UI plays them on button clicks, the boot-intro typing, and the ADB shell matrix load. Settings has a master toggle, volume slider, TEST button, and a per-file "✓ READY / — missing" status readout. Lookup order: user data → bundled, so you can override bundled sounds without recompiling. - Colorblind mode now covers the whole UI — version subtitles, filter counters, Transfers button, battery pill, breach animation all swap palette
- Accent color picker, font scale up to 200%, tab memory
- Compact, laptop-friendly layout (900x640 minimum window)
- One-click log upload from Settings → Log Upload
// DOWNLOAD
Pick the build for your platform — same set of artifacts as the prereleases:
| File | Platform |
|---|---|
vr-cyberdeck-1.7.0-x64.dmg |
macOS x64 |
vr-cyberdeck-1.7.0-arm64.dmg |
macOS arm64 |
vr-cyberdeck-1.7.0-setup-x64.exe |
Windows — Installer |
vr-cyberdeck-1.7.0-portable-x64.exe |
Windows — Portable |
vr-cyberdeck-1.7.0-x86_64.AppImage |
Linux x64 |
vr-cyberdeck-1.7.0-arm64.AppImage |
Linux ARM64 |
vr-cyberdeck-1.7.0-amd64.deb |
Debian/Ubuntu x64 |
vr-cyberdeck-1.7.0-arm64.deb |
Debian/Ubuntu ARM64 |
macOS — "App is damaged":
xattr -c /Applications/VR\ CyberDeck.app
Linux AppImage:
chmod +x vr-cyberdeck-1.7.0-x86_64.AppImage
./vr-cyberdeck-1.7.0-x86_64.AppImage
Already on a 0.x build? It will auto-update.
// JACK_IN
- Install the build for your OS
- Plug your Quest in via USB (data-capable cable)
- Allow USB Debugging on the headset
- Drag an APK, ZIP, game folder, or OBB folder onto the deck to sideload it
That's it — no account, no server, no JSON to edit. Want a browsable library instead? You can add your own server (a server config or an rclone config) under Manage Remotes — either you already know one, or you just use it as a sideloader. Power-user knobs (custom servers, mirrors, rclone configs, ADB macros, sound effects) all live in Settings.
// FEEDBACK
- 🐛 Open an issue for bugs — include a rentry link of the log from Other Settings → //Upload Log.
// CREDITS
Built on top of ApprenticeVR by jimzrt. Without that foundation this project doesn't exist.
Special thanks to Rod — my crazy friend who believes in megalodons on Mars and gave me incredible feedback during the prerelease cycle.
And to everyone who tested the 0.x builds and reported issues — y'all shaped the 1.0.0 polish list.
// LICENSE
GNU Affero GPL v3
Need help adding a server? Tutorial Video by CrazyScamp here
> v1.7.0 — END_OF_FILE