Build status Code Climate Become a patron Discord chat Twitter Follow


"A collection of functional programming libraries that can be composed together. Unlike a framework, is a suite of instruments and you (the user) must be the composer of. Geared towards versatility, not any specific type of music." ā€” @loganpowell via Twitter

Mono-repository for 138+ TypeScript/ES6 projects, a wide collection of largely data transformation oriented packages and building blocks for:

  • Functional programming (composition, memoization, transducers, multi-methods)
  • Data driven UI component toolkits (multiple approaches)
  • ES6 iterators/generators
  • Reactive programming, stream / transducer based dataflow graphs / pipelines
  • WebWorker workflow abstractions
  • 2D geometry generation, shape primitives, processing, conversion & visualization
  • Canvas abstraction & SVG conversion
  • Semi-declarative WebGL 1/2 abstraction layer
  • DSL for shader functions defined in TypeScript and cross-compilation to GLSL, JS, VEX etc.
  • Date/time iterators, formatters
  • Data structures & data transformations for wide range of use cases (list, sets, maps, joins, spatial indexing)
  • Immutable data handling, state containers, transacted state updates, Undo-Redo history
  • Vector & matrix implementations with optional support for strided layouts, SIMD etc.
  • Value-based equivalence
  • PEG-style parser combinators, FSM primitives
  • Forth-style pointfree DSL for functional composition
  • S-expression parser & runtime infrastructure for custom DSL creation
  • Multi-format pixel buffers, conversions, Porter-Duff alpha-blending operators
  • Color space/format conversions, matrix based color manipulation, cosine gradients
  • Canvas-based Immediate mode GUI components
  • Low-level tooling for binary data, shared memory/WASM/WebGL interop
  • etc. (see package overview below)

...all with a keen eye on simplicity, re-use & minimalism without sacrificing flexibility.

This project is NOT a framework, provides no turn-key, one-size-fits-all approach and instead encourages a mix & match philosophy for various key aspects of application design (in & outside the browser). Most customization points only expect certain interfaces/type signatures rather than concrete implementations.

All packages:

  • are versioned independently
  • distributed in ES2017 syntax and multiple formats (ESM, CommonJS, UMD) with TypeScript typings & change logs
  • highly modular with largely only a few closely related functions or single function / class per file to help w/ tree shaking
  • provide re-exports of all their publics for full library imports
  • have either none or only internal runtime dependencies
  • declare public interfaces, enums & types in an api.ts and/or constants.ts file (larger packages only)
  • have auto-generated online documentation at
  • licensed under Apache Software License 2.0

Most packages:

  • have been used in production
  • have detailed, individual README files w/ small usage examples


There's a steadily growing number (~100) of standalone examples (different complexities, often combining functionality from several packages) in the examples directory.

Example screenshots (small selection)

Blog posts

Community & contributing

Join our little community on our Discord server or get in touch via Twitter or the issue tracker. If you'd like to contribute, please first read this document.

In general, we welcome contributions of all kinds (docs, examples, bug fixes, feature requests, financial contributions etc.). You can find a fairly detailed overview for contributors here:



Project Version Changelog Description version changelog Common types, decorators, mixins version changelog Basic benchmarking helpers version changelog Type & value checks version changelog 1D colored noise generators version changelog Comparators version changelog Functional composition helpers version changelog Date/time iterators, formatters, rounding version changelog Dynamic multiple dispatch version changelog DSP utils, oscillators version changelog Dual number algebra / automatic differentiation version changelog Entity-Component System version changelog Deep value equivalence checking version changelog Custom error types version changelog Assorted common math functions & utilities version changelog Function memoization w/ customizable caching version changelog File extension to MIME type mappings version changelog Pattern based query engine for JS objects version changelog Parser combinators & AST generator/transformer version changelog Immutable nested object accessors version changelog Linked Data & xmlns prefixes/URLs version changelog Seedable PRNG implementations w/ unified API version changelog Higher-order string formatting utils version changelog Minimal life cycle container for stateful app components

Iterator, stream & sequence processing

Project Version Changelog Description version changelog Channel based async ops version changelog FSM / parser primitives version changelog 2D grid iterator strategies version changelog ES6 generators / iterators version changelog SAX-like XML parser / transducer version changelog Lisp/Clojure-style sequence abstraction version changelog Composable data transformations version changelog Binary data related transducers version changelog Finite state transducer version changelog Transducer based hdom UI updates version changelog Patch-based, array & object editing version changelog Technical / statistical analysis

Reactive programming

Project Version Changelog Description version changelog Push-based, reactive event stream primitves version changelog Adapter bridge CSP -> rstream version changelog Graphviz visualization of rstream topologies version changelog Mouse & touch event stream abstraction version changelog Declarative dataflow graph construction version changelog Hierarchical structured data logging version changelog Log-file output handler version changelog Triple store & query engine

Data structures

Project Version Changelog Description version changelog Adjacency matrices & graph algorithms version changelog Array utilities version changelog Alt Set & Map implementations version changelog Immutable value wrappers, views, history version changelog 1D/2D bit field implementations version changelog In-memory caches / strategies version changelog Doubly-linked list version changelog Array & object diffing version changelog Dependency graph version changelog Extensible Graph Format version changelog Genetic programming helpers / AST gen version changelog Binary & d-ary heap impls version changelog Versioned ID generation / free-list version changelog Open/closed intervals, queries, set ops version changelog Parametric, interpolated lookup tables version changelog Quad-edge, dual-graph data structure version changelog DAG computations & value resolution version changelog Sparse matrix & vector impls version changelog Immutable tree editing / navigation

Frontend / UI

Project Version Changelog Description version changelog HDPI canvas adaptation / styling util version changelog Asset download trigger helper version changelog String diffing w/ hiccup output (includes CLI) version changelog Hiccup based VDOM & diffing version changelog hdom adapter for hiccup-canvas version changelog hdom based UI components version changelog hdom mock implementation (testing / prototyping) version changelog S-expression based HTML/XML serialization version changelog hiccup interpreter for canvas api version changelog IBM Carbon icons in hiccup format version changelog CSS from nested JS data structures version changelog Type-checked HTML5 element wrappers for hiccup version changelog Hiccup-to-Markdown serialization version changelog hiccup based SVG vocab version changelog Immediate mode GUI version changelog Composable event handlers & processor version changelog Reactive, diff-less, async UI components version changelog rdom component wrapper for version changelog Unstyled, customizable component collection version changelog Customizable browser & non-browser router version changelog Text-mode canvas, drawing, tables, charts

Geometry & visualization

Project Version Changelog Description version changelog Color conversions, gradients version changelog Dependency graph -> Graphviz version changelog Graphviz DOM & export version changelog 2D only geometry types & ops version changelog Spatial indexing data structures version changelog Shared types & interfaces version changelog 2D elliptic arc utils version changelog 2D line clipping

Last updated Popular



npm install
yarn add


Not Available


Not Available




  • thi-ng