Defining Actions
Create actions insrc/actions/index.ts by exporting a server object:
src/actions/index.ts
Actions run exclusively on the server. Client code cannot see or execute handler logic directly.
Using Actions in Forms
Call actions from forms with automatic progressive enhancement:src/pages/newsletter.astro
Input Validation
Use Zod schemas to validate input automatically:src/actions/index.ts
Validation Errors
Invalid input automatically returns typed errors:src/pages/create-post.astro
Form Data Handling
For file uploads and complex forms, useaccept: 'form':
src/actions/index.ts
Client-Side Actions
Call actions from client-side JavaScript:src/pages/interactive.astro
Error Handling
ThrowActionError for expected errors:
src/actions/index.ts
Error Codes
400
Invalid request format
401
Authentication required
403
Insufficient permissions
404
Resource not found
408
Request timeout
409
Resource conflict
500
Server error
Context Object
Access request context in action handlers:src/actions/index.ts
JSON Actions
By default, actions accept JSON input:src/actions/index.ts
Progressive Enhancement
Actions work without JavaScript but enhance when available:src/pages/contact.astro
Without JavaScript
Without JavaScript
- Form submits via POST request
- Page reloads with action result
- Result available via
getActionResult()
With JavaScript
With JavaScript
- Form prevents default submission
- Action called via client-side JavaScript
- No page reload required
- Smooth user experience
Type Safety
Actions are fully typed:Organizing Actions
For larger projects, organize actions into separate files:src/actions/index.ts
src/actions/posts.ts
Advanced Patterns
- Optimistic Updates
- Batch Operations
- File Validation
Related Resources
Middleware
Add authentication and shared logic
API Routes
Build custom API endpoints
SSR
Server-side rendering
Type Safety
TypeScript configuration