Core Concepts
Understanding the fundamental concepts behind Apso will help you build better backends faster. This page is for readers who want the mental model before they start changing schemas, generating code, or asking an AI assistant to help.
What Apso Is Trying to Build
Apso is designed to make backend generation feel like normal software development. The schema is the source of truth, the generated service is real framework code, and your custom behavior lives outside generated files so regeneration stays safe.
The APSO Workflow
- Define — Write your data model in
.apsorc - Generate — Run
apso generateto generate production code - Extend — Add custom logic in the
extensions/directory - Run — Start your server and deploy
Key Concepts
Services
A service is a complete backend application. Each service has:
- A unique name and description
- Entity definitions
- Authentication configuration
- Multi-tenancy (scoping) settings
Schemas (Entities)
Entities define your data model. Each entity becomes:
- A database table
- A REST API resource
- TypeScript types and DTOs
Code Generation
Apso generates real, production code that you own:
- NestJS, FastAPI, or Go applications
- Type-safe, fully tested patterns
- No runtime dependencies on APSO
Use generation for repeatable backend structure: entities, controllers, DTOs, services, guards, and migration support. Use extensions for product decisions that cannot be inferred from a schema.
Extensions
The extensions pattern lets you add custom logic:
- Without modifying generated code
- Safe across regeneration
- Clean separation of concerns
Multi-Tenancy (Scoping)
Built-in data scoping isolates data:
- Organization-level isolation
- Automatic filtering on all queries
- Configurable scope fields
Authentication (BYOA)
Bring Your Own Auth philosophy:
- Better Auth integration included
- Or use any auth provider
- JWT validation built-in