How it works
rombik parses your code with a real parser (Python, JavaScript, TypeScript, C, C++, C#, Java, Go, PHP and Pascal), builds a logical tree of the algorithm and lays it out as an ISO 5807 flowchart — in seconds, right in your browser.
Standard shapes
Terminator
Start / End
Process
Action, computation, assignment
Decision
Condition (if / while)
Input-output
input / print, cin / cout
Loop boundary
for loop with a counter
Subprogram
Call to your own function
What’s already supported
Each function becomes its own chart; its parameters are drawn as an input parallelogram, and return as an output parallelogram. In the editor you can not only paste code but also drag a file (.py .js .ts .go .php .cpp .c .java .cs .pas) straight onto the code area — the language is detected from the extension.
Python full support
- if / elif / else, match / case
- for … in range, while, for/else, while/else
- while True … break (post-condition), infinite loop
- break / continue / return / raise
- try / except / finally, with
- list / set / dict comprehension → loop
- input / print → “Input …” / “Output …”
- methods & nested classes (“Class.method”), decorators
- lambdas (name = lambda …) → separate chart, ternary a if c else b → branch
JavaScript full support
- if / else, switch (all cases + default), ternary ?:
- for, for … of, for … in, while, do / while, for(;;) → infinite loop
- break / continue / return / throw, recursion
- console.log → “Output …”, prompt → “Input …”
- functions, arrow (=>), methods & nested classes (“Class.method”)
- try / catch / finally — the try body is drawn
- an arrow/function assigned to a name → separate chart; inline callback → text action
TypeScript full support
- everything JavaScript has (TS uses the same parser)
- types, interfaces, generics, as / satisfies — annotations are stripped, logic remains
- enum, namespace / module → charts per member
- public/private constructor parameters, decorators
C / C++ full support
- if / else, switch (all cases + default, fallthrough → “||”)
- for (classic and range-based), while, do / while
- break / continue / return, recursion
- cin / cout and printf / scanf → input/output
- try / catch
- class methods (“Class::method”), operators, namespace, templates
- lambdas (auto f = [](){…}) → separate chart, ternary ?: → branch
- C — a subset of C++ (same handling)
C# full support
- if / else, switch (case + default, fallthrough, switch expression)
- for, foreach (foreach (var x in c)), while, do / while
- break / continue / return / throw, recursion
- Console.ReadLine() → “Input …”, Console.Write/WriteLine → “Output …”
- methods, constructors, properties, static methods (“Class.method”)
- classes, structs, interfaces, enum → charts per method
- call to your own method → subprogram
- try / catch — the try body is drawn
- lambdas (x => …) → separate chart, ternary ?: → branch
Java full support
- if / else, switch (case + default, fallthrough → “||”, arrow and colon)
- for, for-each (for (T x : c)), while, do / while
- break / continue / return / throw, recursion
- Scanner.nextX() → “Input …”, System.out.print* → “Output …”
- methods, constructors, static methods (“Class.method”)
- classes, interfaces, enum → charts per method
- call to your own method → subprogram, strings "…" → “…”
- try / catch — the try body is drawn
- lambdas ((x) -> …) → separate chart, forEach → loop, ternary ?: → branch
Go full support
- if / else (with init), switch (all cases, no fallthrough), type switch, select
- for (classic, while-form, infinite), for … range
- break / continue / return, recursion
- fmt.Print / Println / Printf → “Output …”, fmt.Scan → “Input …”
- functions, methods with a receiver (“Type.method”), multiple return values
- defer / go → “defer …” / “in parallel …”, panic → abnormal termination, os.Exit → End
- “:=” and “=” → action
PHP full support
- if / elseif / else, switch (case + default), match → branch
- for, foreach (foreach ($a as $x)), while, do / while
- break / continue / return / throw, recursion
- echo / print → “Output …”, readline / fgets → “Input …”
- functions, class methods (“Class.method”), closures (function / fn)
- try / catch / finally — the try body is drawn
- variables without “$” (per the standard the language doesn’t matter), ternary ?: → branch
Pascal full support
- procedure / function → separate charts
- assignment “:=” → action
- writeln / write → Output, readln / read → Input
- if .. then .. else
- for .. to / downto .. do
- while .. do, repeat .. until
- case .. of
Telegram bot for groups
Studying as a group? There’s @rombik_app_bot. Add it to your course chat, drop a code file or type /render with code — and the bot returns a ready flowchart and a .docx right in the chat. The group shares one common balance of exports: an admin tops up, everyone uses it. The first one is free. You can also DM the bot solo: link your rombik account and render from your own export balance, no group needed.
The rombik format — for any language or a plain-words description
What if your language isn’t among the ones rombik parses (Python, JavaScript, TypeScript, C, C++, C#, Java, Go, PHP, Pascal), or you have no code at all — only a description of the algorithm in words? That’s what the rombik native format is for: you give the chart directly, not as code. It’s the same mechanism the AI uses — and it covers two cases:
- No code, just a description in words — ask an AI (ChatGPT/Claude) to build the chart from your text and paste the result
- Your language isn’t parsed (assembler, Go, Rust, JS, pseudocode) — the AI turns any code into an ISO 5807 chart
- Full manual control — give the chart tree directly (astJSON), the layout adds the correct ISO 5807 shapes itself
- Then fine-tune it in the visual editor. Available with Pro
Easiest — with <b>Pro</b>: in the editor pick the «🪄 Description / any language (AI)» language, paste a plain-words description (or code in any language) and press «Generate». The AI only <b>translates</b> it into the rombik language, while the chart is drawn to ISO 5807 by our <b>deterministic engine</b> — not the AI, so it’s stable and standard-compliant. Free option (no Pro): copy the format specification, paste it into ChatGPT/Claude with your description — ask it to return the chart in the rombik format, then paste the answer into the editor with the “rombik” language selected.
Limits: what rombik doesn’t draw
An ISO 5807 flowchart describes the structural control flow, not every detail of the language. So some constructs are intentionally not expanded in detail — the same across all languages:
- Exception handling (
try/catch/finally,except) — ISO 5807 has no standard shape for exceptions; only the maintrybody is drawn. - Streams and inline anonymous lambdas (
stream,map(lambda…), a lambda inside astd::sort(…)call) — stay as a text action. But a lambda assigned to a name (f = lambda …) does become a separate chart. - Labeled
break/continue(break label) — break the nearest loop; the label is ignored. - Anonymous / local classes, text blocks — shown as a text action, not a separate chart.
These are limits of the “arbitrary code → standard flowchart” genre, not bugs. If something’s missing for you — hit “Bug or idea” below and I’ll take a look.
Interactive visual editor
Besides automatic generation, rombik has a full visual editor (the “✎ Edit” button on the chart card). You can:
- Drag blocks (they snap to the grid), move a whole selected group together
- Reroute arrows or draw your own connections; edit text with a double-click
- Split into charts manually: select blocks with a lasso (Shift+drag the background) or Shift-click, then “⊞ Separate chart” moves them into their own figure (framed)
- “⊟ Merge” — merges several charts back into one
- Arrows between charts automatically become connector pairs (circles A, B, C…)
- “Edit all” — all the code’s functions on one canvas, so you can split blocks between them
- Undo / redo, an infinite canvas with pan/zoom
Delegate to AI (API / CLI / MCP)
rombik isn’t only a website. A ready-made skill for AI agents (Claude Code, etc.) lets you just ask — and the agent builds the flowcharts from your code. Prefer to drive it yourself? The same engine is available over an HTTP API, a CLI and MCP (for clients like Claude Desktop or Cursor — the agent gets a render tool right in the chat). Either way you only pay for the charts you generate; create a key in your account.
- 🤖 AI agents — a ready-made skill (Claude Code, etc.) + OpenAPI: the agent generates charts from your code, you just give the task
- rombik CLI —
renderandbatchin the terminal; browser login (rombik auth) - HTTP API — from scripts, CI, or your own backend (with an API key)
- Same formats: Word (.docx), Visio, draw.io, Typst, Excalidraw, SVG, PNG, PDF; batch render → a multi-page PDF or a zip
Export and formats
After building a chart, you can save it in various formats:
- Word (.docx) Real Word document objects (not an image) — native Word shapes, standard-compliant. Tall charts split into pages with connectors
- SVG / PNG Perfect for pasting into Word, Google Docs or presentations
- PDF A vector format for print — coursework, handouts, slides
- Typst Native code for modern typesetting systems for academic papers
- Excalidraw Opens in Excalidraw as native board objects — for whiteboards and presentations
- draw.io Editable shapes in draw.io / diagrams.net — for online boards and collaboration
- Visio (.vsdx) Native Visio (.vsdx) shapes — the corporate diagram standard
Structograms (Nassi-Shneiderman)
rombik builds not only flowcharts but also Nassi-Shneiderman structograms — nested boxes, not a single arrow. Same code, a different view: in the editor you flip the “Structogram” toggle and any function becomes a structogram. It exports in any format (Word, Visio, draw.io, Typst, Excalidraw, SVG, PNG, PDF) and works the same across every language.
Rubber Duck Debugging 🦆
Stuck with an algorithm or tired of coding? In the bottom-right corner of the editor a Rubber Duck is always waiting for you. It’s made specifically to support you, give a useful hint about working with rombik and just lift your mood. Click it whenever you need moral support!
Chart came out wrong? Got an idea?
If some construct was drawn incorrectly — write in, add a snippet of code, and I’ll fix it.