Skip to main content

Welcome to Velkin

Velkin is a self-hosted templating studio for generating documents. You design a template once — in HTML, DOCX, or XLSX — and Velkin renders it on demand to PDF or to its native format, driven by JSON data.

What you get

  • A visual studio for designing and editing templates with an in-browser preview.
  • A REST API for programmatic rendering, ready to plug into your backend.
  • Handlebars everywhere: bind JSON data with plain {{tags}}, reuse markup with partials, and add logic with sandboxed JavaScript helpers.
  • Versioning for every template asset, with full history and one-click restore.
  • Self-hosting first: deploy with Docker Compose, own your data, no SaaS lock-in.

Architecture in one paragraph

Velkin runs as three services orchestrated by Docker Compose:

  • a Go API (net/http) that handles persistence and rendering;
  • an Angular Studio where you author templates, set options, and preview output;
  • a MongoDB database that stores reports, template assets, and their version history.

Rendering relies on Chromium for HTML-to-PDF and on LibreOffice (soffice) for converting .docx and .xlsx to PDF when a native output isn't requested. Templates are compiled by Handlebars.js 4.7.8 in a sandboxed goja VM; reusable logic lives in JavaScript helpers.

The core data unit is the report (a ReportTemplate): one document that bundles the active template, Handlebars helpers, sample data, and output options. See Reports & Templates for the full model.

Who this is for

  • Backend teams that need to generate invoices, contracts, reports, exports, or any document where the layout matters.
  • Product teams that want non-engineers to update templates without redeploying.
  • Operators who prefer self-hosting over a third-party rendering service.
Trust model

Velkin is built for trusted internal use — a team behind a LAN or VPN, in the spirit of jsreport or Carbone. Template authors are assumed to be developers, so templates run arbitrary Handlebars and HTML by design. The application ships no built-in authentication; you put it behind your own network boundary. Read the Security model before exposing it.

Where to go next