Closed
[WIP] Rewrite PS5 Vault as Rust/Tauri v2 application#37
Conversation
Copilot stopped work on behalf of
NookieAI due to an error
March 11, 2026 13:00
Copilot stopped work on behalf of
NookieAI due to an error
March 11, 2026 13:01
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
src-tauri/Cargo.tomlsrc-tauri/build.rssrc-tauri/tauri.conf.jsonsrc-tauri/src/main.rssrc-tauri/src/lib.rssrc-tauri/src/state.rssrc-tauri/src/models.rssrc-tauri/src/commands/mod.rssrc-tauri/src/commands/scan.rssrc-tauri/src/commands/transfer.rssrc-tauri/src/commands/ftp.rssrc-tauri/src/commands/local_ops.rssrc-tauri/src/commands/drives.rssrc-tauri/src/commands/verify.rssrc-tauri/src/commands/api_key.rssrc-tauri/src/api_server.rstauri-bridge.jsindex.html(add tauri-bridge.js script tag)package.json(remove Electron, add Tauri CLI).gitignore(add src-tauri/target/)cargo checkto validate Rust code compilesOriginal prompt
Goal
Rewrite PS5 Vault (currently Electron + Node.js) as a Rust/Tauri v2 desktop application. Every single feature must work identically to the Electron version. Do not break or remove anything. Solve every problem you encounter and produce production-quality, compiling code.
Current Electron Architecture
Files to replace / migrate
main.jsapi-server.jspreload.jswindow.ppsaApiftp.jsrenderer.jsindex.htmlpackage.jsonwindow.ppsaApisurface (frompreload.js) — ALL must be preservedAPI Server (port 3731) endpoints — ALL must be preserved
Key constants from
main.jsWhat to build
1.
src-tauri/Cargo.tomlUse Tauri v2. Include these crates:
tauri = { version = "2", features = ["protocol-asset"] }tauri-build = "2"(build-dep)tokio = { version = "1", features = ["full"] }serde = { version = "1", features = ["derive"] }serde_json = "1"suppaftp = { version = "6", features = ["async-native-tls"] }— replacesbasic-ftpaxum = "0.7"— for the REST/SSE API serveraxum-extra = { version = "0.9", features = ["typed-header"] }tower-http = { version = "0.5", features = ["cors"] }tokio-stream = "0.1"sha2 = "0.10"hex = "0.4"uuid = { version = "1", features = ["v4"] }rand = "0.8"chrono = { version = "0.4", features = ["serde"] }anyhow = "1"dirs = "5"opener = "0.7"— for shell open / show in folderarboard = "3"— clipboardsysinfo = "0.30"— drive enumeration2.
src-tauri/tauri.conf.json{ "productName": "PS5 Vault", "version": "2.3.0", "identifier": "com.ps5vault.app", "build": { "frontendDist": "../" }, "bundle": { "active": true, "targets": "all", "icon": ["assets/icon.ico", "assets/icon.icns", "assets/icon.png"] }, "app": { "windows": [{ "title": "PS5 Vault", "width": 1280, "height": 800, "resizable": true }], "security": { "csp": null } } }3.
src-tauri/build.rsStandard Tauri build script.
4.
src-tauri/src/main.rsEntry point: initialise shared
AppState, start Axum API server as atokio::spawntask on port 3731, register all Tauri commands, run the Tauri app.5.
src-tauri/src/state.rs6.
src-tauri/src/models.rsAll shared structs with
Serialize/Deserialize:GameItem— title, titleId (PPSA…), contentFolderPath, folderPath, folderName, displayTitle, dbTitle, sizeBytes, iconPath, platform, contentType, etc. Mirror every field thatrenderer.jsuses.ScanProgress { found, sized, total }TransferProgress { done, total, currentFile, bytesTransferred, totalBytes, speed }FtpConfig { host, port, user, pass, passiveMode }FtpCacheEntry { size_bytes, cached_at }ScanOpts { deep, skipSized, includePs4 }This pull request was created from Copilot chat.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.