Develop · local feedback
Develop with compiler truth.
pnpm dev keeps one compiler-owned publication running while you edit. Presolve rebuilds from authored inputs, serves the current file-route manifest, updates CSS without replacing the page, and reloads semantic changes only after the compiler accepts them.
Start the development server
pnpm dev# Presolve dev ready at http://127.0.0.1:3000The generated project maps that command to presolve dev. Use presolve dev --port 4000 to select another port, or presolve dev --once to produce one development build without starting the server.
What happens when a file changes
/app.css?presolve-dev=<revision>. The current document, component State, focus, and scroll position remain in place.How CSS reaches a route or component
CSS is not attached to a class instance and routes do not import a global stylesheet. Presolve uses the browser's normal document cascade:
A route, layout, or nested component renders a literal class or compatible className.
Place the matching global selector in app/app.css, or have Tailwind/PostCSS/Sass write its finished output there.
Presolve emits app.css plus an immutable content-addressed production stylesheet and inventories both.
The compiler adds one stylesheet link to each generated route's <head>. The selector applies through ordinary cascade, inheritance, specificity, media queries, and container queries.
export class Pricing extends Component {render() {return <section class="pricing-card">...</section>;}}.pricing-card {display: grid;container-type: inline-size;}Do not render a global <link> from app.tsx, a layout, a route, or a component. Presolve owns the document-head link so it survives every application update.
Tailwind and other CSS transforms
Presolve watches finished app/app.css. If a transformer has a separate source graph, keep that transformer's watcher running so it writes fresh output for Presolve to publish.
"scripts": {"dev": "concurrently -k \"pnpm css:watch\" \"presolve dev\"","css:watch": "tailwindcss -i ./app/tailwind.css -o ./app/app.css --watch"}For a plain CSS application, no second watcher is needed: edit app/app.css directly and presolve dev updates it.
Development and production differ deliberately
Cache-Control: no-storeImmutable content-addressed assets/app.css?presolve-dev=N/app.<sha256>.cssWhat the watcher ignores
Generated or dependency trees do not trigger rebuilds: dist/, .presolve/, node_modules/, target/, Git data, and Presolve's atomic publication stages. This prevents a compiler output from observing itself and creating a rebuild loop.
Vite's role
The standard presolve dev command owns the conventional host lifecycle. Vite bundles compiler-authorized package Actions, Standard Schema validators, submission capabilities, and explicitly configured asset pipelines; it does not define routes, component identity, State, or reload safety. The public Vite adapter is a lower-level seam for custom hosts that supply compiler callbacks.