fret-runtime 0.1.0

Runtime abstractions and scheduling surfaces for host integration in Fret.
Documentation

fret-runtime

Portable runtime contracts and value types shared across the Fret workspace.

This crate sits between:

  • the portable vocabulary (fret-core),
  • the UI runtime substrate (fret-ui),
  • the app runtime (fret-app),
  • and the backend glue (launchers/runners that drain effects and drive scheduling).

It must remain backend-agnostic and avoid forcing a specific async runtime.

Async policy (v1)

The contract surface in this crate must not require Tokio (or any specific executor). Async work is app-owned and the runtime boundary communicates via explicit messages/effects.

See docs/workstreams/bottom-up-fearless-refactor-v1/bottom-up-fearless-refactor-v1.md for the program-level policy.

Module ownership map (v1)

  • effect — portable effect vocabulary (what the UI/app requests; runners drain/execute)
  • execution — dispatcher/inbox draining traits and types (runner-owned scheduling boundary)
  • modelModel<T> and model store contracts (app-owned data; UI observes)
  • command, commands — command IDs, registries, metadata (keymap/menu integration)
  • keymap, when_expr — keybinding formats and when gating expression vocabulary
  • input — input dispatch phases/default actions and portable shortcuts vocabulary
  • capabilities — capability signals and execution capabilities (portability modeling)
  • ui_host — host trait surface (globals/models/commands/effects/time/drag)
  • menu — portable menu model + file formats (roles/system menus)
  • window_* — window-scoped services and snapshots used by app + UI (metrics, gating, arbitration, text snapshots)
  • platform_* — portability-facing platform query contracts (completion, text input queries)
  • font_*, text_interaction_settings — font catalog bootstrap/cache and text interaction defaults
  • docking_settings, drag, interaction_diagnostics, time — small supporting modules

If you need to add something new:

  1. If it is an OS binding, it does not belong here (put it in a backend crate).
  2. If it is UI policy, it does not belong here (put it in ecosystem crates).
  3. If it is a hard-to-change contract, link an ADR and add a regression gate.