Visual editor for agentic flows that compiles to Spring Boot. Think LabVIEW for AI agents: drag nodes onto a canvas, wire them with exec and data edges, click Generate — out comes a production-grade Java backend powered by agentic-helper.
🌐 Live app: rocketchain.vercel.app
There is no runtime server — everything runs in your browser via the File System Access API. Your project lives on disk; RocketChain just edits it.
Building agentic backends in Java means stitching together LLM calls, control flow, retries, async coordination, validation, and Spring Boot scaffolding. RocketChain pulls all of that into a typed visual graph: each node is a small typed unit (Agent, IfElse, ForEach, SubflowCall, ...), edges are typed too (orange = control, blue = data), and the codegen lowers the whole thing to a @Service plus a typed trigger wrapper (@RestController / @Scheduled / @EventListener).
It's also designed to be agent-friendly: every .rocketflow is plain JSON, validated by a JSON Schema. The included AGENTS.md translation guide lets an AI coding assistant author flows by hand, and the codegen CLI gives a fast feedback loop (mvn compile in ~5s).
- Open the live app at rocketchain.vercel.app, or clone & run locally:
git clone https://github.com/Yann-Favin-Leveque/rocketchain.git cd rocketchain npm install npm run dev - Create a project — New project on the home page walks you through identity, database, security, and LLM providers. The wizard scaffolds the directory, the
.rocketchainmanifest, and an.envskeleton. - Configure
LLM_INSTANCES— open Project Settings → LLM Providers and fill in at least one provider (OpenAI, Anthropic, Mistral, Grok, DeepSeek, Gemini, or Azure flavors of each). - Build a flow — create an agent JSON, drop it into a
.rocketflow, wireStart → Agent → End, click Generate. The output is amvn clean compile-ready Spring Boot project.
A RocketChain project is a directory on disk containing:
*.rocketflow— a typed graph (ReactFlow JSON),type: "main"ortype: "sub"prompts/agents/*.json— one LLM persona per file (model, instructions, tools, ...)prompts/blocks/*.json— reusable prompt fragments inlined via<<<block::name>>>prompts/skeletons/*.json— prompt templates with editable slots<<{name}>>prompts/tools/*.json— function-call tool definitions for autonomous agentssrc/main/java/<base>/...— generated Spring Boot code (services, controllers, tools)
The visual editor manages all of this; nothing forces you to use the UI — files are plain JSON / Java and a JSON Schema (schema/rocketflow.schema.json) validates them.
ReactFlow canvas with two edge kinds:
- Exec edges (orange) — control flow (which node runs next)
- Data edges (blue) — typed values between handles
Right-click for the node palette. Each category has an accent color:
| Category | Examples |
|---|---|
| Agent | AgentNode — fires an LLM call, optional autonomous + tools |
| Data | ValueNode, VariableNode, GlobalVariableNode |
| Operator | math, comparison, casts, list/string ops, boolean |
| Control flow | If/Else, For, While, Switch, Try/Catch |
| Async | CompletableNode, forCompletable, listCompletable, AllOf |
| Flow | Start, End, Input, Output, SubflowNode, EventEmitter |
InputNode / OutputNode only appear in sub-flows; Start / End only in main flows.
Agents and blocks support a small inline DSL:
| Tag | Effect |
|---|---|
<<<block::name>>> |
Inline a reusable block at this position |
<<<input_format>>> |
Injected at runtime: the agent's input JSON schema |
<<<output_format>>> |
Injected at runtime: the agent's output JSON schema |
<<<var::X>>> |
Dynamic prompt variable, wired at runtime via an input handle on the AgentNode |
<<<globalvar::X>>> |
Resolves at codegen time from GlobalConstants.java |
<<{slot}>> |
Skeleton-editable region — only these are mutable when an agent uses the skeleton |
The prompt editor has an Expand toggle to preview the fully-resolved prompt with blocks, skeletons and format placeholders all merged.
Configure in Project Settings → LLM Providers. Supported:
openai · anthropic · mistral · grok · deepseek · gemini · azure-openai · azure-anthropic · azure-mistral · azure-grok · custom (data-driven CustomProviderSpec)
Per-instance fields: id, provider, url, key, models (CSV), enabled, optional apiVersion (Azure) and rateLimits ({ "*": 3 } or per-model { "gpt-5": 40 }).
Keys can be inlined as literals or referenced via ${VAR} placeholders resolved at boot by spring-dotenv.
Click Generate. The pipeline:
- Validation — blocks generation on errors (e.g. agent with
model="none", sub-flow without Input/Output, undefined tool reference). Warnings are reported but don't block. - Compile — each main
.rocketflowlowers to a@Service+ a typed trigger wrapper (@RestController/@Scheduled/@EventListener). Sub-flows inline as private helper methods (multi-output → static records). - Write — Java files land under
src/main/java/<base>/{service,controller,tools}/. Tab-driven Java families (Entity, Repository, Routine, Event) are merged via//{Edit here:}markers, preserving user edits across regen. - Stack — Spring Boot 3.4 · Java 17 · agentic-helper 1.24+ · Hibernate 6 · Spring Security 6 · JJWT 0.12.
After generation, mvn clean compile should pass.
.rocketflow files are plain JSON validated by schema/rocketflow.schema.json (auto-loaded in VS Code via .vscode/settings.json). The full translation guide for AI coding assistants — methodology, node catalog, agent/tool shapes, common pitfalls — lives in AGENTS.md.
A CLI is provided for fast iteration without the UI:
# Stage-by-stage debug dump (parser → walker → AST → emitted Java)
npx tsx tools/codegen-cli.ts debug path/to/flow.rocketflow
# Full project build + mvn compile
npx tsx tools/codegen-cli.ts smoke path/to/flow.rocketflow \
--subflows=path/to/subflows-dir \
--agents=path/to/agents-dir \
--tools=path/to/tools-dir \
--out=tmp/out --package=com.exampleReusable typed graphs callable from main flows via SubflowNode. Rules:
- Exactly one
InputNodeand oneOutputNodeper sub-flow. - No
Start/Endin sub-flows; noInput/Outputin main flows. InputNode's named/typed parameters → sub-flow signature;OutputNode's → return type.
Multi-output sub-flows lower to a static record:
SubflowResult_processOrder result = _sub_processOrder(amount);
Double total = result.total();
String label = result.label();The compiler resolves transitively-reachable sub-flows automatically.
Frontend — React 18.3, Vite 6, TypeScript 5, ReactFlow 11, Tailwind, shadcn/ui, Geist design system.
Codegen — pure TypeScript pipeline (parser → walker → AST → emitters). Browser-side via the File System Access API; no backend.
Generated runtime — Spring Boot 3.4 + agentic-helper (multi-provider Java AI library, supports prompt caching, tool-use loops, structured outputs, custom providers).
v1.0 — public beta. The visual editor and codegen pipeline are functional end-to-end. Areas of active iteration:
- Marker-preservation coverage across more file families
- Performance / code-splitting on the frontend bundle
- Additional node types and sub-flow ergonomics
Issues and feature requests welcome on the GitHub repo.
MIT — see LICENSE. Built by Yann Favin-Levêque.