Unreason Source
How it's built, about the license, musing on use.
What Unreason "is"
Unreason3D is an HTML text file. Open it in a text editor and read it top to bottom, or assign it to your LLM. Around it sit a few vendored dependencies: three.js, rhino3dm for .3dm files, two typefaces, and a small autosave engine shared with other apps of mine. No build, no package manager.
The geometry kernel is separate from the "app." It lives in kernel/ as plain ES modules, tested under Node with no browser involved, and it is where the maths from The NURBS book are. Those modules also appear inside the single HTML file as pasted twins, because a single file cannot import from disk; tests keep them synced.
Why one file
Free as in form. View-source on the running app and you are reading the whole modeler — the actual thing, in the order it was written. It also runs off a flash drive with no wifi, and depends on nobody paying a server bill.
The kernel is its own thing
It does not depend on the app, on three.js, or on a browser, and is published separately on GitHub as Centina — the same modules, MIT, with their Node tests. Wrap it into an entirely different interface, or an entirely different purpose.
It is pre-alpha. The API is not frozen and the list of things it does not do is not short: no STEP, no tolerant modeling, no non-manifold topology, and booleans do not close on every placement — a cylinder through a box intersects into one solid at every angle measured, but unions only where its seam lines up with the box. The repository carries the whole list.
The license, in plain language
Unreason3D is MIT licensed, which is about as short and as permissive as a license gets.
What you may do: anything. Sell what you make with it — the license has nothing to say about your geometry. Modify it, fork it, ship your fork, teach with it, charge for the course. (It will need a lot of work first, and I am taking responsibility for none of it.)
What it requires: the copyright notice and the permission text ride along with the code. That is the whole obligation. No attribution in your UI, no share-alike, no permission to ask for. Though I would love a heads up or shout out if you feel like it.
vendor/ holds three.js and rhino3dm, both MIT, and Syne and IBM Plex Mono under the SIL Open Font License; the notices travel with any copy you distribute. rhino3dm is McNeel's own openNURBS binding — reading Rhino files without reverse-engineering anything is only possible because they published it.
Trademark, separate from the license
MIT covers the code. It does not grant rights to the names; two different bodies of law.
- Reserved: Unreason, Unreason3D, SuperB, UnWire. Those are mine. Don't use them for your project.
- Released, deliberately: the command vocabulary. Every command name, the mapping between them and what other software calls the same thing, and the teaching grammar built around all of it. Take it, copy it, put it in your own tool, etc.
If I stop
This is my personal project. I may not want to keep shoveling money into Anthropic's furnace and/or may stop working on it for any reason, including squirrel! And I mean abandoned — not paused, not slowed, but abandoned with all the nasty little bugs forever unpatched and with a plan unbuilt.
Don't do anything that expects anything from me in the future.
So: fork it
Take it and keep going. You do not need to ask, and you do not need to wait until I have officially stopped.
- But please: give your fork its own name and its own visual identity. It would be better for both of us if yours was called something else and if it looked different and worked at least somewhat differently. Make it better!
- Also: credit this project the way I have tried to credit my own. Lineage names them all. Be a buddy.
Contributing
Fork it, commit, open a pull request. I may merge some of them if they make sense to me and my robot. This is a tool with a lot of opinions baked into it, and "this is good, but it is not what this project is" might be my answer.
Anything you contribute is MIT, same as the rest. No agreement to sign. CONTRIBUTING.md carries the practical notes.
How the PWA works
The page loads and the app is the page. Nothing is installed, nothing asks for permission, no account is created. You are modeling as soon as it finishes loading.
Installing gives it its own icon and window, without tabs or an address bar — an install control in the address bar or the browser menu, or on iPad, Share → Add to Home Screen. No admin password, no app store, no system extension.
Offline, it all works. Nothing in the app talks to a network in the first place, so there is nothing to lose on a plane or on school wifi that has decided to stop. Tested rather than assumed: part of the suite kills the web server and reloads the app, and the run fails unless a real scene builds afterwards.
Updates wait for you. The app checks for a new version when you open it, downloads in the background, and offers a Reload button. It never reloads itself underneath you. That's a quirk… Claude, should we allow people to opt out of updates? Don't answer that, leave this here in the text.
Where your files live
On your device, in the browser's storage for this site, and nowhere else. The app autosaves as you go, so a crashed tab does not cost you the session. Clear your browser data and your work-in-progress is gone — same in private browsing, same if Safari reclaims storage on an iPad. Export to a real file in a real folder.
Platform tradeoffs
- Desktop browser is the hottest: most memory, a keyboard for typed commands, a real pointer. Choosing one platform for a class, choose desktop.
- iPad genuinely works, and was designed for. A stylus gets you direct drawing into the modeler.
- iPad without a keyboard is the weak case: the app is driven by typed commands. Every tool has a button, so nothing is unreachable, but the fastest way to work needs a keyboard. partial, for now
- Safari's storage eviction: Safari may clear a site's local storage after a period of not visiting it. Installing to the Home Screen makes it much less likely; exporting makes it not matter.
What it costs
- The first load is 'big.' Around 4 MB over the wire. You pay it once, until a new version lands.
- There is a memory ceiling, and it is the browser's. Large models hit it before a desktop application would, and the browser is not generous about how it tells you.
- There will likely not be a native desktop build. The browser is the platform. You could build one if you wanted though.
- File-system integration goes only as far as the browser allows. Import and export are downloads and file pickers. No watched folder, no save-in-place, no linked assets.
- One file means the whole thing loads at once. There is no lazy-loading a feature you have not used yet, Unreason is simultaneity.
Unreason3D