Astro-like components that compile to Preact — with function event handlers, signals, and full Astro tooling support.
Write .astrox files with the same frontmatter + template syntax as Astro, but get real Preact components with:
- Preact Signals for reactive state
- Function event handlers (
onclick={handler}) - Client-side interactivity via Astro's island architecture
npm install @backstro/astroxThis automatically:
- Patches Astro's JSX types to accept function event handlers
- Adds
*.astrox→astrofile association to.vscode/settings.json
import { defineConfig } from 'astro/config';
import astrox from 'astrox';
export default defineConfig({
integrations: [astrox()],
});That's it. VS Code will automatically use the Astro language mode for .astrox files, giving you full syntax highlighting, TypeScript autocomplete, and HTML completions.
To use signals you will need to install
@preact/signalsnpm install @preact/signals
Create a .astrox file:
---
import { signal } from '@preact/signals';
const count = signal(0);
function increment() {
count.value++;
}
---
<div class="counter">
<button onclick={increment}>+</button>
<span>{count}</span>
</div>Use it in an Astro page with a client directive:
---
import Counter from '../components/Counter.astrox';
---
<Counter client:load />- The Vite plugin intercepts
.astroxfiles and compiles them using@astrojs/compiler - Frontmatter becomes module-level JavaScript
- The result is a standard Preact function component that works with Astro's island hydration
- A postinstall script patches Astro's JSX types and configures VS Code file associations
On npm install @backstro/astrox, astrox automatically:
- Patches
node_modules/astro/astro-jsx.d.ts— widens event handler types fromstringtostring | Function, soonclick={myHandler}works without TypeScript errors - Updates
.vscode/settings.json— adds"*.astrox": "astro"file association for full editor support - Patches the Astro VS Code extension's TS plugin — registers
.astroxas a known file extension so imports between.astroxcomponents resolve correctly in the editor
All patches are idempotent and safe to re-run.
MIT