All 17 imports
Loom is one package. What you write at the top of a file is one of 17 imports, and which one you write decides what your program loads — so they are worth two minutes before you pick.
Every name behind them is read from the package itself rather than written here, which is why the counts below are exact: 17 imports, 1,298 names, and a page for each import saying what comes out of it.
If you are building a page
Almost every application writes these and nothing else. The first is the tree and the change model; the second renders one; the third is the library of primitives every example on this site is built from.
- @jam-overture/loom552 names
The tree, the delta, the ids, the builders, the Gate and the pipeline. Start here.
- @jam-overture/loom/react111 names
Rendering: a tree to React elements, theme mounting, addressing, render diagnostics.
- @jam-overture/loom-primitives56 names
The starter library — the primitives every example on this site is built from. Its own package, installed beside the framework.
The starter library's fifty-seven bands under their own names, for assembling a page without going through the catalogue.
If you are hosting Loom
The parts an application needs once real people are proposing changes to it: where trees are kept, who is allowed to change them, what a model is asked, and what is written down afterwards.
- @jam-overture/loom/anthropic2 names
The model seam: an interpreter that turns a sentence into a proposal. Optional.
- @jam-overture/loom/sdk68 names
Defining and registering primitives of your own, and the catalogue a model is shown.
- @jam-overture/loom/store54 names
Persisting trees and revisions: the store contract, and an in-memory implementation.
- @jam-overture/loom/write43 names
The write path: proposing, holding, confirming and applying a change.
- @jam-overture/loom/postgres10 names
The Postgres store. Same contract, a database behind it.
- @jam-overture/loom/signals183 names
Reader signals — what a published page reports about how it is read, and the parser a receiver checks them with.
The reader-signal broadcaster alone, for a browser bundle — about 5 KB, with no schema library.
The Postgres buffer and counters, for a deployment that keeps what its readers did.
- @jam-overture/loom/telemetry72 names
The journal — proposal, provenance, disposition and outcome, recorded as they happen.
The Postgres journal, for a deployment that keeps its telemetry.
From a terminal, and from your tests
Not imported by a page. Scaffolding, inspection, and the suites your own storage has to pass.
- @jam-overture/loom/cli25 names
Scaffolding and inspection from a terminal.
- @jam-overture/loom/testing54 names
Fixtures and doubles: the sample trees, clocks and scripted interpreters Loom tests itself with.
The suites that tell you whether your own store, hold store or journal keeps its promises.
No import has everything behind it
The usual shape of a package like this is a big import with the whole library behind it and some smaller ones carved out of it for convenience. Loom is not that shape, and the sizes above are where it shows: they add up to more than the package publishes, and the biggest one is still less than half of it.
- This package publishes 1,298 names in all. The widest door, @jam-overture/loom, publishes 552 of them; the narrowest, @jam-overture/loom/anthropic, publishes 2.
- There are 136 pairs of imports here, and 131 of them share no name at all. A name you cannot find behind one import is not a name that does not exist — it is almost certainly behind one you have not opened.
- The 5 pairs that do overlap are these:
@jam-overture/loom/signalsand@jam-overture/loom/signals/broadcastshare 14 names;@jam-overture/loom-primitives/compositionsand@jam-overture/loom-primitivesshare 13 names;@jam-overture/loomand@jam-overture/loom/sdkshare 8 names;@jam-overture/loomand@jam-overture/loom/reactshare 5 names; and@jam-overture/loom/signalsand@jam-overture/loom/telemetryshare 1 name. Where two doors publish one name, it is the same declaration reached two ways, so either import gives you the same thing. - One name here means two different things.
horizonOfis published by@jam-overture/loom/signalsand by@jam-overture/loom/telemetry, and the two are different functions that happen to share a name. Searching it finds both, and only the signature tells them apart. @jam-overture/loom/signals/broadcastis the one import here that is part of a bigger one: every name it publishes is behind@jam-overture/loom/signalsas well. It exists because it loads far less, which is what a browser bundle cares about.
Looking for one particular name? The search at the top of the page indexes every export in the list above and says which import each one comes from — which is the fastest way through a package whose doors do not nest.
Not installed it yet? Installation has the one command, the peers you may also need, and this same list of imports described for somebody who has not met any of them.