1
0
Files
kobopatch-webui/wip/todo.md

2.2 KiB

TODO

Done

  • Device detection proof of concept (File System Access API)
  • Serial prefix → model mapping (verified against official Kobo help page)
  • Architecture planning (updated: fully client-side, no PHP backend)
  • Installed Go via Homebrew (v1.26.1)
  • Verified all kobopatch tests pass natively
  • Verified all kobopatch tests pass under GOOS=js GOARCH=wasm (via Node.js)
  • Updated device identification doc with correct model list
  • Removed obsolete backend-api.md
  • Created kobopatch-wasm/ with setup.sh, build.sh, go.mod, main.go
  • WASM wrapper compiles successfully (9.9MB)
  • All kobopatch tests still pass with our module's replace directives
  • Cleaned up .gitignore

In Progress

Integration Testing

  • Test WASM binary in actual browser (load wasm_exec.js + kobopatch.wasm)
  • Test patchFirmware() JS function end-to-end with real firmware zip + patches

Frontend - Patch UI

  • YAML parsing in JS (extract patch names, descriptions, enabled, PatchGroup)
  • patch-ui.js — render grouped toggles per target file
  • PatchGroup mutual exclusion (radio buttons)
  • Generate kobopatch.yaml config string from UI state

Frontend - Build Flow

  • User provides firmware zip (file input / drag-and-drop)
  • Load WASM, call patchFirmware() with config + firmware + patch files
  • Receive KoboRoot.tgz blob, write to .kobo/ via File System Access API
  • Fallback: download KoboRoot.tgz manually
  • Bundle patch YAML files as static assets

Future / Polish

  • Run WASM patching in a Web Worker (avoid blocking UI)
  • Browser compatibility warning with detail
  • Loading/progress states during build
  • Error handling for common failure modes
  • Host as static site (GitHub Pages / Netlify)
  • NickelMenu install/uninstall support (bonus feature)

Architecture Change Log

  • Switched from PHP backend to fully client-side WASM. Reason: avoid storing Kobo firmware files on a server (legal risk). The user provides their own firmware zip. kobopatch runs as WASM in the browser. No server needed — can be a static site.