Goal
Understand how project creation, sending, versioning, and receiving fit together — including howServerTransport relates to the newer Send2 path.
What you will build
In this optional deep dive, you will:- Paste the one-time SDK bootstrap (dependency injection setup you copy, not a concept you study)
- Authenticate with Speckle Server
- Create a project and model
- Send geometry data to Speckle
- Create a version (commit)
- Receive geometry data from Speckle
When to use this
Use this page when you want the full publish workflow from scratch. For most AEC automation — loading connector-published models, QA checks, CSV exports — start with Build your first model analysis tool instead. That path usesReceive2 on existing model data; creating geometry is optional and less common in practice.
In practice, most workflows receive model data published by connectors rather than creating geometry in code. This tour teaches sending so you understand how versions and object graphs relate.
Recommended approach
For day-to-day scripts after this tour, switch toSend2/Receive2 — see Automate with scripts. This quickstart uses Path B (Send/Receive with ServerTransport) to show how transports work.
Prerequisites
- Install the packages. From your project directory, run:
.csproj.
- Set up authentication. Get a personal access token from your Speckle profile (Avatar → Settings → Developer → Access Tokens). You will paste it in Step 2 below.
Full Workflow (Path B)
Step 1: Bootstrap the SDK (Copy Once)
Register Speckle.Sdk once at startup. Pass theSpeckle.Objects assembly so geometry types deserialize correctly later.
Step 2: Authenticate
If this works, you’ll see your name printed!
Step 3: Create a Project
Projects are the top-level containers for your data:If the workspace plan is already at your maximum project limit, you’ll need to delete some projects before creating a new one.
Projects replace what used to be called “Streams” in prior versions of Speckle.
Step 4: Create Geometry
This quickstart uses plain
Base to keep the first workflow simple. For real BIM-like data — especially anything meant to interoperate with other Speckle connectors and scripts — model it with DataObject and Collection instead once you’re past this tour. See Work with model objects.Step 5: Send Data to Speckle
objectId is a unique hash of the serialized data. You’ll use it to create a version.Server transports and some lower-level APIs still use the term
streamId for what the GraphQL API and UI call projectId. They refer to the same value.Step 6: Create a Version
Go to that URL to see your data in the 3D viewer!
Step 7: Receive Data
Why two steps?Versions store metadata (author, timestamp, message) separately from the actual object data. This keeps version history fast and lightweight. You only download the full object graph when you explicitly call
Receive.You have now completed your first full Speckle workflow with .NET using
Send/Receive and ServerTransport. For day-to-day scripts, switch to Send2/Receive2 — see Automate with scripts.Complete Example
FAQ
Should I use this quickstart or Automate with scripts?
Should I use this quickstart or Automate with scripts?
Use Automate with scripts for Grasshopper, notebooks, and one-off automations — it uses
Send2/Receive2 with less ceremony. Use this quickstart when you want a guided tour of the full workflow, including how ServerTransport fits in.Why doesn't my geometry show in the 3D viewer?
Why doesn't my geometry show in the 3D viewer?
Primitives sent as the root object are not visible. Nest them under a root
Base container, as in Step 4. For connector-style BIM objects, set displayValue on DataObject — see Display values.What is streamId vs projectId?
What is streamId vs projectId?
The GraphQL API and UI use
projectId. Some transport and Send/Receive signatures still use streamId for the same value — pass your project’s id in both cases.I sent data but cannot find it in the UI
I sent data but cannot find it in the UI
You must create a version after send — see Core concepts: orphaned objects.
Next Steps
Build your first model analysis tool
Recommended next — load and analyse existing models
Load and publish model data
Path B vs Path C decision guide
Automate with scripts
Send2/Receive2 for everyday scripts
Need Help?
Community Forum
Ask questions and get help
GitHub
View source code and report issues