Press log

7 editions

The press log.

Every run of the press, recorded: new type, new plates, tightened screws.

No. 007

The hands-on run

Edit any template by eye — drag, resize and restyle elements directly on the page, with every change written straight back to your HTML.

  • New

    Visual editor

    A new Design tab in the template editor lets you select any element and move, resize, recolour and restyle it by hand — colours, typography, spacing, borders, shadows and opacity. Every edit is a surgical inline-style change to your Handlebars source, so the template stays a plain HTML API that AI, agents and the SDK keep reading unchanged.

  • New

    Snap guides

    Dragging an element snaps its edges and centre to the page margins, page breaks and neighbouring elements, with live alignment guides. Hold Alt to place it freely.

  • Improved

    Stale-proof nudge

    After your edits settle, the editor quietly flags when the rendered proof no longer matches your draft and offers a one-click re-render — no proof is ever rendered behind your back.

No. 006

The production-safe run

Every template becomes a typed API you can validate against and stress-test before real data reaches it — alongside per-request render controls, a Python SDK, and a rebuilt template library.

  • New

    Typed data contracts

    Every template now derives a Draft 2020-12 JSON Schema from its own structure. Fetch it from GET /v1/templates/:id/schema, generate TypeScript, Zod, or Pydantic types from it, or set options.validate to reject a bad payload with field-level errors before rendering.

  • New

    Document tests

    Stress every template with adversarial payloads generated from its contract — long strings, 60-row tables, Unicode, missing images — and get back only high-confidence failures: overflow, clipped text, blank pages, unresolved markers. Named fixtures add your own edge cases, and test renders never consume your generation quota.

  • New

    Free PDF stress tester

    Paste any template at /tools/pdf-stress-test and see where its layout breaks under real-world data. No signup for the first run.

  • New

    Per-request render options

    POST /v1/generate now accepts format, landscape, margins, metadata, filename, and an optional custom watermark, so one template can render Letter or A4, portrait or landscape, without a second template.

  • New

    Python SDK

    pip install doclinth — an official Python client with sync and async support, automatic retries with safe idempotency, and webhook verification, alongside the Node SDK.

  • Improved

    Rebuilt template library

    All thirty starter templates were redrawn around the real documents they stand in for — filed GST invoices, Stripe-class billing, studio letterhead, registrar forms, DIN logistics slips — so the gallery reads like production stationery, not a demo.

No. 005

The self-serve run

Faster ways in and out of the press: sign in with Google, watch the AI set type live in the editor, and start any template from a blank sheet.

  • New

    Sign in with Google

    One-click Google sign-in joins email, alongside password reset and a redesigned split-panel login.

  • New

    Blank templates

    Start from an empty sheet and write your own HTML and JSON, instead of forking a starter.

  • Improved

    AI sets type live

    Generated templates now stream into the editor as they are written, with a running progress read-out instead of a spinner.

  • New

    Preview thumbnails

    The templates dashboard now shows a rendered thumbnail of each document, so the right plate is one glance away.

  • Improved

    Complete Node SDK

    @doclinth/sdk now covers the full surface — templates and generations — with types and tests throughout.

  • Improved

    Copy any code block

    Every snippet in the docs carries a copy button, so the quickstart lands in your terminal untouched.

No. 004

The agent-native run

doclinth learns to talk to machines: a Model Context Protocol server, a machine-readable index, and template authoring driven entirely by an API key.

  • New

    MCP server

    A remote Model Context Protocol server at /mcp lets AI agents author templates and render documents directly, no glue code required.

  • New

    Author templates by API

    POST /v1/templates turns a plain-English prompt into a print-ready template with nothing but an API key — the whole authoring loop, headless.

  • New

    llms.txt and an agent guide

    A machine-readable index at /llms.txt and /llms-full.txt, plus a dedicated /docs/agents guide, so any model can learn the API in one fetch.

  • New

    Public template gallery

    A browsable gallery of production-grade templates you can preview and start from, each with its own page.

  • Improved

    Retrieve endpoints

    GET /v1/templates lists your templates and GET /v1/templates/{id} returns the HTML and its variables — the REST surface is now round-trip complete.

  • New

    Annual billing

    Every paid plan can now be billed monthly or annually, with a discount for paying by the year.

No. 003

The hardening run

A full pass over reliability and safety: retries that never double-print, background jobs with signed delivery, and a locked-down renderer.

  • New

    Idempotency keys

    Send an Idempotency-Key header on /v1/generate and retries never generate or bill twice: URL-mode replays return the original result, duplicate binary requests get a stable 409, and keys release on failure so retrying a 5xx succeeds.

  • New

    Async generation with signed webhooks

    Long-running jobs can run in the background; a signed webhook delivers the document the moment the run completes.

  • New

    Template versioning

    Templates now carry a draft and a published version. Edit freely; production renders only what you have published.

  • New

    Typed Node SDK

    @doclinth/sdk ships typed requests and responses, automatic retries and idempotency built in.

  • New

    Test-mode API keys

    Separate test keys for development, so experiments never touch live data.

  • New

    OpenAPI spec and more languages

    A complete OpenAPI 3 description at /openapi.json, plus Python, PHP and Ruby examples throughout the docs.

  • Improved

    Baked-in font families

    A curated set of families ships inside the renderer, so previews and production output match glyph for glyph.

  • Security

    SSRF-safe image loading

    Remote images in templates now load through a signed proxy with a per-account allowlist.

  • Security

    Render isolation

    The rendering sandbox can no longer reach private networks; egress is restricted to what a document legitimately needs.

No. 002

Production plumbing

Paid plans, a dedicated render service and a proper editor: the parts that turn a prototype into a press.

  • New

    Paid plans

    Starter, Pro and Scale went live, with subscriptions handled by Dodo Payments.

  • New

    Premium starter templates

    Four production-grade starters to begin from, instead of a blank sheet.

  • Improved

    Monaco editor

    The template editor moved to Monaco: real HTML and JSON highlighting, exactly like your IDE.

  • Improved

    Dedicated render service

    Rendering moved to its own service with per-key burst limits, keeping latency flat under load.

  • Security

    Render-time sanitization

    Templates are sanitized before rendering, as defense in depth against script injection.

No. 001

First impression

The press opens.

  • New

    The generation API

    One endpoint: POST JSON, receive a pixel-perfect PDF in about two seconds, rendered by real headless Chrome.

  • New

    AI template authoring

    Describe a template in plain English; AI sets clean, print-ready HTML with the right placeholders.

  • New

    Dashboard, keys, logs and docs

    A live-preview template editor, API key management, generation logs and a full documentation set from day one.

  • New

    A first curl that works

    Signing up seeds a starter template with a real template_id, so the quickstart command runs verbatim.