# Transport, Run/Stop and file lifecycle

**Every generator-shaped `.dsp` follows the global transport by
default.** Master-Control Play starts its engine, Stop stops it — exactly
like a Builder. This is usually what you want: press Play, the whole rig
comes up.

Opting out is source-driven, like everything else about a DSP:

```faust
declare options "[transport:off]";
```

The footer Link-toggle and `dsp.transport.follow.set { module_id,
enabled }` edit that token for you. A DSP with the token runs
independently — drive it via its own Run button or `dsp.run`, and a
global Stop leaves it playing.

Nuances worth knowing:

- **Modules opened after the transport already started do not auto-join** —
  deliberate "open a tab to inspect, not to interrupt" behavior. Hit Run
  yourself or cycle the transport.
- **`dsp.run` on an already-running DSP recompiles cleanly** — it stops
  the prior worklet first. Use it as the "apply my edits" verb.
- **A follow-run that errors blocks re-runs until the source changes** — no
  repeated error banners on every Play for a broken DSP.
- FX-shape sources never auto-start regardless of the flag (they can't run
  standalone at all).

## Files, autosave, projects

A `.dsp` module created via `documents.add` IS a project file from birth —
`assets/<title>.dsp`, autosaved on every edit, restored with the project.
`documents.save { module_id }` forces a write (or writes to an explicit
`path`); `project.file.rename` renames it. A project export
(`project.export` → `.fwproject.zip`) bundles every DSP with the
project's `project.json`, so mixer strips, routings and sequencer content
travel together.

> 🟦 **RESTART BEHAVIOR**: after an app restart, DSPs reopen `idle` —
> running state is not persisted. The global transport is the one-keystroke
> way to bring a whole multi-DSP project back to life.
