Define a schema. Get a production API. Keep the code.
Apso generates production-ready backend services from a JSON schema file. You get real framework code (NestJS, FastAPI, or Gin) that you own, run anywhere, and extend with standard patterns. For the complete documentation, see Apso Docs.
Install
Apso CLI
2026-11-15
ดาว
—
เครื่องมือ
—
อัปไทม์
—
Homebrew (macOS / Linux)
brew tap apsoai/tap
brew install apso
npm
npm install -g @apso/cli
Requires Node.js 18.0 or higher.
MCP Server (AI editor integration)
Apso works as an MCP server inside Claude Code, Cursor, Windsurf, and other MCP-compatible editors. Your AI assistant can design schemas, generate APIs, and deploy backends through conversation.
Design a database schema from application requirements
validate_schema
Validate an .apsorc schema file
scaffold_api
Generate API code from schema (TypeScript, Python, or Go)
setup_auth
Configure authentication (BetterAuth, Auth0, Clerk, Cognito, API Keys)
start_dev_server
Start local dev environment via Docker Compose
deploy_api
Deploy to the Apso platform
Schema edit tools (from @apso/schema-tools) change the project's .apsorc one step at a time. Each write is linted with the rules apso generate enforces; a change that would add a lint error is rejected and the file is left as it was.
Tool
Description
get_schema, describe_entity
Read the schema outline, or one entity and its relationships
add_entity, rename_entity, remove_entity
Entities (relationships and foreign key indexes follow renames and removals)
Fields (indexes and uniques follow renames and removals)
add_relationship, remove_relationship
Relationships
add_index
Index or unique index
lint_schema
Lint report
Available resources:
Resource
URI
Description
Schema reference
apso://schema-guide
Schema design guidelines and examples
Current schema
apso://current-schema
Your project's current .apsorc
Connect
Authenticate with the Apso platform:
apso login
This opens a browser window for OAuth authentication. For CI/CD environments, use a token:
apso login --token <api-token>
Quick start
# Create a new project
apso init --name my-app --language typescript
# Edit .apsorc to define your schema
# Generate code from schema
apso generate
# Start Postgres and run the API
apso dev
Your API is live at http://localhost:3000 with Swagger docs at /api. The generated code lives in src/autogen/ and is standard NestJS with TypeORM -- no Apso runtime dependency.
Generated files are placed in src/autogen/. These files are overwritten on each run. Place custom code in src/extensions/ to avoid losing changes.
apso dev
Start the local development server using Docker Compose.
apso dev
apso dev --build
apso dev --detach
Option
Description
Default
--build
Rebuild images before starting
false
-d, --detach
Run containers in the background
false
Requires Docker and Docker Compose. Looks for docker-compose.yml in the current directory.
apso migrate
Detect schema changes, generate migration SQL, and test against a local PGlite sandbox. No Docker or external database required.
apso migrate # Detect changes, generate and test SQL
apso migrate --apply # Update snapshot after successful test
apso migrate --reset # Clear sandbox and start fresh
apso migrate --sql # Output raw SQL only (for piping)
Option
Description
Default
--apply
Update local schema snapshot after verified migration
false
--reset
Reset the sandbox (clear snapshot and PGlite data)
false
--sql
Output raw SQL statements only
false
The sandbox works by comparing your current .apsorc against the last-known snapshot, generating the migration SQL, and executing it against an in-process Postgres instance (PGlite). If the migration fails locally, you know before it reaches any real database.
apso deploy
Deploy the linked service to the Apso platform. Runs a local migration check before deploying.
If schema changes are detected, apso deploy shows the migration SQL and asks for confirmation before proceeding. If the migration fails locally, the deploy is blocked.
apso login
Authenticate with the Apso platform via browser-based OAuth or API token.
apso login
apso login --token <api-token>
Option
Description
-t, --token
API token for non-interactive login (CI/CD)
apso logout
Clear stored credentials.
apso logout
apso whoami
Display information about the current authenticated user and linked project.
apso whoami
apso link
Link the current project to a platform service.
apso link
apso link --workspace my-team --service my-api
apso link --force
Option
Description
-w, --workspace
Workspace slug
-s, --service
Service slug
-f, --force
Overwrite existing link without confirmation
apso unlink
Remove the link between the current project and the platform.
apso unlink
apso status
Show the current service and latest build status.
apso status
apso logs
View build logs for the linked service.
apso logs
apso logs <build-id>
apso open
Open the service dashboard or API endpoint in the browser.
apso open
apso projects
List services in a workspace.
apso projects
apso config
View or modify CLI configuration.
apso config # Show all settings
apso config get apiUrl # Get a specific value
apso config set verbose true # Set a value
apso config reset # Reset to defaults
Configuration keys:
Key
Type
Description
apiUrl
string
Platform API URL
webUrl
string
Platform web URL
verbose
boolean
Enable verbose output
noColor
boolean
Disable colored output
telemetryDisabled
boolean
Opt out of anonymous telemetry (or apso config set telemetry off)
Manage schema synchronization between local .apsorc and the platform.
apso schema validate # Validate local schema
apso schema diff # Show diff between local and remote
apso schema push # Push local schema to platform
apso schema pull # Pull remote schema to local
Global options
These options work with any command:
apso [command] --help # Show command help
apso [command] --version # Show CLI version
Telemetry & privacy
The CLI sends anonymous usage data so we can see which commands are used and
prioritize accordingly. It is opt-out and carries no personal data.
What is collected: command name (generate, init, deploy, …), CLI
version, OS and architecture, Node version, command duration and success, and
an anonymous install id (a random UUID stored in your CLI config — not derived
from any machine identifier). If you are logged in, events attribute to your
Apso account, the same as the web app.
What is never collected: your source code, your .apsorc or schema
contents, file paths, environment variable values, or any other file contents.
Opt out any of these ways:
apso config set telemetry off # persisted in your CLI config
export APSO_TELEMETRY=0 # per-shell
export DO_NOT_TRACK=1 # honors the consoledonottrack.com standard
On first run the CLI prints a one-time notice pointing at these opt-outs.
See docs/telemetry.md for full detail. Aggregate
public download stats (npm/PyPI) are available via node scripts/usage-stats.mjs.
Supported languages
Language
Framework
ORM
Status
TypeScript
NestJS
TypeORM
Stable
Python
FastAPI
SQLAlchemy
In development
Go
Gin
GORM
In development
Contribute
git clone https://github.com/apsoai/cli.git
cd cli
npm install
npm run build
To run commands from the local build:
./bin/run generate
./bin/run migrate --sql
To develop continuously:
npm run build # Rebuild after changes
npm link # Make 'apso' command available globally
Testing
npm run test # Run all tests
npm run test:watch # Watch mode
npm run test:cov # Coverage report