Unreleased development workflow. Use the exact candidate artifacts described below. The published npm release remains beta.1.

<!-- Documentation snapshot: package 5.0.0-beta.1; channel latest; archived channel undefined; base revision 9404b1935b855e05c982f697d8471764a140e8f6; local changes false; original source SHA-256 2a2d069ac30e815a1b52ac8ebf0e4521e85141d3b9853554688d5e52c39a3164. -->

# Develop against the current candidate

Use the TypeScript starter when beginning an application trial against unreleased
Marionette changes. It includes editable rows, asynchronous selection, cancellation,
ownership cleanup, lint, tests, and Vite. It has no backend or persistence; connect
its `navigate(id)` function to your application's router when URLs are needed.

## Choose matching packages and documentation

The published release is **5.0.0-beta.1**, on npm's **latest** tag. The website's
beta reference describes that release. Development artifacts may have the same
version string and newer behavior: identify them by their full source commit and
tarball integrity hashes. The `next` channel is reserved for development after the
first stable v5 release.

Download `release-candidate-<full-source-commit>` from a successful run of
[Release promotion](https://github.com/marionettejs/marionette/actions/workflows/release.yml).
Pull requests build this artifact in dry-run mode; it does not publish packages.
Select the run for the commit you intend to test. Check `release-evidence.json`
for that commit and `candidate-validation.json` for completed validation. A green
unrelated job or the package version alone does not identify the candidate.
GitHub may require signing in to download workflow artifacts.

Extract the artifact into an empty directory. Keep its five tarballs beside the
`starter` directory: the starter lockfile selects those exact local files and
integrity hashes. Use the Node and npm versions recorded in the artifact's
`release-evidence.json` toolchain, then:

```sh
cd starter
npm ci
npm run typecheck
npm run lint
npm test
npm run build
npm run dev
```

The artifact's `START-HERE.md` repeats these instructions. There is no repository
checkout, linking step, or separate runtime installation. To create an artifact
from source, maintainers use the [release procedure](https://github.com/marionettejs/marionette/blob/9404b1935b855e05c982f697d8471764a140e8f6/docs/release-promotion.md#dry-run).
Creating or testing a candidate does not publish it.

Read `node_modules/marionette/dist/docs/docs/readme.md` and its neighboring pages
for the APIs in this candidate. `node_modules/marionette/dist/docs/manifest.json`
records its source revision. Give an agent that installed documentation path;
start with [the compact reference](https://github.com/marionettejs/marionette/blob/9404b1935b855e05c982f697d8471764a140e8f6/docs/compact-reference.md), then the relevant API.
Do not combine an unreleased starter with registry beta.1 dependencies.

## Edit and verify a feature

Start with `workspace.ts`: its typed options describe the mount element and the
asynchronous note loader. `main.ts` supplies browser setup and a demonstration
loader. `workspace.test.mjs` uses Node and jsdom against the installed packages.
TypeScript checks options, native models, and owned state without application
casts or declarations copied from the framework.

1. Edit a row without opening it, then reverse the rows. Its draft survives.
2. Open the slow first note, then the second. The late first load cannot replace it.
3. Edit `workspace.ts` while a load is pending. Vite replaces the workspace and
   cancels the old load. Code updates deliberately reset application state; row
   reconciliation during ordinary use preserves surviving DOM and drafts.
4. Run `npm run typecheck`, `npm run lint`, `npm test`, and `npm run build`.
   Add a regression for the behavior you change. Use a real browser for focus,
   layout, keyboard interaction, and your router's history behavior.

The browser suite installs this portable kit outside the checkout, moves it, and
edits its running Vite module repeatedly. It checks that detached buttons stop
handling events and pending work cannot commit into the replacement workspace.
This evidence covers the starter's owner boundary, not arbitrary application HMR.

## Debug the authored source

The candidate's ESM and CommonJS distributions ship source maps with embedded
TypeScript. The starter's `vite.config.mjs` loads dependency maps through Vite's
plugin API and retains them through the application build. It also leaves
Marionette packages outside dependency prebundling while developing.

Enable JavaScript source maps in browser developer tools. Open a Marionette frame
or search Sources for `src/modules/view.ts`; the embedded TypeScript is available
without the library checkout. For Node consumers, use `node --enable-source-maps`.
The application build emits maps too; decide whether to distribute your own
application source maps when deploying.

For symptoms and framework error codes, use [troubleshooting](/troubleshooting.md).
For a larger typed feature, see [TypeScript](https://github.com/marionettejs/marionette/blob/9404b1935b855e05c982f697d8471764a140e8f6/docs/typescript.md),
[application tests](https://github.com/marionettejs/marionette/blob/9404b1935b855e05c982f697d8471764a140e8f6/docs/testing.md), and [consumer lint](https://github.com/marionettejs/marionette/blob/9404b1935b855e05c982f697d8471764a140e8f6/docs/consumer-lint.md).


[Canonical source](/development/source/docs/development.md) · [Source identity](/development/manifest.json)
