Related work · 25 projects · 31 dimensions

Comparing WeaveMark with the alternatives.

Prompt formats, typed DSLs, optimizers, frameworks and spec-driven workflows, classified on the axes that actually separate them. Every cell was checked against repositories, specifications and source code in July 2026, including WeaveMark's own.

Summary

WeaveMark is a Markdown-native notation whose compiler is itself a language model. Compilation is a declared pass that turns an authored source file into a durable prompt artifact, and this LLM-based compilation is the primary departure from the field: comparable authoring formats (Prompty, POML, Dotprompt, PromptL, PDL) are purely deterministic, substituting text and rendering at run time, and most produce no durable artifact at all. Because the compiler resolves meaning rather than only syntax, @refine can merge an imported module into the current document by meaning, layered over conventional deterministic mechanisms (@include, @use, variables, conditionals).

The systems that do let a model write prompt text divide into two groups. Optimizers (DSPy, SAMMO, TextGrad, AdalFlow) have a model rewrite candidate text, but a metric scored over a dataset adjudicates the result. Spec-driven workflows (GitHub Spec Kit, Amazon Kiro) let the model's judgment stand, but expand a single intent against one project-wide context file (constitution.md, .kiro/steering/) and provide no means of importing one specification into another. WeaveMark occupies the remaining position: model-adjudicated composition over an imported graph of reusable authored modules, with 111 such modules shipped.

The same LLM-based compilation makes the language extensible from within itself. @define introduces new named, parameterised constructs of three kinds: deterministic macros, which expand to literal text; semantic macros, whose body is natural language the compiler executes under a declared @phase, @scope, @returns and @effect contract; and effectful functions, bound to reviewed Python by @bind and gated by capability. The standard vocabulary is not privileged — @refine, @style and @summarize are themselves declared with @define in the prelude rather than built into the compiler. Most projects offer some user-defined abstraction (Jinja2 macros, Dotprompt partials and helpers, PDL functions, BAML functions, Semantic Kernel plugins), but in every case the body is code or a template that the host executes. Only the agent workflows come close, since a custom Spec Kit command is natural-language instruction — though it is a top-level workflow step, not a scoped, parameterised construct that transforms part of a document.

Remaining properties are individually unremarkable and shared with neighbours: output contracts and assertions (as in BAML, Dotprompt), direct execution and built-in reasoning strategies (as in DSPy and LangChain, though both require writing Python), and an editor-independent CLI. Exact offline replay of a recorded compilation appears to be unshared among the model-using systems. The costs are equally concrete: compilation spends tokens, and its output is reproducible only from a recorded run, never from the provider.

The one cell that matters

Reduced to counts: of 25 systems, 7 let a model write prompt text; the remaining 18 only substitute it. Of those 7, a metric scored over a dataset adjudicates 3, and TextGrad defers to the model’s own critique. That leaves 3 where the model’s compositional judgment stands — Spec Kit, Kiro and WeaveMark — and only one of those can import one source into another. Semantic composition and modular reuse intersect exactly once.

Distinctive / semantic Present / favorable Partial Constraint / cost Absent Descriptive

The ten most likely comparisons

These ten are selected by how often they are raised as equivalents, since that is the question a reader usually arrives with. They can be re-ordered by structural similarity — a weighted score across 11 criteria, shown on each row so the ranking can be argued with rather than taken on trust. The two measures diverge: a project can be structurally close yet rarely confused, or distant yet constantly cited.

  • ×4 A model writes the prompt (2 = composes authored parts)
  • ×2 User-defined abstractions (2 = model-executed)
  • ×3 Markdown / prose-native authoring
  • ×3 Cross-file reuse and composition
  • ×2 Source is a committed file
  • ×2 Produces a durable artifact
  • ×2 Concerned with authoring prompts
  • ×1 Output contracts / validation
  • ×1 Executes the source
  • ×1 Ships a library of parts
  • ×1 Has its own grammar
  1. 1
    Amazon Kiro high confusion
    Spec-driven development AWS kiro.dev
    32/44

    Closest onA model expands an intent into requirements/design/tasks on disk, shaped by committed .kiro/steering files that are injected into every interaction.

    Differs bySteering is workspace-wide context, not composable modules; specs cannot import each other, and each phase is an approval-gated conversation.

  2. 2
    GitHub Spec Kit high confusion
    Spec-driven development GitHub github.com/github/spec-kit
    32/44

    Closest onUses a model to elaborate a short intent into a long, durable Markdown contract — and it is driven by committed files: spec.md feeds every later phase, constitution.md constrains all of them.

    Differs byNo reuse between specs. It expands one intent under one project-wide constitution rather than merging an imported graph of reusable modules.

  3. 3
    Jinja2 (baseline) high confusion
    Prompt-as-code Pallets github.com/pallets/jinja
    23/44

    Closest onThe honest baseline: a real template language with includes, macros and inheritance that renders committed files into text artifacts.

    Differs byPure interpolation — no output contracts, no assertions, no runtime selection, and no semantic composition.

  4. 4
    Prompty high confusion
    Markup & file formats Microsoft github.com/microsoft/prompty
    22/44

    Closest onThe closest aesthetic sibling — Markdown body, YAML frontmatter, git-committable, Microsoft-backed — with a pluggable invoker registry and one .prompty able to call another as a tool.

    Differs byCross-file reuse only through tool invocation, never template composition, and every transformation is deterministic rendering.

  5. 5
    SAMMO high confusion
    Optimizers Microsoft github.com/microsoft/sammo
    20/44

    Closest onParses Markdown into a prompt program, calls that compile-time optimization, and its Rewrite and Paraphrase mutators do have a model rewrite sections.

    Differs byThe Markdown parsing is 100% deterministic (mistletoe, no LLM), and beam search against a labelled trainset picks the winner.

  6. 6
    DSPy high confusion
    Optimizers Stanford github.com/stanfordnlp/dspy
    19/44

    Closest onOwns the word compile for prompts, composes reusable modules, and a model does write candidate instructions in COPRO and MIPROv2.

    Differs byA metric over a dataset adjudicates, not the model's judgment; it optimizes Python programs rather than composing an authored document.

  7. 7
    Dotprompt medium confusion
    Markup & file formats Google (Genkit) github.com/google/dotprompt
    26/44

    Closest onThe most structurally complete rival: frontmatter + template body, real cross-file partials with named args, input AND output schemas, open multi-language spec.

    Differs byPartials paste by reference; there is no semantic merge and no durable compiled artifact.

  8. 8
    POML medium confusion
    Markup & file formats Microsoft github.com/microsoft/poml
    26/44

    Closest onA genuine prompt markup language with its own grammar, reusable components, schema validation and a stylesheet layer that separates presentation from content.

    Differs byXML-like rather than prose, and every transformation is deterministic rendering.

  9. 9
    PromptL medium confusion
    Markup & file formats Latitude github.com/latitude-dev/promptl
    23/44

    Closest onThe nearest syntactic cousin: Markdown-ish prose, frontmatter, role tags, multi-step chaining, and cross-file partials with arguments.

    Differs byPurely deterministic, no output contracts, no compiled artifact — and the project is small and slowing.

  10. 10
    Copilot .prompt.md medium confusion
    Markup & file formats GitHub/Microsoft code.visual…stomization/prompt-files
    19/44

    Closest onA .prompt.md file with frontmatter, committed and invoked as a command — and VS Code does resolve Markdown links and inject the referenced file.

    Differs byEditor behavior rather than a language: no spec, no template engine, no schemas, and inclusion is verbatim.

No project from this layer reaches the top ten. Every project is still listed in the two matrices and the cards below.

The decisive axis: who writes the prompt, and what decides it

Whether a model writes the prompt text is only half the question. The other half is what adjudicates the result: a metric over a dataset, the model's own critique, or the model's compositional judgment.

ProjectDoes a model write the prompt text?What decides the final textTemplating modelNeeds trainset / metricWhen LLM cost is paidReproducible output
WeaveMarkMarkup & file formatssource ↗yes: refine/expand/compress/style/summarize/revisethe model, composing an imported graph of authored modulessemantic (LLM) + deterministic layersnocompile time; run time too if --run / --implementcompile step varies by provider, but --record-run/--replay-run replay it exactly offline; artifact pinned once compiled
AIConfigMarkup & file formatssource ↗nothe author — the tool only substitutes textdeterministic (Handlebars)norun timerender is deterministic; model output still varies
Copilot .prompt.mdMarkup & file formatssource ↗nothe author — the tool only substitutes textnone (body is verbatim)norun timebody is passed verbatim; model output varies
DotpromptMarkup & file formatssource ↗nothe author — the tool only substitutes textdeterministic (Handlebars)norun timerender is deterministic; model output still varies
PDLMarkup & file formatssource ↗no by default; opt-in lang: pdl blocks can execute model-generated PDLthe author — the tool only substitutes textdeterministic control flowno (AutoPDL does)run timeprogram structure is deterministic; model calls vary
POMLMarkup & file formatssource ↗nothe author — the tool only substitutes textdeterministicnorun timerender is deterministic; model output still varies
PromptLMarkup & file formatssource ↗nothe author — the tool only substitutes textdeterministic (Jinja-like)norun timerender is deterministic; model output still varies
PromptyMarkup & file formatssource ↗nothe author — the tool only substitutes textdeterministic (Jinja2/Mustache)norun time (execution only)render is deterministic; model output still varies
BAMLTyped DSLs & decodingsource ↗nothe author — the tool only substitutes textdeterministicnorun timerender is deterministic; model output still varies
GuidanceTyped DSLs & decodingsource ↗nothe author — the tool only substitutes textdeterministic + token fast-forwardingnorun timerender is deterministic; constrained decoding narrows but does not fix output
LMQLTyped DSLs & decodingsource ↗nothe author — the tool only substitutes textdeterministic + constrained decodingnorun timerender is deterministic; constrained decoding narrows but does not fix output
PriomptTyped DSLs & decodingsource ↗nothe author — the tool only substitutes textdeterministicnorun timerender is deterministic; model output still varies
TypeChatTyped DSLs & decodingsource ↗no (LLM repairs output, not prompt)the author — the tool only substitutes textdeterministic (type -> text)norun timerender is deterministic; model output still varies
AdalFlowOptimizerssource ↗partly: the textual-gradient pass has an LLM rewrite the prompta metric scored over a datasetn/aYES: dataset + metricoptimization run + run timeno — search is stochastic and rerunning yields a different prompt
DSPyOptimizerssource ↗partly: COPRO/MIPROv2 have an LLM write candidate instructionsa metric scored over a datasetn/a (constructs prompts programmatically)varies: COPRO/MIPROv2 need trainset + metric; BootstrapFewShot takes unlabelled inputs, metric optionaloptimization run + run timeno — search is stochastic and rerunning yields a different prompt
SAMMOOptimizerssource ↗partly: Paraphrase/Rewrite mutators have an LLM rewrite sectionsa metric scored over a datasetdeterministic parsing (mistletoe, no LLM)YES: trainset + accuracy scorersearch time + run timeno — search is stochastic and rerunning yields a different prompt
TextGradOptimizerssource ↗YES: an LLM rewrites the prompt text every stepthe model's own critique, no dataset neededn/aloss/eval function required; examples optionaloptimization loop + run timeno — search is stochastic and rerunning yields a different prompt
EllPrompt-as-codesource ↗no (LLM only writes version commit msgs)the author — the tool only substitutes textdeterministic (f-strings)norun timerender is deterministic; model output still varies
Instructor / Mirascope / Magentic / MarvinPrompt-as-codesource ↗nothe author — the tool only substitutes textdeterministicnorun timerender is deterministic; model output still varies
Jinja2 (baseline)Prompt-as-codesource ↗nothe author — the tool only substitutes textdeterministicnononeyes — pure text substitution, no model involved
LangChain / LCEL + HubPrompt-as-codesource ↗nothe author — the tool only substitutes textdeterministic (f-string/Jinja2)norun timerender is deterministic; model output still varies
Semantic KernelPrompt-as-codesource ↗no (planners decompose steps, not prompts)the author — the tool only substitutes textdeterministic (Jinja2/Handlebars/Liquid)norun timerender is deterministic; model output still varies
Langfuse / PromptLayer / Humanloop / Braintrust / Helicone / Portkey / AgentaHosted platformssource ↗nothe author — the tool only substitutes textdeterministic ({{var}} interpolation)only for optimizer featuresrun timerender is deterministic; model output still varies
Amazon KiroSpec-driven developmentsource ↗YES: LLM expands prompt into full specthe model, from one intent plus a project-wide context filen/anospec generation (per phase) + implementationno — conversational, rerunning yields a different spec
GitHub Spec KitSpec-driven developmentsource ↗YES: LLM elaborates a short intent into a long specthe model, from one intent plus a project-wide context filen/a (conversational)nospec generation (multi-step) + implementationno — conversational, rerunning yields a different spec

No project matches the current filter.

Form factor, reuse and composition

What the thing actually is, and whether prompt pieces can be shared without copy-paste.

ProjectSeparate language entirely?Markup language?Reuse of prompt piecesComposition mechanismShips a library of parts
WeaveMarkMarkup & file formatssource ↗yes (own grammar)yes (Markdown superset)yes: @refine module:/path, @include, @use ... exposing, @referenceboth: @refine merges by meaning (mingle), @include expands a module deterministically, @use imports definitions, @reference loads contextyes: 111 promplets — 36 stdlib prelude/fragments, 8 domain packs, 9 catalog apps, tutorials
AIConfigMarkup & file formatssource ↗nono (JSON/YAML config)no cross-fileintra-file {{prompt.output}} chainingno
Copilot .prompt.mdMarkup & file formatssource ↗noyes (MD + frontmatter)partial: VS Code resolves Markdown links and injects the referenced fileMarkdown links resolved at execution time by the editorno
DotpromptMarkup & file formatssource ↗noyes (YAML + Handlebars)yes (partials _name.prompt)textual include with named argsno (no shipped module collection)
PDLMarkup & file formatssource ↗yes (declarative lang)no (pure YAML)yes (function/call, import)function abstraction with args (function/call/import)partial
POMLMarkup & file formatssource ↗yes (XML-like)yes (tags + stylesheet)yes (components/templates)tag nesting + stylesheet separationpartial (component set)
PromptLMarkup & file formatssource ↗yes (own compiler)yes (MD-ish + XML role tags)yes (<prompt path=.. arg=..>)textual partial with argsno
PromptyMarkup & file formatssource ↗noyes (MD + YAML frontmatter)partial: kind: prompty tool lets one .prompty invoke another; no template-level includecross-file only through tool invocationno
BAMLTyped DSLs & decodingsource ↗yes (TS-like DSL)noyes (types + functions)language-level functions/typespartial
GuidanceTyped DSLs & decodingsource ↗no (Python DSL)noyes (guidance functions)function compositionno
LMQLTyped DSLs & decodingsource ↗yes (query language)nopartial (functions)Python compositionno
PriomptTyped DSLs & decodingsource ↗noyes (JSX)yes (JSX components)component compositionno
TypeChatTyped DSLs & decodingsource ↗nonoyes (TS types)type composition/unionsno
AdalFlowOptimizerssource ↗nonoyesPythonno
DSPyOptimizerssource ↗nonoyes (Modules)Python module compositionpartial (optimizer library)
SAMMOOptimizerssource ↗nopartial (SAMMO Express reads Markdown)yes (Sections/Paragraphs)structural tree compositionno
TextGradOptimizerssource ↗nononoPythonno
EllPrompt-as-codesource ↗nonoyes (Python fns)Python function compositionno
Instructor / Mirascope / Magentic / MarvinPrompt-as-codesource ↗nonovia Python onlyPython function compositionno
Jinja2 (baseline)Prompt-as-codesource ↗yes (template lang)yes (template markup)yes (include, macro, extends)textual include/inheritance/macrosno (generic, not prompt-specific)
LangChain / LCEL + HubPrompt-as-codesource ↗nonoyes (partial(), Hub pull)LCEL pipe operatoryes (LangSmith Hub registry)
Semantic KernelPrompt-as-codesource ↗nopartial (template files)yes (plugins bundle functions)call kernel fn inside template {{ns.fn}}partial (plugin ecosystem)
Langfuse / PromptLayer / Humanloop / Braintrust / Helicone / Portkey / AgentaHosted platformssource ↗nonononone (no partials/includes anywhere)no
Amazon KiroSpec-driven developmentsource ↗nono (generates MD artifacts)no cross-spec imports; steering files apply workspace-widephased: requirements -> design -> tasksno
GitHub Spec KitSpec-driven developmentsource ↗nono (generates MD artifacts)no cross-spec imports; constitution.md applies project-widesequential: spec -> plan -> taskspartial (138 community extensions)

No project matches the current filter.

Extensibility: can you add new constructs, and in what language

Most projects let you define an abstraction of some kind. The discriminating question is whether its body is code the host runs or natural language the compiler interprets.

ProjectUser-defined abstractionsSemantic (model-executed) macrosWhere an extension is writtenHost plugin points
WeaveMarkMarkup & file formatssource ↗yes: @define with params, defaults and an implicit body — deterministic macros, semantic macros, and effectful functionsYES: the @body of a @define is natural language the compiler executes, under @phase compile or executein the language itself (.weavemark.md modules)engines by dotted Python path; @bind Python implementations gated by declared @effect capabilities
AIConfigMarkup & file formatssource ↗nonohost codemodel parsers
Copilot .prompt.mdMarkup & file formatssource ↗nonon/ano
DotpromptMarkup & file formatssource ↗yes: partials with named args; custom Handlebars helpersnoprompt files (partials) and host code (helpers)helper registration; open multi-language spec
PDLMarkup & file formatssource ↗yes: function/call with arguments, plus importno (lang: pdl can run model-generated PDL)PDL files (YAML)Python and shell code blocks; AutoPDL is separate
POMLMarkup & file formatssource ↗yes: reusable components and stylesheet rulesnoTypeScript SDK — new tags cannot be added in .pomlTS component functions
PromptLMarkup & file formatssource ↗partial: <prompt path=.. arg=..> partialsnoprompt filesno
PromptyMarkup & file formatssource ↗via the template engine (Jinja2 macros where supported)nohost codeyes: invoker registry for renderers, parsers and executors
BAMLTyped DSLs & decodingsource ↗yes: functions, classes and template_stringno.baml files, but the grammar is fixedgenerators for target languages
GuidanceTyped DSLs & decodingsource ↗yes: @guidance functions composenoPythonmodel backends
LMQLTyped DSLs & decodingsource ↗partial: Python functionsnoPythondecoders and backends
PriomptTyped DSLs & decodingsource ↗yes: JSX componentsnoTypeScript / JSXno
TypeChatTyped DSLs & decodingsource ↗yes: TypeScript typesnoTypeScriptno
AdalFlowOptimizerssource ↗yes: Python componentsnoPythoncustom optimizers
DSPyOptimizerssource ↗yes: Modules and Signaturesno — the model writes instructions, but you cannot declare a semantic constructPythoncustom modules and optimizers
SAMMOOptimizerssource ↗yes: components and mutatorsnoPythoncustom mutators
TextGradOptimizerssource ↗partial: PythonnoPythoncustom loss functions and engines
EllPrompt-as-codesource ↗yes: Python functionsnoPythonno
Instructor / Mirascope / Magentic / MarvinPrompt-as-codesource ↗yes: Python functions and Pydantic modelsnoPythonprovider hooks
Jinja2 (baseline)Prompt-as-codesource ↗yes: macros with arguments, include, extends/blocknotemplate filescustom filters, tests and extensions (Python)
LangChain / LCEL + HubPrompt-as-codesource ↗yes: runnables and chainsnoPython / JSvery large integration surface
Semantic KernelPrompt-as-codesource ↗yes: plugins bundle functions, callable from a template as {{ns.fn}}nohost code plus prompt filesyes: plugins, planners, connectors
Langfuse / PromptLayer / Humanloop / Braintrust / Helicone / Portkey / AgentaHosted platformssource ↗nonon/aSDK hooks
Amazon KiroSpec-driven developmentsource ↗partial: steering files and hookspartial: steering text is instruction the model readsconfig + Markdown steering fileshooks, MCP
GitHub Spec KitSpec-driven developmentsource ↗partial: slash-command extensionspartial: a custom command is natural-language instruction run by the agentcommand templates (Markdown)extensions; 35 agent integrations

No project matches the current filter.

What falls out of the classification

Unoccupied

Semantic composition × modular reuse

Every system with real cross-file reuse composes by substitution. Every system where a model writes the prompt works from one intent, with no way to import one source into another. WeaveMark is the only entry that sits in both columns.

Nearest work

Spec Kit and Kiro have committed inputs too

It would be convenient to say these take only an ephemeral chat prompt, but that is not the case. Spec Kit's constitution.md and Kiro's .kiro/steering/ files are committed, authored, and fed into generation. The real difference is that each applies one project-wide file; neither can import one specification into another.

Different category

Optimizers rewrite, but data decides

A model does write prompt text in DSPy, SAMMO, TextGrad and AdalFlow; the distinction is what adjudicates the result — a metric scored over a dataset rather than the model's judgment. TextGrad is the partial exception, since its critic needs no labelled data.

Gap

Platforms have no composition at all

All seven hosted platforms store prompts in a database rather than your repo, and not one offers a partial, include or inheritance primitive. Prompt management is not, by itself, an answer to reuse.

Trade-off

The compile step is not free or instant

Every deterministic renderer is free and identical forever. WeaveMark spends tokens to compile, and a rerun against the provider will not match byte for byte. The mitigations are real — the artifact is pinned once compiled, and --record-run / --replay-run reproduce a compilation exactly offline — but the trade-off is genuine.

Unoccupied

Extension bodies are code everywhere else

Most projects let you define an abstraction — Jinja2 macros, Dotprompt partials and helpers, PDL functions, BAML functions, Semantic Kernel plugins. In every one, the body is code or a template the host executes. A WeaveMark @define can instead carry natural language the compiler executes, under a declared phase, scope, return kind and effect set. Spec Kit and Kiro come closest, but a custom command is a workflow step, not a scoped construct that rewrites part of a document.

Notable

The directive vocabulary is open

Only 30 primitives are built in. @refine, @style, @ask and @assert are themselves @defined in the prelude, so the standard library is written in the same language its users write. BAML's grammar is closed; POML's new tags require TypeScript; Prompty extends only at the host level, through its invoker registry.

Notable

Reasoning strategies ship built in

Nine engines — tree-of-thought, self-consistency, reflection, chain, collaborative and more — are selectable, with a fragment library of thinking methods on top. Only DSPy and LangChain match that breadth, and both require writing Python.

Closest neighbours

Dotprompt, POML, Prompty

Dotprompt is the most structurally complete rival: real partials with named arguments, input and output schemas, custom helpers. POML has a genuine grammar and a stylesheet layer. Prompty owns the aesthetic and, contrary to a common reading, can invoke another .prompty — but only through a tool call.

Every project, all 31 dimensions

WeaveMark

Markup & file formatsSalemgithub.com/paulosalem/weavemark

Form & source

Separate language entirely?
yes (own grammar)
Markup language?
yes (Markdown superset)
Library / framework?
CLI + Python API + terminal UI
Nature of the source
plain .weavemark.md prose + @directives
Where the source lives
repo file
Scope of the unit
single prompt -> app spec -> implemented app (--implement)
Primary audience
domain expert / writer

Transformation

Does a model write the prompt text?
yes: refine/expand/compress/style/summarize/revise
What decides the final text
the model, composing an imported graph of authored modules
Templating model
semantic (LLM) + deterministic layers
Deterministic transformations
yes (vars, @if, @match, imports)
Optimizes the prompt?
yes: semantic elaboration + @iterate (compile, judge, rerun while improvable); no metric search
Needs trainset / metric
no
When LLM cost is paid
compile time; run time too if --run / --implement
Reproducible output
compile step varies by provider, but --record-run/--replay-run replay it exactly offline; artifact pinned once compiled

Reuse & extension

Reuse of prompt pieces
yes: @refine module:/path, @include, @use ... exposing, @reference
Composition mechanism
both: @refine merges by meaning (mingle), @include expands a module deterministically, @use imports definitions, @reference loads context
Ships a library of parts
yes: 111 promplets — 36 stdlib prelude/fragments, 8 domain packs, 9 catalog apps, tutorials
User-defined abstractions
yes: @define with params, defaults and an implicit body — deterministic macros, semantic macros, and effectful functions
Semantic (model-executed) macros
YES: the @body of a @define is natural language the compiler executes, under @phase compile or execute
Where an extension is written
in the language itself (.weavemark.md modules)
Host plugin points
engines by dotted Python path; @bind Python implementations gated by declared @effect capabilities

Output & runtime

Produces a durable artifact
yes: primary artifact + named @emit / role-tagged @prompt / @package files
Executes the source
yes: --run executes via engine; --implement hands the spec to a coding agent
Tools / external code
yes (@tool schema, @bind impl)
Output contracts / validation
yes (@output, @assert)
Provenance / audit trail
yes: --provenance manifest (hashes, lineage, latency, tokens, USD cost), --trace-output, --record-run bundle
Built-in prompting patterns
9 engines (ToT, simplified-ToT, self-consistency, reflection, chain, collaborative, FSLM, functional, single-call) + stdlib pattern fragments (CoT, six hats, SCAMPER, ACH, MECE, issue tree, debate)

Authoring experience

Helps readability
core goal: source is prose
Interacts with the author
yes: @ask pauses at compile time; guided prompts for missing inputs; --ui form + live preview; --discover chat
Adoption & status
pre-1.0, experimental

AIConfig

Markup & file formatsLastMilegithub.com/lastmile-ai/aiconfig

Form & source

Separate language entirely?
no
Markup language?
no (JSON/YAML config)
Library / framework?
SDK + editor
Nature of the source
.aiconfig.json prompts array
Where the source lives
repo file
Scope of the unit
prompt chain
Primary audience
developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic (Handlebars)
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
no cross-file
Composition mechanism
intra-file {{prompt.output}} chaining
Ships a library of parts
no
User-defined abstractions
no
Semantic (model-executed) macros
no
Where an extension is written
host code
Host plugin points
model parsers

Output & runtime

Produces a durable artifact
no
Executes the source
yes
Tools / external code
partial
Output contracts / validation
no
Provenance / audit trail
no
Built-in prompting patterns
no

Authoring experience

Helps readability
no
Interacts with the author
no
Adoption & status
1,085 stars; likely dormant

Copilot .prompt.md

Markup & file formatsGitHub/Microsoftcode.visual…stomization/prompt-files

Form & source

Separate language entirely?
no
Markup language?
yes (MD + frontmatter)
Library / framework?
IDE feature
Nature of the source
.prompt.md instructions
Where the source lives
repo file
Scope of the unit
single prompt
Primary audience
any developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
none (body is verbatim)
Deterministic transformations
minimal (${input:})
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
body is passed verbatim; model output varies

Reuse & extension

Reuse of prompt pieces
partial: VS Code resolves Markdown links and injects the referenced file
Composition mechanism
Markdown links resolved at execution time by the editor
Ships a library of parts
no
User-defined abstractions
no
Semantic (model-executed) macros
no
Where an extension is written
n/a
Host plugin points
no

Output & runtime

Produces a durable artifact
no
Executes the source
yes (slash command in VS Code)
Tools / external code
yes (tools: list, MCP)
Output contracts / validation
no
Provenance / audit trail
no
Built-in prompting patterns
no

Authoring experience

Helps readability
yes
Interacts with the author
yes (${input:} at invoke)
Adoption & status
VS Code feature; no open spec

Dotprompt

Markup & file formatsGoogle (Genkit)github.com/google/dotprompt

Form & source

Separate language entirely?
no
Markup language?
yes (YAML + Handlebars)
Library / framework?
Genkit runtimes (JS/Py/Go/Rust)
Nature of the source
.prompt: frontmatter + Handlebars body
Where the source lives
repo file
Scope of the unit
single prompt
Primary audience
app developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic (Handlebars)
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
yes (partials _name.prompt)
Composition mechanism
textual include with named args
Ships a library of parts
no (no shipped module collection)
User-defined abstractions
yes: partials with named args; custom Handlebars helpers
Semantic (model-executed) macros
no
Where an extension is written
prompt files (partials) and host code (helpers)
Host plugin points
helper registration; open multi-language spec

Output & runtime

Produces a durable artifact
no (renders at run time)
Executes the source
yes (via Genkit)
Tools / external code
yes (registered tool names)
Output contracts / validation
yes (Picoschema, JSON Schema or Zod, in and out)
Provenance / audit trail
Genkit tracing
Built-in prompting patterns
no

Authoring experience

Helps readability
yes
Interacts with the author
no
Adoption & status
554 stars; active; open standard

PDL

Form & source

Separate language entirely?
yes (declarative lang)
Markup language?
no (pure YAML)
Library / framework?
interpreter + Python SDK
Nature of the source
.pdl YAML blocks
Where the source lives
repo file
Scope of the unit
pipeline/program
Primary audience
developer

Transformation

Does a model write the prompt text?
no by default; opt-in lang: pdl blocks can execute model-generated PDL
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic control flow
Deterministic transformations
yes
Optimizes the prompt?
via AutoPDL extension (separate)
Needs trainset / metric
no (AutoPDL does)
When LLM cost is paid
run time
Reproducible output
program structure is deterministic; model calls vary

Reuse & extension

Reuse of prompt pieces
yes (function/call, import)
Composition mechanism
function abstraction with args (function/call/import)
Ships a library of parts
partial
User-defined abstractions
yes: function/call with arguments, plus import
Semantic (model-executed) macros
no (lang: pdl can run model-generated PDL)
Where an extension is written
PDL files (YAML)
Host plugin points
Python and shell code blocks; AutoPDL is separate

Output & runtime

Produces a durable artifact
no (executes program)
Executes the source
yes (pdl CLI)
Tools / external code
yes (code/lang blocks, Python+shell)
Output contracts / validation
yes (spec type checks)
Provenance / audit trail
traces + Live Explorer
Built-in prompting patterns
partial (loops/conditionals enable them)

Authoring experience

Helps readability
no (YAML, not prose)
Interacts with the author
no
Adoption & status
IBM Research; ~309 stars; pushed today

POML

Markup & file formatsMicrosoftgithub.com/microsoft/poml

Form & source

Separate language entirely?
yes (XML-like)
Markup language?
yes (tags + stylesheet)
Library / framework?
SDK + VS Code ext
Nature of the source
.poml XML-ish document
Where the source lives
repo file
Scope of the unit
single prompt
Primary audience
prompt engineer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
yes (components/templates)
Composition mechanism
tag nesting + stylesheet separation
Ships a library of parts
partial (component set)
User-defined abstractions
yes: reusable components and stylesheet rules
Semantic (model-executed) macros
no
Where an extension is written
TypeScript SDK — new tags cannot be added in .poml
Host plugin points
TS component functions

Output & runtime

Produces a durable artifact
no built-in export; SDK write(ir) returns a string the caller can save
Executes the source
yes
Tools / external code
yes (tool defs)
Output contracts / validation
yes (schema)
Provenance / audit trail
limited
Built-in prompting patterns
no

Authoring experience

Helps readability
yes (structured, HTML-like)
Interacts with the author
no
Adoption & status
4,861 stars; active

PromptL

Markup & file formatsLatitudegithub.com/latitude-dev/promptl

Form & source

Separate language entirely?
yes (own compiler)
Markup language?
yes (MD-ish + XML role tags)
Library / framework?
compiler lib (WASM)
Nature of the source
MD prose + <user>/<step> tags
Where the source lives
repo file
Scope of the unit
single prompt + steps
Primary audience
prompt engineer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic (Jinja-like)
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
yes (<prompt path=.. arg=..>)
Composition mechanism
textual partial with args
Ships a library of parts
no
User-defined abstractions
partial: <prompt path=.. arg=..> partials
Semantic (model-executed) macros
no
Where an extension is written
prompt files
Host plugin points
no

Output & runtime

Produces a durable artifact
no (emits JSON messages)
Executes the source
via Latitude platform
Tools / external code
yes (via platform)
Output contracts / validation
no
Provenance / audit trail
platform-side
Built-in prompting patterns
partial (<step> chaining)

Authoring experience

Helps readability
yes (closest prose feel)
Interacts with the author
no
Adoption & status
Latitude; ~99 stars; last push Feb 2026, low activity

Prompty

Markup & file formatsMicrosoftgithub.com/microsoft/prompty

Form & source

Separate language entirely?
no
Markup language?
yes (MD + YAML frontmatter)
Library / framework?
runtimes (Py/TS) + VS Code ext
Nature of the source
.prompty: frontmatter + role-marked MD
Where the source lives
repo file
Scope of the unit
single prompt
Primary audience
app developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic (Jinja2/Mustache)
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time (execution only)
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
partial: kind: prompty tool lets one .prompty invoke another; no template-level include
Composition mechanism
cross-file only through tool invocation
Ships a library of parts
no
User-defined abstractions
via the template engine (Jinja2 macros where supported)
Semantic (model-executed) macros
no
Where an extension is written
host code
Host plugin points
yes: invoker registry for renderers, parsers and executors

Output & runtime

Produces a durable artifact
no prompt file; every run must write a .tracy JSON trace
Executes the source
yes (invoke, F5 in VS Code)
Tools / external code
yes (tools: function/MCP/OpenAPI)
Output contracts / validation
input schema only
Provenance / audit trail
traces (.tracy) in VS Code
Built-in prompting patterns
no

Authoring experience

Helps readability
yes (readable MD body)
Interacts with the author
no
Adoption & status
1,238 stars; active; v2 alpha

BAML

Typed DSLs & decodingBoundaryMLgithub.com/BoundaryML/baml

Form & source

Separate language entirely?
yes (TS-like DSL)
Markup language?
no
Library / framework?
compiler + generated clients
Nature of the source
.baml function/type declarations
Where the source lives
repo file
Scope of the unit
typed LLM function
Primary audience
developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
yes (types + functions)
Composition mechanism
language-level functions/types
Ships a library of parts
partial
User-defined abstractions
yes: functions, classes and template_string
Semantic (model-executed) macros
no
Where an extension is written
.baml files, but the grammar is fixed
Host plugin points
generators for target languages

Output & runtime

Produces a durable artifact
no (generates client code)
Executes the source
yes
Tools / external code
yes
Output contracts / validation
yes (post-hoc resilient parsing)
Provenance / audit trail
yes (via generated code)
Built-in prompting patterns
no

Authoring experience

Helps readability
partial (code, not prose)
Interacts with the author
no
Adoption & status
BoundaryML; ~8.7k stars; pushed today

Guidance

Typed DSLs & decodingMicrosoftgithub.com/guidance-ai/guidance

Form & source

Separate language entirely?
no (Python DSL)
Markup language?
no
Library / framework?
library
Nature of the source
Python program with guidance grammar
Where the source lives
in code
Scope of the unit
single generation
Primary audience
developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic + token fast-forwarding
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; constrained decoding narrows but does not fix output

Reuse & extension

Reuse of prompt pieces
yes (guidance functions)
Composition mechanism
function composition
Ships a library of parts
no
User-defined abstractions
yes: @guidance functions compose
Semantic (model-executed) macros
no
Where an extension is written
Python
Host plugin points
model backends

Output & runtime

Produces a durable artifact
no
Executes the source
yes
Tools / external code
yes
Output contracts / validation
yes (grammars/regex)
Provenance / audit trail
no
Built-in prompting patterns
partial

Authoring experience

Helps readability
no
Interacts with the author
no
Adoption & status
21,698 stars; active

LMQL

Typed DSLs & decodingETH Zurichgithub.com/eth-sri/lmql

Form & source

Separate language entirely?
yes (query language)
Markup language?
no
Library / framework?
Python-embedded runtime
Nature of the source
.lmql query with constraints
Where the source lives
repo file
Scope of the unit
single query
Primary audience
researcher

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic + constrained decoding
Deterministic transformations
yes
Optimizes the prompt?
no (constrains, not optimizes)
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; constrained decoding narrows but does not fix output

Reuse & extension

Reuse of prompt pieces
partial (functions)
Composition mechanism
Python composition
Ships a library of parts
no
User-defined abstractions
partial: Python functions
Semantic (model-executed) macros
no
Where an extension is written
Python
Host plugin points
decoders and backends

Output & runtime

Produces a durable artifact
no
Executes the source
yes
Tools / external code
yes
Output contracts / validation
yes (decoding constraints)
Provenance / audit trail
no
Built-in prompting patterns
partial

Authoring experience

Helps readability
no
Interacts with the author
no
Adoption & status
4,201 stars; dormant since 2025-05

Priompt

Typed DSLs & decodingAnyspheregithub.com/anysphere/priompt

Form & source

Separate language entirely?
no
Markup language?
yes (JSX)
Library / framework?
library
Nature of the source
JSX components with priorities
Where the source lives
in code
Scope of the unit
context window
Primary audience
TS developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic
Deterministic transformations
yes
Optimizes the prompt?
yes: context-budget fitting (binary search)
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
yes (JSX components)
Composition mechanism
component composition
Ships a library of parts
no
User-defined abstractions
yes: JSX components
Semantic (model-executed) macros
no
Where an extension is written
TypeScript / JSX
Host plugin points
no

Output & runtime

Produces a durable artifact
no
Executes the source
yes
Tools / external code
partial
Output contracts / validation
no
Provenance / audit trail
no
Built-in prompting patterns
no

Authoring experience

Helps readability
partial
Interacts with the author
no
Adoption & status
2,845 stars; near-dormant

TypeChat

Typed DSLs & decodingMicrosoftgithub.com/microsoft/TypeChat

Form & source

Separate language entirely?
no
Markup language?
no
Library / framework?
library
Nature of the source
TypeScript interfaces
Where the source lives
in code
Scope of the unit
typed request
Primary audience
TS developer

Transformation

Does a model write the prompt text?
no (LLM repairs output, not prompt)
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic (type -> text)
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
yes (TS types)
Composition mechanism
type composition/unions
Ships a library of parts
no
User-defined abstractions
yes: TypeScript types
Semantic (model-executed) macros
no
Where an extension is written
TypeScript
Host plugin points
no

Output & runtime

Produces a durable artifact
no
Executes the source
yes
Tools / external code
partial
Output contracts / validation
yes (type validation + repair)
Provenance / audit trail
no
Built-in prompting patterns
no

Authoring experience

Helps readability
no
Interacts with the author
no
Adoption & status
8,675 stars; active

AdalFlow

Form & source

Separate language entirely?
no
Markup language?
no
Library / framework?
framework
Nature of the source
Python components
Where the source lives
in code
Scope of the unit
pipeline
Primary audience
ML engineer

Transformation

Does a model write the prompt text?
partly: the textual-gradient pass has an LLM rewrite the prompt
What decides the final text
a metric scored over a dataset
Templating model
n/a
Deterministic transformations
yes
Optimizes the prompt?
yes: text-grad + few-shot bootstrap combined
Needs trainset / metric
YES: dataset + metric
When LLM cost is paid
optimization run + run time
Reproducible output
no — search is stochastic and rerunning yields a different prompt

Reuse & extension

Reuse of prompt pieces
yes
Composition mechanism
Python
Ships a library of parts
no
User-defined abstractions
yes: Python components
Semantic (model-executed) macros
no
Where an extension is written
Python
Host plugin points
custom optimizers

Output & runtime

Produces a durable artifact
no
Executes the source
yes
Tools / external code
yes
Output contracts / validation
yes
Provenance / audit trail
partial
Built-in prompting patterns
partial

Authoring experience

Helps readability
no
Interacts with the author
no
Adoption & status
4,188 stars; moderately active

DSPy

OptimizersStanfordgithub.com/stanfordnlp/dspy

Form & source

Separate language entirely?
no
Markup language?
no
Library / framework?
framework
Nature of the source
Python Signatures + Modules
Where the source lives
in code
Scope of the unit
pipeline/program
Primary audience
ML engineer

Transformation

Does a model write the prompt text?
partly: COPRO/MIPROv2 have an LLM write candidate instructions
What decides the final text
a metric scored over a dataset
Templating model
n/a (constructs prompts programmatically)
Deterministic transformations
yes
Optimizes the prompt?
yes: bootstrap few-shot demos, rewrite instructions, some fine-tune
Needs trainset / metric
varies: COPRO/MIPROv2 need trainset + metric; BootstrapFewShot takes unlabelled inputs, metric optional
When LLM cost is paid
optimization run + run time
Reproducible output
no — search is stochastic and rerunning yields a different prompt

Reuse & extension

Reuse of prompt pieces
yes (Modules)
Composition mechanism
Python module composition
Ships a library of parts
partial (optimizer library)
User-defined abstractions
yes: Modules and Signatures
Semantic (model-executed) macros
no — the model writes instructions, but you cannot declare a semantic construct
Where an extension is written
Python
Host plugin points
custom modules and optimizers

Output & runtime

Produces a durable artifact
no prompt file; saved JSON does contain the compiled instruction text
Executes the source
yes
Tools / external code
yes
Output contracts / validation
yes (Signatures)
Provenance / audit trail
partial (saved program)
Built-in prompting patterns
yes (ReAct, CoT modules built in)

Authoring experience

Helps readability
no (prompts largely implicit)
Interacts with the author
no
Adoption & status
36,475 stars; extremely active

SAMMO

OptimizersMicrosoftgithub.com/microsoft/sammo

Form & source

Separate language entirely?
no
Markup language?
partial (SAMMO Express reads Markdown)
Library / framework?
library
Nature of the source
Python prompt program (or MD parsed structurally)
Where the source lives
in code
Scope of the unit
prompt program
Primary audience
researcher

Transformation

Does a model write the prompt text?
partly: Paraphrase/Rewrite mutators have an LLM rewrite sections
What decides the final text
a metric scored over a dataset
Templating model
deterministic parsing (mistletoe, no LLM)
Deterministic transformations
yes
Optimizes the prompt?
yes: beam search over mutation operators (paraphrase/rewrite)
Needs trainset / metric
YES: trainset + accuracy scorer
When LLM cost is paid
search time + run time
Reproducible output
no — search is stochastic and rerunning yields a different prompt

Reuse & extension

Reuse of prompt pieces
yes (Sections/Paragraphs)
Composition mechanism
structural tree composition
Ships a library of parts
no
User-defined abstractions
yes: components and mutators
Semantic (model-executed) macros
no
Where an extension is written
Python
Host plugin points
custom mutators

Output & runtime

Produces a durable artifact
partial: best prompt program via save()/save_json(), not a plain-text prompt
Executes the source
yes
Tools / external code
partial
Output contracts / validation
no
Provenance / audit trail
no
Built-in prompting patterns
no

Authoring experience

Helps readability
partial
Interacts with the author
no
Adoption & status
Microsoft Research; ~760 stars; dormant (last push Jun 2025)

TextGrad

Form & source

Separate language entirely?
no
Markup language?
no
Library / framework?
library
Nature of the source
Python Variables with requires_grad
Where the source lives
in code
Scope of the unit
variable/prompt
Primary audience
researcher

Transformation

Does a model write the prompt text?
YES: an LLM rewrites the prompt text every step
What decides the final text
the model's own critique, no dataset needed
Templating model
n/a
Deterministic transformations
yes
Optimizes the prompt?
yes: LLM critique as a textual gradient rewrites the prompt
Needs trainset / metric
loss/eval function required; examples optional
When LLM cost is paid
optimization loop + run time
Reproducible output
no — search is stochastic and rerunning yields a different prompt

Reuse & extension

Reuse of prompt pieces
no
Composition mechanism
Python
Ships a library of parts
no
User-defined abstractions
partial: Python
Semantic (model-executed) macros
no
Where an extension is written
Python
Host plugin points
custom loss functions and engines

Output & runtime

Produces a durable artifact
partial (optimized string extractable)
Executes the source
yes
Tools / external code
partial
Output contracts / validation
no
Provenance / audit trail
no
Built-in prompting patterns
no

Authoring experience

Helps readability
no
Interacts with the author
no
Adoption & status
3,674 stars; last push 2025-07

Ell

Prompt-as-codeMadcowDgithub.com/MadcowD/ell

Form & source

Separate language entirely?
no
Markup language?
no
Library / framework?
library
Nature of the source
Python fn; docstring = system prompt
Where the source lives
in code
Scope of the unit
single LMP
Primary audience
Python developer

Transformation

Does a model write the prompt text?
no (LLM only writes version commit msgs)
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic (f-strings)
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
yes (Python fns)
Composition mechanism
Python function composition
Ships a library of parts
no
User-defined abstractions
yes: Python functions
Semantic (model-executed) macros
no
Where an extension is written
Python
Host plugin points
no

Output & runtime

Produces a durable artifact
no (versions in local SQLite store)
Executes the source
yes
Tools / external code
yes
Output contracts / validation
no
Provenance / audit trail
yes (content-hash versioning)
Built-in prompting patterns
no

Authoring experience

Helps readability
partial
Interacts with the author
no
Adoption & status
5,872 stars; stalled since 2025-06

Instructor / Mirascope / Magentic / Marvin

Prompt-as-codevariousgithub.com/567-labs/instructor

Form & source

Separate language entirely?
no
Markup language?
no
Library / framework?
libraries
Nature of the source
Python decorators + f-strings + Pydantic
Where the source lives
in code
Scope of the unit
typed call
Primary audience
Python developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
via Python only
Composition mechanism
Python function composition
Ships a library of parts
no
User-defined abstractions
yes: Python functions and Pydantic models
Semantic (model-executed) macros
no
Where an extension is written
Python
Host plugin points
provider hooks

Output & runtime

Produces a durable artifact
no
Executes the source
yes
Tools / external code
yes
Output contracts / validation
yes (Pydantic validation + retry)
Provenance / audit trail
no
Built-in prompting patterns
no

Authoring experience

Helps readability
partial
Interacts with the author
no
Adoption & status
13.7K / 1.5K / 2.4K / 6.2K stars; mostly active

Jinja2 (baseline)

Prompt-as-codePalletsgithub.com/pallets/jinja

Form & source

Separate language entirely?
yes (template lang)
Markup language?
yes (template markup)
Library / framework?
library
Nature of the source
.j2 template text
Where the source lives
repo file
Scope of the unit
text fragment
Primary audience
any developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
none
Reproducible output
yes — pure text substitution, no model involved

Reuse & extension

Reuse of prompt pieces
yes (include, macro, extends)
Composition mechanism
textual include/inheritance/macros
Ships a library of parts
no (generic, not prompt-specific)
User-defined abstractions
yes: macros with arguments, include, extends/block
Semantic (model-executed) macros
no
Where an extension is written
template files
Host plugin points
custom filters, tests and extensions (Python)

Output & runtime

Produces a durable artifact
yes (renders to text file)
Executes the source
no
Tools / external code
no
Output contracts / validation
no
Provenance / audit trail
no
Built-in prompting patterns
no

Authoring experience

Helps readability
partial
Interacts with the author
no
Adoption & status
de-facto default

LangChain / LCEL + Hub

Prompt-as-codeLangChaingithub.com/langchain-ai/langchain

Form & source

Separate language entirely?
no
Markup language?
no
Library / framework?
framework
Nature of the source
Python/JS PromptTemplate objects
Where the source lives
in code or hosted Hub
Scope of the unit
chain/agent
Primary audience
developer

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic (f-string/Jinja2)
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
yes (partial(), Hub pull)
Composition mechanism
LCEL pipe operator
Ships a library of parts
yes (LangSmith Hub registry)
User-defined abstractions
yes: runnables and chains
Semantic (model-executed) macros
no
Where an extension is written
Python / JS
Host plugin points
very large integration surface

Output & runtime

Produces a durable artifact
no (Hub objects, not files)
Executes the source
yes
Tools / external code
yes
Output contracts / validation
partial (parsers)
Provenance / audit trail
LangSmith tracing
Built-in prompting patterns
yes (ReAct agents built in)

Authoring experience

Helps readability
no
Interacts with the author
no
Adoption & status
143,015 stars; extremely active

Semantic Kernel

Form & source

Separate language entirely?
no
Markup language?
partial (template files)
Library / framework?
SDK
Nature of the source
code or .txt/.yaml/.prompty files
Where the source lives
repo file or code
Scope of the unit
agent/skill
Primary audience
enterprise developer

Transformation

Does a model write the prompt text?
no (planners decompose steps, not prompts)
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic (Jinja2/Handlebars/Liquid)
Deterministic transformations
yes
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
yes (plugins bundle functions)
Composition mechanism
call kernel fn inside template {{ns.fn}}
Ships a library of parts
partial (plugin ecosystem)
User-defined abstractions
yes: plugins bundle functions, callable from a template as {{ns.fn}}
Semantic (model-executed) macros
no
Where an extension is written
host code plus prompt files
Host plugin points
yes: plugins, planners, connectors

Output & runtime

Produces a durable artifact
no
Executes the source
yes
Tools / external code
yes (plugins, function calling)
Output contracts / validation
partial
Provenance / audit trail
partial
Built-in prompting patterns
partial (planners)

Authoring experience

Helps readability
partial
Interacts with the author
no
Adoption & status
28,392 stars; very active

Langfuse / PromptLayer / Humanloop / Braintrust / Helicone / Portkey / Agenta

Hosted platformsvariousgithub.com/langfuse/langfuse

Form & source

Separate language entirely?
no
Markup language?
no
Library / framework?
SaaS + SDK
Nature of the source
prompt rows in hosted DB, edited in UI
Where the source lives
hosted database
Scope of the unit
single prompt
Primary audience
PM / prompt ops

Transformation

Does a model write the prompt text?
no
What decides the final text
the author — the tool only substitutes text
Templating model
deterministic ({{var}} interpolation)
Deterministic transformations
yes
Optimizes the prompt?
partial (Langfuse experiments; Opik optimizers need datasets)
Needs trainset / metric
only for optimizer features
When LLM cost is paid
run time
Reproducible output
render is deterministic; model output still varies

Reuse & extension

Reuse of prompt pieces
no
Composition mechanism
none (no partials/includes anywhere)
Ships a library of parts
no
User-defined abstractions
no
Semantic (model-executed) macros
no
Where an extension is written
n/a
Host plugin points
SDK hooks

Output & runtime

Produces a durable artifact
no (fetched at run time)
Executes the source
yes
Tools / external code
partial
Output contracts / validation
via separate eval tooling
Provenance / audit trail
yes (strong: traces, versions, evals)
Built-in prompting patterns
no

Authoring experience

Helps readability
partial (UI editor)
Interacts with the author
yes (UI editing by non-engineers)
Adoption & status
Langfuse 32K, Helicone 6K; Pezzo dormant

Amazon Kiro

Spec-driven developmentAWSkiro.dev

Form & source

Separate language entirely?
no
Markup language?
no (generates MD artifacts)
Library / framework?
IDE product
Nature of the source
conversational intent + committed .kiro/steering/*.md
Where the source lives
chat + committed steering files
Scope of the unit
whole feature
Primary audience
developer

Transformation

Does a model write the prompt text?
YES: LLM expands prompt into full spec
What decides the final text
the model, from one intent plus a project-wide context file
Templating model
n/a
Deterministic transformations
no
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
spec generation (per phase) + implementation
Reproducible output
no — conversational, rerunning yields a different spec

Reuse & extension

Reuse of prompt pieces
no cross-spec imports; steering files apply workspace-wide
Composition mechanism
phased: requirements -> design -> tasks
Ships a library of parts
no
User-defined abstractions
partial: steering files and hooks
Semantic (model-executed) macros
partial: steering text is instruction the model reads
Where an extension is written
config + Markdown steering files
Host plugin points
hooks, MCP

Output & runtime

Produces a durable artifact
YES (requirements.md, design.md, tasks.md)
Executes the source
yes
Tools / external code
yes (hooks, agent)
Output contracts / validation
partial (EARS acceptance criteria)
Provenance / audit trail
no
Built-in prompting patterns
no

Authoring experience

Helps readability
yes
Interacts with the author
yes (approval gates per phase); steering files persist author conventions
Adoption & status
past preview; paid tiers (Pro/Pro+/Pro Max/Power)

GitHub Spec Kit

Spec-driven developmentGitHubgithub.com/github/spec-kit

Form & source

Separate language entirely?
no
Markup language?
no (generates MD artifacts)
Library / framework?
CLI + slash commands
Nature of the source
ephemeral chat prompt seeds it, then committed spec.md drives every later phase
Where the source lives
chat prompt + committed constitution.md and spec.md
Scope of the unit
whole feature/app
Primary audience
developer

Transformation

Does a model write the prompt text?
YES: LLM elaborates a short intent into a long spec
What decides the final text
the model, from one intent plus a project-wide context file
Templating model
n/a (conversational)
Deterministic transformations
no
Optimizes the prompt?
no
Needs trainset / metric
no
When LLM cost is paid
spec generation (multi-step) + implementation
Reproducible output
no — conversational, rerunning yields a different spec

Reuse & extension

Reuse of prompt pieces
no cross-spec imports; constitution.md applies project-wide
Composition mechanism
sequential: spec -> plan -> tasks
Ships a library of parts
partial (138 community extensions)
User-defined abstractions
partial: slash-command extensions
Semantic (model-executed) macros
partial: a custom command is natural-language instruction run by the agent
Where an extension is written
command templates (Markdown)
Host plugin points
extensions; 35 agent integrations

Output & runtime

Produces a durable artifact
YES: constitution.md, spec.md, plan.md, research.md, data-model.md, contracts/, quickstart.md, tasks.md
Executes the source
yes (/speckit.implement)
Tools / external code
yes (agent tools)
Output contracts / validation
no
Provenance / audit trail
partial
Built-in prompting patterns
no

Authoring experience

Helps readability
yes (outputs are readable MD)
Interacts with the author
yes (interactive, multi-turn)
Adoption & status
GitHub-backed; ~124.7k stars; pushed today

The name: who else says promptlet

The tables above compare mechanisms. This one compares the word, which is a separate question and a fair one to ask. WeaveMark spells its unit promplet; several other people arrived at promptlet independently, and one arrived at the identical spelling. None is doing the same thing, but each was here too and deserves acknowledgement.

  1. Promptletpromptletriddles-in-the-dark
    dormant since Oct 2024; 1 star

    Their unitA "Promptlet Artifact" — a reusable, templated prompt unit with variable substitution.

    Composesyes — deterministic

    The closest kindred idea, and the oldest. It has "Composed Promptlets": ordered collections of artifacts with header, body and footer sections. That is genuine part-based composition, and it predates WeaveMark's development — though it assembles by ordered concatenation and variable substitution rather than by meaning.

  2. Prompletpromplet (exact)isshiki
    active; v1.0.0, Apache-2.0

    Their unitA stored reusable prompt on a tray palette button.

    Composesno

    The only project using the identical spelling, without the T. A Windows WPF prompt palette: up to ten groups of ten prompts in prompts.json, pasted by hotkey. The same word for an entirely different object — a clipboard palette rather than a language.

  3. PromptletpromptletJosh Cohenzadeh
    site live; App Store listing gone

    Their unitA stored prompt snippet inserted into any AI chat from a command palette.

    Composesno

    The author's own description is "basically just a glorified text snippet manager". Shown on Hacker News twice in October 2025.

  4. Promptlets: The Full How-to GuidepromptletBreaking Rocks
    live, but JavaScript-only

    Their unitA unit of prompt reuse and structure (definition not quotable — see note).

    Composesunknown

    A client-rendered Notion document that the Wayback Machine has never captured, so its definition cannot be quoted or archived here.

  5. Promptlet (Midjourney sense)promptletGeeky Curiosity
    active newsletter

    Their unitA single weighted section of a Midjourney multi-prompt, separated by :: — e.g. dog::1.

    Composesno — the model blends them

    A different sense of the word entirely, and a coinage by this newsletter: Midjourney's own documentation says "multi-prompt" and "prompt section", never "promptlet".

  6. PromptLet templatespromptletmjantos
    templates public; the app itself unreleased

    Their unitA categorised prompt template with {TOPIC}/{CONTEXT} placeholders.

    Composespartial — variables only

    A community template library for an unreleased "PromptLet" application; promptlet.app is a parked placeholder page.

  7. Promptlet (name only)promptletonurtas1993 · timurkhakhalev · chunqiuyiyu · tyang-gauntlet
    mixed

    Their unitNo unit concept — the word is used purely as a product name.

    Composesno

    Four further repositories take the name without the idea: a desktop LLM client, a chat interface, an AutoHotkey tool for Windows Terminal shell prompts (a different meaning of "prompt" altogether), and an abandoned VS Code stub.

Where the name is unclaimed. No package called promptlet or promplet exists on npm, PyPI or crates.io; no arXiv paper uses the term; and no documentation from Google, Microsoft, OpenAI or Anthropic uses it as a term of art. The word is a scattering of small independent coinages, not an established term with an owner.

What was excluded, and why

One rule was applied consistently: a project is in scope only if it is concerned with authoring or generating prompt text. Five otherwise-adjacent families fail that test, so they were removed from every table rather than scored poorly — a low score would have implied they were attempting the same task and failing at it.

Method

Every claim here was checked against a primary source: the project's repository, specification, documentation or source code. Star counts and activity were read from the GitHub API in July 2026. Grouped rows cover projects that classify identically. The WeaveMark row was verified against its own source rather than from memory, and the classification is generated directly from the underlying data table, so the tables and the prose cannot drift apart.

This is a comparison written by an interested party. It is offered with the reasoning and the weightings exposed so that it can be argued with: the similarity ranking is a declared weighted sum, the two costs of the approach are stated alongside its advantages, and every project links to its own source.