v2.0 — Prisma adapter + R2 storage

Your content.
API‑first.

A minimal headless CMS with REST API, TypeScript SDK, and self‑hosted deployment. Built for developers who want full control.

Self-hosted  ·  MIT License  ·  No vendor lock-in

index.ts
// Initialize the client
import { createClient } from "jocky"

const client = createClient({
  apiKey: process.env.JOCKY_API_KEY,
  baseUrl: "https://api.jocky.website",
});

// Fetch published posts
const { data, meta } = await client.posts.list({
  status: "published",
  limit: 10,
  sort: "publishedAt:desc",
});

console.log(`Fetched ${meta.total} posts`)

< 50ms

Avg. API response

MIT

Open source license

3

Official SDKs

100%

Self-hostable

Features

Everything you need. Nothing you don't.

Jocky is designed to be minimal and composable. Start with what you need, extend when you grow.

Blazing Fast

Optimized MariaDB queries with connection pooling. Sub-50ms response times on standard hardware.

TypeScript Native

First-class TypeScript SDK with full autocomplete, strict types, and Zod-validated responses.

Framework Agnostic

Works with Next.js, Nuxt, Astro, SvelteKit, Remix, or any client that speaks REST.

Self-Hostable

Deploy on your own VPS, bare metal, or Docker. Full infrastructure control. No lock-in.

Built-in Analytics

Track post views, read-through rate, and engagement — no third-party trackers required.

Secure by Default

JWT-based auth, bcrypt passwords, CORS headers, and input sanitisation out of the box.

SDK & API

Integrate in minutes,
not hours.

Official SDKs for TypeScript and Python. Or hit the REST API directly with cURL. Consistent, predictable responses in every language.

  • Typed responses — no runtime surprises
  • Pagination, filtering, sorting built in
  • Webhook support for real-time events
  • OpenAPI spec included
$npm install jocky
index.ts
// Initialize the client
import { createClient } from "jocky"

const client = createClient({
  apiKey: process.env.JOCKY_API_KEY,
  baseUrl: "https://api.jocky.website",
});

// List published posts
const { data, meta } = await client.posts.list({
  status: "published",
  limit: 10,
  sort: "publishedAt:desc",
});

console.log(`Fetched ${meta.total} posts`)

Comparison

How Jocky stacks up

Compared to the most popular CMS platforms used by developers.

FeatureJockyWordPressGhost
REST API
TypeScript SDK
GraphQLPlugin
Headless / API-onlyPlugin
Self-hosted
Custom fieldsPlugin
Media CDN (R2/S3)Plugin
Open source
Built-in analyticsSoonPlugin
License costFreeFree$9/mo

Integrations

Works with your stack

REST API means any language or framework can consume Jocky. Official SDKs make it even easier.

N
Next.js
R
React
N
Node.js
Py
Python
N
Nuxt
A
Astro
Go
Go
D
Docker
V
Vercel
R
Remix
S
SvelteKit
GH
GitHub

Documentation

Start reading, start building

Clear docs with copy-paste examples. No account required to read.

Ready to ship your content API?

Self-host in minutes. No credit card. No vendor lock-in. Just your content, your server, your rules.