Skip to content

softalink/esdraw

Repository files navigation

EsDraw logo — an isometric cube framed by crosshair guide lines

EsDraw — 2.5D Isometric Shear for draw.io

Turn any draw.io shape into a 2.5D isometric shape with a single right-click.

A draw.io / diagrams.net plugin that adds true isometric shearing — modeled pixel-for-pixel on icograms.com/designer.

status: alpha License: MIT CI Live demo core coverage: 100% built for: draw.io

A real self-hosted draw.io with EsDraw already loaded — no install, no sign-up.

EsDraw live demo — a real draw.io canvas of isometric shapes (rectangle, circle, list, table, container) connected by arrows, with the icograms-style crosshair guides


EsDraw brings isometric / 2.5D diagramming to the tool millions already use. No new app to learn, no export dance — right-click a box, choose a direction, and it snaps onto an isometric plane. Walls, floors, boxes, containers, connectors and their labels all shear together as one coherent scene.

  • 🧑‍💻 For users — install it and start drawing isometric diagrams in minutes.
  • 💛 For sponsors — help keep this free, open, and moving toward v1.
  • 🛠️ For contributors — a small, clean, 100%-tested codebase that's easy to jump into.

For users 🧑‍💻

What you can do

Feature
Four isometric shears + reset — right-click → Shear Left / Right / Clockwise / Counterclockwise / No Shear.
🎯 Faithful to icograms — the exact 2:1 isometric angle (26.565°) and transforms used by icograms Designer.
🔤 Labels shear with the shape — text stays in place and tilts onto the plane.
📦 Containers & lists — shear a container and everything inside shears as one unit.
Smart connectors — arrow ends stay attached to the sheared connection points.
Isometric guide lines — a selected sheared cell shows icograms-style crosshair/align lines.
Isometric resize — resize handles and the selection box follow the shear; dragging resizes along the sheared axes and stays anchored.
↩️ Non-destructive — it's one style flag on the cell; "No Shear" restores the original instantly, and normal undo works.

Quick start

EsDraw is a standard draw.io plugin. It works with draw.io Desktop or a self-hosted draw.io (the hosted app at app.diagrams.net restricts third‑party plugins).

git clone https://github.com/softalink/esdraw.git
cd esdraw
npm install
npm run build          # produces dist/esdraw-isometric.js

Then load dist/esdraw-isometric.js into draw.io:

  • draw.io Desktop / self-hosted: Extras → Plugins… → Add and point it at the file (or host it and register it as a plugin).
  • Accept the "load third‑party plugin" confirmation.
  • Select a shape, right-click, and pick a Shear command. Pick No Shear to reset.

Prefer to try before installing? Try the live demo — a full self‑hosted draw.io with EsDraw already loaded, opening a sample isometric diagram (rectangle, circle, list, table, and a container, inter‑connected with arrows). Right‑click any shape to shear it, or drag a new one from the palette. No install, no sign‑up.

The four states

Command Looks like Transform (about the cell center, 26.565°)
Shear Left left wall ▱ skewY(+26.565°)
Shear Right right wall ▰ skewY(−26.565°)
Shear Clockwise top face ◆ scale(1.4142, 0.7071) rotate(+45°)
Shear Counterclockwise top face ◆ scale(1.4142, 0.7071) rotate(−45°)
No Shear flat clears the state

The states are absolute and mutually exclusive (Left then Right = Right), just like icograms. Sheared cells still move in normal x/y — icograms' "isometric" movement comes from an optional snap‑grid, and draw.io already provides one.


Why EsDraw?

Isometric illustrations make architecture, infrastructure, network, and process diagrams instantly readable — but today you either pay for a dedicated isometric tool or hand-fake the perspective. Meanwhile draw.io is everywhere: free, open source, offline-capable, embedded in Confluence, GitLab, VS Code and more.

EsDraw closes that gap: isometric power inside the tool you already have, matching a proven design language (icograms) so the results look right, not hand-wavy. It's small, dependency-light, MIT-licensed, and built to be embedded or extended.


Support the project 💛

EsDraw is free and MIT-licensed, and we intend to keep it that way. Sponsorship pays for the unglamorous work that makes a plugin trustworthy: cross-version testing against draw.io releases, accessibility, documentation, and shipping the roadmap toward a stable v1.

  • Star the repo — the cheapest, most effective way to help it find users.
  • 💵 Sponsor on GitHub — one-off or monthly; every tier helps.
  • 🏢 Commercial / priority support — need an integration, a custom isometric feature, or a supported build for your product? Open an issue or email info@softalink.com.

What your sponsorship funds

  • Keeping the plugin working across new draw.io / mxGraph releases.
  • A published, versioned build and an easy one-click install path.
  • Docs, examples, and templates for common isometric diagram types.
  • Accessibility and polish (keyboard flows, high-contrast, reduced-motion).

Sponsors (and notable contributors) are credited here as the project grows.


For contributors 🛠️

New contributors are genuinely welcome — the codebase is intentionally small, the core is 100% unit-tested with zero framework dependencies, and every behavior has been verified against both a real self-hosted draw.io and the live icograms app.

Architecture at a glance

draw.io is built on the mxGraph library. EsDraw keeps all the tricky geometry in pure, framework-free functions and wires them into mxGraph through thin, replaceable adapters:

Layer Files What it does
Core (pure, 100% covered) src/iso/geometry.js, shear.js, rendering.js, edge-shear.js, crosshair.js, actions.js, menu-items.js Style parsing, the shear matrices, point/delta transforms, edge-endpoint math, resize math. No mxGraph imports.
mxGraph glue src/iso/install-rendering.js, install-crosshair.js Monkeypatch mxShape/mxText/mxCellRenderer/mxVertexHandler to render shears, labels, fold controls, connectors, the crosshair, and the sheared selection box + resize.
draw.io adapter src/isometric-plugin.jsdist/esdraw-isometric.js Registers the right-click actions and installs the glue in a real draw.io.
mxGraph playground (internal) src/demo.js + dev/index.html Runs the same core on a bare mxGraph page — an internal R&D / E2E harness for contributors, not a public demo. The public live demo runs the plugin inside a real self-hosted draw.io.

Design principle: if it's math, it's a pure tested function; if it touches the DOM, it's a thin patch. That's why the core hits 100% coverage and the browser behavior is checked end-to-end.

Every non-trivial decision is written up in docs/design — including the reverse-engineered icograms findings (angles, transforms, align lines) that this plugin matches.

Set up & develop

npm install
npm test               # unit tests (node --test) — the core logic
npm run test:coverage  # unit tests with coverage (core is 100%)
npm run build          # build dist/ plugin + dev/vendor/ demo bundle
npm run dev            # internal mxGraph playground at http://localhost:8130 (R&D/E2E only)
npm run e2e            # Playwright end-to-end tests in a real mxGraph editor

Requirements: Node 20+ (uses the built-in node --test runner and coverage). No global tooling needed.

CI/CD

  • CI (.github/workflows/ci.yml) runs unit tests + coverage + build on Node 20 & 22, plus the Playwright E2E suite, on every push and pull request to main. The built plugin is uploaded as a workflow artifact.
  • Release (.github/workflows/release.yml) — push a version tag (git tag v0.1.0 && git push origin v0.1.0) to build the plugin and publish a GitHub Release with dist/esdraw-isometric.js and a zipped bundle attached (auto-generated notes).
  • Pages (.github/workflows/pages.yml) — assembles a self‑hosted draw.io (pinned to v30.2.7) with the EsDraw plugin registered and the sample isometric diagram (demo/) open, behind a small branded landing page, and deploys it to GitHub Pages on every push to main (the live demo). Enable once via Settings → Pages → Source: GitHub Actions.

Contributing guidelines

  • Test-first for logic. New geometry/behavior goes in src/iso/* as a pure function with a test/*.test.js beside it. Keep the core at 100%.
  • Keep DOM patches thin. Glue code should mostly delegate to the pure core.
  • Small, focused PRs with a clear description; add a note to docs/design for anything architectural.
  • Verify in a real editor. npm run dev (mxGraph) and, for plugin changes, a self-hosted draw.io.
  • Be kind. This is a friendly, low-stakes project.

Good first issues: new isometric diagram templates, a published/hosted build, keyboard shortcuts for the shear commands, and docs/examples. Open an issue at https://github.com/softalink/esdraw/issues — or email info@softalink.com — to say hi or propose something.


Roadmap

  • Four icograms shear states + reset, faithful 26.565° transforms
  • Labels, container/list children, fold controls, connectors
  • Isometric crosshair guide lines
  • Sheared selection box + resize along the sheared axes
  • CI + tag-driven release automation (GitHub Actions)
  • One-click / hosted install (registered plugin build)
  • Isometric diagram templates & examples
  • Keyboard shortcuts and a small toolbar
  • Optional isometric snap-grid
  • First tagged release + a compatibility matrix across draw.io versions

Have an idea? Open an issue.


Credits

License

MIT © 2026 Softalink LLC. Free for personal and commercial use.

About

EsDraw — a draw.io / diagrams.net plugin that turns any cell into a 2.5D isometric shape with one right-click, faithfully matching icograms Designer.

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors