# Astro Integration Guide [`@lune-js/astro`](https://github.com/lune-js/astro) is an [Astro integration](https://docs.astro.build/en/guides/integrations/) that adds Lune to every page of your site. Astro renders the HTML, the integration boots a single Lune app on the client, and your directives work anywhere in your markup — no ` ``` The guard matters: listeners on `document` survive swaps, so registering unconditionally would stack a new listener on every navigation. > [!NOTE] > An app created this way starts with an empty root scope, so factories registered in your entrypoint are not available to pages reached by client-side navigation. If you rely on both features, export your factories from a module and assign them in the same script. ## Troubleshooting **Nothing is reactive and no errors appear.** Check that the interactive markup is inside an element with `lu-scope`. Lune only walks elements it mounts to. **A page renders {{ }} literally, or the build fails with `ReferenceError`.** Astro consumed the braces. Learn more about [Astro's syntax](https://docs.astro.build/en/reference/astro-syntax). **An expression silently does nothing.** Expressions that reference `window`, `document`, `fetch`, `eval`, and similar globals are rejected for safety, with a warning in development. Move the logic into a scope method — see [Security](/advanced/security). **Directives from the entrypoint are missing.** Confirm the module has a `default` export and that the `entrypoint` path resolves from your project root, not from the config file's directory.