{"id":50493861,"url":"https://github.com/excelano/paxc","last_synced_at":"2026-06-02T05:03:47.792Z","repository":{"id":352786460,"uuid":"1215460512","full_name":"excelano/paxc","owner":"excelano","description":"A compiler for the pax DSL, producing Power Automate cloud flow definitions","archived":false,"fork":false,"pushed_at":"2026-05-25T13:46:01.000Z","size":392,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T14:28:57.508Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/excelano.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-19T23:54:06.000Z","updated_at":"2026-05-25T13:43:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/excelano/paxc","commit_stats":null,"previous_names":["anderix/paxc","excelano/paxc"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/excelano/paxc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/excelano%2Fpaxc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/excelano%2Fpaxc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/excelano%2Fpaxc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/excelano%2Fpaxc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/excelano","download_url":"https://codeload.github.com/excelano/paxc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/excelano%2Fpaxc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33807006,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-02T05:03:46.924Z","updated_at":"2026-06-02T05:03:47.785Z","avatar_url":"https://github.com/excelano.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# paxc — the pax compiler\n\n`paxc` compiles the **pax** DSL into [Power Automate](https://powerautomate.microsoft.com/) cloud flow definitions. Write terse, readable code; get the verbose `definition.json` that Power Automate expects. Companion interpreter `paxr` runs the same source locally for fast iteration.\n\nFor the full language reference, see [REFERENCE.md](REFERENCE.md).\n\n3.6.0 shipped. Every construct listed in REFERENCE.md is implemented and tested, end-to-end deployment to Power Automate has been validated, and a legacy-format package target lets you import compiled flows directly through the Power Automate portal. Round-trip ingest from real PA exports is meaningfully complete: `paxc --decode \u003cflow.json\u003e` reads an exported PA flow JSON and writes a `.pax` source file plus a `pa/` folder. Variables, Compose, container actions (`if`/`foreach`/`until`/`switch`/`scope`), `on` error-path handlers, `terminate`, and PA expressions including the standard accessors (`triggerBody()`, `triggerOutputs()`, `parameters('X')`, `body('Foo')`, `iterationIndexes('Loop')`, etc.) and slash- or index-style path expressions (`triggerBody()?[\"body/email\"]`, `arr?[0]`) all round-trip to pax source. PA action keys with characters outside pax's identifier rules (e.g. `Send_an_email_(V2)`) are normalized on decode and restored byte-for-byte on re-encode via `pa/flow.json.actionNameMap`. Connectors (`OpenApiConnection`, `OpenApiConnectionWebhook`, `ParseJson`, etc.) stay opaque as `pa \u003cName\u003e` blocks with their bodies in the `pa/` folder — the design endpoint, not a residual gap.\n\n3.0.0 reflected a strategic reframing of the language: round-trip from existing PA flows is now the primary forward direction. Connector bodies, ParseJson, and any non-default trigger live in JSON files next to the source under a `pa/` folder. pax owns the programmable parts (variables, control flow, expressions); files own the PA-specific parts. The `raw{}` escape hatch and the `trigger ...` syntax are gone, replaced by the file convention.\n\n## Why\n\nThe Power Automate browser designer is slow and click-heavy. The underlying flow definition is JSON that's technically hand-editable but structured in ways that fight you: actions are a map keyed by name, dependencies are encoded as a `runAfter` graph, and expressions live inside escaped strings. pax is a small DSL that turns all of that into source code you can actually read and maintain, and `paxc` is the compiler that emits the JSON.\n\nEquivalent pax and JSON for initializing a counter:\n\n```\nvar counter: int = 1\n```\n\n```json\n{\n  \"Initialize_counter\": {\n    \"type\": \"InitializeVariable\",\n    \"inputs\": {\n      \"variables\": [\n        { \"name\": \"counter\", \"type\": \"Integer\", \"value\": 1 }\n      ]\n    },\n    \"runAfter\": {}\n  }\n}\n```\n\nThe source is shorter, and more importantly, the `runAfter` dependency graph is inferred from source order so you never hand-wire it.\n\n## What pax covers\n\nThe language supports typed variables and `let` Compose bindings; assignment and compound assignment; arithmetic, boolean, and string concatenation expressions; member access; `if`/`else if`/`else`, `foreach`, `until`, `switch`, `scope`, `terminate`, and `on \u003cstatus\u003e` error-path handlers; function calls that pass through to Power Automate's expression language; a `pa \u003cName\u003e` primitive for any PA-shaped action whose body lives in `pa/\u003cName\u003e.json` next to the source (connectors, ParseJson, anything PA-designer-shaped); and a `debug()` statement that paxr prints at runtime and paxc strips at compile time.\n\nTriggers are file-based: drop a single `pa/\u003cName\u003e.trigger.json` next to the source to pick the trigger; without one, paxc generates a default manual (\"Button\") trigger. Connection references go in `pa/connectionReferences.json` and end up at the flow's top level on emit.\n\n## Install\n\nThe fastest path on Linux or macOS is the prebuilt-binary installer:\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/excelano/paxc/releases/latest/download/paxc-installer.sh | sh\n```\n\nOn Windows, in PowerShell:\n\n```powershell\npowershell -ExecutionPolicy ByPass -c \"irm https://github.com/excelano/paxc/releases/latest/download/paxc-installer.ps1 | iex\"\n```\n\nThe installer downloads the right tarball for your platform from the GitHub release, verifies its checksum, and drops both `paxc` and `paxr` into `~/.cargo/bin` (or the equivalent on Windows). Releases also ship raw tarballs (`paxc-*.tar.xz` / `.zip`) for manual installation.\n\n### Debian and Ubuntu\n\nIf you've added the Excelano apt repository, paxc is also available as a `.deb`:\n\n```bash\nsudo apt install paxc\n```\n\nTo add the repository (one-time setup):\n\n```bash\ncurl -fsSL https://excelano.com/apt/setup.sh | sudo sh\n```\n\nBoth `paxc` and `paxr` are installed into `/usr/bin/`, with reference docs at `/usr/share/doc/paxc/`. Supported architectures: `amd64`, `arm64`.\n\n### Build from source\n\nRequires Rust (edition 2024, toolchain 1.85+). If you don't have Rust, install it first via [rustup](https://rustup.rs).\n\n```sh\ncargo install --git https://github.com/excelano/paxc\n```\n\nThis builds both `paxc` and `paxr` and places them in `~/.cargo/bin/`. Alternatively:\n\n```sh\ngit clone https://github.com/excelano/paxc\ncd paxc\ncargo build --release\n```\n\nThe binaries will be at `target/release/paxc` and `target/release/paxr`.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexcelano%2Fpaxc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexcelano%2Fpaxc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexcelano%2Fpaxc/lists"}