background image
thi.ng logo

Open source building blocks for computational design. Est.2006

thing·thĭng

noun

  1. Anything that is or may become an object of thought.
  2. An approximate way to refer to an idea, subject, event, action, etc.
  3. An object or entity that is not or cannot be named specifically.

Upcoming projecthcsvntdracones

WebGL shader operators for DEM, GIS, remote sensing applications / visualizations.

Available soon: Curated snapshots, prints and drawings of unknown lands, real, procedural & simulated…

Live streamBuilding a WebGL shader graph editor with thi.ng/umbrella

Our new Youtube channel features live streams in which we build projects from scratch with thi.ng, and also shorter tutorials...

Currently only being a spare time endeavour, streams will restart in December 2020. Visit stream.thi.ng for upcoming date(s)…

Blog seriesOf umbrellas, transducers, reactive streams & mushrooms

  • Part 1 - Venturing into the land of thi.ng/umbrella...
  • Part 2 - Functions, Transducers, Reducers, Iterables
  • Part 3 - Convolutions, Cellular Automata
  • Part 4 - Disjoint Sets, Graphs, Distance Fields

What?

thi.ng is a truly manifold long-term project devoted to Computational Design. Not a framework, nor bound to any specific use case, environment or even language, it's a vast and mature set of complementing code libraries, which has organically grown to approx. 320 sub-projects, with at least half still being actively maintained. This site is a work in progress and so far merely a portal to these projects, though will ultimately serve as a comprehensive hub and archive of all related outputs. Only open source projects & educational resources are presented here. The confidential nature of my recent professional position still doesn’t allow me to share any recent work projects I was involved in.

Who?

Created and maintained by Karsten Schmidt since 2006, the project has been supported by a small group of wonderful contributors. Over the past 23 years, Karsten has produced and contributed to hundreds of open source projects, including Processing and Clojure. He has written about, lectured and taught computational design and is listed in the top 1% on Codersrank. His work has been exhibited internationally, incl. Barbican, Victoria & Albert Museum London, MoMA New York, Garage Moscow, Design Museum Holon, CAFA Arts Museum Beijing.

Why?

Originally, thi.ng was created to help realise Karsten's diverse work projects/commissions and experimental design research, forming an open toolkit we can grow and control as much as possible. Over the years, the conceptual scope has expanded dramatically. Early thi.ng projects began when Computational Design was still in its infancy. With only limited open source tooling in that domain available at the time, some of our projects were pioneering and helping to fill that niche and using these tools for teaching/evangelizing became other primary project goals. Altogether, an additional 200+ examples are bundled with the largest projects in the collection, with more being added regularly.

How?

thi.ng is based on a bottom-up growth & design philosophy: small pieces with narrow scope and utility recombine to fulfil demands of ever changing use cases in similarly varied fields. Because of the wide scope, we're usually working on projects in a round-robin manner, based on feedback and loosely defined long-term goals, which may (and are encouraged to) shift over time. This has included large rounds of refactoring, adopting new languages, platforms or techniques and occasionally leaving others behind, once a project is in a stable condition. Some of the oldest projects here are still enjoying an active following, even after almost 10 years since their last official release...

Full spectrum of topics

One endeavor, hundreds of facets… This current site is a precursor of an ongoing effort to create a semantic graph of all projects, assets and relationships - a massive undertaking, which already spawned several new projects in the collection. Until ready, the following interactive tag cloud is an attempt to give a birdseye view of the subjects covered by various parts of the collection.

Show all 306 projects, use the fuzzy search box or click on a tag to explore and only show relevant projects. Multiple tags can be entered to further narrow the search results…

The current primary development focus is on data-driven, functional tooling for TypeScript and browser-based technologies. However, thi.ng overall aims at different programming approaches and languages, incl. Clojure, ClojureScript, C11, Houdini VEX. All projects share a common philosophy with an emphasis on composition, interop, simplicity, data transformation, introspection & visualization and use of powerful data structures. Most projects favor a mixture of functional and declarative designs over classic object-oriented approaches, though we fully embrace the target languages, strive to be undogmatic and embrace hybrid solutions where they make sense. Parts of the collection also focus on domain-specific languages and offer core infrastructure to help with their implementation.

typescript datastructure 2d clojure 3d workshop array geometry animation binary browser codegen clojurescript graph c canvas conversion functional webgl processing.org ui visualization generative math toxiclibs export fileformat svg graphics literate-programming async bezier dsl hiccup interval tree typedarray acceleration audio cli uk color image iterator simulation circle clipping hardware java networked parser random transducer design interpolation particles bbox fabrication generator mesh nd vector wasm baremetal component glsl polygon query rstream sort architecture database dsp line logger physics pixel sample shader stm32 stream agent analysis arc ast composition distance gui html reactive shape ziglang align declarative event format gpgpu matrix points polyline string voxel webassembly adjacency aos bigint channel dataflow filter gradient json memory-mapped subdivision template text typography 1d alpha area art benchmark cellular-automata chart css diff dom interop memory rect rgb time topology 16bit 8bit ansi blend compiler cubic curve data-oriented encode file fuzzy grid hash hdom immutable intersection markdown nft node noise opencl opengl oscillator pattern pipeline render semweb serbia server triples zig 24bit allocator ascii bitmap bitwise cache cartesian circumcenter concatenative dag fft float forth germany graphviz hex language logic macro nodejs object paper polymorphic quadratic quaternion recursive scenegraph sculpture sensor simd soa state theme union wrapper xml 32bit algebra api assembly blit branding convex csv datalog decode dependency drawing dual equality evolutionary floodfill fsm glitch grammar grayscale interface javascript layout livecoding lut map no-browser path pointfree prng proximity raymarch rdf scaffold scatter sdf set sparse spatial subscription sutherland-hodgeman synthesis table texture transformation type validate waveform wordwrap (504 more...) 4bit 4d 64bit allpass arduino assert axidraw base62 base64 bindings biquad bitfield blur centroid chaikin cloth comparator compression convolution crypto csp datadriven deep delay denmark dmx draw dynamic ellipse elliptic entropy envelope frequency fxhash gaussian group hermite history houdini imgui installation interaction k-means linear list mime morton multiplex neighborhood normal number offset org-mode packer partition peg penplotter polyglot pool portugal projection pubsub quadedge queue reflect rgb565 rotation router rulebased scope search self-organization semanticweb sequence shader-ast shared-memory sparql spline split stack svf swatches sweden switzerland swizzle syntax t-norm tessellation timeline touch triangle trigonometry tutorial typecheck unicode utf8 uuid value-semantics variable vdom vm voronoi z-curve 1bit abgr angle area plot argb argument artnet assemblyscript automata bars base16 base32 base36 base58 base85 belgium bencode bidirectional blue bollinger boolean bot braille brown calculation capacitance cellular cie1931 clock cluster coerce combinator compare complex compute configuration console constants contours coo cosine count counter cpp crossover cryptography csc csr current cursor cv cycle d-heap d50 d65 data date debug decorators degree delaunay delete dem density derivative descend detect deterministic diagonal difference differentiation digital directed discrepancy disjointset distributed distribution dominant donchian dotproduct dots download dpi driver dynamodb edges edit editlog ema emoji emscripten emulator energy engine entity epoch error escape execution exponential feature feedback fiducial field fixture flatten fog font force fractional france freelist frustum game gamma generic genetic geo geometric geotiff gis git global go golden-ratio grainer-hormann graycode green group-by hair halton hatching hcy hdpi heading heap heuristic hexdump hierarchy higher-order hilbert histogram hollerith homogeneous hrtime hsi hsl hsv hull i18n ibm icon id identifier iges impulse incremental inference inheritance injection inline inspect instrument instrumentation int integer interleave interpreter invert io ioc isoline israel iterative join k-means++ k-medians k-nearest kd-tree keyframe kids korea kronecker l-system lab laplacian lazy lch length levenshtein lfo liang-barsky light lighting linkedlist lisp lookat lpg lru macd manhattan marchingsquares mask mass measure mediarecorder memoization mep metric millisecond mimedb mixin modular mono monte-carlo mouse mousewheel moving-average mru msdf multi-expression multiformat multilevel multiple-dispatch multitouch multivariate mutation name namespace navigation neighbors nested npm npr nurbs octtree oklab optimize origami ortho osc output padding painting pairing-heap palette parametric patch percent perimeter permutation perspective phenotype php plastic-number plot pointcloud poisson polar porter-duff power precision predicate prefix premultiply presets prime priority-queue probabilistic promise property pyramid quadtree radix ramp range ray reaction-diffusion red redo reducer refract regex regexp region relative repl report resistance resize retina rfid rle roc rpn rule runtime s-expression scheduler schema serialport shadertoy sharpen shear shift shortcode shuffle si side-effect signal skew skiplist sliding-window slovakia slugify sma smooth smoothstep smpte solver span spectrum speed sphere spiral splat srgb standard-deviation statistics step stereo stochastic stratified struct style swap symbolic tab tags tangent tangle task temperature test threshold throttle tiff timeout timestamp tlru tokenizer trace transaction trie trim trix ttl tuple turkey turtle tween ulid undirected undo uniform unionfind units uri utc valence varint velocity version versioning vertex vex video vocabulary voip voltage volume watch wav waveshaper websocket webworker weighted white wiki wildcard windowing wma wordsize writing xslt xyy xyz ycbcr ycc zigzag zipper

thi.ng/umbrella

Catalyzing learnings from earlier projects and languages used, and the primary focus for the past 5+ years, at least half of all thi.ng projects have been developed in TypeScript as part of the thi.ng/umbrella monorepo. With several of these projects in development since 2015, in early 2018 a decision was made to merge efforts & develop them further under a common umbrella. Although most of these packages are largely independent, they address a vastly wider set of topics with a more cohesive philosophy, shared infrastructure, types, interfaces, release cycles, examples, interlinked documentation etc.

Counting in at ~155,000 lines of code, documentation & diagrams and another ~25k SLOC of commented examples, most of the 500+ topics forming the above tag cloud are addressed by packages in this monorepo. With very few exceptions, no third party dependencies are used and all umbrella internal relationships are explicitly stated in each package's readme. All umbrella packages are released under the Apache Software License 2.0.

The heatmap timeline below gives an overview of the various packages and when they were added/included in the umbrella monorepo. The start dates shown here do not necessarily indicate project beginnings, only when packages were added & refactored in their current form.

Award-winning work & workshops, powered by open source

"A rising tide lifts all boats."

Since early on, starting with toxiclibs in 2006, projects in this collection have been used across many fields & industries (and helped kicking off several startups), incl. architecture, product & interaction design, data visualization, digital fabrication, interior design, print-on-demand, medicine, branding, motion graphics/VFX, game development, audio production, art installations, etc.

Several projects in which thi.ng projects played a key role were nominated for & won international design prizes, incl. Cannes Lions, D&AD, Red Dot Design Award, British Designs of the Year, Lighting Design Awards, Type Directors Club Award, Media Guardian Innovation Award.

Education and usage as teaching tool have been equally important and long-running project goals. Over the years, many of our projects have been used in this capacity in various schools, universities, workshops and festivals worldwide. Karsten himself has been teaching dozens of workshops since 2008.

For project news, stream notifications & future workshops, please follow us on Twitter or subscribe to our low frequency newsletter!

Contributors & sponsors

Eternal gratitude to the following humans and organizations for supporting the ongoing development of these projects.

If you'd like to become a supporter yourself, please visit our GitHub sponsors or Patreon profile. Thank you very much!

Thanks to the following organizations for funding earlier development through commissions, collaborations, client work, lectures, workshops & consulting in the past:

  • ACT Center Gwangju
  • Architecture Association (DRL) London
  • Barbican Centre London
  • The Bartlett (UCL) London
  • Bergische Universität Wuppertal
  • Bezalel Academy of Art Jerusalem
  • CADA Lisboa
  • CIID Copenhagen
  • Digital Domain
  • ETH Zürich
  • Google
  • Graphic Design Festival Breda
  • HEAD Geneva
  • Hirsch & Mann
  • Institute of Contemporary Arts London
  • Jason Bruges Studio
  • Kingston University London
  • Kunstuniversität Linz
  • Kurye Video Festival, Istanbul
  • Leeds College of Music
  • Lexus
  • London College of Fashion
  • Metropolitan University London
  • Moving Brands
  • Münster School of Architecture
  • Nike
  • Nokia
  • OFFF Lisboa
  • onedotzero
  • Open Data Institute
  • Resonate Festival Belgrade
  • SAC Städelschule Frankfurt
  • Science Museum London
  • Sensorium Festival Bratislava
  • Semipermanent Auckland
  • Sheffield Hallam University
  • Sint-Lukas University Brussels
  • Squint Opera
  • Technology Will Save Us
  • Tellart
  • Todays Art Festival, Den Haag
  • Troika UK
  • Universal Everything
  • Universidade Católica Portuguesa Porto
  • Umeå Institute of Design
  • University for the Creative Arts Epsom
  • University of Applied Sciences Augsburg
  • University of Lincoln
  • Watershed Bristol
  • Westminster University London
  • Wieden + Kennedy
  • Winchester School of Art
  • Wolff Olins
  • Victoria & Albert Museum London