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_idson the new objects so you can trace what they replaced. - On every save writes
.elephant/<docname>/<timestamp>.jsonnext 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_changesblock 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.htmlfile, 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
.3dmfiles 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
- In Rhino 8, type
_PackageManager. - Search “elephant” and install the latest version.
- Restart Rhino. Run
_ElephantStatusto 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)