Astral builds a fully static site into dist/ by default.
mix astral.build
Change the output directory in astral.config.exs:
site do
outdir "dist"
endUpload the generated directory to any static host or CDN.
Routes
Each route is written as an index.html file:
/ -> dist/index.html
/about/ -> dist/about/index.html
/blog/post/ -> dist/blog/post/index.html
/robots.txt -> dist/robots.txtPublic files are copied from public/ without transformation.
Assets
Astral delegates JavaScript, TypeScript, CSS, and referenced asset processing to Volt. Configure the source entry in astral.config.exs:
assets "assets" do
entry "app.ts"
url_prefix "/assets"
endReference the source entry from layouts:
<script type="module" src="<%= Astral.asset_path(@site, "app.ts") %>"></script>In static builds, Astral.asset_path/2 reads Volt's manifest and returns emitted files such as /assets/app-5e6f7a8b.js.
Content hashes
Volt emits content-hashed assets by default. This is the recommended deployment mode because files can be cached aggressively by a CDN.
For simple prototypes or examples, disable hashing:
assets "assets" do
entry "app.ts"
url_prefix "/assets"
hash false
endBuild output
mix astral.build prints a summary, route table, and asset manifest path:
[Astral] Built 6 page(s) into dist
Routes:
/about/ dist/about/index.html
/ dist/index.html
/blog/hello-astral/ dist/blog/hello-astral/index.html
Assets:
dist/assets/manifest.json