Project Structure
Table of Contents
Default Layout
The default vext create scaffold is a full-stack project. Frontend source is grouped under src/frontend/** so server code and browser code stay physically separate.
Use the root public/** directory for URL-addressed files. Use src/frontend/assets/** for imported files that should be hashed and tracked by the frontend asset graph.
Frontend Source Boundary
Server and browser files are intentionally separate.
Do not import src/services/**, database clients, secrets, node:*, or route handlers from src/frontend/**. The build leak scanner blocks this because server code must never enter the browser bundle.
Generated Files
Vext generates browser and SSR entries for you.
You normally edit src/frontend/**, not .vext/generated/frontend/**. Development output goes to .vext/client/; production output goes to dist/client/.
Aliases
The frontend resolver provides stable aliases so imports do not depend on deep relative paths.
Static Files
Use public/** when a file needs a stable URL:
Use src/frontend/assets/** when the file is part of a component and should be hashed by the build:
API-only Projects
Disable frontend at creation time:
Or disable it in config:
When frontend.enabled=false, Vext should not build frontend assets, mount frontend static files, or add frontend watchers to pure API projects.