A investigation graph tool for mapping relationships between entities. rebuilt with Rust that which is orginally built with python.
| Action | Control |
|---|---|
| Pan canvas | Left-click + drag (empty space) |
| Zoom | Scroll wheel (0.4x–2.0x) |
| Select node/edge | Left-click |
| Move node | Click + drag selected node |
| Create edge | Right-click source node → left-click target node |
| Delete selected | Delete key or trash icon |
| Add node | Add Node dropdown → choose type → click canvas |
| Save | File → Save |
| Load | File → Load |
| New | File → New |
| Cancel edge/placement | Escape |
InvestiGraph allows investigators, analysts, and OSINT practitioners to visually map connections between people, organizations, devices, and other entities.
- 10 Entity Types: Person (Male/Female), Organization, Email, Phone, Document, Database, Social Media, Location, Device
- Interactive Graph: Pan, zoom, drag nodes, create directed edges
- Properties Panel: Edit labels and notes for nodes and edges
- Save/Load:
.investigraphJSON format with native file dialogs - Unsaved Changes Tracking: Prompts before discarding work
- Zoom-Responsive: Nodes, icons, labels, edges, and arrowheads scale with zoom
| Entity | Color |
|---|---|
| Person (Male) | Blue |
| Person (Female) | Pink |
| Organization | Orange |
| Green | |
| Phone | Purple |
| Document | Yellow |
| Database | Gray |
| Social Media | Twitter Blue |
| Location | Teal |
| Device | Light Green |
Saves use .investigraph extension (JSON internally). Includes:
- All nodes and edges
- Camera position and zoom
- Labels, notes, and properties
- Rust 1.70+
- Cargo
cargo build --release
cargo run- macroquad — Rendering engine
- egui — Immediate mode GUI framework
- egui-macroquad — egui + macroquad integration
- serde + serde_json — Graph serialization
- rfd — Native file dialogs
- open — Open URLs in browser
- image — Icon decoding & processing
- image — Asset embedding at compile time
- embed-resource — Windows resource compilation
InvestiGraph/
│
├── src/
│ ├── main.rs # Entry point, render loop, input handling
│ ├── settings.rs # Constants, colors
│ ├── core/
│ │ ├── node.rs # Node struct, entity types
│ │ ├── edge.rs # Edge struct
│ │ ├── graph.rs # Graph state management
│ │ └── mod.rs
│ ├── ui/
│ │ ├── ribbon.rs # Top toolbar (File, Add Node, Help, Trash)
│ │ ├── properties_panel.rs # Right-side panel for editing
│ │ ├── camera.rs # Pan/zoom camera
│ │ └── mod.rs
│ └── utils/
│ ├── assets.rs # AssetManager - embedded icon textures
│ ├── file_io.rs # Save/Load operations
│ └── mod.rs
│
├── assets/
│ ├── icons/
│ │ ├── Database.png
│ │ ├── Device.png
│ │ ├── Document.png
│ │ ├── Email.png
│ │ ├── female.png
│ │ ├── Location.png
│ │ ├── male.png
│ │ ├── Organization.png
│ │ ├── Phone.png
│ │ ├── Social_Media.png
│ │ └── trash.png
│ ├── logo/
│ │ ├── icon.ico
│ │ ├── Icon.png
│ │ ├── Logo (Transparent).png
│ │ ├── Logo.png
│ │ └── main.ico
│ └── screenshots/
│ └── Screenshot 1.png
│
├── .cargo/
│ └── config.toml # Static CRT linking for portable builds
│
├── app.rc # Windows resource file (icon embedding)
├── build.rs # Build script - embeds assets at compile time
├── Cargo.toml # Project manifest & dependencies
├── LICENSE
└── README.md
GNU General Public License v3.0
- Windows
- Linux
- macOS
Found a bug or have a feature request? Please open an issue on GitHub.
