diff --git a/src/Orleans.Streaming.NATS/Orleans.Streaming.NATS.csproj b/src/Orleans.Streaming.NATS/Orleans.Streaming.NATS.csproj
index 52cc20c8482..937057b8da5 100644
--- a/src/Orleans.Streaming.NATS/Orleans.Streaming.NATS.csproj
+++ b/src/Orleans.Streaming.NATS/Orleans.Streaming.NATS.csproj
@@ -12,6 +12,7 @@
enable
$(VersionSuffix).alpha.1
alpha.1
+ README.md
@@ -22,4 +23,8 @@
+
+
+
+
diff --git a/src/Orleans.Streaming.NATS/README.md b/src/Orleans.Streaming.NATS/README.md
new file mode 100644
index 00000000000..52e9b2e20c7
--- /dev/null
+++ b/src/Orleans.Streaming.NATS/README.md
@@ -0,0 +1,135 @@
+# Microsoft Orleans Stream Provider for NATS
+
+## Introduction
+Microsoft Orleans Stream Provider for NATS enables Orleans applications to leverage NATS JetStream for reliable, scalable event processing. This provider allows you to use NATS JetStream as a streaming backbone for your Orleans application to both produce and consume streams of events.
+
+## Getting Started
+To use this package, install it via NuGet:
+
+```shell
+dotnet add package Microsoft.Orleans.Streaming.NATS
+```
+
+## Example - Configuring NATS Stream Provider
+
+```csharp
+using Microsoft.Extensions.Hosting;
+using Orleans.Hosting;
+using Orleans.Streaming.NATS.Hosting;
+
+var builder = Host.CreateApplicationBuilder(args)
+ .UseOrleans(siloBuilder =>
+ {
+ siloBuilder
+ .UseLocalhostClustering()
+ // Configure NATS JetStream as a stream provider
+ .AddNatsStreams(
+ "NatsStreamProvider",
+ options =>
+ {
+ options.StreamName = "orleans-stream";
+ // Optional: Configure NATS client options
+ // options.NatsClientOptions = new NatsOpts { Url = "nats://localhost:4222" };
+ // Optional: Configure batch size (default: 100)
+ // options.BatchSize = 100;
+ // Optional: Configure partition count (default: 8)
+ // options.PartitionCount = 8;
+ });
+ });
+
+// Run the host
+await builder.RunAsync();
+```
+
+## Example - Configuring NATS Streams on Client
+
+```csharp
+using Microsoft.Extensions.Hosting;
+using Orleans.Streaming.NATS.Hosting;
+
+var builder = Host.CreateApplicationBuilder(args)
+ .UseOrleansClient(clientBuilder =>
+ {
+ clientBuilder
+ .UseLocalhostClustering()
+ .AddNatsStreams(
+ "NatsStreamProvider",
+ options =>
+ {
+ options.StreamName = "orleans-stream";
+ });
+ });
+
+await builder.RunAsync();
+```
+
+## Example - Using NATS Streams in a Grain
+
+```csharp
+using Orleans;
+using Orleans.Streams;
+
+// Grain interface
+public interface IStreamProcessingGrain : IGrainWithGuidKey
+{
+ Task StartProcessing();
+ Task SendEvent(MyEvent evt);
+}
+
+// Grain implementation
+public class StreamProcessingGrain : Grain, IStreamProcessingGrain
+{
+ private IStreamProvider _streamProvider;
+ private IAsyncStream _stream;
+ private StreamSubscriptionHandle _subscription;
+
+ public override async Task OnActivateAsync(CancellationToken cancellationToken)
+ {
+ // Get the stream provider
+ _streamProvider = this.GetStreamProvider("NatsStreamProvider");
+
+ // Get a reference to a specific stream
+ _stream = _streamProvider.GetStream(
+ StreamId.Create("MyStreamNamespace", this.GetPrimaryKey()));
+
+ await base.OnActivateAsync(cancellationToken);
+ }
+
+ public async Task StartProcessing()
+ {
+ // Subscribe to the stream to process events
+ _subscription = await _stream.SubscribeAsync(OnNextAsync);
+ }
+
+ private Task OnNextAsync(MyEvent evt, StreamSequenceToken token)
+ {
+ Console.WriteLine($"Received event: {evt.Data}");
+ return Task.CompletedTask;
+ }
+
+ // Produce an event to the stream
+ public Task SendEvent(MyEvent evt)
+ {
+ return _stream.OnNextAsync(evt);
+ }
+}
+
+// Event class
+public class MyEvent
+{
+ public string Data { get; set; }
+}
+```
+
+## Documentation
+For more comprehensive documentation, please refer to:
+- [Microsoft Orleans Documentation](https://learn.microsoft.com/dotnet/orleans/)
+- [Orleans Streams](https://learn.microsoft.com/en-us/dotnet/orleans/streaming/)
+- [NATS JetStream Documentation](https://docs.nats.io/nats-concepts/jetstream)
+
+## Feedback & Contributing
+- If you have any issues or would like to provide feedback, please [open an issue on GitHub](https://github.com/dotnet/orleans/issues)
+- Join our community on [Discord](https://aka.ms/orleans-discord)
+- Follow the [@msftorleans](https://twitter.com/msftorleans) Twitter account for Orleans announcements
+- Contributions are welcome! Please review our [contribution guidelines](https://github.com/dotnet/orleans/blob/main/CONTRIBUTING.md)
+- This project is licensed under the [MIT license](https://github.com/dotnet/orleans/blob/main/LICENSE)