Skip to content

reekta92/pinstar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pinstar

image

A terminal-based diagram editor for Obsidian Canvas, Mermaid, Graphviz DOT, and PlantUML files. Built with Rust and the Ratatui framework.

Disclaimer

pinstar is a sub-project of clin-rs. Separated for standalone use/testing.

Usage

pinstar <FILE>.canvas|.md|.dot|.puml

If the file doesn't exist, pinstar creates an empty diagram in the detected format.

Supported Formats

Extension Format Layout
.canvas Obsidian Canvas JSON Free-form, force-directed
.md, .mermaid Mermaid flowchart syntax Hierarchical (auto)
.dot, .gv Graphviz DOT syntax Hierarchical (auto)
.puml, .plantuml PlantUML activity syntax Hierarchical (auto)

Features

  • Multi-Format Support: Read, write, and edit Canvas, Mermaid, DOT, and PlantUML diagrams
  • Spec Compliance: Full Obsidian .canvas JSON support (text, file, link, and group nodes)
  • Interactive TUI: Pan, zoom, and navigate node relations inside the terminal using ratatui
  • Inline Editing: Built-in node content editing via ratatui-textarea
  • Node Shapes: Rectangle, Diamond, Circle, Cylinder, Stadium (flowchart formats)
  • Edge Styles: Solid, Dashed, Dotted
  • Color Presets: 10 colors (Default, Red, Orange, Yellow, Green, Cyan, Blue, Purple, Magenta, White)
  • Hierarchical Layout: Automatic layout for Mermaid, DOT, and PlantUML with 4 orientations
  • Undo/Redo: Full undo/redo stack
  • Raw Editor: Split-pane JSON/text editor with live sync

Keybindings

Navigation

Key Action
Arrow keys / hjkl Select adjacent nodes
Ctrl+J / + Zoom in
Ctrl+K / Zoom out
Ctrl+F Fit all nodes into view
Alt+Enter Cycle pane focus

Editing

Key Action
i / Enter Edit selected node content
r Rename node (ID)
s Resize node
a Open context menu
x Delete selected node
o Set node color
p Set node shape (flowchart only)

Connections

Key Action
c Create connection from selected node
d Delete connection to target node
b Delete all connections on selected node

Global

Key Action
Ctrl+S Save diagram
Ctrl+Z Undo
Ctrl+Y / Ctrl+Shift+Z Redo
Ctrl+R Cycle orientation (flowchart) / Reload from disk (canvas)
Ctrl+G Toggle background grid
Ctrl+E Toggle raw editor pane
Ctrl+X Toggle external editor mode
Ctrl+L Toggle spatial lock
Ctrl+O Toggle orthogonal arrows (canvas only)
Esc / q Dismiss / deselect / quit
? Toggle help

Mouse Controls

Action Effect
Left-click Select node
Left-double-click Edit node content
Left-drag (on node) Move node
Left-drag (empty) Pan canvas
Right-click (on node) Node context menu
Right-click (on edge) Edge context menu
Right-click (empty) Add node menu
Right-drag Selection rectangle (multi-select)
Middle-click drag Pan canvas
Scroll Zoom in / out

Node & Edge Types

Nodes

  • Text — Standard text node with configurable shape and color
  • File — Embedded file reference (Canvas only)
  • Link — Embedded URL reference (Canvas only)
  • Group — Container for grouping child nodes (Canvas only)

Shapes (flowchart formats)

Rectangle · Diamond · Circle · Cylinder · Stadium

Edge Styles

Solid · Dashed · Dotted

Orientations (flowchart)

Top-Down · Left-Right · Right-Left · Bottom-Up

Colors (10 presets)

Default · Red · Orange · Yellow · Green · Cyan · Blue · Purple · Magenta · White

Known Issues / Compatibility

  • Node titles may not be preserved when editing Obsidian Canvas files (Obsidian uses a different title format)
  • No image rendering — images display as simple nodes
  • Diamond and Stadium shapes not available in PlantUML
  • Color editing not available in Mermaid or PlantUML syntaxes
  • Groups only supported in Canvas format

Technical Stack

  • Framework: Ratatui v0.30 for terminal rendering
  • Terminal: Crossterm v0.29 for cross-platform input
  • Serialization: Serde JSON for Canvas spec parsing
  • Text Editing: ratatui-textarea for inline editing
  • Parsing: regex for multi-format parsers
  • Identifiers: uuid crate for RFC 4122 compliant node tracking

Installation

Pre-built Packages

Pre-compiled binaries and system packages (.deb, .rpm, PKGBUILD) for Debian/Ubuntu, Fedora/RHEL, and Arch Linux are available on the GitHub Releases page.

Via Cargo

cargo install pinstar

Building from Source

Requires Rust toolchain (MSRV 1.85).

cargo build --release

About

Canvas file editor compatible with Obsidian .canvas files.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages