Choose a starting activity and learn how the first-run experience leads into the Studio workspace.
Design/history: Find your way into Studio.
Volta presents a one-time path chooser on a blank first launch:
- Make your first sound opens the live lesson itself — never the course index. The target is the course's own Continue resolution (
LearnUi::next_lesson_id): the durable current lesson, else the first incomplete one, elsehello-sound, which is also the fallback on a shell whose course map has not loaded yet (the usual first-run state). Its chip reads Start · 5 min until a lesson has been started, then Continue lesson. - Remix a finished song opens the bundled Songs library.
- Open the workbench opens Source.
- Coming from a DAW? Build a beat step by step opens a practice song in Produce with the six-step guide (it can switch to Arrange).
The footer points to the same places later: GUIDE ▸ Course (⌘8), File ▸ Open Song… (⌘O), or the SOURCE tab. Escape, or closing the chooser, lands on the workbench.
A lesson's content is loaded through EngineBridge::learn_lesson, which the browser answers ASYNCHRONOUSLY — None for the frames before the page fetches the lesson directory. A miss therefore means "not here yet" for learnview::LESSON_FETCH_GRACE_S, and only a request that outlives that window falls back to the course map (a restored session naming removed content). While it waits, the panel says opening <id>... with a way back to the course. Before 2026-09-02 the first miss dropped the lesson outright, so "Start · 5 min" landed on the 30-lesson index and needed a second click on Continue lesson.
Restored native sessions and explicit browser destinations (view, song, paste, share fragments, room, or edit) bypass it. Opening a .volta file from the desktop also bypasses it because the file is already the intent — both a command-line path and a Finder/dock document (the latter arrives as an Apple Event; a document opened at any time also dismisses an already-visible chooser).
The browser remembers the presentation under volta.beta1.welcome-shown in localStorage. Native uses the existence of eframe's persisted volta-shell state. This is local UI state; it is not sent to a service.
For deterministic visual QA:
cargo run -p volta-studio --bin volta-shot -- \
examples/song.volta --welcome --views source --out-dir /tmp/volta-welcome
Shell integrations can queue ShellCommand::ShowWelcome; browser integrations use studio.shell_command('{"type":"showWelcome"}').