dfma.tools

Elephant

Rhino models that never forget. Durable object IDs and a JSON change log on every save.

A Rhino plugin that gives .3dm files a memory. Stamps a permanent UUID on every object at creation, hashes its geometry, and on every save writes a JSON sidecar capturing the full state of the document. Diffs cleanly in Git. Browse and compare versions in the bundled HTML viewer.

What it does

  • Stamps elephant_stable_id (v4 UUID) on every object at creation. Survives copy-paste, explode/rejoin, boolean operations, and Grasshopper bake – where Rhino’s native GUIDs do not.
  • Hashes geometry into a stable geom_hash (DataCRC + bbox + type) that does not drift across save/reload cycles. Diffs flag real changes, not re-serialization noise.
  • Tracks lineage through destructive operations: boolean, explode, and join write elephant_parent_ids on the new objects so you can trace what they replaced.
  • On every save writes .elephant/<docname>/<timestamp>.json next to the .3dm. Sorted keys, 2-space indent, atomic write. Designed to live under Git: a no-op edit produces a no-op diff.
  • Per-object record: id, type, layer, name, bbox, geom_hash, parent_ids, user_strings. Plus a last_changes block summarizing the delta against the previous save.
  • Standalone HTML viewer: timeline across multiple models, two-version diff, layer tree with +/-/~ counts, search, sortable columns, lineage badges. Single index.html file, zero dependencies, dark theme, no server.

What it isn’t

  • Not a PDM with check-in/check-out. If you need formal version control with locking, approval workflow, and ECNs for an engineering team, look at Vault, Windchill, or Teamcenter – different problem, different price tier.
  • Not real-time multiplayer CAD. If you need two designers in the same model at the same time, Onshape is the cloud-native option there.
  • Not a 3D visual diff. Elephant tells you what changed (added, removed, modified-by-id) and where (layer, bbox). It does not render the geometry side by side. Open both .3dm files in Rhino for that.
  • Not a backup tool. Sidecars are a change log, not a recovery path. Keep your normal backup plan; Elephant rides on top.

Why it exists

CAD files are databases pretending to be documents. Every save mutates thousands of objects, but you cannot tell which ones from the .3dm alone. Elephant exposes the change history that is already implicit in every save – and gives every object the durable identity that Rhino’s native GUIDs do not provide. The .3dm stays the source of truth for geometry; Elephant owns identity and history.

Install

  1. In Rhino 8, type _PackageManager.
  2. Search “elephant” and install the latest version.
  3. Restart Rhino. Run _ElephantStatus to confirm it loaded.

The HTML viewer ships with the plugin. Open viewer/index.html from the package directory in any modern browser, drag-drop the .elephant/ folder next to your .3dm, and start browsing.

License

Free for personal and commercial use. No phone-home, no telemetry, no license file. Source on github.com/travw/elephant.

Support

Bugs and feature requests: file a GitHub issue, or email help@dfma.tools.

System requirements

  • Rhino 8 (Windows or Mac)
  • Disk space for sidecars next to each .3dm (about 1 MB per 1000 objects per save)
  • Modern browser for the standalone diff viewer (Chrome, Firefox, Safari, or Edge)