I'm the sole code contributor of POML, maybe except for Codex and cc. I think I've found where all that GitHub stars suddenly came from. :)
I'm from a small group under Microsoft Research. POML originally came from a research idea that Prompt should have a view layer like the traditional MVC architecture in the frontend system. The view layer should take care of the data, the styles and rendering logic, so that the user no longer needs to care how some table needs to be rendered, how to present few-shot examples, how to reformat the whole prompt with another syntax (e.g., from markdown to XML).
I have to admit that I spent so much time on making POML work well with VSCode, building all the auto completion, preview, hover stuff. The time is long enough that the codebase is almost becoming a monster for an individual developer to handle. The outside environment is also changing drastically. The rise of Agentic AI, tool calls, response format. The models today are no longer sensitive to small changes in prompt format as they used to. AI-aided programming can simply give you code to read in PDFs, Excels and render them in any style you want. With all that in mind, I used to feel hopeless about POML.
Nevertheless, after several months of working on another projects, I recently noticed that the view layer can be more of just a view layer. With proper user interface (e.g., a VSCode live preview), it can deliver a very smooth experience in prompt debugging, especially in a multi-prompt agent workflow. I also noticed that the "orchestration" idea can go beyond a XML-like code. I'll share more details when I had a tutorial / screenshot to share.
Going through this thread, I saw a lot of thoughts that once went through my mind. We love markdowns. We love template engines like jinja. We need those response formats. I'm thinking what is the missing piece here. I've spend so much time writing prompts and building agents in the past few months. What's my biggest pain points?
I'm quite surprised that the news hit me first before I'm ready to hit the news. If you have tried POML, please send me feedbacks. I'll see what I can do; or maybe we end up not needing a prompt language at all.
throwanem · 1d ago
I guess naïvely, this seems like an enormous amount of tooling for what appears to be a relatively straightforward XML transformation. Why all this...this? Could it not be at all more simple? As is, while the idea on display is tremendously provocative, I feel I risk considerable time and effort learning to understand this implementation well enough to know whether to do so was wise.
Also, please good heavens hire a narrator for the demo video. That AI voice sucks in an extremely uncanny-valley way, as if the speaker is one second from collapsing of benzodiazepine overdose, and it makes me like your work less well with every word.
valenterry · 1d ago
> I'm thinking what is the missing piece here
First, it's cool that you work on it. Creating a new language is not an easy task.
I would suggest to try to stand on the shoulders of giants instead of trying to come up with a completely new thing.
Have a look at dhall: https://dhall-lang.org/ - it is a language that was created for cases like yours. Or, if you want to make POML a fully fledged language (and turing complete, with for-loops etc.) then it would be advised to use an existing programming language and create a DSL-like library.
See react. React did it right JSX. It might look like XML, but that's just the syntax part. You can create components in pure javascript syntax, because JSX is just the wrapper. You could do the same with POML. That will future proof it and relieve you from a lot of headache when people will ask you for more features, but without breaking backwards compat.
skim_milk · 1d ago
Awesome idea, for some reason I've never thought about using MVC patterns with LLM prompts. I got carried away and tried implementing this with ASP.NET Razor components, imagining the possibilities with this pattern.
Kuyawa · 1d ago
Can we replace <output-format> for just <output> before it's too late? Sorry but my OCD just tingled a bit.
N2yhWNXQN3k9 · 1d ago
> Sorry but my OCD just tingled a bit.
A compulsion to give design notes without any reasoning on something you've just heard of?
jiangdayuan · 13h ago
I think you're misreading the comment. The reasoning isn't missing, it's implied by decades of good design principles: simpler is better. A normal developer would intuitively prefer <output>, so the question isn't "Why suggest <output>?" but rather "Why is <output-format> necessary?"
And in the context of LLMs, this isn't just a matter of aesthetics. More verbose tags mean more tokens, and more tokens mean higher costs. It's a perfectly valid and practical piece of feedback.
watersb · 1d ago
> A compulsion to give design notes without any reasoning on something you've just heard of?
Me! _o/
Compulsion to give feedback before thinking!
So happy to be here.
golly_ned · 1d ago
It strikes me as a massive anti-pattern to have one developer be the sole contributor of an open-source project sponsored by a $3T company. It doesn't speak well to its longevity or the strength of the sponsorship Microsoft's putting behind it in practice.
mh- · 1d ago
I hope everyone realizes these comments just discourage companies from letting their employees do their work in the open, in collaboration with the community.
If you want them to wait until everything is super ready (or dead) and then "throw it over the fence" into their public GitHub org, keep it up.
lf-non · 1d ago
There is a difference between a product that a company pushes out as part of its business roadmap with a commercial strategy around it vs. an experimental research project that a single developer takes up on their own initiative.
It is great that they were allowed to open source it.
nine_k · 1d ago
Does anybody find it mildly ironic that LLM prompts, which are intended to be plain informal text, accumulate more and more structure around them, including a markup language in question?
This is not unlike the way the language of legal documents is highly formulaic, structured, and codified. When precise meaning is desirable, firmer structures tend to arise. With a bit more time, proper code languages may start to appear, to help tell LLMs exactly what we mean or want.
dragonwriter · 1d ago
This markup language isn't structure for prompts for LLMs, it is structure for conventional programs that need to construct prompts for LLMs.
Conventional programs using structured templates with deterministic rules to construct output is... not new.
(Jinja templates have been widely used for communicating structure to assemble conversation history, tool calls, etc., into promots for open models for a while.)
creatonez · 1d ago
It is both. The structure does actually help LLMs. Interestingly, LLMs seem to respond well to the repetition of XML-like structure (that is, the presence of closing tags), even if it's just an ad-hoc constructed language with no real schema.
Terretta · 21h ago
Not sure if changed with GPT-5, but Claude was explicitly tuned to leverage XML-like tags, while GPT-3.5 and 4 seemed to prefer Markdown-like structure.
You may also want to check out BAML https://github.com/BoundaryML/baml - a DSL for prompt templates that are literally treated like functions.
the prompt.yaml format (which this project uses) suffers from the fact that it doesn't address the structured outputs problem. Writing schemas in yaml/xml is insanely painful. But BAML just feels like writing typescript types.
I'm one of the developers!
LudwigNagasena · 1d ago
<let name="objVar" type="object" value="{{ { key: 'value' } }}"/>
<item for="item in ['apple', 'banana', 'cherry']">{{item}}</item>
<p if="isVisible">This paragraph is visible.</p>
This looks like JSX but worse. What's wrong with throwing a bit of imperative syntax into a DSL if you need imperativity? It seems unnecessary to put code into strings.
Does XML allow you to define for-loops inside <bracketed> items then reference the loop variables inside {{template vars}}? https://youtu.be/b9WDcFsKixo?t=223
I guess it doesn't prevent you from doing such things, but... well... there's some eyebrow-raising shoehorning in this one.
valenterry · 1d ago
Yes it does. Apache ant did that... many many years ago.
Creating a new language that looks like XML but is not XML is... kind of unforgivable. I'd go as far and call it amateur-like. We already have good configuration languages (such as dhall-lang) and when more power is needed, then just use a real language and provide a DSL inside of it.
epolanski · 2d ago
Maybe it's not fully XML compliant.
Anyway quite an interesting project, XML's a better fit for "programmable" data.
gavinray · 2d ago
It has self-closing tags, which you can see in the repo screenshot, so you're correct.
actionfromafar · 2d ago
But why... standards are good, eveyone should have one, I guess.
PeterStuer · 2d ago
XML, for those born after 1990, you could have well said COBOL or FORTRAN, something gramps used to mention.
AbuAssar · 2d ago
it is concerning that Microsoft didn't provide SDK for its own C#/.Net regarding this new technology, only nodejs and python, which says alot!
rahkiin · 2d ago
It just says the current agent ecosystem is focused on python and javascript stacks?
ajdude · 1d ago
Microsoft doesn't even use their own SDK for their apps anymore, it's all electron.
valenterry · 1d ago
Yeah. I judge the maturity by that. If there's only a javascript/node and python sdk, that means I'll stay far away from it for the time being.
Involution · 1d ago
this looks like a straight rip off of SignalWire’s Prompt Object Model (POM) (from q1-2 2025)
Do you have to install poml via the node or python or is the vscode plugin enough?
baggiponte · 1d ago
How’s this different from xml?
rco8786 · 1d ago
This is interesting but not sure why it needs to be a library
airstrike · 1d ago
The video shows it embedding the content of a docx file
Not sure why you'd use docx but...
hoppp · 1d ago
Because its from microsoft so its compatible with word
airstrike · 1d ago
Yes, I appreciate that fact, but why would I write a prompt in docx
mh- · 1d ago
It clearly (to me) shows that it's providing a docx for background knowledge, the way all of the existing providers allow you to upload a file as part of creating a new prompt. It's in a <document> tag, under a <hint> with a caption attribute that has a value "Background Knowledge".
No one is suggesting you write a prompt in docx..
tannhaeuser · 1d ago
SGML is so back!
stitched2gethr · 2d ago
I'll keep using markdown.
deadbabe · 1d ago
With all these languages for writing better prompts, are we going to end up coming full circle?
OJFord · 1d ago
Our latest model is fully deterministic! The full list of functions you can call to compose your question is available in the docs here.
I'm from a small group under Microsoft Research. POML originally came from a research idea that Prompt should have a view layer like the traditional MVC architecture in the frontend system. The view layer should take care of the data, the styles and rendering logic, so that the user no longer needs to care how some table needs to be rendered, how to present few-shot examples, how to reformat the whole prompt with another syntax (e.g., from markdown to XML).
I have to admit that I spent so much time on making POML work well with VSCode, building all the auto completion, preview, hover stuff. The time is long enough that the codebase is almost becoming a monster for an individual developer to handle. The outside environment is also changing drastically. The rise of Agentic AI, tool calls, response format. The models today are no longer sensitive to small changes in prompt format as they used to. AI-aided programming can simply give you code to read in PDFs, Excels and render them in any style you want. With all that in mind, I used to feel hopeless about POML.
Nevertheless, after several months of working on another projects, I recently noticed that the view layer can be more of just a view layer. With proper user interface (e.g., a VSCode live preview), it can deliver a very smooth experience in prompt debugging, especially in a multi-prompt agent workflow. I also noticed that the "orchestration" idea can go beyond a XML-like code. I'll share more details when I had a tutorial / screenshot to share.
Going through this thread, I saw a lot of thoughts that once went through my mind. We love markdowns. We love template engines like jinja. We need those response formats. I'm thinking what is the missing piece here. I've spend so much time writing prompts and building agents in the past few months. What's my biggest pain points?
I'm quite surprised that the news hit me first before I'm ready to hit the news. If you have tried POML, please send me feedbacks. I'll see what I can do; or maybe we end up not needing a prompt language at all.
Also, please good heavens hire a narrator for the demo video. That AI voice sucks in an extremely uncanny-valley way, as if the speaker is one second from collapsing of benzodiazepine overdose, and it makes me like your work less well with every word.
First, it's cool that you work on it. Creating a new language is not an easy task.
I would suggest to try to stand on the shoulders of giants instead of trying to come up with a completely new thing.
Have a look at dhall: https://dhall-lang.org/ - it is a language that was created for cases like yours. Or, if you want to make POML a fully fledged language (and turing complete, with for-loops etc.) then it would be advised to use an existing programming language and create a DSL-like library.
See react. React did it right JSX. It might look like XML, but that's just the syntax part. You can create components in pure javascript syntax, because JSX is just the wrapper. You could do the same with POML. That will future proof it and relieve you from a lot of headache when people will ask you for more features, but without breaking backwards compat.
A compulsion to give design notes without any reasoning on something you've just heard of?
And in the context of LLMs, this isn't just a matter of aesthetics. More verbose tags mean more tokens, and more tokens mean higher costs. It's a perfectly valid and practical piece of feedback.
Me! _o/
Compulsion to give feedback before thinking!
So happy to be here.
If you want them to wait until everything is super ready (or dead) and then "throw it over the fence" into their public GitHub org, keep it up.
It is great that they were allowed to open source it.
This is not unlike the way the language of legal documents is highly formulaic, structured, and codified. When precise meaning is desirable, firmer structures tend to arise. With a bit more time, proper code languages may start to appear, to help tell LLMs exactly what we mean or want.
Conventional programs using structured templates with deterministic rules to construct output is... not new.
(Jinja templates have been widely used for communicating structure to assemble conversation history, tool calls, etc., into promots for open models for a while.)
https://docs.anthropic.com/en/docs/build-with-claude/prompt-...
the prompt.yaml format (which this project uses) suffers from the fact that it doesn't address the structured outputs problem. Writing schemas in yaml/xml is insanely painful. But BAML just feels like writing typescript types.
I'm one of the developers!
I guess it doesn't prevent you from doing such things, but... well... there's some eyebrow-raising shoehorning in this one.
Creating a new language that looks like XML but is not XML is... kind of unforgivable. I'd go as far and call it amateur-like. We already have good configuration languages (such as dhall-lang) and when more power is needed, then just use a real language and provide a DSL inside of it.
Anyway quite an interesting project, XML's a better fit for "programmable" data.
https://developer.signalwire.com/ai/pom/technical-reference
Not sure why you'd use docx but...
No one is suggesting you write a prompt in docx..