Skip to content

direct: Browser Direct mode — Axis + ForgeFX runtime fully in-page (0.8.0-beta)#26

Merged
sKuhLight merged 1 commit into
mainfrom
break-free
Jul 3, 2026
Merged

direct: Browser Direct mode — Axis + ForgeFX runtime fully in-page (0.8.0-beta)#26
sKuhLight merged 1 commit into
mainfrom
break-free

Conversation

@sKuhLight

Copy link
Copy Markdown
Owner

Open axisapp.live/?mode=direct, grant Web MIDI (sysex) or Web Serial, and Axis drives the device with no install and no local server. The full ForgeFX engine runs in-page (forgefx-server/runtime, see sKuhLight/ForgeFX#30) — grid, params, scenes, tuner/meters, preset history + undo, snapshots/backups (IndexedDB, desktop-compatible brotli/sha256 blob format), free-tier cloud sync, and the local storage folder via the File System Access API.

  • direct.svelte.ts + DirectGate.svelte: boot flow beside remote.svelte.ts (capability detection → permission → port pairing → runtime assembly); runtime loads as a lazy chunk (desktop/remote bundles unaffected)
  • direct/webmidi.ts / webserial.ts: ForgeFX Transport implementations (request serialization, quiet-window collection, F0..F7 reassembly, 64 B/3 ms paced writes for FM3 CDC)
  • direct/idbStore.ts / fsaFolder.ts: StoreBackend + FolderAdapter browser implementations
  • transport mode tri-state in forgefx.ts (local/remote/direct); binary helpers route through the installed transport in direct mode; SSE stays local-only
  • web build hosts both modes at runtime — ?mode=direct boots Direct, everything else remains the remote gate (existing links/PWA installs unchanged)
  • CI + deploy-remote build the runtime from sibling checkouts (forgefx-midi, ForgeFX)

Browser support: Chrome/Edge desktop = everything; Firefox & Android = MIDI-class devices (no FM3-over-USB — Web Serial is Chromium-desktop-only — and no folder picker); iOS/Safari → Axis Remote. Details in docs/browser-direct-runtime-plan.md.

Depends on sKuhLight/forgefx-midi#1 (merged) and sKuhLight/ForgeFX#30.

…-page

Open axisapp.live/?mode=direct, grant Web MIDI (sysex) or Web Serial, and
Axis drives the device with no install and no local server:

- direct.svelte.ts + DirectGate.svelte: boot flow (capability detection,
  permission, port pairing/choice, runtime assembly) beside remote.svelte.ts
- direct/webmidi.ts + webserial.ts: ForgeFX Transport implementations
  (request serialization, quiet-window collection, F0..F7 byte-stream
  reassembly, 64B/3ms paced writes for the FM3 CDC path)
- direct/idbStore.ts: IndexedDB StoreBackend behind an in-memory mirror +
  brotli-wasm/js-sha256 codec (desktop-compatible blob format); versions,
  backups and config live in the browser and cloud-sync under the same
  free-tier rules
- direct/fsaFolder.ts: local storage folder over the File System Access
  API — the same Presets/ library + Sync/ mirror as desktop (Chromium)
- forgefx.ts: transport mode tri-state (local/remote/direct); the four
  binary raw-fetch helpers route through the installed transport in direct
  mode; SSE stays local-only (direct subscribes to the runtime event bus)
- web build hosts both modes at runtime: ?mode=direct boots Direct,
  everything else stays the remote gate (existing links/PWA unchanged)
- ci.yml + deploy-remote.yml: sibling checkout of forgefx-midi + ForgeFX
  (the runtime is bundled from the file: workspace links)
- docs/browser-direct-runtime-plan.md: architecture + browser matrix
- 0.8.0-beta (ForgeFX engine 0.5.0-beta)
@sKuhLight sKuhLight merged commit 202c475 into main Jul 3, 2026
4 of 5 checks passed
@sKuhLight sKuhLight deleted the break-free branch July 3, 2026 18:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant