Liquid templates as a built-in action
Compose using Liquid renders a Liquid template inside a Logic Apps Standard workflow. It is a built-in (service provider) connector, installed as a NuGet package, so it runs in the Logic App itself: no integration account and no extra Azure resources.
| Mode | inputFormat | outputFormat | result |
|---|---|---|---|
| JSON to JSON | json | json | The parsed, strictly checked JSON value: later actions read its fields |
| JSON to text | json | text | The exact text: CSV, fixed-width records, HTML, XML, SOAP |
| XML to JSON | xml | json | The parsed JSON value |
| XML to text | xml | text | The exact text |
What it adds to Liquid
| Extension | What it does |
|---|---|
{% csharp %} and CallCSharp | One block of C# helper methods at the top of the template, compiled with Roslyn and called as a filter |
CallFunction | Posts a value to an HTTP Azure Function that the operator approved, and returns its answer |
ToJson | Writes any value as one JSON token: strings escaped, numbers exact, null as null |
XmlValue and XmlValues | The first or every value an XPath selects in XML content, with namespace prefixes from the action |
Compared with the Logic Apps Liquid action
| Compose using Liquid | Logic Apps Transform JSON/XML using Liquid | |
|---|---|---|
| Templates | Deployed (Artifacts/LiquidTemplates) or inline in the workflow, with partials | Maps in the project or an integration account |
| XML input | Read with XPath and explicit namespace prefixes | Converted to JSON first, then navigated as JSON |
| JSON output | Exactly one valid JSON value, or the action fails | Parsed as JSON |
| Unknown filters and render errors | Fail the action with UnknownFilter or a stable error code | Passed through, or written into the output as text |
| Custom logic | C# helpers and Azure Function lookups | Standard filters only |
| Isolation | A supervised worker process, stopped at the deadline | In the Logic Apps host |
Templates that use csharp, CallCSharp, CallFunction, ToJson, XmlValue or XmlValues don't run in Microsoft's Liquid action or other Liquid engines. XML templates written for Microsoft's action, which navigate converted JSON, need rewriting with XmlValue.
How it runs
- Supervised workers. Renders run in a small pool of worker processes. When the action's deadline passes, the worker is stopped and replaced: a helper that never returns cannot hang the Logic App.
- Compiled once. Each worker caches compiled C# helpers by template hash, so later runs take milliseconds.
- Safe by default. C# is off until both the app and the action allow it; Function endpoints come only from an operator-owned registry; DTDs are refused; error messages never contain payload data.
C# helpers are application code, reviewed like any other code you deploy. The worker processes enforce deadlines and contain crashes; they are not a security sandbox.