Receive2/Send2 and skip transports entirely. Read this page only when you use IOperations.Send or Receive (Path B) — for example the Full send/receive tour or local-only MemoryTransport/SQLiteTransport workflows.
Read next: Load and publish model data — Path B vs Path C.
ServerTransport
Sends and receives objects (and blobs) over HTTP to a Speckle Server project.IServerTransportFactory.Create
ServerTransport Create(Account account, string streamId, int timeoutSeconds = 60, string? blobStorageFolder = null)
Constructs a
ServerTransport. Always use this factory — ServerTransport’s constructor has DI-resolved dependencies (ISpeckleHttp, ISdkActivityFactory) that aren’t convenient to supply manually.streamId here is the project id — a naming holdover from Speckle’s v2 terminology.SQLiteTransport
A general-purpose local disk cache, used automatically as the default local cache whenuseDefaultCache: true is passed to Send/Receive.
SQLiteTransport
SQLiteTransport(string? basePath = null, string? applicationName = null, string? scope = null)
Creates or opens a local SQLite database for caching objects. Defaults to a per-user application data path.
SQLiteTransport2 is a related, per-project variant used internally as the default local cache alongside ServerTransport — you generally won’t construct it directly.MemoryTransport
An in-memory, non-persistent transport. Fastest option; data is lost when the process ends.MemoryTransport
MemoryTransport(ConcurrentDictionary<string, string>? objects = null, bool blobStorageEnabled = false, string? basePath = null, string? applicationName = null)
Creates an in-memory object store. Useful for tests and short-lived scripts that don’t need persistence.
ITransport
All transports implementITransport, which supports:
| Member | Purpose |
|---|---|
SaveObject | Persist a serialized object string by id |
GetObject | Retrieve a serialized object string by id |
CopyObjectAndChildren | Copy an object and its closures into another transport |
OnProgressAction | Progress reporting callback |
TransportName | Human-readable name, used in diagnostics |
IBlobCapableTransport (implemented by ServerTransport, SQLiteTransport, and MemoryTransport) adds blob sidecar storage for binary attachments alongside object graphs.FAQ
Do I need a transport if I use Send2?
Do I need a transport if I use Send2?
No for server send/receive —
Send2/Receive2 talk to the server directly. You still use transports for Path B (Send/Receive), local-only workflows, or the Full send/receive tour.Why must ServerTransport come from IServerTransportFactory?
Why must ServerTransport come from IServerTransportFactory?
Its constructor depends on
ISpeckleHttp and other services registered by AddSpeckleSdk. The factory supplies those dependencies.When should I use MemoryTransport vs SQLiteTransport?
When should I use MemoryTransport vs SQLiteTransport?
MemoryTransport for tests and ephemeral scripts. SQLiteTransport when you want a persistent local cache across runs or offline receive of previously fetched data.
Next Steps
Load and publish model data
When Path B needs a transport
Full send/receive tour
ServerTransport worked example
Operations
Send and Receive signatures