[data-reveal]{opacity:1!important;transform:none!important}

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] ✓ Starting AntelopeJS project
[10:42:02] ✓ api module active 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, HTTPResult } from
  "@antelopejs/interface-api";

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

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

  @Get(":id")
  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/:id 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.

  1. 01

    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.

  2. 02

    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.

  3. 03

    Minimal context, fewer tokens.

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

  4. 04

    Decorators hide complexity.

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

  5. 05

    Generate, test, ship.

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

The loopgeneratetestfixship
contractinterfaces/hash.ts
export namespace internal {
export const hashProxy =
InterfaceFunction<
(p: string) => Promise<string>
>();
}
testtests/hash.spec.ts
it("hash & verify", async () => {
const h = await Hash("x");
expect(await
Verify("x", h))
.to.be.true;
});
live$ ajs module test
✗ hash & verify attempt 1
↻ regenerating…
✓ hash & verify attempt 2
✓ 4/4 passed
# green → 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.

interface/index.ts
ts
import { InterfaceFunction } from
  "@antelopejs/interface-core";

export interface Session { token: string; user: User }

// A typed contract point — callable by consumers,
// fulfilled by whichever module implements it.
export const login = InterfaceFunction<
  (email: string, pass: string) => Promise<Session>
>();
02Implement

Build the module

Write the business logic that fulfils the contract.

implementations/auth.ts
ts
import type { Session } from "../interface";

// Implement the contract directly — matched by name,
// wired up by ImplementInterface() in the entry point.
export async function login(
  email: string, pass: string,
): Promise<Session> {
  const user = await Users.byEmail(email);
  if (!user || !verify(pass, user.hash)) {
    throw new Error("invalid credentials");
  }
  return { token: sign(user), user };
}
03Ship

Test and deploy

Contract tests shipped by the interface run against your implementation. Ship to Docker with one command.

terminal
bash
# contract tests ship with the interface
$ 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 removeremove a module
  • modules listlist installed modules
  • modules updateupgrade to latest versions
  • modules installauto-resolve missing interfaces
  • --mode <src>package (npm), git, local or dir

Development tools

  • module initscaffold a new module
  • module testrun contract tests
  • config setset CLI settings
  • config showview current config
  • project 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] Starting AntelopeJS project…
[10:42:02] ✓ api loaded
[10:42:02] ✓ api module active 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/auth-jwt

Database

Multi-driver query engine.

@antelopejs/mongodb

Messaging

Event-driven communication.

@antelopejs/redis

Storage

File and object storage.

@antelopejs/file-storage-s3
13official interfaces
15+official modules
100%TypeScript
Apache 2.0licensed, free forever

Community

Help grow Antelope and its community.

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