Chainletter
Mail-merge · Blockchain · Credentials

Issue credentials
that actually verify.

CredCLI turns HTML templates and a CSV spreadsheet into signed PDFs, verifiable badges, email bundles, and blockchain-stamped credentials — in seconds, from your terminal or browser.

$ npm install -g @credcli/cli

Get started View docs
AI agent? There's a dedicated guide with skills, workflows, and structured tool docs.
View Agent Guide →
bash — CredCLI walkthrough
# One-time setup: claim your workspace token
$credcli register https://chain.lt/abc123
✓ Token saved · tenant: acme.chainletter.io

# Brand your workspace
$credcli workspace --issuer "Acme University" --logo logo.png

# Create a new credential job, load recipients
$credcli new --template 3
✓ Created job001 · CourseCompletionCertificate · 0 recipients
$credcli csv job001 recipients.csv
✓ Loaded 47 recipients into job001

# Render 47 PDFs via headless Chromium
$credcli run job001 --format pdf
Rendering [████████████████████] 47/47 · credential_047.pdf

# Assign to Chainletter, stamp on-chain, generate emails
$credcli assign job001 spring-2026
$credcli send job001 --yes
✓ 47 files uploaded · claim links stored
$credcli stamp job001
✓ Collection stamped · blockchain record immutable
$credcli email job001
✓ 47 .eml files · all_recipients.mbox · manifest.csv
5
Built-in templates
21+
Standard CSV fields
PDF
PNG · EML · MBOX
Blockchain-stamped
Get running in under a minute

CredCLI requires Node.js 18 or later. If you don't have Node installed, download it from nodejs.org first.

Option A — Run without installing
$ npx @credcli/cli <command>

Use npx to run any CredCLI command without a global install. Node.js downloads the package on first run and caches it locally.

Option B — Install globally
$ npm install -g @credcli/cli

Install once and run credcli from anywhere on your machine. Recommended if you issue credentials regularly.

💡

Verify your Node.js version with node --version before installing. Node 18+ is required. Use nvm or nvm-windows to manage multiple Node versions.

Five steps from spreadsheet to verified credential
01
🔑

Register

Claim your Chainletter workspace token from a shortlink.

credcli register <url>
02
📋

New job + CSV

Pick a template, then drop in your recipient spreadsheet.

credcli new · csv
03
🖨️

Run

Headless Chromium renders every row as a PDF or PNG.

credcli run --format pdf
04
⛓️

Stamp

Assign a Chainletter collection, upload files, lock on-chain.

credcli assign · send · stamp
05
📬

Email

Generate ready-to-send .eml files and an MBOX archive.

credcli email
Everything available via credcli
register <url> · -i

Claim a Chainletter token from a shortlink and save it to .data/token.json. Use -i to inspect the current token (tenant, group, expiry).

workspace --issuer --logo

Set your organization name and logo. The logo is base64-embedded in every credential automatically.

new --template N

Create a new credential job interactively, or pre-select a template with --template. Jobs auto-increment (job001, job002…).

templates

List all available templates with dimensions and the CSV column names they expect.

csv <job> <file>

Load a recipient CSV into a job. Headers matched case-insensitively; column count is flexible.

run [job] --format pdf|png

Render credentials for every recipient via headless Chromium. Outputs to output/.

list

Show all jobs with template name, recipient count, and how many output files have been generated.

output <job>

List the generated credential files for a job with absolute paths and file sizes.

assign <job> <id> --network

Link a job to a Chainletter collection. Network defaults to private; pass public for open verification.

send <job> --yes

Upload rendered credentials to the assigned Chainletter collection. Fetches and stores claim links for emails.

stamp <job>

Blockchain-stamp the collection, making it immutable. Records timestamp in job metadata.

email <job> --email-template

Generate .eml files, an MBOX archive, and a manifest CSV. Chainletter claim links are injected automatically.

serve --port --no-open

Start the web UI at localhost:3037 for visual template editing and live credential preview in your browser.

help -c · -s

Show usage. -c writes a CLAUDE.md for Claude Code; -s writes SKILL.MD for agent workflows.

Built for real credential workflows
🎨

Template engine

HTML templates with {{Placeholder}} merge tags. 21+ standard fields plus 12 transcript course rows per recipient.

📄

PDF & PNG output

Pixel-perfect rendering via Playwright Chromium. Print-to-PDF preserves backgrounds, fonts, and full-bleed layouts.

🔗

QR verification

Auto-generates and embeds a QR code from QRUrl or VerificationURL on every credential.

⛓️

Blockchain stamping

One command locks the entire collection on-chain via Chainletter. Tamper-evident, verifiable forever.

📧

Email-ready output

Standards-compliant .eml files with PDF attachments, plain-text + HTML body, and an MBOX archive for bulk import.

🖥️

Web UI

Run credcli serve for a browser-based editor with live preview — no terminal required.

Start immediately — or bring your own

Drop a custom HTML file into your workspace templates folder and it appears in credcli templates automatically. Or define your own templates from scratch using whatever fields you want — any {{CustomField}} in your HTML becomes a column in your CSV.

Standard fields — or invent your own

Use any subset of these columns in your CSV. Unmatched columns are ignored; missing fields render as blank. Custom templates can add any fields they need — just match column names to your {{Placeholders}}.

FullName FName LName Email Title Achievement BadgeLevel CredentialID Institution Issuer Signature Location IssueDate ExpirationDate CourseName Major GPA Hours QRUrl VerificationURL Course1–12 Name/Grade/Credits/Semester