The Pipeline FrameworkFast Java Function Flows on Quarkus
Write small typed business functions; TPF generates, validates, and reliably runs the Quarkus runtime around them
Write small typed business functions; TPF generates, validates, and reliably runs the Quarkus runtime around them

Recent DEV Community posts tagged tpf.
Fresh from GitHub releases for The Pipeline Framework.
Each step is one Java function with explicit input and output types, so it is obvious what goes in and what comes out.
Describe the flow once, then let TPF generate the Quarkus endpoints, callers, handlers, and runtime files around it.
Turn an existing Java method or remote endpoint into a pipeline function without hiding its inputs and outputs.
Store accepted work, retry failed transitions, recover after crashes, and send terminal failures to a dead-letter channel.
Keep many items moving through reactive function chains, including await steps that pause for external work without tying up a thread.
Generate serverless function entry points and handlers for AWS Lambda, Azure Functions, and Google Cloud Run functions from the same typed Java flow.
Generate standard Quarkus service runtimes for containers and Kubernetes, then evolve from monolith to split layouts when needed.
Use persistence for durable business state and caching for fast recomputation, replay, and query-ready outputs.
TPF pipelines are fast, forward-only flows of Java functions. They are not CI/CD job chains or coarse batch jobs. A step is one function in the flow: it receives a typed Java input, produces a typed Java output, and leaves the repeated Quarkus code to TPF.
Focused Java business functions such as validating a payment, enriching a record, parsing a document, or calling an existing Java method.
REST, gRPC, local, and function-style code that calls those functions, plus runtime files that tell the generated runtime which function comes next.
The generated runner that starts the flow, calls each step, tracks progress when configured, retries failed work, and routes failures.
You write typed Java functions and declare their order in YAML. TPF checks the flow at build time, including whether each function shape is valid, whether outputs match the next inputs, whether mappers convert types correctly, whether operators are valid, and whether the generated code can call each function cleanly.
A mapper translates between your domain types and transport or external-system types. An operator is an existing Java method or remote endpoint reused as a pipeline function.
Start with pipeline compilation when you want the build-time generation model, or code a step when you want to implement the function itself.
TPF creates the REST resources, gRPC services, local clients, function-style handlers, and runtime files that would otherwise become handwritten service glue. An adapter is the generated code around your business function: it lets another component call the function through the selected transport.
Generated code keeps business logic independent of whether a caller uses REST, gRPC, local in-process calls, or a serverless function entry point. That same generated runtime can be packaged as a standard Quarkus service for containers and Kubernetes or as a FUNCTION deployment when that model fits better. See Portable Serverless Functions and runtime layouts when you want the details behind platform mode, transport mode, logical placement, and Maven/container packaging.
The generated runtime starts the flow, invokes each step, records execution state when configured, retries failed transitions, and exposes status/result endpoints for background work. For crash-surviving background execution, TPF can store accepted work outside the current JVM, recover it after restart, and send terminal execution failures to a DLQ, a dead-letter channel for investigation or replay.
The exact config value for this mode is QUEUE_ASYNC; start with the Orchestrator Runtime guide before using it in production.
Persistence and caching matter here more than the word "plugin" suggests. Persistence stores business outputs developers can query later from APIs, reports, or UIs. Caching protects expensive steps, speeds recomputation, and supports replay or rewind scenarios when downstream logic changes. Together they reduce the need to invent separate state stores, replay workflows, or read-model plumbing.
Plugins add declared cross-cutting work such as persistence, cache, telemetry, and logging. An aspect is the rule that says where the plugin runs, for example before or after a step; the plugin provides the implementation.
That keeps business functions focused on domain behaviour while TPF keeps generated plugin calls aligned across REST, gRPC, and local execution.
See State, Replay, and Queryable Data for the full persistence-and-caching story.
Validate and enrich records, produce status output, reject one malformed item, and continue the workload.
Crawl, parse, tokenize, index, cache intermediate results, and replay safely when source content changes.
Pass stable checkpoints from one pipeline to the next without inventing custom handoff code.
Reuse embedding, vector-search, or LLM helper libraries as operators inside a typed Java flow.
Run the same typed flow behind AWS Lambda, Azure Functions, or Google Cloud Run functions without rewriting the business code.
Run the same typed flow as a standard Quarkus service in containers or Kubernetes when you want service-style deployment and operations.
FUNCTION platform guide.