Written: March 2026
Horizon: March-September 2026
Thesis: Convert broad technical capability into a reliable, adopted daily-driver product. Current execution plan:docs/plans/plan03_9_82CorePlatformConvergence/README.md
The January roadmap assumed major pieces were still missing. Since then, the codebase moved fast:
- Web now ships pages + databases + canvas routes.
- Hub now includes relay, FTS5 search, file storage, schema routes, federation/shard primitives, and health endpoints.
- Secure share links were hardened (opaque handle redemption, replay protection, stricter endpoint policy).
- Electron security and sync hardening landed from February reviews.
The roadmap is no longer "build core capabilities from scratch." It is now:
- close the highest-leverage product gaps,
- reduce ambiguity in package/API surface,
- prove real-world reliability and adoption.
- Web app includes database and canvas experiences (
apps/web/src/routes/db.$dbId.tsx,apps/web/src/routes/canvas.$canvasId.tsx) - Web app has Cmd/Ctrl+K quick search with body/snippet indexing (
apps/web/src/components/GlobalSearch.tsx) - PWA infrastructure is wired (manifest + service worker via VitePWA) (
apps/web/vite.config.ts) - Hub package is real, not scaffold-only (
packages/hub/src/server.ts) - Hub search is FTS5-backed (
packages/hub/src/storage/sqlite.ts,packages/hub/src/services/query.ts) - Sharing and authz hardening has landed (
packages/hub/src/server.ts,apps/web/src/routes/share.tsx) - Presence/awareness pathways exist in desktop sync flow (
apps/electron/src/renderer/lib/ipc-sync-manager.ts) - Package lifecycle labels and explicit entrypoint guidance are published (
packages/README.md,docs/reference/api-lifecycle-matrix.md) - Worker-first web runtime now exposes visible fallback state and storage durability status (
apps/web/src/App.tsx,packages/react/src/context.ts) - Convergence release gates are recorded with benchmarks, web canary proof, and Electron multi-profile validation (
docs/reference/core-platform-convergence-release-gates.md)
- Navigation depth in web is still shallow (no nested hierarchy, breadcrumb, pinned/recent)
- Invites/membership UX and role lifecycle are not fully productized
- Federation exists in pieces, but not yet a complete multi-hub operator story
- Collaboration acceptance still needs invite/share/revoke/reconnect product-level proving beyond the core convergence gate
These remain outside this 6-month execution window unless required by critical user feedback.
| Theme | Deferred Item | Why Deferred |
|---|---|---|
| Vertical apps | Farming ERP / large domain packs | Requires stable plugin and schema ecosystem first |
| Full mobile push | Expo parity + mobile-first sync UX | Desktop/web still produce the fastest learning loop |
| Planet-scale infra | Public global index, large crawl orchestration | Needs sustained multi-hub traffic and ops maturity |
| Heavy customization | Marketplace-scale plugin distribution | API lifecycle and contract stability come first |
Rule: If a feature does not improve daily use, security posture, or onboarding in the next 6 months, defer it.
gantt
title xNet Roadmap Refresh (Mar-Sep 2026)
dateFormat YYYY-MM-DD
section Phase 1: Product Reliability
Navigation and search completion :p1a, 2026-03-04, 4w
Daily-driver UX polish :p1b, after p1a, 3w
Dogfood and bug burn-down :p1c, after p1b, 2w
Milestone: Daily-driver confidence :milestone, after p1c, 0d
section Phase 2: Collaboration + Trust
Invite and membership workflows :p2a, after p1c, 3w
Share and permission UX completion :p2b, after p2a, 2w
Presence consistency hardening :p2c, after p2b, 2w
Milestone: Team-ready collaboration :milestone, after p2c, 0d
section Phase 3: Platform Clarity
Package lifecycle matrix and cleanup :p3a, after p2c, 2w
API surface simplification :p3b, after p3a, 3w
Multi-hub federation integration :p3c, after p3b, 3w
Milestone: v1 operator-ready platform:milestone, after p3c, 0d
Goal: make xNet clearly better for daily personal use than switching back to old tools.
- Add nested page relationships and tree rendering in web sidebar
- Add breadcrumb navigation for page/database/canvas context
- Upgrade global search from title-only to title + body + snippets
- Index rich text body content for local mode and hub-backed mode
- Keep search reactive under ongoing edits
- Favorites/pinned and recently edited surfaces
- Keyboard navigation consistency across primary views
- Stabilize create/open flows (fewer blank/"untitled" dead-ends)
- Tighten loading and empty-state UX
- Weekly "top 5 friction" bug list from real usage
- Fix or scope each friction item within the same week
- Track median open->edit latency for core routes
- 14 consecutive days of primary personal use without fallback tools
- Search surfaces body content, not title-only results
- Navigation overhead feels negligible for a 200+ node workspace
- No recurring "can't find my data" issues in dogfooding
Goal: collaboration is dependable, understandable, and secure-by-default.
- Implement invite issuance + acceptance UX for workspace onboarding
- Add member list and role management views
- Make role effects explicit in UI (viewer/editor/admin)
- Add clear audit trail for membership changes
- Consolidate share flows around secure handle redemption model
- Improve link-state UX (active, expired, revoked, replayed)
- Expose permission explanation in-product (why action denied)
- Keep recovery path clear for non-technical users
- Ensure reconnect always restores awareness state predictably
- Validate stale presence cleanup behavior under tab/app churn
- Confirm permission revocation immediately ejects active sessions
- New collaborator can join and edit shared workspace in <5 minutes
- Permission denials are understandable and actionable
- Revocation behavior is immediate and testable
- Presence indicators stay accurate after disconnect/reconnect cycles
Goal: make xNet easier to operate, integrate, and evolve without internal ambiguity.
- Add explicit lifecycle labels in package docs (
stable,experimental,deprecated,internal) - Decide disposition of low-usage packages (starting with
@xnetjs/formula,@xnetjs/cli) - Remove or archive packages that do not support near-term product goals
- Split stable vs experimental entrypoints where behavior is partial
- Reduce top-level "kitchen sink" exports in major packages
- Align docs to only claim capabilities proven in current code
- Move from single-active-hub client behavior toward policy-driven multi-hub sync
- Promote node-native schema/system metadata model for federation orchestration
- Define clear operator guardrails for trust boundaries and hub peering
- External developers can identify stable APIs quickly
- Package set is smaller/clearer with fewer ambiguous contracts
- Multi-hub behavior is demonstrable in a repeatable local testbed
- Federation docs match shipped behavior without aspirational drift
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| "Everything at once" roadmap drift | High | Fatal | Re-prioritize monthly against this doc; enforce explicit deferrals |
| Collaboration security regressions | Medium | High | Keep secure-share and revocation tests as release blockers |
| API/documentation mismatch | High | High | Docs-from-code discipline for package capability claims |
| Solo-dev throughput bottlenecks | Medium | High | Keep weekly scoped milestones and kill low-leverage side quests |
| Multi-hub complexity explosion | Medium | High | Keep node-native policy model; treat transport as boundary, not truth |
- Local-first remains primary: hub improves sync/backup but must not be a hard runtime dependency for core editing.
- Security is product UX: safe sharing and clear permission behavior are first-class, not afterthoughts.
- Ship visible value weekly: each week must remove user friction or improve reliability.
- Document only what exists: no aspirational claims in package/API docs.
- Stability over novelty: complete and harden critical paths before adding new big surfaces.
- Close the web navigation gap with hierarchy, breadcrumbs, and recent/pinned surfaces.
- Build a collaboration acceptance checklist (invite -> share -> revoke -> reconnect) and run it end-to-end.
- Start the daily-driver polish loop for create/open flows, loading states, and keyboard consistency.