nlets stands for Non-Linear (Media) Editor in TypeScript. As of late March 2025, this project is still a work in progress and is not suitable for general use.

The core model is pretty simple: it provides a Timeline
abstraction that has Tracks
. Tracks have Events
. Events have timestamps and can carry arbitrary data. One kind of event is a RegionEvent
, which just points to a Region
. A Region
in turn points to a Source
and specifies a time range to play within that source. Another kind of event is a KeyframeEvent
with which you might provide automation or animation over some parameters while playing back.
At runtime, model objects live in a directed acyclic graph with a Project
at its root, and are additionally housed in an ObjectStore
. The store/graph combo supports serialization, transactions, and undo/redo.
That's kinda it!
There are also base implementations of things like playheads, clipboards, drag and drop, and stuff like media caches. nlets relies heavily on mobx for its inner workings, but other than mobx, the only dependencies are cancelable-promise and a json diffing library, jiff.
nlets-core currently provides implementations for audio playback and mixing in a web browser. (These should perhaps be split out into a separate package at some point.) There's no reason in principle it couldn't also run in say a React Native or Electron app, given appropriate platform-specific implementations.
nlets was built to allow folks to remix Vienna Teng's brilliant 2024 three-singles-in-one We've Got you. As of late March 2025 this project is unreleased but coming soon! At some point, I'd like to extract some of the React work there into its own package.
For now, nlets-react is empty.
Empty for now.