Now in Early Access

The package manager for LLM prompts

Author, version, and publish prompts as packages. Install with @sufleur/cli (Node) or sufleur-cli (Python). Get type-safe generated code — no copy-paste, no guesswork.

Terminal
$sufleur add @acme/welcome-email
✓ Resolved @acme/welcome-email@^2.0.0 → 2.1.3

$sufleur generate
✓ Generated type-safe code → src/generated/prompts.ts
The Problem

Prompts deserve better than
a string in your source code

LLM prompts are a core part of your product \u2014 but they're treated like afterthoughts. Scattered across files, impossible to version, and invisible to the people who write them.

Without Sufleur
  • Prompts hardcoded in application code
  • No versioning — "which prompt is in prod?"
  • Prompt engineers can't iterate without a deploy
  • No type safety — runtime crashes from bad inputs
  • No visibility into what changed and when
With Sufleur
  • Prompts live in a dedicated registry
  • Semver versioning with published/draft lifecycle
  • Prompt engineers publish; engineers install
  • Generated code with full type inference
  • Immutable versions with complete audit trail
How It Works

Three steps from prompt to production

A familiar workflow for anyone who's used npm. Author your prompts, publish to the registry, and install with the CLI.

01

Author

Write prompt templates with typed variables using Mustache syntax. Add descriptions, output schemas, and metadata.

Hi {{user.name}}{{@type string}}{{@doc User's full name}},

Welcome to {{productName}}{{@type string}}{{@doc Product name}}.
Here's what you need to know...

{{@outputSchema}}
02

Configure

Add prompts to your project with version constraints. The CLI resolves, fetches, and locks versions — just like a package manager.

# sufleur.yaml
api_keys:
  acme: $${ACME_API_KEY}
prompts:
  '@acme/welcome-email': '^2.0.0'
output:
  language: typescript
  file: ./src/generated/prompts.ts
03

Install & Generate

The CLI resolves versions, fetches templates, and generates type-safe code your app can import directly.

# Add a prompt & resolve
$ sufleur add @acme/welcome-email

# Generate typed SDK
$ sufleur generate

# Re-resolve all prompts
$ sufleur install
Real-World Comparison

Your prompts deserve better
than string concatenation

See how teams manage prompts today versus what Sufleur generates for you automatically.

app/services/email.tsBefore
// 😬 Prompts as random strings
const userPrompt = `Hello ${userName},
Welcome to ${productName}.`;

// No types, no validation, no versioning
const res = await llm.chat({
messages: [{ role: "user", content: userPrompt }],
});

// 🤞 Hope it returns valid JSON
const data = JSON.parse(res); // 💥
app/services/email.tsWith Sufleur
import { getPrompt } from './generated/prompts'

const welcome = getPrompt('@acme/welcome-email')

// ✅ Type-safe, versioned, validated
const { prompt } = welcome.render('userPrompt', {
user: { name: 'Ada' }, // string ✓
productName: 'Acme', // string ✓
})

const response = await llm.chat(prompt)

// ✅ Zod-validated output parsing
const result = welcome.parseOutput(response)
if (result.success) console.log(result.data)
// ^ fully typed ✓
Features

Everything you need to ship prompts
like a real dependency

Semver Versioning

Every prompt version is immutable and tagged with semantic versioning. Pin to exact versions or use ranges — just like npm.

Type-Safe Codegen

The CLI generates TypeScript (and Python) code with full type inference. No manual type definitions, no runtime surprises.

Structured Output Schemas

Define JSON Schema output contracts. Get Zod validators and Pydantic models generated automatically at build time.

Workspace Collaboration

Organize prompts into workspaces. Role-based access lets prompt engineers publish while developers consume.

Draft & Published Workflow

Iterate on drafts without affecting production. Publish when ready — only published versions are installable.

CLI-First DX

One binary, zero config. sufleur add and sufleur generate — that’s the whole workflow.

Get Started

Stop copy-pasting prompts.
Start shipping them.

Join the first teams using Sufleur to manage their LLM prompts as real, versioned, type-safe packages.

$ sufleur add @your-workspace/first-prompt