# Roadmap
Where bevy_director is heading. Grounded in what Bevy 0.18/0.19 actually
ship; engine features are cited so future-us can check assumptions when
0.20 lands. Nothing here is a promise; order reflects current judgment
of pain-relieved per effort.
## Shipped (0.4)
- Text blocks with fades, the `titles` overlay renderer, the
`ActiveTexts` contract for custom caption rendering.
- The Open panel: browse and load `.dir.ron` files from the dock.
- Typing guards: text fields no longer leak hotkeys into the viewfinder.
## Next: editor depth (0.5)
The data model is ahead of the editor; close the gap before growing the
format again.
- **Marker lane.** Markers are the cue mechanism and today they are not
even visible in Director's Cut — author them like text blocks: a lane,
draggable diamonds, a name field.
- **Ease editing.** Every key carries an `EaseFunction` but the UI can
neither show nor change it (capture stamps SmoothStep). An inspector
cycle row is the minimum; a curve preview would be better.
- **Blend editing.** `blend_in`/`blend_out` exist in the format only;
give shots a draggable blend handle on their left edge.
- **Copy / duplicate.** Duplicate shot and duplicate text block buttons;
the checkpoint/undo machinery already covers them.
- **Snapping.** Optional frame-grid snapping (configurable fps, e.g.
24), plus snap-to-shot-edge and snap-to-marker while dragging.
- **Dirty indicator.** `saved_fingerprint` already knows; show a dot on
the filename instead of only a status-line warning.
- **Rail and orbit authoring.** Only `Rig::Keys` shots can be authored
in the UI today. Rail point editing wants draggable 3D handles — see
the transform gizmo below.
- **Sticky lane headers.** Lane labels scroll away with the canvas;
Bevy 0.18's `IgnoreScroll` component is purpose-built for this.
- **Multiline captions.** `EditableText::allow_newlines` exists in Bevy
0.19; needs a confirm binding that is not Enter.
## Later: runtime tracks
- **Screen fade track.** Fade to/from black (or a color) independent of
text. Bevy 0.18's `FullscreenMaterial` makes this feasible in the
UI-less core, matching how the letterbox avoided bevy_ui.
- **Vignette and lens distortion.** Bevy 0.19 shipped `Vignette` and
`LensDistortion` in bevy_post_process — which is already a core
dependency. Natural `Lens` extensions beside DoF and exposure, same
insert/remove pattern.
- **Audio cues.** An `audio` feature: sound handles at times, volume
tracks, fade-out on skip/stop. The marker workaround (game plays the
sound) stays the zero-dependency path.
- **Actor tracks.** Animate non-camera entities (a door, a walking NPC)
via `TargetRef` — transform keys first, `AnimationPlayer` triggers
later. This is the big step toward full Sequencer parity; it must not
compromise the camera core.
- **Multi-camera cuts.** Shots referencing named `CineCamera`s (each
with its own post stack) instead of the single implicit one.
- **Sequence composition.** Chaining (`play_next`) first; nested
subsequences only if real projects demand them.
- **Text localization hook.** `ActiveTexts` already lets a game treat
`text` as a key; consider an explicit `key: Option<String>` field once
a real localized project shapes the requirement.
- **Letterbox animation.** Bars that slide in over the blend-in instead
of snapping.
- **Viewport-relative caption sizing.** Bevy 0.19's `FontSize::Vw/Vh`
would make subtitle sizes resolution-independent; needs a style enum
extension that stays RON-friendly.
## Later: tooling
- **3D key manipulation.** Bevy 0.19's interactive transform gizmo
(`TransformGizmoPlugin`, snapping included) can drag camera keys and
rail points in the scene — the missing half of rail authoring.
- **Overlay labels.** 0.19's text gizmos (`Gizmos::text`) can label
keys/shots in the 3D overlay with zero UI dependencies (the `gizmos`
feature stays UI-free).
- **Curve editor.** A graph lane for scalar tracks (fov, focus,
aperture) with per-key ease visualization.
- **Timecode ruler.** Frames at a configurable fps alongside seconds.
- **Editor persistence.** Recent files, dock height, zoom via Bevy
0.19's `SettingsPlugin` (`bevy_settings`, non-default) rather than a
hand-rolled prefs file.
- **Take export.** Render a take to video via 0.18's
`EasyScreenRecordPlugin` (bevy_dev_tools; not supported on Windows).
- **AssetSaver path.** 0.19 added first-party asset saving
(`save_using_saver`); migrate `save_sequence` off raw `fs::write` when
the API settles.
- **Native file dialogs.** An optional `rfd` feature for people who want
to browse outside the assets tree; the in-dock panel stays the
zero-dependency default.
- **wasm save/load.** Download/upload (or OPFS) so web builds can
author; 0.19's cancellable web tasks help here.
- **Camera preview pane.** A picture-in-picture `ViewportNode` showing a
selected shot's framing while flying elsewhere.
## Engine watch
- **feathers / bevy_ui_widgets**: both still carry experimental-API
warnings in 0.19 despite losing the `experimental_` feature prefix.
The hand-rolled widget set stays until they stabilize.
- **BSN**: `bsn!` shipped in 0.19 but `.bsn` asset files did not.
When the loader lands (0.20 per the release notes), rebuilding the
dock's UI construction on BSN patches is worth a spike.
- **Assets as entities**: an explicit post-0.19 goal; expect churn in
the loader/hot-reload plumbing when it lands.
- **No first-party sequencer**: 0.18's camera controllers
(`FreeCamera`/`PanCamera`) are dev tools, and nothing dolly- or
timeline-shaped shipped in 0.19. The niche this crate fills is intact.
## Infrastructure
- **Remote + CI.** RECOVERY.md records that this workspace had to be
reconstructed from the crates.io archive because no remote existed.
Losing the repo once is enough: push a remote, add a CI matrix
(`--no-default-features`, default, `titles`, `editor`, clippy).
- **Format policy.** New `SequenceAsset` fields must be
`#[serde(default)]` (old files load) and `skip_serializing_if` empty
(old writers' output stays byte-identical); unknown fields are
ignored on read, which is what lets old binaries read new files. Add
an explicit `version:` field the first time a change cannot meet
those rules.
- **Publish 0.4.0** once the editor flow has soaked in a real project.