Vaporsoft.Akira
0.3.3-alpha
dotnet add package Vaporsoft.Akira --version 0.3.3-alpha
NuGet\Install-Package Vaporsoft.Akira -Version 0.3.3-alpha
<PackageReference Include="Vaporsoft.Akira" Version="0.3.3-alpha" />
<PackageVersion Include="Vaporsoft.Akira" Version="0.3.3-alpha" />
<PackageReference Include="Vaporsoft.Akira" />
paket add Vaporsoft.Akira --version 0.3.3-alpha
#r "nuget: Vaporsoft.Akira, 0.3.3-alpha"
#:package Vaporsoft.Akira@0.3.3-alpha
#addin nuget:?package=Vaporsoft.Akira&version=0.3.3-alpha&prerelease
#tool nuget:?package=Vaporsoft.Akira&version=0.3.3-alpha&prerelease
Akira
A cross-platform .NET system state snapshot library. Strongly-typed, immutable, AOT-ready.
Contents
- Overview
- Requirements
- Installation
- Quick Start
- Architecture
- Snapshot Classes
- Windows Providers
- API Reference
- Links
- Contributing
- License
Overview
Akira captures a complete, point-in-time snapshot of a machine's hardware and
software state and returns it as a single, serializable .NET object. Every
property is strongly typed, every DTO is immutable, and the entire pipeline is
compatible with Native AOT via System.Text.Json source generation.
Use it for fleet inventory, diagnostics dashboards, change detection, compliance auditing, or anywhere you need a structured view of what a machine looks like right now.
| 26 snapshot types | BIOS, CPU, GPU, disks, memory, network, services, processes, and more |
| 1,000+ properties | Full parity with Win32/WMI class definitions |
| Immutable DTOs | Every property is { get; init; } with full nullable annotations |
MachineSnapshot |
One envelope object that bundles everything with metadata and timing |
SnapshotResult<T> |
Typed result wrapper with Ok / Fail / Unsupported factory methods |
| AOT-ready | Source-generated System.Text.Json serialization — zero reflection |
| Multi-platform | Core DTOs are platform-agnostic; providers are shipped per-platform |
Requirements
- .NET 10.0 or later
- Windows providers require
net10.0-windows(WMI /System.Management) - No additional runtime dependencies for the core
Vaporsoft.Akirapackage
Installation
# Core library (DTOs, interfaces, JSON serialization)
dotnet add package Vaporsoft.Akira
# Windows providers (WMI-based)
dotnet add package Vaporsoft.Akira.Windows
Linux and macOS provider packages are planned.
Quick Start
using Vaporsoft.Akira;
using Vaporsoft.Akira.Windows;
// Create a WMI executor (the default implementation talks to real WMI)
var wmi = new WmiQueryExecutor();
// Collect a single snapshot
var cpuProvider = new ProcessorSnapshotProvider(wmi);
SnapshotResult<ProcessorSnapshot[]> result = await cpuProvider.GetSnapshotAsync();
if (result.Success)
{
foreach (var cpu in result.Data!)
Console.WriteLine($"{cpu.Name} — {cpu.NumberOfCores} cores @ {cpu.MaxClockSpeed} MHz");
}
Serialize to JSON (AOT-safe)
using System.Text.Json;
string json = JsonSerializer.Serialize(
result,
AkiraJsonContext.Default.SnapshotResultProcessorSnapshotArray);
Collect a complete MachineSnapshot
var collector = new MachineSnapshotCollector(new WmiQueryExecutor());
MachineSnapshot snapshot = await collector.CollectAsync();
string json = JsonSerializer.Serialize(snapshot, AkiraJsonContext.Default.MachineSnapshot);
CollectAsync runs all 26 providers and populates every metadata field
(machine name, OS, runtime, version) automatically.
Build a selective MachineSnapshot
var snapshot = new MachineSnapshot
{
MachineName = Environment.MachineName,
CollectedAtUtc = DateTimeOffset.UtcNow,
Processors = await new ProcessorSnapshotProvider(wmi).GetSnapshotAsync(),
BIOS = await new BIOSSnapshotProvider(wmi).GetSnapshotAsync(),
DiskDrives = await new DiskDriveSnapshotProvider(wmi).GetSnapshotAsync(),
// ... add as many or as few providers as you need
};
Architecture
akira/
├── src/
│ ├── Akira/ Core DTOs, interfaces, JSON context (net10.0)
│ ├── Akira.Windows/ WMI-based providers (net10.0-windows)
│ ├── Akira.Linux/ procfs / sysfs providers (planned)
│ └── Akira.MacOS/ IOKit / sysctl providers (planned)
├── tests/
│ ├── Akira.Tests/ Core DTO and serialization tests
│ └── Akira.Tests.Windows/ Windows provider tests
└── akira.slnx
Data Flow
Application
│
▼
ISnapshotProvider<T>.GetSnapshotAsync()
│
├──► Vaporsoft.Akira.Windows ──► WMI (System.Management)
├──► Vaporsoft.Akira.Linux ──► /proc, /sys, CLI tools (planned)
└──► Vaporsoft.Akira.MacOS ──► IOKit, sysctl, CLI (planned)
│
▼
SnapshotResult<T> → MachineSnapshot → AkiraJsonContext
│
▼
26 strongly-typed DTOs · 1,000+ properties · zero reflection
Each platform package ships providers that implement ISnapshotProvider<T> using
native OS APIs. The core Vaporsoft.Akira package contains only the DTOs, the
interface, SnapshotResult<T>, and the AOT-safe JSON serialization context — it
has zero dependencies.
Provider Pattern
Every provider follows the same shape:
// Singleton (one instance per machine, e.g. BIOS)
public class BIOSSnapshotProvider : WmiSnapshotProvider<BIOSSnapshot> { ... }
// Collection (multiple instances, e.g. disks, adapters)
public class DiskDriveSnapshotProvider : WmiCollectionSnapshotProvider<DiskDriveSnapshot> { ... }
Both base classes accept an IWmiQueryExecutor, making every provider fully
unit-testable without touching real WMI.
Snapshot Classes
Every snapshot DTO and the native data source used on each platform.
| Snapshot Class | Windows (WMI) | Linux | macOS |
|---|---|---|---|
BaseBoardSnapshot |
Win32_BaseBoard |
/sys/class/dmi/id/* |
system_profiler SPHardwareDataType |
BatterySnapshot |
Win32_Battery |
/sys/class/power_supply/* |
ioreg -rc AppleSmartBattery |
BIOSSnapshot |
Win32_BIOS |
/sys/class/dmi/id/* |
system_profiler SPHardwareDataType |
ComputerSystemSnapshot |
Win32_ComputerSystem |
hostnamectl |
system_profiler SPHardwareDataType |
ComputerSystemProductSnapshot |
Win32_ComputerSystemProduct |
dmidecode |
system_profiler SPHardwareDataType |
DesktopMonitorSnapshot |
Win32_DesktopMonitor |
xrandr |
system_profiler SPDisplaysDataType |
DiskDriveSnapshot |
Win32_DiskDrive |
lsblk -J |
diskutil list -plist |
DiskPartitionSnapshot |
Win32_DiskPartition |
lsblk -Jp |
diskutil list -plist |
EnvironmentSnapshot |
Win32_Environment |
/proc/self/environ |
launchctl getenv |
FanSnapshot |
Win32_Fan |
/sys/class/hwmon/*/fan* |
SMC via IOKit |
LogicalDiskSnapshot |
Win32_LogicalDisk |
df, /proc/mounts |
df, mount |
NetworkAdapterSnapshot |
Win32_NetworkAdapter |
ip link |
networksetup |
NetworkAdapterConfigurationSnapshot |
Win32_NetworkAdapterConfiguration |
ip addr |
ifconfig, scutil |
OperatingSystemSnapshot |
Win32_OperatingSystem |
/etc/os-release |
sw_vers |
PhysicalMemorySnapshot |
Win32_PhysicalMemory |
dmidecode -t memory |
system_profiler SPMemoryDataType |
PrinterSnapshot |
Win32_Printer |
lpstat -a |
lpstat -a |
ProcessSnapshot |
Win32_Process |
/proc/[pid]/* |
sysctl kern.proc |
ProcessorSnapshot |
Win32_Processor |
/proc/cpuinfo |
sysctl hw |
ServiceSnapshot |
Win32_Service |
systemctl list-units |
launchctl list |
SoundDeviceSnapshot |
Win32_SoundDevice |
aplay -l |
system_profiler SPAudioDataType |
StartupCommandSnapshot |
Win32_StartupCommand |
systemd-analyze |
~/Library/LaunchAgents/ |
ThermalZoneTemperatureSnapshot |
MSAcpi_ThermalZoneTemperature |
/sys/class/thermal/*/temp |
SMC via IOKit |
TimeZoneSnapshot |
Win32_TimeZone |
timedatectl |
systemsetup -gettimezone |
UserAccountSnapshot |
Win32_UserAccount |
/etc/passwd |
dscl . -list /Users |
VideoControllerSnapshot |
Win32_VideoController |
lspci |
system_profiler SPDisplaysDataType |
VolumeSnapshot |
Win32_Volume |
lsblk -f |
diskutil info -all -plist |
Windows Providers
All 26 Windows providers use WMI via System.Management.
Most query root\CIMV2; thermal zones query root\WMI.
| Provider | WMI Class | Type |
|---|---|---|
BaseBoardSnapshotProvider |
Win32_BaseBoard |
Singleton |
BIOSSnapshotProvider |
Win32_BIOS |
Singleton |
ComputerSystemSnapshotProvider |
Win32_ComputerSystem |
Singleton |
ComputerSystemProductSnapshotProvider |
Win32_ComputerSystemProduct |
Singleton |
OperatingSystemSnapshotProvider |
Win32_OperatingSystem |
Singleton |
TimeZoneSnapshotProvider |
Win32_TimeZone |
Singleton |
BatterySnapshotProvider |
Win32_Battery |
Collection |
DesktopMonitorSnapshotProvider |
Win32_DesktopMonitor |
Collection |
DiskDriveSnapshotProvider |
Win32_DiskDrive |
Collection |
DiskPartitionSnapshotProvider |
Win32_DiskPartition |
Collection |
EnvironmentSnapshotProvider |
Win32_Environment |
Collection |
FanSnapshotProvider |
Win32_Fan |
Collection |
LogicalDiskSnapshotProvider |
Win32_LogicalDisk |
Collection |
NetworkAdapterSnapshotProvider |
Win32_NetworkAdapter |
Collection |
NetworkAdapterConfigurationSnapshotProvider |
Win32_NetworkAdapterConfiguration |
Collection |
PhysicalMemorySnapshotProvider |
Win32_PhysicalMemory |
Collection |
PrinterSnapshotProvider |
Win32_Printer |
Collection |
ProcessorSnapshotProvider |
Win32_Processor |
Collection |
ProcessSnapshotProvider |
Win32_Process |
Collection |
ServiceSnapshotProvider |
Win32_Service |
Collection |
SoundDeviceSnapshotProvider |
Win32_SoundDevice |
Collection |
StartupCommandSnapshotProvider |
Win32_StartupCommand |
Collection |
ThermalZoneTemperatureSnapshotProvider |
MSAcpi_ThermalZoneTemperature |
Collection |
UserAccountSnapshotProvider |
Win32_UserAccount |
Collection |
VideoControllerSnapshotProvider |
Win32_VideoController |
Collection |
VolumeSnapshotProvider |
Win32_Volume |
Collection |
API Reference
ISnapshotProvider<TSnapshot>
public interface ISnapshotProvider<TSnapshot>
{
Task<SnapshotResult<TSnapshot>> GetSnapshotAsync(
CancellationToken cancellationToken = default);
}
SnapshotResult<T>
| Property | Type | Description |
|---|---|---|
Data |
T? |
The snapshot data, or null on failure |
Success |
bool |
Whether collection succeeded |
IsSupported |
bool |
Whether this type is supported on the current platform |
Error |
string? |
Error message on failure |
Warnings |
string[]? |
Non-fatal warnings |
Source |
string? |
Provider identifier (e.g. "WMI:Win32_Processor") |
CollectedAtUtc |
DateTimeOffset |
UTC timestamp of collection |
DurationMs |
double |
Collection duration in milliseconds |
IsPartial |
bool |
Whether only partial data was returned |
Factory methods:
SnapshotResult<T>.Ok(data, source, durationMs)
SnapshotResult<T>.Fail(source, error, durationMs)
SnapshotResult<T>.Unsupported(source)
MachineSnapshot
A sealed class that aggregates every SnapshotResult<T> into one serializable
envelope with machine identification (MachineName, DnsHostName, Domain),
OS info (OsDescription, OsVersion), and collection metadata
(CollectedAtUtc, AkiraVersion).
MachineSnapshotCollector
A convenience class in Vaporsoft.Akira.Windows that collects all 26 snapshots
and metadata in a single CollectAsync() call. Accepts an IWmiQueryExecutor
and supports CancellationToken.
AkiraJsonContext
Pre-configured System.Text.Json source-generated context with camelCase naming,
indented output, and null-property omission. Includes serialization metadata for
all 26 snapshot types and their SnapshotResult<T> wrappers.
JsonSerializer.Serialize(snapshot, AkiraJsonContext.Default.MachineSnapshot);
JsonSerializer.Deserialize(json, AkiraJsonContext.Default.MachineSnapshot);
Links
| NuGet — Core | nuget.org/packages/Vaporsoft.Akira |
| NuGet — Windows | nuget.org/packages/Vaporsoft.Akira.Windows |
| GitHub Repository | github.com/corderro-artz/akira |
| Releases | github.com/corderro-artz/akira/releases |
| GitHub Packages | github.com/corderro-artz/akira/packages |
| CI / CD | github.com/corderro-artz/akira/actions |
| License | MIT |
| Vaporsoft | vaporsoft.dev |
| Wiki / Docs | Coming soon |
Contributing
Contributions are welcome. If you'd like to add Linux or macOS providers, open an issue first to discuss the approach.
- Fork the repository
- Create a feature branch
- Write tests for any new providers
- Submit a pull request
License
MIT — Copyright © 2026 Corderro Artz / Vaporsoft
| 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
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Vaporsoft.Akira:
| Package | Downloads |
|---|---|
|
Vaporsoft.Akira.Windows
Windows WMI-based snapshot providers for the Akira system state library. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.3.3-alpha | 99 | 3/26/2026 |
| 0.3.2-alpha | 74 | 3/26/2026 |
| 0.3.1-alpha | 78 | 3/26/2026 |
| 0.3.0-alpha | 71 | 3/26/2026 |
| 0.2.0-alpha | 69 | 3/26/2026 |