Skip to main content
The Monkeytype backend is a RESTful API built with Express.js and TypeScript, designed for high performance, type safety, and security.

Technology Overview

Core Stack

Source location: backend/src/

Project Structure

Application Bootstrap

The server initializes through a carefully orchestrated sequence:
backend/src/server.ts:23

Express Application Setup

Core Middleware Pipeline

backend/src/app.ts:1

Middleware Execution Order

API Architecture (ts-rest)

Type-Safe Contracts

Monkeytype uses ts-rest for end-to-end type safety:
@monkeytype/contracts

Route Registration

backend/src/api/routes/index.ts:49

Controller Example

backend/src/api/controllers/user.ts

Authentication System

Authentication Flow

backend/src/middlewares/auth.ts:44

Authentication Types

1. Bearer Token (Firebase)
  • Used for user actions
  • Verified via Firebase Admin SDK
  • Short-lived tokens (1 hour)
2. ApeKey (API Key)
  • Used for programmatic access
  • Hashed and stored in database
  • User-generated, long-lived
3. GitHub Webhook
  • HMAC signature verification
  • Used for automated deployments

Rate Limiting

Monkeytype implements multi-tiered rate limiting:

Global Rate Limiter

backend/src/middlewares/rate-limit.ts

Endpoint-Specific Limiting

Bad Auth Rate Limiter

Data Access Layer (DAL)

The DAL provides a clean abstraction over database operations:

User DAL Example

backend/src/dal/user.ts:79

Result DAL Example

backend/src/dal/result.ts:1

Background Jobs

BullMQ Queues

backend/src/queues/

Workers

backend/src/workers/

Cron Jobs

backend/src/jobs/

Redis Integration

Connection Setup

backend/src/init/redis.ts:75

Custom Lua Scripts

Redis operations are optimized with Lua scripts:

Error Handling

Custom Error Class

backend/src/utils/error.ts

Error Middleware

backend/src/middlewares/error.ts

Testing

Unit Tests

Integration Tests (Testcontainers)

Next Steps