ij - Idea Junction
Connect vague ideas and evolve them to fully functional systems
Idea Junction (ij) is a bidirectional diagramming system that enables seamless movement between natural language, visual diagrams, and code. Built on research into modern diagramming tools and best practices, it provides a foundation for transforming ideas into structured, analyzable diagrams.
Features
Phase 1 (Core) ✅
- Text-to-Diagram Conversion: Convert simple text descriptions into diagrams
- Intermediate Representation (IR): AST-like structure for bidirectional conversion
- Graph Analysis: Powered by NetworkX for path finding, cycle detection, and graph manipulation
- Mermaid Support: Full rendering support for GitHub-native diagrams
- CLI & Python API: Use as a command-line tool or integrate into your Python projects
- Type-Safe: Full type hints and validation
Phase 2 (Bidirectional & Multi-Format) ✅
- Mermaid Parser: Parse Mermaid diagrams back to IR (true bidirectional conversion)
- PlantUML Renderer: Export to PlantUML for enterprise UML diagrams
- D2 Renderer: Export to D2 (Terrastruct) for modern, beautiful diagrams
- Graphviz Renderer: Export to DOT format with multiple layout engines
- Enhanced Text Converter: Support for conditionals, parallel flows, and loops
- Format Conversion: Convert between Mermaid, PlantUML, D2, and Graphviz
Phase 3 (AI & Code Analysis) ✅
- AI/LLM Integration: Natural language to diagrams using OpenAI API (10-20x faster)
- Python Code Analysis: Reverse engineer flowcharts from Python functions
- Call Graph Generation: Visualize function dependencies
- Class Diagrams: Generate from Python classes with inheritance
- Iterative Refinement: Conversational diagram improvement with AI
- Hybrid Workflows: Combine code analysis with AI enhancement
Phase 4 (Advanced Features) ✅
- Bidirectional D2: Parse and render D2 diagrams (complete format support)
- Sequence Diagrams: Generate Mermaid sequence diagrams for interactions
- Interaction Analysis: Extract sequence diagrams from code and text
- Diagram Transformations: Simplify, filter, merge, and optimize diagrams
- Cycle Detection: Find circular dependencies and loops
- Subgraph Extraction: Extract relevant portions of large diagrams
- Multi-Format Workflows: Seamlessly convert between all supported formats
- Statistics & Analysis: Comprehensive diagram metrics and insights
Installation
pip install ij
Or install from source:
git clone https://github.com/i2mint/ij
cd ij
pip install -e .
Quick Start
Command Line
# Convert text to Mermaid diagram
ij "Start -> Process data -> Make decision -> End"
# Save to file
ij "Step 1 -> Step 2 -> Step 3" -o diagram.mmd
# Specify direction
ij "A -> B -> C" -d LR -o horizontal.mmd
# Read from file
ij -f process.txt -o output.mmd
Python API
from ij import text_to_mermaid
# Simple conversion
mermaid = text_to_mermaid("Start -> Process -> End")
print(mermaid)
Output:
flowchart TD
n0([Start])
n1[Process]
n2([End])
n0 --> n1
n1 --> n2
Manual Diagram Creation
from ij import DiagramIR, Node, Edge, NodeType, MermaidRenderer
# Create diagram programmatically
diagram = DiagramIR(metadata={"title": "My Process"})
diagram.add_node(Node(id="start", label="Start", node_type=NodeType.START))
diagram.add_node(Node(id="process", label="Do work", node_type=NodeType.PROCESS))
diagram.add_node(Node(id="end", label="End", node_type=NodeType.END))
diagram.add_edge(Edge(source="start", target="process"))
diagram.add_edge(Edge(source="process", target="end"))
# Render to Mermaid
renderer = MermaidRenderer(direction="LR")
print(renderer.render(diagram))
Graph Analysis
from ij import DiagramIR, Node, Edge
from ij.graph_ops import GraphOperations
# Create a workflow
diagram = DiagramIR()
diagram.add_node(Node(id="a", label="Start"))
diagram.add_node(Node(id="b", label="Task 1"))
diagram.add_node(Node(id="c", label="Task 2"))
diagram.add_node(Node(id="d", label="End"))
diagram.add_edge(Edge(source="a", target="b"))
diagram.add_edge(Edge(source="b", target="c"))
diagram.add_edge(Edge(source="c", target="d"))
diagram.add_edge(Edge(source="a", target="d")) # Shortcut path
# Find all paths
paths = GraphOperations.find_paths(diagram, "a", "d")
print(f"Found {len(paths)} paths") # Output: Found 2 paths
# Get topological order
order = GraphOperations.topological_sort(diagram)
print(order) # Output: ['a', 'b', 'c', 'd']
# Simplify (remove redundant edges)
simplified = GraphOperations.simplify_diagram(diagram)
Architecture
Based on comprehensive research into bidirectional diagramming systems, ij uses:
- AST-based IR: Core data structure for diagram representation
- Graph Model: NetworkX for analysis and transformation
- Extensible Renderers: Pluggable output formats (Mermaid, PlantUML, D2, etc.)
- Text-based DSL: Git-friendly, version-controllable diagram source
Natural Language → DiagramIR → Mermaid/PlantUML/D2
↓
NetworkX Graph
↓
Analysis & Transformation
Node Types
ij supports several node types with automatic inference:
START: Beginning of a process (stadium shape in Mermaid)END: End of a process (stadium shape)PROCESS: Processing step (rectangle)DECISION: Decision point (diamond)DATA: Data storage (cylinder)SUBPROCESS: Sub-process (double rectangle)
Keywords like "Start", "End", "decide", "database" automatically set the correct type.
Examples
See the examples/ directory for comprehensive usage examples:
# Phase 1: Basic features
python examples/basic_usage.py
# Phase 2: Bidirectional conversion and multiple formats
python examples/phase2_features.py
Phase 1 Examples:
- Simple text-to-diagram conversion
- Manual diagram creation
- Graph analysis (path finding, topological sort)
- Different diagram directions
- Natural language processing
- Saving diagrams to files
Phase 2 Examples:
- Bidirectional conversion (Mermaid ↔ IR)
- Multi-format rendering (Mermaid, PlantUML, D2, Graphviz)
- Enhanced text conversion with conditionals
- Parallel flows and loops
- Format conversion workflows
- Complex workflow examples
Phase 3 Examples:
- Python code → flowchart diagrams
- Call graph generation
- Class diagram generation
- AI-powered natural language → diagram
- Iterative refinement with AI
- Hybrid code + AI workflows
See PHASE2.md and PHASE3.md for complete documentation.
Viewing Diagrams
Generated Mermaid diagrams can be viewed in:
- GitHub/GitLab - Paste in markdown files (native support)
- Mermaid Live Editor - https://mermaid.live/
- VS Code - Install Mermaid preview extension
- Command line - Use
mmdc(Mermaid CLI)
Example in markdown:
```mermaid
flowchart TD
A[Start] --> B{Decision?}
B -->|Yes| C[Process]
B -->|No| D[Skip]
C --> E[End]
D --> E
```
Development
Running Tests
pip install -e ".[dev]"
pytest tests/ -v
All tests should pass:
71 passed in 1.41s
Test breakdown:
- Phase 1: 26 tests (core, renderers, converters, graph operations)
- Phase 2: 26 tests (parsers, new renderers, enhanced converter)
- Phase 3: 19 tests (AI mocks, Python analyzer, +2 optional real API tests)
Note: AI tests use mocks by default. For real OpenAI API tests:
export OPENAI_API_KEY=your-key
pytest tests/test_llm_converter.py -v # Includes real API tests
Code Quality
# Run linter
ruff check ij/
# Format code
ruff format ij/
Roadmap
Phase 1 (Core Foundation) ✅
- Core DiagramIR architecture
- Mermaid renderer
- NetworkX integration
- CLI interface
- Basic text-to-diagram conversion
- Comprehensive tests (26 tests)
Phase 2 (Bidirectional & Multi-Format) ✅
- Mermaid parser (Mermaid → IR bidirectional)
- PlantUML renderer
- D2 renderer
- Graphviz/DOT renderer
- Enhanced text converter (conditionals, parallel, loops)
- Comprehensive tests (52 total tests)
- Multi-format examples
Phase 3 (AI & Code Analysis) ✅
- AI/LLM integration with OpenAI API
- Python code-to-diagram reverse engineering
- Function flowchart generation
- Call graph visualization
- Class diagram generation
- Iterative refinement with AI
- Comprehensive tests (71 total tests, including AI mocks)
- Optional real API tests
Phase 4 (Future)
- Visual editor integration
- Real-time collaboration (CRDT-based)
- Java/JavaScript code analysis
- Additional parsers (PlantUML, D2 → IR)
- Web-based interactive editor
- Local LLM support (Ollama, etc.)
- Sequence diagram generation
Research Foundation
This project is built on comprehensive research into:
- Diagram-as-code languages (Mermaid, PlantUML, D2, Graphviz)
- Python libraries (NetworkX, diagrams, graphviz)
- JavaScript frameworks (React Flow, Cytoscape.js)
- Bidirectional editing patterns
- AI-powered generation
- Technical architecture patterns
See misc/REASEARCH.md for the full research report.
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
License
MIT License - see LICENSE file for details
Links
- Repository: https://github.com/i2mint/ij
- Issues: https://github.com/i2mint/ij/issues
- Mermaid Docs: https://mermaid.js.org
- NetworkX Docs: https://networkx.org
Idea Junction - From vague ideas to fully functional systems
Metadata
Release files for ij 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ij-0.1.7.tar.gz | 113.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ij-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 194.4 kB
Release files / ij-0.1.7.tar.gz
| Download URL | ij-0.1.7.tar.gz |
|---|---|
| Size | 113.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
57e5c59f535c2d524e76ed7f90edd896d60d7cf2c07b2b2791f43f1f7d6a6d5f
|
|
BLAKE2b-256 checksum How to use checksums |
0daa8cf859372b91e25a4cc3292dc819aebc25508645201f662b96f43706e32f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ij-0.1.7-py3-none-any.whl
| Download URL | ij-0.1.7-py3-none-any.whl |
|---|---|
| Size | 80.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4d3df6a578bb094c1ef4250faff58804a4f3b611fd50f9cf861e0330502ab9bf
|
|
BLAKE2b-256 checksum How to use checksums |
7b9adb818dec80e0d8a40170ef1d064191fe5431b3279c4b0cb7db1cf4236757
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|