Roadmap¶
Canonical tracker: #410 — adoption-first rolling roadmap. This page mirrors that issue for readers browsing the docs. When the two disagree, the issue is authoritative. Last synced: 2026-09-12.
azure-functions-langgraph deploys already-built LangGraph graphs as Azure
Functions HTTP endpoints. This roadmap is deliberately adoption-first and
treats v1.0 as a rolling target: the surrounding ecosystem (LangGraph,
azure-functions, Python) keeps moving, so we certify against a rolling
minimum/latest window instead of freezing a single pinned stack.
First make the existing capability easy to use through real examples and keep the dependency line current. Only then add the remaining runtime features. Reach an expansion checkpoint after Service Bus + Durable and re-evaluate toward v1.0 stabilization.
Current status (2026-09-13)¶
The adoption-first sequence is complete. Every example phase, runtime-fidelity phase, observability phase, true streaming, the Azure-native event-driven entrypoint, and the Durable async run lifecycle have shipped. The project is now at its expansion checkpoint — no new feature family is added automatically. Only one roadmap item remains open:
| Item | Phase | Status | Why it is still open |
|---|---|---|---|
#350 — azure-functions 2.x certification / cap removal |
Phase 0 (P0) | In progress | CI authoring is merged (Py 3.13/3.14 compat matrix + drafted Flex Consumption e2e). The remaining step is a real-Azure certification run before the <2.0.0 cap is raised. |
#408 (Durable Functions-backed async run lifecycle) landed in #453. With Service Bus (#409) and Durable async runs (#408) both shipped, the next step is the expansion checkpoint review, not another feature family — new surfaces require concrete external demand per the checkpoint criteria below.
Guiding principles¶
- Examples before features. A new runtime feature is not higher priority than making the current package usable by a first-time Azure/LangGraph developer.
- Every new feature ships with a deployable example. No feature is complete if users must infer the wiring from unit tests.
- Keep the product boundary crisp. This is the Azure Functions deployment adapter for already-built LangGraph graphs, not a reimplementation of LangGraph Platform.
- Do not duplicate sibling toolkit packages. Compose with
azure-functions-logging,azure-functions-durable-graph,azure-functions-openapi, etc. where their responsibilities already exist. - Real Azure certification matters. Runtime claims that depend on Functions behavior must be proven on a wheel-installed deployment, not source-tree mocks alone.
- Rolling window, not frozen pins. Track a rolling minimum-supported version and certify against the current latest for LangGraph / langgraph-sdk / azure-functions / Python (see #421).
- Expansion checkpoint after Service Bus + Durable. Event Grid, Storage Queue, Timer, MCP, A2A, Store API, webhook/cron, and other attractive surfaces are gated behind an explicit re-evaluation, not automatically in scope.
Per-surface stability tiers¶
v1.0 does not require every surface to be stable — it requires each surface to declare its tier honestly.
| Tier | Meaning | Surfaces |
|---|---|---|
| Stable | API frozen; breaking change needs a major bump | native invoke/stream/state HTTP endpoints, LangGraphApp construction, auth levels |
| Beta | Shape settled, may refine before v1.0 | checkpoint backends, thread locking, async runtime (#422), version="v2" pass-through (#423), run observer contract (#425) |
| Experimental | May change or be removed | LangGraph Platform compatibility, Durable async runs (#408), Service Bus trigger (#409) |
Development sequence¶
Phase 0 — unblock the modern dependency line — P0¶
New examples and runtime work must not be built on top of intentionally stale dependency ceilings or an unproven release pipeline.
- [x] #333 — release / OIDC certification pipeline (human-blocked)
- [ ] #350 —
azure-functions2.x certification / cap removal (split hosting matrix; Py 3.12 Consumption ceiling) - [x] #421 — certify LangGraph 1.2.x / langgraph-sdk 0.4.x and adopt a rolling minimum-version window
Exit gate:
- Release pipeline certified.
- LangGraph 1.2.x + langgraph-sdk 0.4.x resolved, tested, and certified; rolling minimum window documented.
azure-functions2.x CI + wheel + real-Azure certification green on a plan supporting the target Python.- Dependency caps raised only after proof.
Phase 1 — adoption-first examples — P1¶
These form one obvious learning path in the main README and examples/README.md.
- Real Azure OpenAI agent — [x] #402
- Stateful conversation / thread memory — [x] #403
- Tool-calling agent — [x] #404
- Production persistent Azure OpenAI agent — [x] #405
Documentation gate:
- [x] Main README has a visible Recommended learning path: #402 → #403 → #404 → #405.
- [x] Every example is a standalone Azure Functions app with
function_app.py,host.json,requirements.txt,local.settings.json.example, README, and smoke coverage. - [x] Examples import/test against a built wheel where practical.
- [x] No example requires cloud credentials merely to pass CI.
- [x] At least #402 and #405 have a documented real-Azure verification path.
Phase 2 — runtime correctness & production fidelity — P1¶
Close the gaps between what the runtime claims and what production users need, each shipping with the example that proves it.
- Native async ainvoke/astream — [x] #422 (Beta tier)
version="v2"pass-through — [x] #423 (Beta tier)- Production example thread-lock wiring + DESIGN.md refresh — [x] #424
Phase 3 — observability foundation — P2¶
- Run-lifecycle observer contract — [x] #425 (#407a)
- Application Insights / OpenTelemetry integration — [x] #407 (#407b)
Exit gate: operators can correlate one Azure Functions invocation to one LangGraph run/thread and diagnose duration/failure without enabling sensitive payload logging.
Phase 4 — true HTTP streaming — P2¶
- Opt-in true streaming transport — [x] #406
Classic LangGraphApp stays backward compatible; opt-in ASGI/streaming
transport via StreamingLangGraphApp; first chunk proven to arrive before
completion; deployable streaming example (examples/true_streaming_agent).
Exit gate: "true streaming" means measured incremental delivery, not merely
Content-Type: text/event-stream.
Phase 5 — Azure-native event-driven entrypoint — P2¶
- Azure Service Bus → LangGraph trigger adapter — [x] #409
Reordered before Durable: an event-driven ingress is a more common
Azure-native deployment mode than long-running async orchestration, and it
exercises the correlation/thread-lock/telemetry surfaces the async work reuses.
Queue trigger; explicit message → graph input and correlation/session →
thread_id mapping; retry/dead-letter preservation; standalone example.
(Experimental tier.)
Phase 6 — asynchronous run lifecycle — P2¶
- Optional Durable Functions-backed async runs — [x] #408
Not a Durable reimplementation of LangGraph topology and not a replacement
for azure-functions-durable-graph. Create async run, poll status/result,
cancel with documented semantics, survive disconnect of the initiating HTTP
request. Deterministic orchestrator; graph/LLM/tool code in activity context;
reuse checkpointer + thread lock; real Azure timeout/cancellation documented
from evidence; no "unlimited execution" claim. (Experimental tier.)
Expansion checkpoint after #408 / #409¶
Once Service Bus (#409) and Durable async runs (#408) are complete, do not automatically add another feature family. Hold an explicit expansion checkpoint to re-evaluate toward v1.0 rather than continuing into:
Event Grid
Storage Queue
Timer / cron
Webhooks
MCP server
A2A server
LangGraph BaseStore API clone
full LangGraph Platform parity
new checkpointer families without demonstrated demand
New feature proposals past this checkpoint should require concrete evidence: repeated external user requests, GitHub issue/community demand, cookbook usage proving a real scenario, or a clear gap that cannot be solved cleanly in user-land or a sibling package.
Stability & expansion checkpoint¶
After the expansion checkpoint, hold a stability review (a rolling milestone, not a frozen v1.0 gate) and prioritize:
- [ ] Public API review / naming consistency, with each surface's stability tier declared.
- [ ] Dependency bounds and rolling minimum/latest compatibility lanes (#421).
- [ ] Real-Azure release certification reliability.
- [ ] Security review of auth, message inputs, storage, serialization, and telemetry.
- [ ] Error contract consistency across native/Platform/streaming/trigger surfaces.
- [ ] Example smoke coverage and stale-example detection.
- [ ] Performance / cold-start baseline.
- [ ] Documentation consolidation so README stays short and examples/docs are canonical.
- [x] Rolling 0.x version-stability policy adopted (#426).
- [ ] PyPI packaging/release gate hardening.
- [ ] External discoverability: official LangGraph docs/discussion/listing where appropriate.
- [ ] Measure adoption using PyPI download trend + external GitHub activity, while recognizing CI downloads inflate raw PyPI counts.
Success criteria¶
The roadmap is successful when a new user can follow this path without source-code archaeology:
install
-> deploy Azure OpenAI agent
-> add conversation state
-> add tools
-> make state production-persistent
-> run async graphs natively
-> observe runs in Azure
-> opt into true streaming
-> consume Service Bus events if needed
-> run long async lifecycles if needed
Ordered checklist¶
- [x] #333 — release / OIDC certification pipeline (P0, human-blocked)
- [ ] #350 — Azure Functions 2.x certification (P0)
- [x] #421 — LangGraph 1.2.x / sdk 0.4.x certification + rolling window (P0)
- [x] #402 — Azure OpenAI example
- [x] #403 — conversation memory example
- [x] #404 — tool-calling example
- [x] #405 — production persistent agent example
- [x] #422 — native async ainvoke/astream (P1)
- [x] #423 —
version="v2"pass-through (P1) - [x] #424 — production example thread-lock wiring + DESIGN.md refresh (P1)
- [x] #425 — run-lifecycle observer contract / #407a (P2)
- [x] #407 — Application Insights / OpenTelemetry integration / #407b (P2)
- [x] #406 — true HTTP streaming (P2)
- [x] #409 — Service Bus trigger (P2)
- [x] #408 — Durable async run lifecycle (P2)
- [x] #426 — rolling 0.x version-stability policy (P2)
- [ ] Expansion checkpoint → v1.0 stabilization / adoption phase; no automatic feature expansion
Related completed work¶
-
144 — earlier infrastructure-oriented example expansion¶
-
378 — true-streaming architecture/design tracker¶
-
339 — core adapter vs experimental Platform compatibility boundary¶
Priority¶
Roadmap priority: P1. Execution priority is defined per phase above; Phase 0 (#333, #350, #421) is P0.