Generated Computers
Locals: an Apple Silicon engine that runs local LLMs up to 3x faster. A product of Generated Computers.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 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.
The design decisions are recorded as architecture decision records.
The Documentation site has these guides and the API
reference, built from main.
Versions follow Semantic Versioning. During 0.x, minor versions can contain breaking
changes; CHANGELOG.md lists them under "Breaking". Previews are published as
-preview.N. The storage interfaces of Xapi.Lrs are marked experimental (XAPI0001): they are not covered
by Semantic Versioning, also after 1.0, and may change in any release until they are declared stable (see
Experimental storage API).
Version 1.0.0 requires both conformance batteries to pass on both databases. What is planned for each version
is tracked in the milestones.
Contributions are welcome. Please open an issue before starting on anything larger than a small fix; see CONTRIBUTING.md. Report security problems privately as described in SECURITY.md.
Licensed under the Apache License 2.0. Third-party material is listed in THIRD-PARTY-NOTICES.md.
xAPI (Experience API) is a specification created by the Advanced Distributed Learning (ADL) Initiative and published as IEEE 9274.1.1-2023. "Tin Can API" is a former name of the specification. This project is an independent implementation and is not affiliated with, endorsed by, or certified by ADL, the U.S. Department of Defense, IEEE, or Rustici Software. IEEE is a registered trademark of The Institute of Electrical and Electronics Engineers, Inc.