I have updated to Astro v5 and React 19. I have removed Next ui and react-hook-form. I switched to using react actions api for forms.
This is an example repo of having astro and fastify in the same app. This example is based on the fastify example in the node adapter section. The main difference is this uses TypeScript. It also has an example of using the trpc fastify adapter, so you have end-to-end type safety.
Auth was set up for Lucia but has been changed to the guide at Lucia-next. It's currently using username/password auth and storing to a session. That information is available to astro as well as fastify and trpc.
Data access is done using Drizzle, and the example is set up for an SQLite database.
Inside your Astro project, you'll see the following folders and files:
/
├── public/
│ └── favicon.svg
├── src/
│ ├── api/
│ │ └── server.ts
│ │ └── dev.ts
│ ├── components/
│ │ └── Card.astro
│ ├── layouts/
│ │ └── Layout.astro
│ |── pages/
│ | └── index.astro
| |-- middleware.ts
| |-- schema.ts
| |-- session.ts
└── run-server.mjs
└── package.json
All commands are run from the root of the project, from a terminal:
Command | Action |
---|---|
npm install |
Installs dependencies |
npm run dev |
Starts local dev server at localhost:4321 |
npm run build |
Build your production site to ./dist/ |
npm run start |
Start your production build |
npm run astro ... |
Run CLI commands like astro add , astro check |
npm run generate |
Generate schema |
npm run migrate |
Run migrations |
npm run studio |
Run Drizzle-kit Studio |