7.0 KiB
Platform Parity Roadmap
This roadmap focuses on one question:
How do we expand VoxVera beyond Linux without overstating reliability, while still converging on real cross-platform parity for Tor hidden-service hosting?
Strategic Principle
Parity is not a packaging milestone. It is a runtime-contract milestone.
Every platform must eventually implement the same hosting contract:
- install VoxVera
- ensure Tor and OnionShare are available
- build site assets
- serve the hidden service
- preserve
.onionshare-session - recover hosting after reboot, login, suspend, or offline periods
- surface logs and status
Package formats should inherit that contract. They should not define independent behavior.
Phase 0: Truth Alignment
Goal: bring repo claims, docs, and release posture into line with current reality.
Deliverables:
- canonical support matrix
- machine-readable support declaration
- installer/package warnings for experimental paths
- README and docs aligned to the actual supported target
Definition of done:
- no docs imply parity that tests do not support
- every platform surface has an explicit support tier
- release artifacts are not treated as proof of hosting reliability
Phase 1: Harden Linux As Reference
Goal: make Linux CLI with systemd --user the clearly defensible model that other platforms copy.
Work items:
-
Add
voxvera doctorfor runtime validation.- Check Tor reachability.
- Check OnionShare availability.
- Check
start-allsurfaces. - Check autostart timer installation.
- Check host directories and session files.
-
Add
voxvera autostart status.- Show service and timer files.
- Show whether the timer is enabled.
- Show next/last run timestamps if available.
-
Normalize Linux log/status guidance.
- Document host log paths.
- Document timer/service status commands.
- Document expected recovery flow after reboot/network loss.
-
Validate restart behavior.
- fresh install
- first serve
- reboot
- suspend/resume if possible
- temporary offline period followed by reconnect
Definition of done:
- Linux remains the only
supportedpath until the above evidence exists and is documented.
Phase 2: Platform Adapter Layer
Goal: stop encoding platform logic in ad hoc installer scripts.
Recommended structure:
voxvera/platforms/base.pyvoxvera/platforms/linux.pyvoxvera/platforms/macos.pyvoxvera/platforms/windows.pyvoxvera/platforms/docker.py
Each adapter should define:
- support tier
- Tor discovery strategy
- OnionShare discovery strategy
- state root
- autostart installation strategy
- autostart status strategy
- log/status surface
- known limitations
CLI surfaces to add:
voxvera doctorvoxvera platform-statusvoxvera autostartvoxvera autostart statusvoxvera autostart uninstall
Definition of done:
- shell installers become thin wrappers over shared Python logic instead of owning runtime policy themselves
Phase 3: Docker Beta Candidate
Goal: make Docker a coherent, testable deployment surface.
Decisions to settle:
- single-container runtime vs compose-based runtime
- host Tor vs container Tor
- log and state persistence model
Recommended direction:
- keep runtime state under one explicit volume root
- document restart policy clearly
- make health and recovery behavior observable
Validation checklist:
- container restart preserves onion identity
- host reboot with restart policy restores hosting
- state remains in mounted volume
- logs remain inspectable
Promotion target:
experimental->beta
Phase 4: macOS CLI
Goal: establish one honest CLI-based macOS hosting model before packaging.
Work items:
- define Tor discovery strategy
- define OnionShare discovery/install strategy
- validate manual
build+serve - implement and validate
launchdrecovery - document known limitations
Promotion target:
- remain
experimentaluntillaunchdrecovery is validated - move to
betaonly after login/reboot/offline recovery evidence exists
Phase 5: Windows CLI
Goal: establish one canonical Windows runtime model before claiming package parity.
Work items:
- unify binary naming across installer, Chocolatey, docs, and release assets
- define Tor discovery strategy
- define OnionShare discovery strategy
- validate manual
build+serve - implement Task Scheduler recovery path
- add Windows-specific status/log guidance
Promotion target:
- remain
experimentaluntil scheduled recovery and state persistence are proven - move to
betaonly after reboot/login/offline recovery evidence exists
Phase 6: Electron GUI Convergence
Goal: make the GUI a frontend to the supported runtime, not a separate runtime.
Work items:
- route the GUI through shared CLI/runtime surfaces
- reduce duplicated Tor startup behavior
- add visibility for:
- Tor status
- OnionShare status
- hosting status
- onion URL
- logs
- make window-close behavior explicit and safe
Promotion target:
- GUI remains
experimentaluntil it stops diverging from the CLI runtime contract
Phase 7: Package Surface Promotion
Goal: package formats should become trustworthy wrappers around validated runtimes.
Work items:
-
Debian package
- declare actual runtime dependencies
- validate install + host + recovery path
-
AppImage
- decide whether it is distribution-only or a real hosting target
-
Homebrew
- fix artifact URL/sha/version policy
- clarify whether it installs a hosting target or just a CLI
-
Chocolatey
- align artifact naming and installer semantics
-
Flatpak
- decide whether Tor/OnionShare can be supported sanely in-sandbox
Rule:
- no package surface should be promoted above the support tier of its underlying runtime
Testing Program
1. Unit tests
- config/state logic
- autostart file generation
- platform adapter selection
2. Mocked integration tests
serveautostartdoctorplatform-status
3. Platform smoke tests
- fresh install
- build
- serve
- persist identity
- restart
- recover
Current smoke target names:
linux-climacos-cliwindows-clidocker-cli
These target names are contract-level validation entry points. Only linux-cli currently represents a supported hosting path; the others should be used to validate experimental posture and dependency discovery on their native platforms until their recovery behavior is proven.
4. Release checks
- support matrix is current
- docs match support tiers
- artifact names match scripts and package manifests
Immediate Next Tasks
- Add
voxvera doctor. - Add
voxvera autostart status. - Add the platform adapter scaffold.
- Capture Linux reboot/offline recovery validation steps in docs and CI notes.
- Pick Docker's canonical runtime model.
- Normalize Windows binary naming before further Windows work.
Non-Goals
- claiming parity before recovery behavior is validated
- treating package availability as support proof
- maintaining separate runtime semantics in GUI vs CLI