Conversational application platform · PicoFlow

Your next application won’t be screens.

Replace forms, menus, and support flows with AI conversations that understand intent, collect information, execute business logic, and complete real tasks — backed by a runtime built for production.

The flow is the application. The conversation is the UI. PicoFlow is the runtime.

Animated HotelFlow reservation conversation powered by PicoFlow

ModelsOpenAI · Anthropic · Google · Azure OpenAI · DeepSeek · Moonshot · Z.AI · Ollama · OpenRouter

SessionsMemory · SQLite · MongoDB · Cosmos DB

RuntimeNode.js 22.5+ · TypeScript · Zod 4 · fits NestJS

The problem with screens

Traditional applications make your customers do the work.

Navigate the menu. Search. Filter. Fill the form. Fix the validation error. Start over. Open a support ticket. Every screen you ship transfers effort to the customer — and every workflow that fails ends in your support queue. A conversational application inverts that: the customer states the intent, and the application does the navigating.

The web workflow today

  1. Find the right page in the navigation
  2. Search, filter, and compare across tabs
  3. Fill a multi-step form
  4. Hit a validation error, re-enter data
  5. Abandon, or open a support ticket
  6. Wait for a human to finish the task

The customer learns your software, or gives up.

The same task on PicoFlow

  1. The customer says what they need
  2. The flow gathers exactly what is missing
  3. Your systems are called with validated data
  4. Business rules and confirmations are enforced in code
  5. The task completes — or escalates with a full record

The application learns the customer's intent instead.

The runtime underneath

A chat window is easy. A production application is not.

Production conversation needs durable state, validation, business rules, real system calls, concurrency safety, and testing. PicoFlow ships that machinery so your team writes the business process, not the plumbing.

01

Durable conversation state

One versioned JSON document per conversation holds the active stage, business state, memory, token totals, and structured logs. A customer can leave and come back; the application resumes exactly where the task paused.

02

Connected to real systems

Define a tool once with a Zod schema, decorate a handler with @Tool, and the runtime dispatches the model's call into your code — where it can hit pricing, booking, CRM, and policy systems with validated arguments.

03

Business rules the model cannot skip

Transitions are return values in typed handlers, not instructions buried in prompt prose. Confirmation before commitment, validation before persistence, and escalation paths are enforced by code, not requested of a model.

04

Production storage, not chat history

Memory, SQLite, MongoDB, and Cosmos DB adapters ship with the runtime and implement the same compare-and-swap contract. Swap stores with an environment variable instead of writing another adapter by hand.

05

Safe under concurrency

Turns for one session are serialised in-process, and every store rejects a stale revision with a conflict error. Two browser tabs — or a duplicate request — cannot silently overwrite a customer's in-flight task.

06

Testable like an application

Scripted deterministic models assert transitions, persistence, and business state; live scenarios and model judges cover response quality. A conversational application gets regression coverage, not vibes.

Bounded autonomy

Let AI plan the conversation. Let PicoFlow protect the outcome.

Within each stage, the model reasons, asks, and adapts freely. Around it, the flow defines the business envelope: what must be collected, which tools are allowed, what needs explicit confirmation, and what must never happen. A prompt can request “always confirm before booking” — a typed handler enforces it.

  • stay() keeps the current stage active and hands corrective feedback back to the model.
  • go(Step) moves the durable cursor to the next business stage and seeds its state.
  • direct() answers the customer immediately, with no second model call.
hotel-flow/explore-step.tsTypeScript

export class ExploreStep extends Step {
  getPrompt() {
    return `${HotelPrompt.Role}
      Collect dates, then call capture_choices.`;
  }

  defineTool(): ToolType[] {
    return [{
      name: "capture_choices",
      description: "Capture hotel search criteria",
      schema: z.object({ json: z.string() }),
    }];
  }

  @Tool
  protected async capture_choices(
    args: { json: string },
  ): Promise<ToolResponseType> {
    const hotels = await Pricing.search(args.json);

    if (!hotels.length) {
      return stay("No match. Ask for wider criteria.");
    }
    return go(PresentStep).withState({ hotels });
  }
}
      

The development loop

Describe the application. Let AI build the flow. Validate it with PicoFlow.

PicoFlow changes both sides of the lifecycle. Customers get a conversation instead of screens — and developers describe the application they want, while an LLM generates and iterates the flow and PicoFlow runs and tests it. AI-generated, human-validated application development: the model does the tedious flow-authoring, your team owns requirements, review, and production approval.

From requirements to a running flow
  1. DescribeYou state the customer journey, rules, systems, and edge cases.
  2. GenerateAn LLM designs the flow: stages, tools, prompts, and transitions.
  3. Run & testPicoFlow executes it; scripted tests expose the gaps.
  4. ValidateThe LLM iterates; you review, approve, and ship.
Flows are plain TypeScript
Generated flows are ordinary classes — diffable, reviewable, and versioned like any other application code.
Tests keep it honest
Deterministic scripted models assert transitions and persisted state, so iteration has a regression floor.
Humans stay in charge
Nothing reaches production without a developer validating behaviour. This is a loop, not autopilot.

Complete applications, not chatbot demos

The workflows your customers currently fight through screens.

Each of these is a business process with an outcome — and a flow behind it that collects, validates, calls real systems, and completes. Three ship today as full tutorial applications.

Reservations & commerce

Hotel reservation

Understand the request, check availability, capture preferences, present priced options, obtain explicit confirmation, and book. Built as a complete tutorial application.

Explore the reservation flow

Support resolution

Customer support that completes

Verify the customer, inspect account data, execute approved actions with holds, and hand off to a human with a complete case record when needed.

Explore the support flow

Claims & document intake

Claims and document processing

Collect incident details, receive documents, extract structured facts with AI, validate them deterministically, and route exceptions to human review.

Explore the document flow

Customer onboarding

Onboarding without the form maze

Guide setup in one conversation: gather missing information, verify it, call backend services, handle exceptions, and activate the account.

See the onboarding pattern

Procurement

Procurement requests with policy

Capture purchase intent, apply vendor and policy rules in code, route approvals, create the request, and track status — without a portal.

See the procurement pattern

Your workflow

The process your customers dread

If a task takes your customers multiple screens, forms, and a support ticket today, it is a candidate for a conversational application.

Book a walkthrough

More than a chatbot, above an agent framework

Chatbots answer. PicoFlow applications complete.

A chatbotA PicoFlow application
Answers questionsExecutes business processes end to end
Often unstructuredGuided by explicit flows and business rules in code
Frequently disconnected from systemsConnected to your APIs, tools, and data with validated arguments
Difficult to reproduce and testDurable sessions, structured logs, and regression tests
Best for FAQs and simple supportDesigned for real customer tasks and commitments

And agent frameworks? They orchestrate model and tool calls — useful building blocks, one layer down. PicoFlow claims the application layer: modelling the customer-facing business flow, managing live conversation state, enforcing deterministic business logic, and turning an intent into a completed outcome. For teams comparing directly, we publish an honest, scoped comparison — including the cases where a direct graph framework is the better choice.

Latest release · v1.1.2

Build with @picoflow/core.

Adds a CommonJS package entry, exposes the model catalog and last-response utilities, and refines provider and tool-runtime integration.

Source-available, commercially licensed. PicoFlow is not open source. Internal, non-production evaluation is free, including enterprise prototyping; production use requires a commercial agreement. Read the license.

npm packagev1.1.2
npm install @picoflow/core
Node.js >= 22.5 Read the release notes

Straight answers

Answers before you commit a team to a new platform.

What PicoFlow is, what it needs, and what it does not do yet — including streaming, interrupts, and the licence, because those are cheaper to learn here than after a prototype.

Start here

What is PicoFlow?
PicoFlow is a platform for building customer-facing AI conversational applications — software where the customer's interface is a guided conversation instead of pages and forms. A flow models your business process in TypeScript; the runtime provides the durable session, tool dispatch, validation boundaries, storage, and concurrency safety that make the conversation a production application rather than a chatbot. Read why conversational applications.
How is this different from a chatbot?
A chatbot answers questions. A PicoFlow application completes a business process: it collects what it needs, validates it in code, calls your real systems, asks for confirmation before commitments, persists durable state, and escalates to a human with a full record. The conversation is the interface; the flow behind it is ordinary, testable application code. See the full comparison.
Is PicoFlow open source?
No. PicoFlow is a commercially licensed runtime distributed as the @picoflow/core npm package. Internal, non-production evaluation is free, including enterprise prototyping; production use requires a commercial agreement. If a permissively licensed dependency is a hard requirement for your organisation, LangGraph is the better choice and we would rather you know that now than after a proof of concept. Read the license.
Does PicoFlow stream responses?
No. A turn is one HTTP request and one complete JSON response; there is no server-sent events, token streaming, or partial-response API in the runtime today. If your interface needs token-by-token output, PicoFlow does not serve that surface yet — better to learn it on this page than after a prototype.
What does PicoFlow need to run?
Node.js 22.5 or newer, TypeScript with NodeNext resolution, legacy decorators (experimentalDecorators and emitDecoratorMetadata), and Zod 4. The published 1.1.2 package supports both ESM import and CommonJS require("@picoflow/core") applications. It is designed to sit inside application frameworks such as NestJS. See installation.

Evaluating PicoFlow

Why not just give a model one big prompt and every tool?
That architecture is useful for prototypes and low-risk assistance, but for customer-facing business tasks the missing code gets replaced by hidden, less reliable control logic: the prompt becomes an implicit program, safety boundaries become probabilistic, and transactions lose deterministic control. PicoFlow's answer is bounded autonomy — the model reasons freely within each stage while the flow enforces the business envelope: what must be collected, what needs confirmation, what must never happen. Read the full argument.
How does PicoFlow compare with agent frameworks like LangGraph?
Agent frameworks orchestrate model and tool calls; PicoFlow orchestrates applications. It operates at the layer above: modelling the customer-facing business flow, managing durable conversation state, enforcing validation and transitions in code, and shipping the session storage and HTTP boundary you would otherwise build by hand. See the scoped technical comparison, including where LangGraph is the better choice.
How do I choose between LangGraph, EZGraph, and PicoFlow?
Choose LangGraph when you need low-level graph control, native checkpoint interrupts, or a permissive open-source dependency, and are comfortable owning the surrounding application conventions. Choose EZGraph when you want to keep LangGraph as the execution engine but want a ready-made, typed application layer for guided conversations; it requires no EZGraph account or key and is free to use in production. Choose PicoFlow when the conversation is a customer-facing business application: named flows, explicit domain steps, durable business state, validation, and transitions all need to work as one shared runtime. EZGraph can be a sensible on-ramp; none of these choices requires pretending the other two are bad fits.
Is PicoFlow built on LangChain?
Yes, and we would rather say so than have you find it in a lockfile. @picoflow/core depends on @langchain/core and the LangChain provider packages, and a few LangChain types surface in the class you subclass — MessageContent, ToolCall, and DynamicStructuredTool all appear on Step. Persisted memory holds serialised LangChain messages. PicoFlow does not replace LangChain; it adds the durable session, step cursor, tool dispatch, and storage layer above it.
What happens to my application if PicoFlow goes away?
A fair question for a closed-source runtime with one published release. What you keep: session documents are plain JSON in a database you control, and your flows are ordinary TypeScript classes holding your prompts, validation, tools, and business rules. What you would rebuild: the tool-dispatch loop, the durable step cursor, the store adapters, and the revision checks — broadly the layer the LangGraph comparison measures. We publish that measurement partly so the exit cost is legible before you commit.
Can PicoFlow pause a conversation for human approval?
At turn boundaries, yes. The support tutorial models an approval hold with ordinary step state, two explicit tools, and a restore hook that releases the hold after a timeout. There is no mid-execution interrupt primitive: the run status has no paused state, and a turn that fails partway through the tool loop is not resumed. If you need to suspend work inside a node and resume the same thread later, LangGraph's interrupt() with a checkpointer is the stronger mechanism. Read the full comparison.
Which model providers and local models are supported?
Built-in adapters cover OpenAI, Azure OpenAI, Anthropic, Google, DeepSeek, Moonshot, Z.AI, Ollama, and OpenRouter, plus a custom adapter for any OpenAI-compatible or internal endpoint. Models and parameters are selected per flow or per step, while credentials stay in application bootstrap configuration. See providers and model selection.
How do I test and evaluate a non-deterministic application?
Use deterministic scripted models for transition and persistence checks, then add live scenarios or a model judge for response quality. The test guide shows how to assert the response, session ID, active step, run status, and persisted business state together. Read the testing guide.

Running it in production

Where does my data go? Does PicoFlow receive prompts, session data, or telemetry?
Nothing leaves your infrastructure. Prompts and session documents stay between your application, the model provider you configure, and the session store you choose. The runtime ships no telemetry and no tracing or metrics integration that could carry data out. The license token is verified offline — with a signature check against a public key compiled into the package, performed on the first model call and cached for the life of the process. It makes no network request. Contact us for deployment-specific data-processing and residency questions.
Can I run PicoFlow entirely in my own cloud or VPC?
Yes. PicoFlow is an npm runtime embedded in your Node.js application, so you can deploy it in your own cloud, VPC, or air-gapped infrastructure. Choose the session store that matches the deployment: memory for local work, SQLite for durable single-host use, or MongoDB/Cosmos DB for shared multi-instance deployments. See the persistence guide.
Can I run several instances behind a load balancer?
Yes, backed by SQLite on a shared filesystem, MongoDB, or Cosmos DB — never the memory store, which cannot coordinate separate processes. One caveat worth budgeting for: the FIFO turn lock is per process, so if two turns for the same session land on different instances, both will call the model and only one will be allowed to save. Correctness is protected by the revision check; the duplicated model call is not free. Read the concurrency guide.
What happens when a model, tool, or database call fails?
Failures return through the flow's error contract, while persisted state and revision checks protect the session from being silently overwritten. Provider retry attempts are explicit, and PicoFlow does not automatically replay a losing turn because it may already have caused an external side effect. Read the error-handling guide.
How is PicoFlow licensed?
Internal, non-production evaluation is free, including enterprise prototyping, proof-of-concept work, testing, and demos. Production use requires a commercial agreement. Read the PicoFlow Evaluation and Commercial License.

Pick the workflow your customers dread. Replace it with a conversation.

Follow the quickstart, then walk through a complete hotel-reservation or customer-support application at your own pace.