Skip to main content
This is 2026.9 documentation. Coverage here is incremental: a page exists only where 2026.9 differs or is newly documented. For any other topic, switch to Current (2026.8 and earlier) in the version selector.
This page is for people building an application on top of Speckle data — a dashboard, an internal tool, a web app, a service that reacts to versions. Not a connector: you are not publishing from a host application, you are reading what others published. In 2026.9 a version’s data is a bundle of parquet files rather than an object graph, and that changes how your app gets at it. Which door you take depends on whether you render.

My app renders models

You import @speckle/viewer. Bridge the bundle to the object shape the viewer converts, with sample code you copy into your app.

My app only reads data

You read properties, quantities or geometry without the viewer. Read the bundle directly — the load mechanics are the same ones every non-SDK consumer uses.
Writing scripts with a Speckle SDK instead? The SDK applies every bundle rule for you. Start from the .NET or Python 2026.9 pages.

My app writes data

Publishing is the harder half. A 2026.9 version is a bundle built and uploaded through an ingestion, and there is no published JavaScript bundle builder — @speckle/objectsender writes object graphs, and .NET and Python are the only SDKs that build bundles today. That leaves three honest options, in the order most teams should consider them: The wire sequence, the correctness rules and a build order are in Publish a bundle from your own code. Read it before choosing the second option: it is a real piece of work, and unlike the read path there is no worked sample.

Why there is no drop-in object-graph loader

If your app is built on @speckle/objectloader or @speckle/objectloader2, the natural ask is a version of those packages that reads bundles and hands you the same object graph — getRootObject(), __closure, getObjectIterator(), unchanged. That is not coming, on purpose. Emulating that surface would mean rebuilding the object graph that 2026.9 retires: a third implementation of the receive fidelity contract, kept in step with the .NET and Python SDKs forever, reconstructing hashes and closures that no longer exist in the data. It would also teach new apps a shape the platform is moving away from. What to do instead depends on what you were using the graph for. The mechanics for all four are in Load a bundle in your own code. That page is written for any non-SDK consumer, which includes you — it is not connector-specific.
A loader that fetches referencedObject from the objects endpoints gets a 404 on every 2026.9 version. Dispatch on Version.schemaVersion before you fetch, and keep your existing reader for the older shape.

What stays the same

Your Speckle token, the GraphQL API for projects, models and versions, webhooks, permissions and sharing are unchanged. So is the shape of the problem: list a version, fetch its data, key your app’s state to something stable. Only the fetch and the identity changed.
Last modified on September 28, 2026