Scalable performance

for

any workload.

production agents.

streaming data.

e-commerce.

full-stack apps.

APIs.

any workload.

Harper runs your data, interfaces, code, and agent loops in one multi-threaded process, replicated across a multi-region cluster. Faster context and data proximity means up to 85% fewer LLM and origin calls, up to 70% faster page loads, and increased throughput capacity.
Illustration of Harper unified runtime showing layered architecture with glowing blocks for GraphQL, API, REST, WebSocket, and MQTT atop cache and in-memory services, supported by blob, database, NoSQL, and vector storage, connected to distributed global fabric, with floating code and agent cubes representing programmable intelligence in a vibrant dimensional design
~1ms
DATA RETRIEVAL
30-70%
FASTER PAGE LOADS
Up to 85%
LLM CALL REDUCTION
1
PROCESS
TRUSTED BY

One Runtime.
Any Workload.

Faster Agents that Are Easy to Build

Harper agent runtime architecture showing a unified Harper platform connected to an LLM, business systems, and a user. Internal components include agent loop, user profile, agent rules, memory vector, embedding generation, tool interface, voice websocket, and context cache.
30-85%
LLM CALL REDUCTION
Built-In Agent Memory
Memory, embeddings, tool interfaces, and context cache run in the same Harper runtime, so agents can retrieve state without stitching together a separate vector DB, cache, and app server.
Context Without Extra Hops
Semantic search, cache hits, and user state resolve locally in the runtime, reducing latency before the LLM is called.
Fewer Secrets to Expose
Agents can run against runtime-managed data and services, reducing the number of external credentials, APIs, and integration points in production.

Streaming with State Built-in

Harper streaming architecture showing data producers and consumers connected through a Harper platform. Internal components include message broker, stream processing, routing and filtering, REST, MQTT, server-sent events, WebSocket, state tables, and event store.
Streams and State Together
MQTT, WebSocket, and SSE run alongside the data layer, so apps can subscribe to record changes without wiring in Kafka, Redis, or a separate pub/sub tier.
Writes Replicate Globally
Geo-distributed replication keeps state close to subscribers, so updates can reach users across regions without a separate sync layer.
Fresh State, Fewer Moving Parts
Pub/sub, state, and application logic run in one runtime, reducing polling, cache invalidation, and external queue coordination.

Performance that Pays for Itself

Harper commerce architecture showing commerce systems, a payment gateway, and a customer connected to a Harper-powered storefront. Internal components include storefront server-side rendering, recommendation engine, GraphQL, REST, cart and session state, inventory, and catalog.
47×
ROI
Product Pages in ~600ms
Pre-rendered product pages with live data can load in ~600ms for 95% of users, reducing origin dependency during peak demand.
Live Inventory at the Edge
Stock, price, and availability updates can be served close to the shopper, so customers see current product data without waiting on origin systems.
Scale for Peak, Shrink After
Add regions for seasonal demand, then reduce footprint when traffic normalizes, without re-architecting the commerce stack.

Build the App, Not the Plumbing

Harper application architecture showing third-party APIs and a client connected to Harper. Internal components include frontend app logic, REST and GraphQL APIs, WebSocket and server-sent events, authentication, vector search, session cache, blob storage, and app data.
Up to 30×
FASTER TIME TO PRODUCTION
Skip the Glue Code
Define schema, resources, and config, then get REST, real-time, cache, vector search, and blob storage from the same runtime, automagically.
One Runtime, One Deploy Target
Build and deploy app logic, data, APIs, and real-time features together instead of coordinating separate services and environments.
Tiny Team, Powerful Stack
One system to monitor, one place to debug, one deploy target. Smaller teams can ship production backends without standing up a platform team first.

Schema-Driven APIs, Built In

Harper API architecture showing third-party APIs and a client developer connected to a Harper platform. The platform includes REST, GraphQL, data transformation, database, in-memory cache, auth cache, and rate limiting.
~1ms
DATA RETRIEVAL
Schema is the API
Define a table and get REST and GraphQL endpoints automatically, with filtering, sorting, joins, and pagination available from the API layer.
Down to 1ms  Server Latency
Harper serves API requests without bouncing between separate app servers, caches, and databases, keeping response times in the single-digit millisecond range.
One Deploy, Every Region
Deploy once to Harper Fabric and run the same API across regions with replication, routing, and failover handled by the platform.

One Deploy.
Everywhere at Once.

The same runtime that's on your laptop runs in every region. No edge build, no replication service to maintain, no multi-region rewrite. Push once, and your backend is live everywhere you want it.
Explore Harper Fabric
Green Arrow
Automatic Failover
Geo-distributed replication is a property of the runtime, not a parallel infrastructure project. Workloads stay up across regional failures, and users get fast responses wherever they are without a separate replication tier or sync service.
Deployment Flexibility
The same code runs in managed cloud, at the edge, on  infrastructure, and in regulated on-prem environments. Where workloads run becomes a business decision — driven by compliance, latency, or customer needs, not by what your platform supports.
Cost Efficient at Scale
Fewer vendor contracts, fewer services to operate, fewer integrations to maintain. Cost-per-interaction drops as volume rises instead of climbing with it — because one system absorbs the load instead of six each charging for it.
DataApp

Real-Time Application Data Fabric

Harper creates a real-time fabric of data, logic, cache, memory, embeddings, and events distributed wherever your application needs to run.
Lower Global Latency
Higher Throughput
Always-Fresh Data

One Surface to Build On

Harper gives developers and AI tools a single runtime to reason about, helping teams bring their next backend service to market faster, at lower cost, and with higher performance.
Faster Time to Production
Operational Simplicity
Smaller Security Surface

Learn To Build

Build applications that outperform their multi-system alternatives.

The schema is the server.

Define tables in GraphQL. Harper instantly exposes a full REST API, no controllers, no routes, no ORM. Change the schema, the API updates with it.
Documentation
// schema.graphql

type Dog @table @export {
  id:        ID       @primaryKey
  name:      String
  breed:     String   @indexed
  age:       Int
  status:    String    # available | adopted | fostered
  bio:       String
  tricks:    [String]
  embedding: [Float]  @indexed(type: "HNSW", distance: "cosine")
  photo:     Blob
  owner:     Owner    @relationship(from: "ownerId")
  ownerId:   ID       @indexed
}

type Owner @table @export {
  id:    ID     @primaryKey
  name:  String
  phone: String
  city:  String
}

// You immediately get:
GET     /Dog/{id}
POST    /Dog/
PUT     /Dog/{id}
PATCH   /Dog/{id}
DELETE  /Dog/{id}
GET     /Dog/?breed=Labrador&sort(-age)

GET     /Owner/{id}
POST    /Owner/
...

// No migrations. No REST framework. No code generation step.

Query Your Way: URL, fetch, or GraphQL.

Filter, sort, join, and paginate from a URL, a fetch call, or the native GraphQL endpoint, all against the same data, no adapter needed.
Documentation
// 1st Let's start by adding data. Add as much as you want. 

POST /Owner/
Content-Type: application/json
{
  "name": "John Smith",
  "phone": "123-456-7890",
  "city": "Denver"
}

POST /Dog/
Content-Type: application/json
{
  "name": "Rex",
  "breed": "Labrador",
  "age": 5,
  "status": "available",
  "bio": "Loves fetch and long walks",
  "tricks": ["sit", "shake", "fetch"],
  "ownerId": "<copy id from `POST /Owner/`>"
}

// 2nd Now let's filter, sort, and traverse relationships in the address bar with URL queries

// Senior dogs available for adoption
GET /Dog/?age=gt=7&status=available&sort(-age)&limit(10)

// Breed is "Retriever", status is available OR fostered
GET /Dog/?breed=Retriever&(status=available|status=fostered)

// Join through the owner relationship
GET /Dog/?owner.city=Austin&select(name,breed,owner{name,phone})


// fetch — same filters, works anywhere JS runs
const res = await fetch(
  '/Dog/?breed=Retriever&status=available&select(name,breed,age)',
  { headers: { Authorization: 'Basic ' + btoa('user:pass') } }
);
const dogs = await res.json();


// GraphQL — enable with one line in config.yaml, query /graphql
{
  Dog(status: "available") {
    name
    breed
    age
    owner {
      name
      phone
    }
  }
}

Custom behavior, zero new services.

Extend any table with a JavaScript class, computed fields, validation, side effects. It runs in-process alongside your data, no microservice, no extra network hop.
Documentation
// resources.js
import { tables } from 'harperdb';
const { Dog } = tables;

export class AdoptableDog extends Dog {
  // Enrich every GET with computed fields
  async get(query) {
    const dog = await super.get(query);
    return {
      ...dog,
      humanAge:  15 + dog.age * 5,
      isGoodBoy: true,  // always
    };
  }

  // Validate and set defaults on every POST
  async post(target, data) {
    if (!data.name) throw new Error('Every dog deserves a name');
    data.tricks = data.tricks ?? [];
    data.status = 'available';
    return super.post(target, data);
  }
}

// Three files. That's still the whole backend. 

Kill your Redis. Keep your speed.

Point a Harper resource at an external data source. Harper fetches, caches, and serves it, with configurable TTL and automatic stampede protection. No Redis, no middleware.
Documentation
// schema.graphql — cached for 1 hour 
type BreedImage @table(expiration: 3600) @export {
  id: ID @primaryKey
  image: String
}


// resources.js — point it at the dog.ceo API 
import { Resource, tables } from 'harperdb';

class DogCeoAPI extends Resource {
  async get() {
    const breed = this.getId();
    const res = await fetch(
      `https://dog.ceo/api/breed/${breed}/images/random`
    );
    const data = await res.json();
    return { breed, image: data.message };
  }
}

tables.BreedImage.sourcedFrom(DogCeoAPI);


// Cache miss fetches from dog.ceo API
GET /BreedInfo/labrador
// Cache hits return in <1ms
GET -H 'If-None-Match: "<Etag>"' /BreedInfo/labrador

Pub/sub is a table feature, not a separate bill.

Subscribe to any record over Server-Sent Events, WebSocket, or MQTT, built in, no extra broker. When data changes, subscribers hear about it instantly.
Documentation
// 3 Examples of Real-Time In Action
// OPTION 1 | Server Sent Events (SSE), no library needed 
const events = new EventSource('/Dog/<id>/');

events.onmessage = (e) => {
  const data = JSON.parse(e.data);
  const dog = data.value;
  console.log(`${dog.name} is now: ${dog.status}`);
  // → "Rex is now: adopted"
};


// OPTION 2 | WebSocket with custom actions via resources.js
import { tables } from 'harperdb';

export class LiveDog extends Resource {
  async *connect(target, incomingMessages) {
    const subscription = await tables.Dog.subscribe(target);

    if (!incomingMessages) {
      return subscription;  // SSE mode
    }

    for await (let msg of incomingMessages) {
      if (msg.action === 'wag') yield { tail: 'wagging' };
    }
  }
}


// OPTION 3 | config.yaml — enable MQTT for IoT collar tracking 
mqtt:
  network:
    port: 1883
  webSocket: true
  requireAuthentication: true

Semantic search without a second database.

The embedding field in your schema already has an HNSW index. Store vectors alongside your data and query them with the same REST API,  no separate vector database.
Documentation
// Already declared in schema.graphql (Tab 1:Schema):
// embedding: [Float] @indexed(type: "HNSW", distance: "cosine")


// Store a dog profile with its bio embedding

await fetch('/Dog/<id>', {
  method: 'POST',
  body: JSON.stringify({
    name:      'Biscuit',
    breed:     'Golden Retriever',
    bio:       'Loves fetch, belly rubs, and long walks',
    embedding: await getEmbedding('Loves fetch, belly rubs, and long walks'),
    status:    'available',
  }),
});


// Find the 5 most similar dogs to a query
import { tables } from 'harperdb';

const results = tables.Dog.search({
  select: ['name', 'breed', 'bio', '$distance'],
  sort: {
    attribute: 'embedding',
    target: await getEmbedding('friendly dog who loves walks'),
  },
  limit: 5,
});
// → dogs ranked by cosine similarity to the query vector 

No S3. No CDN. Just a field.

The photo field in your schema is a native Blob. Upload and serve binary files from the same endpoint as your data, no S3 bucket, no file service.
Documentation
// Already declared in schema.graphql (Tab 1:Schema):
// photo: Blob 
// Upload and retrieve a dog photo

// Upload
PUT /Dog/<id>/photo
Content-Type: image/jpeg
< ./rex-headshot.jpg

// Retrieve — streams back with correct Content-Type
GET /Dog/<id>/photo


// Upload from a browser form 
const formData = new FormData();
formData.append('photo', fileInput.files[0]);

await fetch('/Dog/<id>/photo', {
  method: 'PUT',
  body: formData,
});

Deploy your backend like you push your code.

Deploy your entire backend, database, API, cache, logic, real-time, vector search, etc., to Harper Fabric's distributed network with a single command. No containers, no Kubernetes, no cloud console.
Documentation
// Develop locally
harper dev .

// Deploy local project to Fabric (push-based deploys)
cd my-app
harper deploy . 
  project=my-app \
  target="https://your-app.fabric.harper.fast/" \
  username="your-cluster-username" \
  password="your-cluster-password" \
  restart=rolling \
  replicated=true

// Deploy GitHub project to Fabric (pull-based deploys)
harper deploy \
  project=my-app \
  package="https://github.com/User/my-app" \
  target="https://your-app.fabric.harper.fast/" \
  username="your-cluster-username" \
  password="your-cluster-password" \
  restart=rolling \
  replicated=true

// Same API. Same schema. Same logic. Just… everywhere.
GET https://your-app.fabric.harper.fast/Dog/?breed=Labrador&status=available

// No Dockerfile. No cloud console wizards.
// All your files → one command → globally distributed. 

Explore Open Source Applications

Jumpstart your next build with open source projects.

Get Started

// AGENTIC ENGINEERING

Build secure, build fast.

Most enterprises cannot hand AI agents the keys to their cloud, database, and caching layer. Harper removes the need at the architecture level. A unified runtime gives agents full-stack control through declarative files, with zero credential exposure or access to production data.

Build with AI  

UP TO 30× FASTER
One command scaffolds the unified runtime with skills files that teach any coding agent how to build on Harper.
✓ schema.graphql
Data model + REST API
✓ resources.js
Business logic
✓ config.yaml
Runtime + deploy config
✓ /skills/*.md
Agent onboarding docs