{"id":23729831,"url":"https://github.com/azure/logicappsux","last_synced_at":"2026-05-14T00:03:05.056Z","repository":{"id":62234122,"uuid":"399618999","full_name":"Azure/LogicAppsUX","owner":"Azure","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-06T22:35:33.000Z","size":474904,"stargazers_count":109,"open_issues_count":418,"forks_count":98,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-05-06T23:32:14.666Z","etag":null,"topics":["azure","logicapps","nodejs","react"],"latest_commit_sha":null,"homepage":"https://learn.microsoft.com/azure/logic-apps","language":"TypeScript","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/Azure.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","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":"2021-08-24T22:18:54.000Z","updated_at":"2026-05-06T20:51:13.000Z","dependencies_parsed_at":"2023-10-20T17:05:17.267Z","dependency_job_id":"a4f093f2-daa4-470d-ba65-ed719e9da380","html_url":"https://github.com/Azure/LogicAppsUX","commit_stats":null,"previous_names":[],"tags_count":1428,"template":false,"template_full_name":null,"purl":"pkg:github/Azure/LogicAppsUX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Azure%2FLogicAppsUX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Azure%2FLogicAppsUX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Azure%2FLogicAppsUX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Azure%2FLogicAppsUX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Azure","download_url":"https://codeload.github.com/Azure/LogicAppsUX/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Azure%2FLogicAppsUX/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33004769,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"ssl_error","status_checked_at":"2026-05-13T13:14:51.610Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["azure","logicapps","nodejs","react"],"created_at":"2024-12-31T02:18:40.990Z","updated_at":"2026-05-14T00:03:05.049Z","avatar_url":"https://github.com/Azure.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Azure Logic Apps UX Monorepo\n\nWelcome to the monorepo for the user experience (UX) components and tools for [Azure Logic Apps](https://learn.microsoft.com/azure/logic-apps). This repository contains the core UI libraries, standalone designer, documentation site, and VS Code extension for authoring and managing Logic Apps with a modern, extensible user experience.\n\n## Getting Started\n\nDocumentation for getting started, including setup and usage, can be found at: [https://aka.ms/logicappsux](https://aka.ms/logicappsux)\n\nIf you're interested in contributing or running components locally, see the specific README files inside relevant applications and libraries (e.g., `apps/Standalone`, `apps/docs`, etc.).\n\n## Repository Structure\n\nThis repository is organized as a PNPM-powered monorepo with Turborepo for managing builds and dependencies. Key directories include:\n\n- **apps/**\n  - **Standalone/**: The standalone Logic Apps Designer (React, TypeScript, Vite).\n  - **docs/**: Documentation website (built with Docusaurus).\n  - **vs-code-designer/**: VS Code extension for Logic Apps Designer.\n\n- **libs/**: Shared libraries and UI packages used across applications.\n\n- **e2e/**: End-to-end testing setup.\n\n- **Localize/**: Localization resources.\n\nSee each application's README for more details and setup instructions.\n\n## AI-Assisted Development (Knowledge Graphs)\n\nThis repo uses [Graphify](https://graphify.net/) to maintain per-library knowledge graphs that map code structure, identify core abstractions, and surface cross-file relationships. These graphs help both AI coding assistants and developers navigate the codebase structurally instead of grepping blindly.\n\n### What's in the graphs\n\nEach library has a `graphify-out/` directory inside `src/` containing:\n\n| File | Purpose |\n|------|---------|\n| `GRAPH_REPORT.md` | God nodes (most-connected abstractions), communities, surprising connections, suggested questions |\n| `graph.json` | Full queryable graph — nodes, edges, communities, confidence scores |\n\n**Current library graphs:**\n\n| Library | Nodes | Edges | God Nodes (top 3) |\n|---------|-------|-------|--------------------|\n| designer-v2 | 2,314 | 3,210 | `getOperationSettings` (52), `getReactQueryClient` (45), `initializeOperationDetails` (24) |\n| designer | 2,410 | 3,370 | `getOperationSettings` (52), `getReactQueryClient` (45), `initializeOperationDetails` (25) |\n| designer-ui | 1,228 | 964 | See `libs/designer-ui/src/graphify-out/GRAPH_REPORT.md` |\n| logic-apps-shared | 1,242 | 1,876 | See `libs/logic-apps-shared/src/graphify-out/GRAPH_REPORT.md` |\n| data-mapper-v2 | 446 | 488 | See `libs/data-mapper-v2/src/graphify-out/GRAPH_REPORT.md` |\n| a2a-core | 408 | 417 | See `libs/a2a-core/src/graphify-out/GRAPH_REPORT.md` |\n| chatbot | 22 | 5 | See `libs/chatbot/src/graphify-out/GRAPH_REPORT.md` |\n| vscode-extension | 51 | 38 | See `libs/vscode-extension/src/graphify-out/GRAPH_REPORT.md` |\n\n### How graphs stay up to date\n\nGraphs are **auto-rebuilt by CI** via the `update-knowledge-graphs.yml` GitHub Action whenever TypeScript source files change on `main`. No manual action needed — pull latest main and the graphs are current.\n\n### AI assistant integration\n\nGraphs work automatically with AI coding tools — no per-user setup required:\n\n| Tool | How it picks up graphs | Setup needed? |\n|------|----------------------|---------------|\n| **GitHub Copilot CLI** | `.github/copilot-instructions.md` | None — reads from repo |\n| **VS Code Copilot Chat** | `.github/copilot-instructions.md` | None — reads from repo |\n| **Claude Code** | `CLAUDE.md` | None — reads from repo |\n| **Cursor** | Add `.cursor/rules/` if needed | Optional |\n\n### Optional: CLI queries (power users)\n\nFor interactive graph queries, install the Graphify CLI:\n\n```bash\n# One-time setup — installs graphify CLI + Copilot CLI skill\npnpm run graphify:setup\n\n# Query the graph\ngraphify query \"how does the serialization pipeline work?\" \\\n  --graph libs/designer-v2/src/graphify-out/graph.json\n\n# Trace shortest path between two abstractions\ngraphify path \"serializeWorkflow\" \"BJSDeserializer\" \\\n  --graph libs/designer-v2/src/graphify-out/graph.json\n\n# Explain a god node and its neighbors\ngraphify explain \"getOperationSettings\" \\\n  --graph libs/designer-v2/src/graphify-out/graph.json\n\n# Generate interactive HTML visualization (open in browser)\ncd libs/designer-v2 \u0026\u0026 graphify update src/\nopen src/graphify-out/graph.html\n```\n\n### Manual rebuild\n\nIf you need to rebuild graphs locally (e.g., on a feature branch before CI runs):\n\n```bash\n# Rebuild all libs (pure AST extraction, no LLM, runs in seconds)\npnpm run graphify:rebuild\n\n# Rebuild a specific lib\npnpm run graphify:rebuild -- designer-v2\n```\n\nRequires Python 3.10+ and `pipx install graphifyy`. The `pnpm run graphify:setup` command handles both.\n\n### Before \u0026 after: Real examples from this repo\n\n#### \"What are the core abstractions in designer-v2?\"\n\n**Prompt:** *\"What are the most important functions and abstractions in the designer-v2 library? Rank them by how central they are to the codebase.\"*\n\n| | Without Graphify | With Graphify |\n|---|---|---|\n| **Approach** | Grep for exports → read 10+ key files → build mental model | Read `GRAPH_REPORT.md` → god nodes listed with edge counts |\n| **Files read** | 10-15 files (store, providers, serializer, slices, etc.) | 1 file |\n| **Lines scanned** | ~9,351 lines across key files | ~3,235 lines (full report) or ~12 lines (god nodes section) |\n| **Tokens consumed** | ~37,000 | ~200 (god nodes section only) |\n| **AI turns needed** | 3-5 (explore → read → synthesize) | 1 |\n| **Answer quality** | Depends on which files the AI happens to read | Definitive — ranked by actual connectivity |\n\n**With Graphify, the answer is immediate:**\n```\nGod Nodes (most connected):\n1. getOperationSettings()         — 52 edges\n2. getReactQueryClient()          — 45 edges\n3. isNullOrUndefined()            — 32 edges\n4. initializeOperationDetails()   — 24 edges\n5. getOperationManifest()         — 21 edges\n```\n\n#### \"What depends on getOperationSettings?\"\n\n**Prompt:** *\"I need to understand the full dependency chain of `getOperationSettings()`. What calls it, what does it call, and what consumes its output?\"*\n\n| | Without Graphify | With Graphify |\n|---|---|---|\n| **Approach** | `grep -rn \"getOperationSettings\"` → 15 matches → read each file for context | `graphify explain \"getOperationSettings()\"` |\n| **Files read** | 15 files × 200-500 lines each | 0 files — structured output from graph |\n| **Tokens consumed** | ~8,000-30,000 | ~800 |\n| **What you get** | Line matches with no relationship context | 52 typed connections: callers, callees, with EXTRACTED/INFERRED tags and source locations |\n\n**With Graphify:**\n```\nNode: getOperationSettings()\n  Source:    settings.ts L130 | Community: 8 | Degree: 52\n  --\u003e initializeOperationDetails()        [calls] [INFERRED]\n  --\u003e initializeOperationDetailsForManifest() [calls] [INFERRED]\n  --\u003e isSplitOnSupported()                [calls] [EXTRACTED]\n  --\u003e isRetryPolicySupported()            [calls] [EXTRACTED]\n  --\u003e isConcurrencySupported()            [calls] [EXTRACTED]\n  ... and 47 more with source locations\n```\n\n#### \"What are the surprising/hidden couplings in the codebase?\"\n\n**Prompt:** *\"What are the non-obvious dependencies in designer-v2? Show me cross-module connections that a developer wouldn't expect from the directory structure alone.\"*\n\n| | Without Graphify | With Graphify |\n|---|---|---|\n| **Approach** | Impossible with grep — requires reading hundreds of files and mentally cross-referencing import graphs | Listed in GRAPH_REPORT.md \"Surprising Connections\" section |\n| **Tokens consumed** | 80,000+ (if even attempted) | ~200 |\n| **Time** | 5-10 minutes across multiple AI turns | Instant |\n\n**With Graphify (from the actual report):**\n```\nSurprising Connections:\n- DesignerReactFlow() --calls--\u003e useNotes()\n  ui/DesignerReactFlow.tsx → core/state/notes/notesSelectors.ts\n\n- usePanelTabs() --calls--\u003e useSettingValidationErrors()\n  ui/panel/nodeDetailsPanel/usePanelTabs.tsx → core/state/setting/settingSelector.ts\n\n- onComboboxMenuOpen() --calls--\u003e loadDynamicValuesForParameter()\n  ui/panel/.../parametersTab/index.tsx → core/utils/parameters/helper.ts\n```\n\nThese are the hidden couplings that cause unexpected bugs when you change \"unrelated\" code.\n\n#### Response quality: Real side-by-side test\n\nWe gave two AI agents the exact same prompt. One explored blind (grep/view only), the other started with the knowledge graph.\n\n**Prompt given to both agents:**\n\u003e *\"I need to change how operation settings are resolved. What will I break and what's the safest way to approach this?\"*\n\u003e\n\u003e The library is at `libs/designer-v2/src/`. Focus on giving a concrete, actionable answer — what files, what functions, what dependencies. Be specific about what you're confident about vs what you might be missing.\n\nThe blind agent was limited to ~10 tool calls (grep/glob/view). The graph agent was instructed to read `GRAPH_REPORT.md` and run `graphify explain \"getOperationSettings()\"` before exploring further.\n\n| Dimension | Without Graphify | With Graphify |\n|-----------|-----------------|---------------|\n| **Call sites found** | 5 (missed 3 — agent.ts, swagger, MCP) | 8 (exhaustive — verified against graph's degree-52) |\n| **Confidence in completeness** | \"Less confident about cross-library consumers\" | \"8 call sites are exhaustive (grep-verified, matches graph degree)\" |\n| **Structural insight** | Noticed settings slice is \"surprisingly thin\" | Identified Community 8 as a tightly coupled cluster of ~30 helpers — changes inside are contained |\n| **Hidden risk identified** | Flagged serializer as \"most fragile dependency\" | Flagged same + explained WHY: `serializeSettings()` is the inverse of `getOperationSettings()` — asymmetric changes silently lose data |\n| **Downstream chain** | Found 5 consumers | Found same 5 + explained the community boundary between settings (Community 8) and parameters (Community 0) |\n| **Approach recommendation** | Correct but generic (3 scenarios) | Same 3 scenarios + specific rationale: \"~30 helpers are internal to settings.ts and only called by getOperationSettings()\" |\n| **Time to answer** | ~4 minutes (10 tool calls exploring) | ~2 minutes (2 tool calls: read report + explain node) |\n\n**The key difference isn't speed — it's completeness and confidence.** The blind agent missed 3 of 8 call sites because it hit its exploration budget. The graph agent found all 8 and could verify completeness against the graph's known edge count. When an AI tells you \"this is the full list\" vs \"I might be missing some\" — that's the difference between a safe refactor and a broken deploy.\n\n#### Implementation quality: Planning a new feature\n\nWe gave two AI agents the exact same implementation prompt. One explored blind, the other started with the knowledge graph.\n\n**Prompt given to both agents:**\n\u003e *\"Add a new 'timeout' host option to designer-v2 that lets the host configure a default timeout (in seconds) for all HTTP actions. When set, the designer should pre-populate the timeout setting for any new HTTP action added to the canvas.\"*\n\u003e\n\u003e The library is at `libs/designer-v2/src/`. DO NOT write the code — produce an implementation plan: which files need to change and why, the sequence of changes, which existing patterns to follow, what tests to add/update, and risks/edge cases.\n\nThe blind agent was limited to ~12 tool calls. The graph agent was instructed to read `GRAPH_REPORT.md`, run `graphify explain` on `getOperationSettings()` and `initializeOperationDetails()`, and query `\"how are host options used in designer\"` before exploring further.\n\n| Dimension | Without Graphify | With Graphify |\n|-----------|-----------------|---------------|\n| **Files identified** | 5 files to change | 7 files to change (caught `agent.ts` and `mcp/utils/helper.ts` — two add-operation paths the blind agent missed entirely) |\n| **Pattern discovery** | Found `requestOptions` pattern but had to guess about similar patterns | Identified `maxWaitingRuns` as the closest precedent by name from the graph report — exact same host-option-to-settings pattern |\n| **Call site completeness** | Found 3 call sites in `add.ts` but missed `agent.ts:274` and `mcp/utils/helper.ts:109` | Found all 5 call sites — graph's `initializeOperationDetails` node (24 edges) mapped the complete call chain |\n| **Deserialization safety** | Flagged the risk but said \"not explored\" — couldn't verify it was safe | Verified: \"operationdeserializer.ts path always has `operation` defined, so it's safe\" — confirmed from the graph that deserialization and add-operation are separate communities |\n| **Dual-timeout confusion** | Missed the distinction between action timeout (`Settings.timeout`) and request timeout (`Settings.requestOptions.timeout`) | Called it out explicitly as a high-severity risk: \"There are TWO timeout settings — clarify with product which one\" |\n| **Pseudocode provided** | No | Yes — exact code block for the `requestOptions` change with ISO 8601 conversion |\n| **Risks identified** | 6 risks, 2 marked \"guessed\" | 6 risks, all verified against the graph + code. Honest about the 1 gap (serialization path not inspected) |\n\n**The implementation difference:** The blind agent produced a plan that would compile and mostly work — but would silently miss HTTP actions added via the agent tool path and MCP path. Those would get no default timeout while regular HTTP actions would. The graph agent's plan covers all paths because the graph showed all 5 entry points into `getOperationSettings()`. That's the difference between a feature that works in the happy path and a feature that works everywhere.\n\n### Use cases: How knowledge graphs improve AI-assisted development\n\n#### 1. Onboarding — \"Where do I even start?\"\n\nInstead of asking an AI assistant to explore a 96K-line library blind, point it at the graph report:\n\n```\nRead libs/designer-v2/src/graphify-out/GRAPH_REPORT.md and tell me the top 5\nmost important abstractions in this library and how they relate.\n```\n\nThe report immediately surfaces `getOperationSettings` (52 edges), `getReactQueryClient` (45 edges), and `initializeOperationDetails` (24 edges) as the core of the system — no grepping needed.\n\n#### 2. Architecture questions — \"How does X connect to Y?\"\n\n```bash\n# How does the operation settings system connect to the broader codebase?\ngraphify explain \"getOperationSettings()\" --graph libs/designer-v2/src/graphify-out/graph.json\n```\n\nOutput shows all 52 connections — which functions call it, which modules depend on it, extracted vs inferred relationships with confidence scores and source locations.\n\n```bash\n# What's the shortest path between serialization and the React Query cache?\ngraphify path \"serializeWorkflow()\" \"getReactQueryClient()\" \\\n  --graph libs/designer-v2/src/graphify-out/graph.json\n```\n\n#### 3. Impact analysis — \"What breaks if I change this function?\"\n\nBefore refactoring a god node, check its graph neighborhood:\n\n```bash\ngraphify explain \"parameterValueToString()\" --graph libs/designer-v2/src/graphify-out/graph.json\n```\n\nThis reveals 17 direct connections — every caller and callee. Your AI assistant can then scope the refactor precisely instead of doing a broad grep that misses indirect dependencies.\n\n#### 4. Bug investigation — \"Why is this UI component reading from that Redux slice?\"\n\n```bash\ngraphify query \"what connects panel UI to Redux state\" \\\n  --graph libs/designer-v2/src/graphify-out/graph.json\n```\n\nReturns the exact selector chain: `panelSelectors.ts` → `useOperationPanelSelectedNodeId()` → panel slice. Shows which community each belongs to, revealing whether the coupling is intentional (same community) or surprising (cross-community bridge).\n\n#### 5. PR reviews — \"Does this change touch a god node?\"\n\nThe `GRAPH_REPORT.md` lists the top god nodes with edge counts. If a PR modifies `getOperationSettings` (52 edges) or `initializeOperationDetails` (24 edges), reviewers know it's high-impact. AI assistants reading the report can flag this automatically.\n\n#### 6. Cross-library dependency understanding\n\n```bash\n# What are the core abstractions in the shared library?\ngraphify explain \"getReactQueryClient()\" --graph libs/logic-apps-shared/src/graphify-out/graph.json\n\n# Compare god nodes between v1 and v2\ndiff \u003c(grep \"God Nodes\" -A 12 libs/designer/src/graphify-out/GRAPH_REPORT.md) \\\n     \u003c(grep \"God Nodes\" -A 12 libs/designer-v2/src/graphify-out/GRAPH_REPORT.md)\n```\n\n#### 7. New feature planning — \"Where should I add this?\"\n\nAsk your AI assistant with graph context:\n\n```\nI need to add a new panel type for workflow annotations. Based on the graph\nreport in libs/designer-v2/src/graphify-out/GRAPH_REPORT.md, which community\nshould this live in and what existing patterns should I follow?\n```\n\nThe community structure tells the assistant where similar features cluster, and the god nodes tell it which abstractions to integrate with.\n\n#### 8. Discovering surprising connections\n\nThe `GRAPH_REPORT.md` has a \"Surprising Connections\" section that flags unexpected cross-file or cross-community edges. For designer-v2, this surfaced:\n\n- `DesignerReactFlow()` → `useNotes()` — UI component reaching into notes state\n- `usePanelTabs()` → `useSettingValidationErrors()` — panel tabs coupled to settings validation\n- `onComboboxMenuOpen()` → `loadDynamicValuesForParameter()` — UI event triggering parameter loading\n\nThese are the hidden couplings that cause unexpected bugs when you change \"unrelated\" code.\n\n### How it works under the hood\n\nGraphify runs a three-stage pipeline on each library:\n\n1. **AST extraction** (Tree-sitter) — Parses TypeScript/TSX files to extract classes, functions, imports, call graphs, and docstrings. This is deterministic and fast (~seconds for 600+ files).\n2. **Graph construction** (NetworkX) — Merges all extracted nodes and edges into a graph. Infers additional relationships from import chains and call patterns (tagged `INFERRED` with confidence scores).\n3. **Community detection** (Leiden algorithm) — Clusters the graph into communities by edge density. No embeddings or vector DB needed — the graph topology IS the similarity signal.\n\nEvery relationship is tagged: `EXTRACTED` (found in source), `INFERRED` (reasonable inference, with confidence 0-1), or `AMBIGUOUS` (flagged for review). You always know what was found vs guessed.\n\n## Scripts \u0026 Tooling\n\n- **Monorepo management:** [PNPM](https://pnpm.io/) (`pnpm-workspace.yaml`), [Turborepo](https://turbo.build/).\n- **Code style and linting:** ESLint, Prettier, EditorConfig.\n- **Testing:** Vitest, Playwright (for E2E).\n- **CI/CD:** GitHub Actions workflows in `.github/workflows` and Azure Pipelines.\n\n## Contributing\n\nWe welcome contributions and suggestions! Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit [https://cla.opensource.microsoft.com](https://cla.opensource.microsoft.com).\n\nWhen you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA.\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) and the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/).\n\n## Support\n\n- For help and support, see [SUPPORT.md](SUPPORT.md).\n- Security issues: Please review our [SECURITY.md](SECURITY.md).\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE.md).\n\n## Trademarks\n\nThis project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow [Microsoft's Trademark \u0026 Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). Any use of third-party trademarks or logos are subject to those third-party's policies.\n\n---\n\n\u003e For more information, please refer to the official Azure Logic Apps documentation: [https://learn.microsoft.com/azure/logic-apps](https://learn.microsoft.com/azure/logic-apps)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazure%2Flogicappsux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazure%2Flogicappsux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazure%2Flogicappsux/lists"}