| LICENSE | ||
| README.org | ||
Nitinol
Nitinol is a framework for building user-malleable web applications and tools, specifically PWAs, built on top of Mithril.js and LIPS scheme. It provides all the tools necessary to make a full application stack that the user is easily able to modify; both for themselves or others, and ephemerally or persistently.
Nitinol is an alloy of Nickel and Titanium that has shape memory and superelasticity.
Design Philosophy
Nitinol is heavily inspired by Emacs in terms of extensibility and self-documentation. Instead of treating the application as a standalone application, it should be treated as a construction on top of a powerful Lisp core. This core can then be modified by the user in real time — allowing them to almost entirely change application behaviour — or inspected to easily understand the inner workings.
A number of approaches already exist on the web for achieving malleability, but they are nothing compared to the power of a proper scripting engine.
- Settings only allow the user to modify the application in ways made legal by the original developer.
- Plugins also have limits in their ability to modify aspects of the application, while also generally being difficult to develop.
- Extensions can inject CSS or HTML but cannot modify server-side behaviour, and can also be annoying to develop and share.
- Open source projects typically lack sufficient internal documentation for non-developers to modify the internals, and often require additional (possible painful) setup steps.
Nitinol seeks to address all these problems by providing a Scheme environment in the web browser, and tools for building full applications.
- A live REPL allows the user to modify the application in real time.
- REPL inputs can be saved to a cached configuration file, which can be shared to other users of the application.
- Code is self-documenting via doc string macros and source code links, allowing easy introspection.
- Both the front-end and back-end can be modified (within security and access control constraints).