Orleans.FSharp.Abstractions
2.0.0-alpha.1
dotnet add package Orleans.FSharp.Abstractions --version 2.0.0-alpha.1
NuGet\Install-Package Orleans.FSharp.Abstractions -Version 2.0.0-alpha.1
<PackageReference Include="Orleans.FSharp.Abstractions" Version="2.0.0-alpha.1" />
<PackageVersion Include="Orleans.FSharp.Abstractions" Version="2.0.0-alpha.1" />
<PackageReference Include="Orleans.FSharp.Abstractions" />
paket add Orleans.FSharp.Abstractions --version 2.0.0-alpha.1
#r "nuget: Orleans.FSharp.Abstractions, 2.0.0-alpha.1"
#:package Orleans.FSharp.Abstractions@2.0.0-alpha.1
#addin nuget:?package=Orleans.FSharp.Abstractions&version=2.0.0-alpha.1&prerelease
#tool nuget:?package=Orleans.FSharp.Abstractions&version=2.0.0-alpha.1&prerelease
Orleans.FSharp.Abstractions
C# shim that enables Orleans proxy generation for all F# grains — add this to your silo project and get a zero-boilerplate F# actor system.
Why this exists
Orleans Roslyn source generators only run on C# projects. F# assemblies are invisible to them. Without proxy classes, calling a grain from a client throws at runtime.
This package contains only three IFSharpGrain interfaces in a C# project. Because the project has Microsoft.Orleans.Sdk, source generators run and produce the proxy classes (Proxy_IFSharpGrain etc.) in this assembly. Any silo that references this package (directly or transitively via Orleans.FSharp.Runtime) can call all F# grains — with no per-grain C# code required.
Interfaces
| Interface | Key type | F# handle type |
|---|---|---|
IFSharpGrain |
string |
FSharpGrainHandle<'S,'M> |
IFSharpGrainWithGuidKey |
Guid |
FSharpGrainGuidHandle<'S,'M> |
IFSharpGrainWithIntKey |
int64 |
FSharpGrainIntHandle<'S,'M> |
Usage
In your silo project (.fsproj):
<PackageReference Include="Orleans.FSharp.Abstractions" Version="*" />
In your client code (F#):
open Orleans.FSharp
// Get a typed handle — no per-grain interface needed
let counter = FSharpGrain.ref<CounterState, CounterCommand> factory "counter-1"
// Call the grain — fully typed, no box/unbox
let! state = counter |> FSharpGrain.send Increment
Dependency chain
Orleans.FSharp.Abstractions (C#) ← proxy classes generated HERE
↑ ↑
Orleans.FSharp (F#) Orleans.FSharp.CodeGen (optional, legacy per-grain stubs)
↑
Orleans.FSharp.Runtime (F#) ← references Abstractions transitively
↑
Your silo project (F#) ← gets proxy classes for free
No circular dependencies. No code to write.
Key design decision: no IRemindable
IFSharpGrain does not inherit IRemindable. The FSharpGrain<'S,'M> class in Orleans.FSharp.Runtime implements IRemindable directly. This avoids pulling Microsoft.Orleans.Reminders source generators into the Abstractions project, which would create the cross-assembly proxy access problem this package is designed to solve.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Orleans.EventSourcing (>= 10.1.0)
- Microsoft.Orleans.Sdk (>= 10.1.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Orleans.FSharp.Abstractions:
| Package | Downloads |
|---|---|
|
Orleans.FSharp
Idiomatic F# computation expressions and helpers for Microsoft Orleans grain development — grain {}, GrainState, GrainRef, Streaming, Reminders, Timers, Observers, Filters, Transactions, and more. |
|
|
Orleans.FSharp.CodeGen
C# bridge project enabling Orleans Roslyn source generators for F# grain definitions. Add this project to your silo solution to generate proxy code for all F# grains — no per-grain C# stubs needed. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.0-alpha.1 | 86 | 4/28/2026 |