OneAbove.Arena.GameHost.Dev 4.3.0

dotnet add package OneAbove.Arena.GameHost.Dev --version 4.3.0
                    
NuGet\Install-Package OneAbove.Arena.GameHost.Dev -Version 4.3.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OneAbove.Arena.GameHost.Dev" Version="4.3.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OneAbove.Arena.GameHost.Dev" Version="4.3.0" />
                    
Directory.Packages.props
<PackageReference Include="OneAbove.Arena.GameHost.Dev" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OneAbove.Arena.GameHost.Dev --version 4.3.0
                    
#r "nuget: OneAbove.Arena.GameHost.Dev, 4.3.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OneAbove.Arena.GameHost.Dev@4.3.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OneAbove.Arena.GameHost.Dev&version=4.3.0
                    
Install as a Cake Addin
#tool nuget:?package=OneAbove.Arena.GameHost.Dev&version=4.3.0
                    
Install as a Cake Tool

OneAbove.Arena.GameHost.Dev

The test table: your game playable with dotnet run — without a database, without a sign-in, without the arena.

Use

A console project, one line:

using OneAbove.Arena.GameHost.Dev;

await ArenaTestTable.RunAsync(new MyGame());
dotnet run
→ http://localhost:5080

There all seats lie side by side, each with its own view, all playable. The renderer is served from ./renderer.

await ArenaTestTable.RunAsync(new MyGame(), new ArenaTestTableOptions
{
    OfferingKey = "online",
    SeatCount = 4,
    RngSeed = 4711,
    RendererPath = "renderer",
    Port = 5080,
    UndoEnabled = false,   // default: on whenever the offering offers undo
});

Without OfferingKey the test table plays the first offering your descriptor declares, with its defaults filled in — exactly as the lobby would offer it.

Why this is no toy

The test table calls your rule module in exactly the same order as the real platform:

ApplyMove · GetSeatsToAct · GetOutcome · GetLegalMoves(n) · GetView(n) … · GetView(spectator)

That is no declaration of intent — a test in the platform puts a recording engine under both routes and compares what actually arrived. „Runs at the test table, breaks in the arena" is the class of fault this package is built against.

Taken just as seriously:

  • The iframe is sandboxed, without allow-same-origin — as in the arena. With that your renderer has an opaque origin here too. That is the whole bridge's most frequent stumbling block, and here you stumble cheaply.
  • A seat that is not to act gets no legal moves. At the test table too there is no shared state for everyone.
  • A rejected move comes back as a 422 with a reason, not as an error.

The „undo" button

At every seat, when the table plays with undo (contract 4.1). It sits outside the iframe, as in the arena's action bar: a renderer never sends an undo itself. Enabled when canUndo is true — the switch, the seat to act, the match running — and what comes back from your IUndoableGame.Undo is shown as the reason when it refuses. Whether your game cuts its turns differently with undo on (a tentative move, a confirmation) is yours to decide; the test table passes MatchSetup.UndoEnabled and asks no further.

The „disconnect" button

At every seat. Afterwards the state comes completely anew — nothing that happened in the meantime is resent.

That is exactly how the arena behaves: reconnecting is the normal case there, and there is no event buffer. A renderer building on a gapless log stands out here instead of at a player mid-move.

What the test table is not

No platform. No Postgres, no sign-in, no lobby, no clocks, no deadlines. A match lives as long as the process lives. Whoever wants to check persistence, restoring from the move list or simultaneous connections needs the arena.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
4.3.0 0 9/17/2026
4.3.0-rc.2 0 9/17/2026
4.3.0-rc.1 0 9/17/2026
4.2.0 0 9/17/2026
4.2.0-rc.1 0 9/17/2026
4.1.1 0 9/17/2026
4.1.1-rc.1 0 9/17/2026
4.1.0 0 9/17/2026
4.1.0-rc.3 0 9/17/2026
4.1.0-rc.2 0 9/17/2026
4.1.0-rc.1 0 9/17/2026
4.0.0 44 9/16/2026
4.0.0-rc.5 65 9/16/2026
4.0.0-rc.4 63 9/15/2026
4.0.0-rc.3 32 9/15/2026
4.0.0-rc.2 35 9/15/2026
4.0.0-rc.1 42 9/15/2026
3.0.1 76 9/14/2026
3.0.0 101 9/14/2026
3.0.0-rc.1 44 9/14/2026
Loading failed