Skip to main content
net10.0

Cloud Native Actors: Streamstone storage for Azure Tables

Published
Apr 15, 2026
6mo ago
Total Downloads
3.0K
3,014

Install

dotnet add package Devlooped.CloudActors.Streamstone --version 1.0.0-alpha
ProductVersions
.NET
net10.0

README

Streamstone storage provider for Orleans grain persistence, supporting Cloud Actors on Azure Table Storage.

EULA OSS GitHub

Features

  • Supports plain CLR objects as grain state
  • Supports event sourced actors
  • Supports automatic snapshots for faster state reading

See Streamstone for more details.

Usage

Register the provider via the Orleans silo builder:

and provide a CloudStorageAccount singleton:

var builder = WebApplication.CreateBuilder(args);

builder.UseOrleans(silo =>
{
    // πŸ‘‡ register Streamstone as the default storage provider for all grains/actors
    silo.AddStreamstoneActorStorageAsDefault(opt => opt.AutoSnapshot = true);
});

builder.Services.AddCloudActors(); // πŸ‘ˆ registers grains, serializers, etc.

Alternatively, you can register the provider under a specific name instead of the default:

silo.AddStreamstoneActorStorage("streamstone", opt => opt.AutoSnapshot = true);

And actors can then opt in to the named provider explicitly:

[Actor(nameof(Account), "streamstone")]
public partial class Account : IEventSourced

Storage

The Streamstone storage provider depends on Devlooped.CloudStorage (CloudStorageAccount) which must be registered in the DI container too:

builder.Services.AddSingleton(
    builder.Environment.IsDevelopment() ?
    // Use the development emulator locally:
    CloudStorageAccount.DevelopmentStorageAccount :
    // Or provide a real account for production:
    CloudStorageAccount.Parse(builder.Configuration.GetConnectionString("AzureStorage") ??
    throw new ArgumentException("Missing required AzureStorage connection string.")));

Clustering

It's quite common to use localhost clustering during development, and azure storage in production, for example:

builder.UseOrleans(silo =>
{
    if (builder.Environment.IsProduction())
    {
        silo.UseAzureStorageClustering(options =>
        {
            options.TableServiceClient = new Azure.Data.Tables.TableServiceClient(
                builder.Configuration["AzureStorage"] ??
                builder.Configuration["AzureWebJobsStorage"]);
        });
    }
    else
    {
        silo.UseLocalhostClustering();
    }

    // πŸ‘‡ register Streamstone as the default storage provider for all grains/actors
    silo.AddStreamstoneActorStorageAsDefault(opt => opt.AutoSnapshot = true);
});

Open Source Maintenance Fee

To ensure the long-term sustainability of this project, users of this package who generate revenue must pay an Open Source Maintenance Fee. While the source code is freely available under the terms of the License, this package and other aspects of the project require adherence to the Maintenance Fee.

To pay the Maintenance Fee, become a Sponsor at the proper OSMF tier. A single fee covers all of Devlooped packages.

Sponsors

Clarius Org MFB Technologies, Inc. Khamza Davletov SandRock DRIVE.NET, Inc. Keith Pickford Thomas Bolon Kori Francis Reuben Swartz Jacob Foshee Eric Johnson Jonathan Ken Bonny Simon Cropp agileworks-eu Zheyu Shen Vezel ChilliCream 4OTC domischell Adrian Alonso torutek mccaffers Seika Logiciel Andrew Grant Lars prime167

Sponsor this project

Learn more about GitHub Sponsors

Changes from Previous Version

v0.5.0-rc.2v1.0.0-alpha
Added Frameworks
net10.0
Removed Frameworks
net8.0

Adoption Assessment

A verified publisher signal is available. Assess fit from the package's supported frameworks, license and dependency graph rather than popularity alone.

This version is marked prerelease. Validate its API and upgrade path before production use.No SPDX license expression is published. Review the license text and your organisation's policy before redistribution.Compatibility metadata lists 1 target framework; confirm the exact target used by your application.

Related Guides & Workflows

Learn how to evaluate, integrate, or audit this package in your .NET project.