DVAI Hub — developer fork
DVAI Hub ships in two flavors:
| Flavor | Audience | Distribution |
|---|---|---|
| Flavor 1 — first-party Hub | End users with multiple devices | GitHub Releases / Homebrew / winget under the DeepVoiceAI brand. |
| Flavor 2 — app-developer fork | App developers who want a branded desktop companion alongside their mobile app | Forked, rebranded, locked to one appId, distributed by you. |
This page is the user-facing summary of Flavor 2. The full step-by-step lives next to the source at hub/DEVELOPER-FORK.md.
When to fork
Fork the Hub when you want all of these:
- Your desktop companion branded as your app — "Acme Hub", not "DVAI Hub".
- Pairing locked to your specific mobile app's bundle id.
- Distribution through your own channel — your DMG / MSI / Homebrew tap / winget package.
If you only want one of those, skip the fork. Point your users at upstream DVAI Hub instead.
What you inherit
Every Phase 4 capability:
- LAN mDNS discovery plus HMAC-signed pairing handshake.
- Capability probe plus offload decider.
- Multi-tenant pairing layer, locked to your appId via
multiTenant: { allowedAppIds: ["com.your.app"] }. - Strict-by-default substitution policy with the
preferBetterQuantper-pairing opt-in. - The external-engine bridge framework — users with Ollama or LM Studio installed can route through your branded companion.
- Per-app audit log with 30-day rolling retention.
- Tauri 2 desktop shell with system tray, single-instance lock, auto-start hook, and notifications.
What you replace
Three brand surfaces and the pairing lock:
hub/src-tauri/tauri.conf.json—productName,identifier, bundle metadata.hub/src/App.tsx+hub/src/styles.css— visible brand text and colors.hub/src-tauri/icons/— full icon set. Runpnpm dlx @tauri-apps/cli iconto generate from a 1024×1024 master.hub/peer-mode/server.ts— setmultiTenant.allowedAppIdsto your bundle id(s).
What you cannot opt out of
A few invariants protect end users. You can't disable them in a fork.
- The strict-by-default substitution policy.
- Per-app pairing isolation. Even locked to one appId, the audit log groups by appId for forensic clarity.
- The 30-day pairing inactivity TTL.
- LAN-only by default. Rendezvous URL is opt-in per fork.
If your fork loosens any of these, rename it. It's no longer a "DVAI Hub-compatible" build.
Distribution
Your job. Typically:
- Apple Developer ID + macOS notarization for the
.dmg. - Windows code-signing cert for the
.msi. - Your own GitHub Releases workflow. The upstream
dvai-hub-release.ymlis a template. - Optional: your own Homebrew tap; a separate winget manifest submission.
The upstream packaging templates in hub/packaging/ work as starting points. Replace identifier, URL, and brand fields.
Upstream merges
DVAI Hub will get new versions over time — security patches, new external engine adapters, performance improvements. Pull from upstream and rebase your branding on top:
git fetch dvai-bridge main
git merge -X subtree=hub dvai-bridge/main -m "merge upstream DVAI Hub"Branding files (steps 1–3 above) will sometimes conflict. Resolve in favor of your branding. The Phase 4 spec deliberately centralizes brand strings, so these conflicts stay small and predictable.
