Skip to main content


Software made

Apex is an interface definition language (IDL) for modeling software.
Generate source code, documentation, integration, everything automatically.


Get Apex by running the following command

deno install -A --unstable -f -n apex


Apex was designed from the ground up to be succinct. Interfaces and data types are described using familiar syntax that won't slow you down.

Protocol agnostic

Regardless of the architecture, your data and interfaces are fundamentally the same. Use Apex to generate code for any serialization format or protocol.


Generators are written in TypeScript. Easily add custom generators that satisfy your unique needs and publish them for everyone to use.

namespace "petstore"
"An OrderRequest contains the adopter ID and the ID of the pet being purchased."
type OrderRequest {
"An adopter's user id"
adopter: u32
"A pet's pet id"
pet: u32
type Order {
"The order ID."
id: UUID
"An adopter's user id."
adopter: u32
"A pet's pet id."
pet: u32
"The date the order was placed."
date: datetime
"The order status."
status: OrderStatus
"Whether or not the order is considered complete, regardless of status."
complete: bool
"A UUID v4 string"
alias UUID = string
"The OrderStatus enum represents all statuses an order can be in."
enum OrderStatus {
"The order has been placed."
placed = 0
"The order has been shipped."
shipped = 1
"The order has been canceled."
canceled = 2
"The Inventory structure contains summary information of the Pet Store's inventory."
type Inventory {
"Total number of pets sold."
sold: u32
"Total number of new pets."
new: u32
"Total number of available pets."
available: u32
"The Order service is the primary interface for ordering new pets."
interface Order {
"Query the current inventory of pets."
inventory(): Inventory
"Order a new pet. (unary operation)"
order[order: OrderRequest]: Order
"Check the status of your order."
orderStatus(id: UUID): Order