---
title: Dev mode and production
description: What Sluurp does while you develop, what it does in production, and how to choose.
section: Development
order: 2
---

# Dev mode and production

<p class="lead">It's the same binary and the same app folder. While you develop, Sluurp watches your files and helps you change them; in production it serves them as fast as it can and watches nothing.</p>

## Choosing

```sh title="Terminal"
sluurp serve --public app                    # developing: hot reload on
sluurp serve --public app --no-hot-reload    # production
```

Hot reload is what makes it dev mode: with it on, the server watches your app and the pages listen for changes. [Deploying](/docs/deploying) always uses `--no-hot-reload`, as does the Docker image.

## While you develop

- **Hot reload**: a saved component is swapped in place, keeping what's on screen. A page drawn on the server is drawn again in place, and CSS swaps without a reload. See [Hot reload](/docs/hot-reload).
- **Errors where you are**: a mistake in a file shows over the page, at its line, and goes away when you fix it.
- **Source as written**: modules come with their source maps, so the browser's tools show your `.tsx`, not what it compiled to.
- **The UI kit's tools**: the Source tab and the agent can write your components, and the kit warns you about components that leave things running.
- **Tests with Auto-run**: saving a test runs it again in the admin's [Tests](/docs/testing) screen.
- **Signing in by itself**, if you ask for it: `--admin-auto-login` signs the admin in as the first superuser, from your own machine only. It's for development, and it prints a warning when it starts. Never use it on a server others can reach.

None of this reaches production: without hot reload there are no markers in your pages, nothing is watched, and the tools that write files refuse.

## In production

- **Nothing is watched**, and no reload script is sent.
- **Libraries are bundled** when the server starts, and your modules are served at addresses named after their content, so browsers keep them for good and fetch only what changed.
- **Pages load only what they show**: a component drawn only sometimes is fetched the first time it's drawn. See [Packages, bundles, budgets](/docs/vendoring).
- **The release binary is minified**: modules are sent without comments or spaces.
- **The licence**: commercial use needs `SLUURP_LICENSE` set, or a key added in the admin under Settings, License. Everything works the same with or without one. See [Business licence](/business).

## Tests, either way

`sluurp test` starts your app on a fresh database, runs its tests in a headless browser, and stops. Run it on your machine or in CI. See [Testing](/docs/testing).
