Skip to main content
Most AEC automation scripts should use 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.
https://mintcdn.com/speckle/VtRPWzmN-ULoLfIv/images/developers/sdks/csharp.svg?fit=max&auto=format&n=VtRPWzmN-ULoLfIv&q=85&s=f2970e3b8bd4a2c7899b46211a42f251Example
using var transport = provider.GetRequiredService<IServerTransportFactory>().Create(client.Account, project.id);
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 when useDefaultCache: 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.
https://mintcdn.com/speckle/VtRPWzmN-ULoLfIv/images/developers/sdks/csharp.svg?fit=max&auto=format&n=VtRPWzmN-ULoLfIv&q=85&s=f2970e3b8bd4a2c7899b46211a42f251Example
using var localCache = new SQLiteTransport();
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.
https://mintcdn.com/speckle/VtRPWzmN-ULoLfIv/images/developers/sdks/csharp.svg?fit=max&auto=format&n=VtRPWzmN-ULoLfIv&q=85&s=f2970e3b8bd4a2c7899b46211a42f251Example
var transport = new MemoryTransport();
var (objectId, _) = await operations.Send(myData, transport, useDefaultCache: false);

ITransport

All transports implement ITransport, which supports:
MemberPurpose
SaveObjectPersist a serialized object string by id
GetObjectRetrieve a serialized object string by id
CopyObjectAndChildrenCopy an object and its closures into another transport
OnProgressActionProgress reporting callback
TransportNameHuman-readable name, used in diagnostics
IBlobCapableTransport (implemented by ServerTransport, SQLiteTransport, and MemoryTransport) adds blob sidecar storage for binary attachments alongside object graphs.

FAQ

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.
Its constructor depends on ISpeckleHttp and other services registered by AddSpeckleSdk. The factory supplies those dependencies.
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
Last modified on July 10, 2026