Self-hosted developer documentation platform

From specification to developer experience.

Specistry turns API contracts and authored guidance into a fast, accessible developer portal — built ahead of time, served from your infrastructure.

Read the docsnpm →
Guides / Waiting for messages

Waiting for messages

Instead of polling, block until a message matching your criteria arrives. The guide links straight into the operation it uses.

const message = await inbox.messages.wait({
subject: /verify/i, timeout: 30_000
});
One experience

Guides and reference belong together.

Authored guidance and generated API reference share one navigation, one search index and one reading surface. A guide links into the exact operation; an operation links back to the guide that explains it.

The pipeline

Your specs, your content, your configuration — compiled into one experience.

OpenAPIopenapi.yamlOperations, schemas, responses
Markdown / MDXguides/*.mdAuthored guidance, recipes
Configurationspecistry.config.tsNavigation, branding, SDK map, origins
Specistry builddeterministic
  • Guidesstatic
  • Referencenormalized
  • Searchlocal index
  • Code6 protocols
  • Try itdirect
  • Versionsimmutable
Code that means what the API means

Six protocol examples. One canonical request.

Protocol examples are generated from the actual operation, so they can’t drift. SDK examples appear only when you explicitly map your real SDK — Specistry never infers an API you don’t ship.

Protocolgenerated
curl -X POST https://api.testinbox.email/v1/inboxes \
-H "Authorization: Bearer $TESTINBOX_KEY" \
-H "Content-Type: application/json" \
-d '{"ttl": 3600}'
SDKexplicitly mapped
TypeScriptJavaPython
import { TestInbox } from "@testinbox/client";

const inbox = await client.inboxes.create({
  ttl: 3600
});
Mapped by the author · sdk.ts → inboxes.create
BrowserYour API
direct · approved origin
Specistry server no proxy
Try it, without becoming the proxy

Requests go from the developer’s browser to your API. Nowhere else.

Specistry ships no request proxy. You declare the exact origins developers may call; credentials live only in browser memory.

  • Exact approved origins
  • Memory-only credentials
  • No Specistry request proxy
Search

Search the documentation, not a third-party service.

The index is generated at build time. Queries stay in the browser.

Documentation that keeps its history

Every published version is an immutable release.

A v1 URL keeps describing v1. Promoting v3 to current never rewrites the past. Contract changes are surfaced in a structured changelog you review — Specistry never publishes generated prose on its own.

  1. v1remains v1 · 2025-09
  2. v2remains v2 · 2026-03
  3. v3current
  1. npm i -D @specistry/cli: installed · @specistry/cli
  2. npx specistry validate: configuration · 14 pages · 11 operations · 3 SDK mappings
  3. npx specistry build: documentation · 2.1 s · artifact → .specistry/artifacts
  4. npx specistry check: quality gate · 0 broken links · 0 unmapped operations
  5. npx specistry release: immutable release created · earlier releases unchanged
Build time · CLI · CI

Treat documentation like engineering infrastructure.

Validate configuration, build the site and gate quality in the same pipeline as your code. Everything heavy happens ahead of time; readers get pre-built pages.

@specistry/cli on npm →
Self-hosted by design

Your documentation. Your deployment boundary.

  • No required search SaaS
  • No generic API proxy
  • No documentation telemetry by default
  • Portable source
  1. Repositoryspecs · content · config
  2. Specistry buildCI · deterministic
  3. Your infrastructureyour servers
  4. Developersbrowser → your API

What ships

Turn your API contract into a developer experience.

View on GitHub