Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
翻訳待ち
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Experience API (xAPI 2.0 / IEEE 9274.1.1, and 1.0.3) for .NET: models and validation, an async LRS client with a durable outbox, and a Learning Record Store you can embed in an ASP.NET Core app.
Status: 0.x. 0.3.0 is on NuGet and
the LRS image is on ghcr.io. The API can
change between minor versions until 1.0; the 1.0 milestone lists
what is left. Documentation: https://nurullahturkoglu.github.io/xapi-dotnet/
The 2.0 standard is IEEE 9274.1.1-2023, also adopted as ISO/IEC/IEEE 39274-1-1:2025.
| Package | What it is | Targets |
|---|---|---|
Xapi.Core | Statement model, strict JSON reading and writing for 1.0.3 and 2.0.0, validation, statement comparison | netstandard2.0, net10.0 |
Xapi.Client | Async client for every LRS resource, version negotiation, attachments, statement signing | netstandard2.0, net10.0 |
Xapi.Client.Outbox | Durable outbox: retries, error classification, dead letters, idempotent resend | netstandard2.0, net10.0 |
Xapi.Lrs | AddXapiLrs / MapXapiLrs: an LRS inside your ASP.NET Core app | net10.0 |
Xapi.Lrs.Sqlite | SQLite storage and migrations for Xapi.Lrs | net10.0 |
Xapi.Lrs.PostgreSql | PostgreSQL storage and migrations for Xapi.Lrs | net10.0 |
The netstandard2.0 builds are for .NET Framework 4.6.2 and later and for Unity. JSON is read and written by
hand with Utf8JsonReader and Utf8JsonWriter, without reflection, so the net10.0 builds of the Core,
Client and Outbox packages can be trimmed and published with Native AOT; CI publishes
samples/ConsoleClient that way and fails on any warning. Under Unity they pass their tests in the editor, in
IL2CPP players on macOS, Linux, Android and the iOS Simulator, and in WebGL, where requests go through
UnityWebRequestHandler from the Unity package in src/Xapi.Unity (docs/unity.md).
dotnet add package Xapi.Client
With using Xapi; and using Xapi.Client;:
using var http = new HttpClient();
var client = new XapiClient(http, new XapiClientOptions
{
Endpoint = new Uri("https://lrs.example.com/xapi/"),
Credentials = XapiCredentials.Basic(key, secret),
});
var statement = new Statement(
Agent.FromMbox("[email protected]", "Ada Learner"),
Verbs.Completed,
new Activity(new Iri("https://example.com/courses/fire-safety")));
var id = await client.SaveStatementAsync(statement);
Console.WriteLine($"The LRS stored statement {id}");
The client asks the LRS which xAPI version to use, validates the statement for that version and sends it.
To keep statements through network outages and restarts, put a
StatementOutbox in front of the client; in an ASP.NET Core app, register both with
AddXapiClient(...).AddOutbox(...) (example).
In an ASP.NET Core app with the Xapi.Lrs.Sqlite package:
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddXapiLrs(builder.Configuration.GetSection("Lrs"), options => options.MigrateOnStartup = true)
.UseSqlite("Data Source=lrs.db");
var app = builder.Build();
app.MapXapiLrs("/xapi");
app.Run();
appsettings.json lists the credentials under Lrs, without their secrets:
{
"Lrs": {
"Credentials": [ { "Key": "my-app", "Scopes": [ "all" ] } ]
}
}
The secret comes from user secrets or the environment (Lrs__Credentials__0__Secret). Clients then use
https://<your app>/xapi/ as their endpoint, with the key my-app and that secret. The LRS guide covers scopes, delegated authentication, PostgreSQL, migrations
and limits.
The LRS passes all tests of the
ADL LRS Conformance Test Suite at commit 5bc232d:
1,365 of 1,365 for xAPI 1.0.3 and 1,435 of 1,435 for 2.0.0, on SQLite and on PostgreSQL (as of commit
69bb8ff, 17 October 2026). Both batteries run against both databases in CI on every pull request, and the
gate fails on any failing or skipped test.
In two places the suite expects more than IEEE 9274.1.1 requires, and the LRS follows the suite. docs/conformance.md explains both, and how the gate works.
TinCan.NET, the library most .NET projects use today, has not changed since 2018: it targets net35,
its calls block, it exposes Newtonsoft.Json types, and it has no xAPI 2.0 support. Teams that need
durable sending end up writing their own outbox and retry logic. This project aims to be one maintained
set of packages for both sides, tested against the conformance suite. The
migration guide maps TinCan.NET calls and types to this library.
This is the beginning of the README. Read the rest at the original. Read the full README ↗