[data-reveal]{opacity:1!important;transform:none!important}
ROADMAPA public roadmap is available — see what's coming

Build scalable microservices, faster.

The ultra-modular Node.js framework for scalable microservices architecture. Develop, test and deploy backend services with versioned interfaces and swappable modules.

  • Free forever
  • Apache 2.0 licensed
  • Node.js · TypeScript
~/projects · zsh
# install the CLI and scaffold a project
$ npm install -g @antelopejs/core
$ ajs project init my-app
$ cd my-app && ajs project dev --watch
[10:42:01] ✓ modules resolved
[10:42:02] ✓ server on :3000

From the docs

See it in action.

Real code patterns straight from the documentation. Explore the building blocks that power Antelope applications.

import { Controller, Get, Post,
  Parameter, JSONBody } from
  "@antelopejs/interface-api";

class UserController extends Controller("/api/users") {

  @Get("list")
  async listUsers() {
    return { users: [] };
  }

  @Get("get")
  async getUser(@Parameter("id") id: string) {
    return { id, name: "Alice" };
  }

  @Post("create")
  async createUser(@JSONBody() body: any) {
    return new HTTPResult(201, body);
  }
}

Generated endpoints

GET /api/users/list GET /api/users/get?id=123 POST /api/users/create Controller() returns a base class. Return values auto-serialize to JSON. HTTPResult controls status codes. Also available: @Context() full request context @WriteStream() SSE / chunked @Connection() WebSocket

Why Antelope

Everything you need to build production-grade services.

A modular architecture built on versioned interfaces, designed for teams that ship fast and scale confidently.

Open source

Apache 2.0 licensed and maintained by an active community. Free to use, fork and extend.

Modular and flexible

Versioned interfaces let you swap, upgrade or replace any module without breaking your stack.

Microservice-focused

Each service deploys independently. Scale, update or roll back individual components without downtime.

Typed all the way

Full TypeScript coverage from interfaces to runtime. Catch errors at compile time, not in production.

Ultralight core

Minimal footprint, maximum power. The core stays lean so your services stay fast and easy to reason about.

Easy to deploy

Docker-ready with automated build pipelines. Go from local development to production in minutes.

Universal query language

Write queries once, run them on any supported database. Switch data stores without rewriting logic.

Expressive code

Decorators and clean APIs reduce boilerplate. Write meaningful logic, not configuration glue.

SaaS ready

Built-in multi-tenancy and schema management. Launch your SaaS product without reinventing the wheel.

AI-native architecture

Built for the age ofAI.

Antelope separates what a module does (the interface and its tests) from how it does it (the implementation). The AI can't go off the rails — the architecture keeps it on track.

  • Guardrails, not freedom. Interfaces define strict boundaries for every module. The AI works within a single, well-scoped contract — consistency is enforced by architecture, not by prompting.

  • TDD by design. Every interface ships with its contract tests. An agent loops on the implementation until all tests pass — if it doesn't satisfy the interface, it doesn't ship.

  • Minimal context, fewer tokens. The AI only loads the interface file and its tests — not the entire codebase. Less context, faster generation, lower cost.

  • Decorators hide complexity. A single @Hashed() replaces dozens of lines of bcrypt boilerplate. Code that isn't written is already battle-tested.

  • Generate, test, ship. The feedback loop is instant: generate, run ajs module test, fix, repeat. When the contract is green, it's production-ready.

AI-driven TDD loop
contract
// interface: the contract (given to the AI)
export namespace internal {
export const hashProxy = InterfaceFunction<
(password: string) => Promise<string>
>();
}
// contract test (also given to the AI)
it("should hash and verify", async () => {
const h = await Hash("secret");
expect(await Verify("secret", h)).to.be.true;
});
// AI generates → tests run → loop until green
$ ajs module test
✗ should hash and verify (attempt 1)
✓ should hash and verify (attempt 2)
✓ 4/4 passed — ship it

Get started

Up and running in three steps.

Define your contracts, implement them, and deploy. Antelope handles the wiring.

01Define

Declare an interface

A versioned contract that describes what your service does. Nothing about how.

ts
// interfaces/[email protected]
export interface AuthService {
  login(
    email: string,
    password: string
  ): Promise<Session>;
  verify(token: string): Promise<User>;
}
02Implement

Build the module

Write the business logic. Use decorators for clean, expressive code.

modules/auth-jwt.ts
ts
@Module("auth-jwt")
export class JwtAuth
  implements AuthService {

  @Inject("database")
  private db!: Database;

  async login(email, pass) {
    // your logic here
  }
}
03Ship

Test and deploy

Contract tests run automatically. Ship to Docker with one command.

terminal
bash
# tests pass automatically
$ ajs module test ./modules/auth-jwt
 login valid credentials
 login invalid password
 verify valid token
 3/3 passed

$ ajs project build -e production
 build .antelope/build/
$ ajs project start -e production
 server on :8080

CLI reference

One tool to rule them all.

The ajs CLI handles your entire workflow — from scaffolding to production deployment.

Project lifecycle

  • ajs project initscaffold a new project
  • ajs project devstart in dev mode
  • ajs project buildbundle for production
  • ajs project startrun from build artifacts
  • --watchhot module reloading
  • --inspectattach Node.js debugger

Module management

  • modules addinstall from npm, git or local
  • modules rmremove a module
  • modules lslist installed modules
  • modules updateupgrade to latest versions
  • modules installauto-resolve missing interfaces
  • --dry-runpreview changes first

Development tools

  • module initscaffold a new module
  • module testrun contract tests
  • config setset CLI settings
  • config showview current config
  • logging setconfigure log levels
  • -e <env>target any environment
terminal — ajs
live session
$ ajs project init my-app
✓ project created
? create a local module? Yes
? module name: api
✓ module scaffolded at ./modules/api
$ ajs project modules add @antelopejs/api
✓ @antelopejs/api@latest added
$ ajs project dev --watch
[10:42:01] resolving modules…
[10:42:02] ✓ api loaded
[10:42:02] ✓ server on :3000
[10:42:02] watching for changes…

Ecosystem

A growing module store.

Community-supported modules for authentication, databases, messaging, storage and more. Install what you need, nothing you don't.

Auth

Authentication and authorization.

@antelopejs/module-auth

Database

Multi-driver query engine.

@antelopejs/module-db

Messaging

Event-driven communication.

@antelopejs/module-events

Storage

File and object storage.

@antelopejs/module-storage

Deployment

From code to production in minutes.

Docker-ready, with built-in health checks, graceful shutdown and zero-downtime deploys.

  • Auto-generated Dockerfile

    Optimized multi-stage builds with minimal image size.

  • Health checks and metrics

    Liveness, readiness and Prometheus endpoints out of the box.

  • Environment config

    Typed config objects validated at startup. No more runtime surprises.

deploy.sh
production
$ ajs project build
[build] compiling TypeScript…
[build] bundling modules…
✓ build complete (2.1s)
$ docker build -t my-app .
[docker] base: node:20-alpine
[docker] image: 47MB
✓ my-app:latest
$ ajs project start -e production
[start] loading build manifest…
[start] all modules active
[start] health check: OK
✓ server on :8080
— total: 12.4s
40+community modules
12k+GitHub stars
5k+weekly downloads
200+contributors

Community

Help grow Antelope and its community.

Contribute to the features you care about — share ideas, submit code, or report issues. Every contribution matters.