Skip to content

Yann-Favin-Leveque/rocketchain

Repository files navigation

RocketChain

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.


Why

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).


Quick start

  1. 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
  2. Create a projectNew project on the home page walks you through identity, database, security, and LLM providers. The wizard scaffolds the directory, the .rocketchain manifest, and an .env skeleton.
  3. 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).
  4. Build a flow — create an agent JSON, drop it into a .rocketflow, wire Start → Agent → End, click Generate. The output is a mvn clean compile-ready Spring Boot project.

Core concepts

A RocketChain project is a directory on disk containing:

  • *.rocketflow — a typed graph (ReactFlow JSON), type: "main" or type: "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 agents
  • src/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.


Visual editor

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.


Prompt DSL

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.


LLM providers

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.


Code generation

Click Generate. The pipeline:

  1. 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.
  2. Compile — each main .rocketflow lowers to a @Service + a typed trigger wrapper (@RestController / @Scheduled / @EventListener). Sub-flows inline as private helper methods (multi-output → static records).
  3. 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.
  4. 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.


Authoring .rocketflow by hand

.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.example

Sub-flows

Reusable typed graphs callable from main flows via SubflowNode. Rules:

  • Exactly one InputNode and one OutputNode per sub-flow.
  • No Start/End in sub-flows; no Input/Output in 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.


Tech stack

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).


Project status

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.


License

MIT — see LICENSE. Built by Yann Favin-Levêque.

About

Visual editor for agentic AI flows that compiles to Spring Boot. Drag typed nodes, wire exec & data edges, click Generate — out comes a production-grade Java backend powered by agentic-helper. Browser-only (File System Access API), agent-friendly (.rocketflow JSON + AGENTS.md translation guide).

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages