thi-ng
umbrella
TypeScript

⛱ Broadly scoped ecosystem & mono-repository of 215 TypeScript projects (and ~185 examples) for general purpose, functional, data driven development

Last updated Jul 6, 2026
3.8k
Stars
168
Forks
62
Issues
0
Stars/day
Attention Score
99
Language breakdown
TypeScript 98.5%
Zig 1.2%
Shell 0.2%
C 0.1%
PEG.js 0.0%
JavaScript 0.0%
Files click to expand
README

thi.ng/umbrella

Project migrated to Codeberg. The original Github repo is now just a readonly mirror and will be deleted later this year.

Donate on Liberapay Become a GitHub sponsor Become a patron Mastodon Follow

- Documentation - Project templates - #HowToThing - Blog posts - Videos - awesome.thi.ng - Generative art projects - Wiki - Latest updates - Algorithms & data structures - DSLs - File / file format / hardware support - Frontend / UI - Fundamentals - Geometry, image & visualization - Iterator, stream & sequence processing - Low-level, binary, memory management, interop - Maths - Network - Randomness - Reactive programming - WebGL / GPGPU - Deprecated packages - Building example projects - Testing - Building API docs - Extracting code examples from readme files & comments

About

This is LLM-free, human-made and cared for software, maintained as an ecosystem and anti-framework.

"A collection of functional programming libraries that can be composed
together. Unlike a framework, thi.ng 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
>
Please visit thi.ng for additional information. You might
also find the following tools useful to find & explore projects in this vast
ecosystem:
>
- thi.ng tag browser
- tag-based search on the thi.ng website
- repo-wide doc string search
- generated API docs

This project is NOT a framework and all packages can be used in isolation.

Not including deprecations, this mono-repository is home to 216 individual TypeScript libraries/packages/tools and ~185 example projects illustrating their usage, currently totalling ~250k SLOC and ~4350 source files... Some of the projects have been in regular development since 2015. The monorepo exists in its current form since January 2018.

Unlike most other large mono-repos, this one is not for a single project, but a broad collection of jointly developed, yet independent libraries, tools and general purpose building blocks for the following non-exhaustive list of topics (see package overview below):

  • Functional programming (ES6 iterators/generators, composition, memoization,
transducers, multi-methods)
  • Reactive programming, stream / transducer based dataflow graphs / pipelines /
DOM
  • Fiber process tree abstraction for ES6 generators (co-routines / cooperative
multitasking)
  • Data structures & data transformations for wide range of use cases (maps,
sets, heaps, queues, graphs etc.)
  • WebAssembly bridge APIs & data structure bindings code generators for multiple
target languages (primarily aimed at Zig & C11)
  • PEG-style functional parser combinators w/ (optional) custom grammar
definition language
  • Customizable HTML & Markdown parsers
  • 2D/3D geometry generation, shape primitives, math, manipulation,
intersections, conversions & visualizations
  • Canvas abstractions, pixel buffers & SVG serialization/conversion
  • Comprehensive function collection (900+) for nD-vectors and matrices (dense &
sparse)
  • ECS implementations with optional support for strided memory layouts
  • Semi-declarative WebGL 1/2 abstraction layer
  • DSL for shader functions defined in TypeScript and cross-compilation to GLSL,
JS, VEX etc.
  • Value-based equivalence (vs. native object identity) and associative data
structures (sets, maps)
  • DSP building blocks: oscillators, noise generators, filters, 1D FFT/IFFT,
muxers, rate converters
  • Immutable data handling, state containers, transacted state updates, Undo-Redo
history
  • Reactive UI component toolkits (DOM-based, canvas-based, immediate-mode,
multiple approaches...)
  • Multi-format, multi-channel pixel buffers (int & float based), conversions,
dithering, Porter-Duff alpha-blending operators
  • Color space/format conversions, matrix based color manipulation, gradient
generators, color palettes, dominant color extraction
  • Date-time abstraction, relative dates, iterators, formatters, math
  • WebWorker workflow abstractions
  • Forth-style pointfree DSL for functional composition and DSL
development/extension
  • S-expression parser & runtime (interpreter) infrastructure for custom DSL
creation
  • WASM-based SIMD batch-processing of vector data
  • Pen-plotter (AxiDraw) toolchain & geometry conversions
  • Interpolations, math helpers, automatic differentiation (Dual numbers)
  • etc.
Once more, this project is NOT a framework. There's no turn-key, one-size-fits-all approach and instead the overall design philosophy encourages a mix & match philosophy for key aspects of application design (inside & outside the browser). Customization points are provided wherever useful and only expect certain interfaces/type signatures rather than hard-coded concrete implementations. In many cases presets are provided too.

All packages:

  • are versioned independently
  • have auto-generated online documentation at docs.thi.ng
  • built via esbuild and tested via bun.sh
  • released via thi.ng/monopub publishing toolchain
  • distributed as ESM modules (ES2022 syntax) with export maps, TypeScript
typings & change logs
  • highly modular with often only a single function / class (incl. closely
related functions) per file to help w/ selective imports and tree shaking
  • provide re-exports of all their publics for full library imports
  • have either none or only @thi.ng internal runtime dependencies (w/ very few
exceptions! All dependencies are listed in each package readme)

Getting started

A common misconception is to think of this repo as single project. It is not! The sheer number and varied nature & purpose of these packages makes it impossible to provide traditional "Getting started" tutorials — there would have to be dozens of them... To compensate, this repo provides ~180 example projects, detailed package readmes (at the very least for all the larger and/or more important ones), as well as hundreds of small usage examples/snippets in doc strings & readme files.

Documentation

If you're unsure about something, please reach out! Any constructive feedback is always highly appreciated!

Project templates

You might find one of the following template repos an useful starting point (only updated sporadically, make sure to update dependencies manually):

template repo for browser-based projects template repo for generative art projects on the fx(hash) platform browser project template for hybrid TypeScript & Zig (WebAssembly) apps

#HowToThing

Between August-November 2023, #HowToThing was a series of short posts & mini-tutorials on Mastodon, demonstrating a range of different techniques, patterns and use cases from across the thi.ng/umbrella ecosystem. These are not necessarily intro examples, but each one comes with heavily commented code (and often with visual outputs/results).

Blog posts

  • "Of umbrellas, transducers, reactive streams & mushrooms" (ongoing series):
- Part 1 - Project & series overview - Part 2 - HOFs, Transducers, Reducers - Part 3 - Convolution, 1D/2D Cellular automata - Part 4 - Disjoint Sets, Graph analysis, Signed Distance Fields

Videos

The following videos have been migrated from YouTube to their new home at makertube.net (more to come):

Examples & Showcase

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

| Example screenshots | (small selection) | | |-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | | | | | | | | | | | |

awesome.thi.ng

Due to other priorities still very much in its infancy & planning stage, but please help to document your own usage of these packages by contributing project information to the awesome.thi.ng repo, which will be used to build a showcase site... Thank you!

Generative art projects

Several generative art projects by Karsten Schmidt on fx(hash) were created exclusively with libraries from this collection.

| De/Frag series | | | |--------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------| | | | | | Quasiflock | C-SCAPE | ASCII-SCAPE | | | | | | Bubblemania | Danza (unreleased) | S-TRACE (unreleased) | | | | |

Community, contributing, getting help

[!NOTE]
My Mastodon account is the best place to
learn about ongoing developments. This is a multi-purpose account, but you can
view #ThingUmbrella tagged
posts only and/or
subscribe to those via RSS.

Join the discussions here on Github, get in touch via Mastodon or use the issue tracker. If you'd like to contribute in other ways, please first read this document.

In general, we welcome contributions of all kinds (docs, examples, bug fixes, feature requests, financial contributions etc.)

**Note: The default branch for this repo is develop and all PRs should be based on this branch. This too means, the README files on this branch might refer to yet-unreleased features or packages. Please use the main branch for viewing the most recently released version(s)!**.

Wiki

To date, the wiki has only been updated sporadically, but please be sure to check it out for project-wide glossary, information, cookbooks, useful snippets etc.

Projects

Latest updates

As of: 2026-07-02

| Status | Package | Version | Changelog | |:----------------------------------------------|:----------------------------------|:--------------------------------------------------------------------------------------------------------|:------------------------------------------| | | @thi.ng/date | version | changelog |

Algorithms & data structures

| Project | Version | Changelog | Description | |-----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------|-------------------------------------------------------| | @thi.ng/adjacency | version | changelog | Adjacency matrices & graph algorithms | | @thi.ng/arrays | version | changelog | Array utilities | | @thi.ng/associative | version | changelog | Alt Set & Map implementations | | @thi.ng/atom | version | changelog | Immutable value wrappers, views, history | | @thi.ng/bitfield | version | changelog | 1D/2D bit field implementations | | @thi.ng/bidir-index | version | changelog | Bi-directional key-value map/index | | @thi.ng/buffers | version | changelog | Generic read/write buffers w/ diff. behaviors | | @thi.ng/cache | version | changelog | In-memory caches / strategies | | @thi.ng/cellular | version | changelog | Highly configurable 1D Cellular automata | | @thi.ng/column-store | version | changelog | Extensible in-memory column store database | | @thi.ng/dcons | version | changelog | Doubly-linked list | | @thi.ng/diff | version | changelog | Array & object diffing | | @thi.ng/disjoint-set | version | changelog | Disjoint Set data structure | | @thi.ng/dgraph | version | changelog | Dependency graph | | @thi.ng/ecs | version | changelog | Entity-Component System | | @thi.ng/gp | version | changelog | Genetic programming helpers / AST gen | | @thi.ng/heaps | version | changelog | Binary & d-ary heap impls | | @thi.ng/idgen | version | changelog | Versioned ID generation / free-list | | @thi.ng/k-means | version | changelog | K-means clustering of n-D data | | @thi.ng/leaky-bucket | version | changelog | Counter-based Leaky Bucket implementation | | @thi.ng/ramp | version | changelog | Parametric, interpolated lookup tables | | @thi.ng/quad-edge | version | changelog | Quad-edge, dual-graph data structure | | @thi.ng/resolve-map | version | changelog | DAG computations & value resolution | | @thi.ng/sorted-map | version | changelog | Sorted map & set datastructure | | @thi.ng/sparse-set | version | changelog | Sparse set datastructure | | @thi.ng/tensors | version | changelog | 1D-4D tensors, views & operations | | @thi.ng/text-analysis | version | changelog | Tokenization, statistics, vector encoding, clustering | | @thi.ng/trie | version | changelog | Trie-based map datastructure w/ prefix queries | | @thi.ng/vclock | version | changelog | Vector clock functions / comparators | | @thi.ng/zipper | version | changelog | Immutable tree editing / navigation |

DSLs

| Project | Version | Changelog | Description | |-------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------------| | @thi.ng/lispy | version | changelog | Extensible, interpreted Lisp-style DSL | | @thi.ng/pointfree | version | changelog | Stack-based DSL & functional composition | | @thi.ng/pointfree-lang | version | changelog | Forth-like syntax layer for @thi.ng/pointfree | | @thi.ng/proctext | version | changelog | Procedural text generation engine | | @thi.ng/sexpr | version | changelog | S-Expression parser & runtime infrastructure |

File / file format / hardware support

| Project | Version | Changelog | Description | |-------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|-------------------------------------------------| | @thi.ng/axidraw | version | changelog | Minimal, declarative AxiDraw plotter controller | | @thi.ng/bencode | version | changelog | Bencode binary format encoding | | @thi.ng/csv | version | changelog | Customizable CSV parser/object mapper | | @thi.ng/dot | version | changelog | Graphviz DOM & export | | @thi.ng/dsp-io-wav | version | changelog | WAV file format exporter | | @thi.ng/egf | version | changelog | Extensible Graph Format | | @thi.ng/file-io | version | changelog | Assorted file I/O utils for NodeJS | | @thi.ng/geom-io-obj | version | changelog | Wavefront OBJ model parser | | @thi.ng/hiccup-css | version | changelog | CSS from nested JS data structures | | @thi.ng/hiccup-html | version | changelog | Type-checked HTML5 element wrappers for hiccup | | @thi.ng/hiccup-html-parse | version | changelog | HTML parsing & transformation to hiccup format | | @thi.ng/hiccup-markdown | version | changelog | Hiccup-to-Markdown serialization | | @thi.ng/hiccup-svg | version | changelog | hiccup based SVG vocab | | @thi.ng/iges | version | changelog | IGES format geometry serialization | | @thi.ng/markdown-table | version | changelog | Markdown table generator / formatter | | @thi.ng/mime | version | changelog | File extension to MIME type mappings | | @thi.ng/msgpack | version | changelog | Msgpack serialization/deserialization | | @thi.ng/pixel-io-geotiff | version | changelog | GeoTIFF reader support for thi.ng/pixel | | @thi.ng/pixel-io-netpbm | version | changelog | 1/8/16/24bit NetPBM image format reader/writer | | @thi.ng/pixel-io-pfm | version | changelog | Portable FloatMap image format reader/writer | | @thi.ng/pixel-io-tiff | version | changelog | Minimal TIFF reader | | @thi.ng/prefixes | version | changelog | Linked Data, RDF & xmlns prefixes/URLs | | @thi.ng/sax | version | changelog | SAX-like XML parser / transducer | | @thi.ng/tangle | version | changelog | Literate programming utilities |

Frontend / UI

| Project | Version | Changelog | Description | |-----------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------|--------------------------------------------------| | @thi.ng/blurhash | version | changelog | Fast image blurhash encoder/decoder | | @thi.ng/canvas | version | changelog | Canvas creation & HDPI support helpers | | @thi.ng/dl-asset | version | changelog | Asset/canvas/file download helpers | | @thi.ng/emoji | version | changelog | Bi-directional emoji lookup tables (names/chars) | | @thi.ng/hdiff | version | changelog | String diffing w/ hiccup output (includes CLI) | | @thi.ng/hdom | version | changelog | Hiccup based VDOM & diffing | | @thi.ng/hdom-canvas | version | changelog | hdom adapter for hiccup-canvas | | @thi.ng/hdom-components | version | changelog | hdom based UI components | | @thi.ng/hdom-mock | version | changelog | hdom mock implementation (testing / prototyping) | | @thi.ng/hiccup | version | changelog | S-expression based HTML/XML serialization | | @thi.ng/hiccup-canvas | version | changelog | hiccup interpreter for canvas api | | @thi.ng/hiccup-carbon-icons | version | changelog | IBM Carbon icons in hiccup format | | @thi.ng/imgui | version | changelog | Immediate mode GUI | | @thi.ng/interceptors | version | changelog | Composable event handlers & processor | | @thi.ng/meta-css | version | changelog | CSS framework codegen, transpiler, bundler | | @thi.ng/rdom | version | changelog | Reactive, diff-less, async UI components | | @thi.ng/rdom-canvas | version | changelog | rdom component wrapper for thi.ng/hiccup-canvas | | @thi.ng/rdom-components | version | changelog | Unstyled, customizable component collection | | @thi.ng/rdom-forms | version | changelog | Datadriven HTML form generation | | @thi.ng/router | version | changelog | Customizable browser & non-browser router | | @thi.ng/text-canvas | version | changelog | Text-mode canvas, drawing, tables, charts | | @thi.ng/text-format | version | changelog | Color text formatting w/ ANSI & HTML presets | | @thi.ng/text-format-image | version | changelog | Bitmap image formatting for CLI/Terminal |

Fundamentals

| Project | Version | Changelog | Description | |---------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------|----------------------------------------------------------| | @thi.ng/args | version | changelog | Declarative & functional CLI arg parsing & coercions | | @thi.ng/api | version | changelog | Common types, decorators, mixins | | @thi.ng/bench | version | changelog | Basic benchmarking helpers | | @thi.ng/checks | version | changelog | Type & value checks | | @thi.ng/compare | version | changelog | Comparators | | @thi.ng/compose | version | changelog | Functional composition helpers | | @thi.ng/date | version | changelog | Date/time iterators, formatters, rounding | | @thi.ng/defmulti | version | changelog | Dynamic multiple dispatch | | @thi.ng/distance | version | changelog | n-D distance metrics & K-nearest neighborhoods | | @thi.ng/equiv | version | changelog | Deep value equivalence checking | | @thi.ng/errors | version | changelog | Custom error types | | @thi.ng/expose | version | changelog | Conditional global variable exposition | | @thi.ng/fibers | version | changelog | Process hierarchies & ops for cooperative multitasking | | @thi.ng/hex | version | changelog | Hex value formatters for U4-64 words | | @thi.ng/logger | version | changelog | Basis infrastructure for arbitrary logging | | @thi.ng/memoize | version | changelog | Function memoization w/ customizable caching | | @thi.ng/metrics | version | changelog | Computing & aggregating value metrics (mean, range, sd) | | @thi.ng/object-utils | version | changelog | Plain JS object & map manipulation | | @thi.ng/oquery | version | changelog | Pattern based query engine for JS objects | | @thi.ng/parse | version | changelog | Parser combinators & AST generator/transformer | | @thi.ng/paths | version | changelog | Immutable nested object accessors | | @thi.ng/strings | version | changelog | Higher-order string formatting utils | | @thi.ng/system | version | changelog | Minimal life cycle container for stateful app components | | @thi.ng/timestamp | version | changelog | Timestamp abstraction/wrapper | | @thi.ng/transclude | version | changelog | Template engine for text document generation | | @thi.ng/units | version | changelog | Extensible SI unit conversions | | @thi.ng/validate | version | changelog | Composable functional data validation | | @thi.ng/validate-schema | version | changelog | JSON schema validation |

Geometry, image & visualization

| Project | Version | Changelog | Description | |---------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------|-----------------------------------------------------| | @thi.ng/boids | version | changelog | Configurable n-dimensional boids simulation | | @thi.ng/color | version | changelog | Color conversions, gradients | | @thi.ng/color-palettes | !


README truncated. [View on GitHub
🔗 More in this category

© 2026 GitRepoTrend · thi-ng/umbrella · Updated daily from GitHub