Skip to Content
APSO is in public beta. Get started
Get StartedCore ConceptsOverview

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

  1. Define — Write your data model in .apsorc
  2. Generate — Run apso generate to generate production code
  3. Extend — Add custom logic in the extensions/ directory
  4. 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

Learn More

Last updated on