> ## Content Index
> Fetch the complete content index at: https://corti.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Introducing the Prompt Orchestration Markup Language (POML)
- URL: https://corti.com/introducing-the-prompt-orchestration-markup-language-poml/
- Published: 2025-09-01T14:21:46.000Z
- Updated: 2025-09-01T14:21:46.000Z
- Author: Sascha Corti

Prompt Orchestration Markup Language (**POML**) is a novel, [open-source framework developed by Microsoft](https://microsoft.github.io/poml/latest/?ref=corti.com) that brings structured, modular design to prompt engineering for Large Language Models (LLMs), making prompt creation scalable, maintainable, and highly versatile.

## What Is POML?

**POML** is an HTML/XML-inspired markup language created specifically for organizing and orchestrating prompts for LLMs, addressing problems such as unstructured text, data integration complexity, and format sensitivity. By introducing a component-based structure, POML enables developers to break down complex prompt logic into modular parts, embed multiple data types, and decouple prompt logic from presentation.

## Core Features

- **Structured Prompt Markup:** Uses semantic tags such as `<role>`, `<task>`, and `<example>` for logical, modular organization. This promotes readability, reusability, and easier maintenance for intricate prompt pipelines.
- **Comprehensive Data Integration:** Specialized components like `<document>`, `<table>`, and `<img>` embed external files—such as text, spreadsheets, and images—directly into prompt flows with customizable formatting.
- **Decoupled Presentation Styling:** Adopts a CSS-like styling system via `<stylesheet>` definitions and inline attributes, separating what the LLM processes from how prompt content appears.
- **Template Engine:** Built-in templating supports variables (`{{variable}}`), loops (`for` constructs), and conditionals (`if`), making dynamic, data-driven prompt authoring seamless.
- **Development Tooling:** Includes a Visual Studio Code extension with syntax highlighting, context-aware completion, interactive testing, real-time diagnostics, and preview features. SDKs for Node.js (TypeScript) and Python enable streamlined integration into application workflows.

## Technical Impact and Applications

POML’s structured, tag-based approach empowers prompt engineers to:

- **Manage Complexity:** Reduces errors by modularizing logic and presentation, similar to separating HTML and CSS in web development.
- **Scale Workflows:** Supports collaborative development with better version control and reuse of prompt logic across projects.
- **Enhance LLM Performance:** Empirical studies indicate that careful orchestration of both content and format leads to measurable improvements in task accuracy and reproducibility for LLMs.

## Example: Simple POML Prompt

```xml
<role>assistant</role>
<task>Answer the user's question clearly and concisely.</task>
<example>
  <question>{{user_question}}</question>
</example>
```

This structure specifies a system role, task definition, and an example input, with dynamic insertion of a variable.

POML supports rich multimedia, document embedding, bulleted and numbered lists, and powerful templating for iterating over lists. Here are clear examples demonstrating each of these advanced features.[microsoft.github+1](https://microsoft.github.io/poml/latest/language/components/?ref=corti.com)

## Including Multimedia Files

Embed images and audio directly within prompts using their dedicated components:

Parameters like `type` (MIME type) and `alt` (alternative text) enhance presentation and accessibility.[microsoft.github](https://microsoft.github.io/poml/latest/language/components/?ref=corti.com)

## Document Embedding

Documents such as PDFs, DOCX, or CSV files can be referenced within prompts:

```xml
<Document src="manual.pdf" />
<Document src="sample.docx" multimedia="false" />

```

- Use the `multimedia="false"` option to load content as plain text instead of as a binary or multimedia object.

## Lists

Create bulleted or numbered lists with `<list>` and `<item>`:

```xml
<list listStyle="decimal">
  <item>Ensure safety protocols are followed.</item>
  <item>Prepare the workstation.</item>
  <item>Review the checklist before starting.</item>
</list>
```

Supported styles include `star`, `dash`, `plus`, `decimal`, and `latin` for various bullet types.

## Iterating Over Lists

POML’s templating engine allows for dynamic iteration over variable lists:

```xml
<let tasks={["Check sensors", "Initialize pump", "Verify pressure"]} />
<list>
  {{ for task in tasks }}
    <item>{{task}}</item>
  {{ end }}
</list>
```

- This code declares a variable `tasks` as a list and produces a dynamic bullet list with an `<item>` for each element.

These POML examples empower prompt engineers to build rich, data-driven prompts spanning multimedia, structured data, and advanced logic.

## Ecosystem and Tooling

- **VS Code Extension:** Offers syntax highlighting, auto-completion, inline diagnostics, and prompt preview, significantly improving developer productivity.
- **SDKs:** Available for Node.js and Python, making POML easy to integrate into various AI app frameworks.
- **Community Projects:** Projects like `mini-poml-rs` (Rust), `poml-ruby` (Ruby), and active community support contribute to a growing ecosystem.

## Research and Empirical Validation

Peer-reviewed studies and case implementations highlight POML’s positive impact on developer experience, version control, and prompt reliability, especially in complex or data-rich AI application scenarios.

**In summary**, POML brings the discipline of structured authoring, data integration, and dynamic templating to LLM prompt engineering, making advanced applications more robust, maintainable, and efficient.