GrainJS is a TypeScript and JavaScript library for building interactive browser applications. Its documentation describes creating and styling DOM elements directly in code, then connecting them to observable values and computed state. It is the interface framework used by Grist, the spreadsheet-database application, but can also be used as a library in other projects.
The project emphasizes working with browser capabilities without requiring a specialized template language or separate framework-specific toolchain. Its documented building blocks include DOM events, lists, components, observable data and disposal of resources. The ownership and disposal system helps developers manage objects that should not remain alive after a view is removed. GrainJS is aimed at developers who want explicit control over interface structure and reactive state, rather than an application builder that generates a finished product without code.




