What Is POML?
Microsoft’s Prompt Orchestration Markup Language (POML) is an open-source,
HTML inspired markup language designed to
bring structure, maintainability, and versatility to prompt engineering for large language models (LLMs). It allows
developers to write prompts using semantic tags like <role>
, <task>
, and <example>
, and to embed richer content
like <document>
, <table>
, and <img>
all while supporting variables, loops, conditionals, and presentation
styling.
Benefits of POML for Prompt Engineering
Structure, Readability, and Reusability
POML uses a logical, tag-based syntax much like HTML, which lets you break down complex prompts into modular, reusable components. This improves readability and makes updates much less error-prone.
Rich Data Integration
Need to reference an image, spreadsheet, or document? POML supports native tags for embedding diverse data types directly into the prompt, giving the LLM richer context and reducing manual text merging.
Decoupled Presentation via CSS-like Styles
POML provides a styling system similar to CSS, enabling you to adjust tone, verbosity, and format presentation without touching the core content logic. This separation helps manage LLM format sensitivity more predictably.
Dynamic Prompt Generation with Templating
With POML’s templating engine—supporting variables ({{ }}
), <let>
definitions, loops, and conditionals you can build
prompts that adapt to different inputs or contexts programmatically.
Dev-Friendly Tooling
POML comes with a Visual Studio Code extension that offers syntax highlighting, autocompletion, live previews, diagnostics, and interactive testing. Plus, SDKs are available for Python and Node.js, TypeScript is coming, making it easy to integrate into your applications.
Empirically Validated
An academic case study shows that POML-based styling variants can yield up to 9× accuracy improvements on table-based reasoning tasks. In another example, developers built a functional LLM-powered prototype in just two days using POML’s structure and tooling. A user study also highlighted its overall usability and workflow improvements.
Summary
Feature | Why It Matters |
---|---|
Modular Structure | Makes prompts easier to read, debug, reuse, and version |
Data Embedding | Allows rich prompts with images, tables, documents |
Styling Control | Lets you tweak tone/formatting without rewriting logic |
Dynamic Logic | Supports conditional or variable-driven prompt behavior |
Tooling Support | Brings IDE-like developer environment to prompt writing |
Empirical Gains | Proven improvements in accuracy and development speed |
POML represents a meaningful step toward bringing software engineering best practices into the world of LLM prompt design—and turning prompt engineering into a scalable, maintainable discipline.
Example 1: Simple Structured Prompt
Instead of sending one big blob of text, POML lets you structure the prompt clearly:
<prompt>
<role>system</role>
<task>
Summarize the following document in 3 bullet points.
</task>
<document>
Climate change is accelerating due to human activity...
</document>
</prompt>
Benefits:
- Easy to see what’s system instruction vs. user input
- document can be swapped dynamically without rewriting the rest
Example 2: Prompt with Variables and Loop
POML supports templating features like let, loops, and variables.
<prompt>
<role>assistant</role>
<let name="cities">London, Paris, Tokyo</let>
<task>
For each city in the list, generate one fun fact:
<for-each items="{{cities}}" var="city">
- {{city}}:
</for-each>
</task>
</prompt>
When rendered, this becomes:
For each city in the list, generate one fun fact:
- London:
- Paris:
- Tokyo:
Benefits:
- Reduces repetition in prompt writing
- Makes prompts dynamic and reusable with different inputs
References