Building AAS models in C# shouldn't require reading 500 pages of specs first.
FluentAAS gives you a fluent API that feels like writing normal C# code – while handling the complexity of AAS 3.0 compliance under the hood.
var environment = AasBuilder.Create()
.AddShell("urn:aas:my-machine", "CNC-Machine-2000")
.WithGlobalAssetId("urn:asset:serial-001")
.AddDigitalNameplate("urn:submodel:nameplate")
.WithManufacturerName("en", "Acme Manufacturing Ltd.")
.WithSerialNumber("SN-2024-00142")
.BuildDigitalNameplate()
.CompleteShellConfiguration()
.Build();That's it. A valid, IDTA-compliant AAS model. Ready to export.
If you've ever tried to create AAS models programmatically, you know the pain:
- The IDTA specs are hundreds of pages long
- Most tooling is Java-based (Eclipse BaSyx, AASX Package Explorer)
- Building JSON/XML structures by hand is error-prone
- Semantic IDs are easy to get wrong – and you won't know until import fails
I built FluentAAS because I needed something that just works for .NET developers. No ceremony, no boilerplate, no guessing if your model is valid.
Fluent Builder API
Create shells, submodels, and elements using a clean, chainable syntax. IntelliSense guides you through the API.
Supported Submodel Templates
Pre-built builders for official IDTA templates (Digital Nameplate, more coming). They enforce required fields and set semantic IDs automatically.
Immutable Model
All AAS types are C# records. Great for testing, snapshots, and debugging.
Validation
Catch problems before export. The validation service gives you detailed error reports.
JSON & AASX Export
Serialize to JSON or package as AASX for import into other tools.
dotnet add package FluentAAS.Builderusing FluentAAS;
// Create an AAS environment
var environment = AasBuilder.Create()
.AddShell("urn:aas:example:cnc-machine", "CNC-Mill-2000")
.WithGlobalAssetId("urn:asset:example:cnc-001")
// Add a Digital Nameplate (IDTA 02006-2-0)
.AddDigitalNameplate("urn:submodel:example:nameplate")
.WithManufacturerName("en", "Acme Manufacturing Ltd.")
.WithManufacturerName("de", "Acme Maschinenbau GmbH")
.WithManufacturerProductDesignation("en", "Universal CNC Milling Machine")
.WithSerialNumber("SN-2024-00142")
.WithYearOfConstruction("2024")
.BuildDigitalNameplate()
.CompleteShellConfiguration()
.Build();
// Export as JSON
string json = AasJsonSerializer.ToJson(environment);
// Or as AASX package
environment.ToAasx("./cnc-machine.aasx");Use these when your submodel matches an official IDTA template. The builder enforces required fields and sets the correct semantic IDs.
.AddDigitalNameplate("urn:submodel:nameplate")
.WithManufacturerName("en", "Acme Ltd.") // required
.WithSerialNumber("SN-001") // required
.WithContactInformation(contact => contact
.WithPhone("+49 123 456789")
.WithEmail("info@acme.example"))
.BuildDigitalNameplate()Currently supported:
- Digital Nameplate V2.0 (IDTA 02006-2-0)
Planned:
- Handover Documentation
- Technical Data
- Digital Product Passport
For custom submodels or templates not yet supported:
.AddSubmodel("urn:submodel:custom", "ProductionData")
.WithSemanticId(new Reference(
ReferenceTypes.ExternalReference,
[new Key(KeyTypes.Submodel, "urn:my-company:production-data:1.0")]))
.AddProperty("Temperature", "85.5")
.AddProperty("SpindleSpeed", "1200")
.AddMultiLanguageProperty("Status", ls => ls
.Add("en", "Running")
.Add("de", "Läuft"))
.CompleteSubmodelConfiguration()You get full control when you need it.
| Package | What it does |
|---|---|
| FluentAAS.Core | Immutable AAS meta-model types (C# records) |
| FluentAAS.Builder | Fluent builders + submodel templates |
| FluentAAS.Validation | Rule-based validation against AAS 3.0 |
| FluentAAS.IO | JSON serialization, AASX packaging |
var validator = new AasValidationService();
var report = validator.Validate(environment);
if (!report.IsValid)
{
foreach (var error in report.Errors)
{
Console.WriteLine($"{error.Path}: {error.Message}");
}
}Find issues before your customer does.
I worked on AAS tooling at Fraunhofer IOSB-INA. The official specs are thorough – but not exactly developer-friendly. Most examples are in Java. The XML/JSON structures are verbose. And when something doesn't work, the error messages rarely help.
FluentAAS is my attempt to make AAS practical for .NET teams. Not a complete replacement for the official tools – but a library that handles the common cases well.
FluentAAS is:
- A library for creating AAS models in C#
- Focused on developer experience
- Good for generating Digital Nameplates and similar submodels
- MIT licensed, use it however you want
FluentAAS is not:
- A full AAS server implementation
- A replacement for AASX Package Explorer
- Feature-complete (yet)
I'm building this in the open. If a template you need is missing, let me know – or submit a PR.
| Feature | Status |
|---|---|
| Digital Nameplate V2.0 | ✅ Done |
| JSON/AASX Export | ✅ Done |
| Validation Service | ✅ Done |
| Handover Documentation | ✅ Done |
| Technical Data | 📋 Planned |
| Digital Product Passport | 📋 Planned |
| AAS Registry Integration | 📋 Planned |
PRs welcome for:
- New IDTA submodel templates
- Better validation rules
- Documentation and examples
- Bug fixes
If you're unsure whether something fits, open an issue first.
- IDTA Submodel Templates – Official template specs
- AASX Package Explorer – GUI tool for viewing/editing AAS
- AAS Specs – The full specification
MIT – free for commercial and open-source use.
If you're working on AAS integration and have questions, feel free to reach out on LinkedIn.
I'm also available for consulting on .NET modernization and Industry 4.0 projects – but no pressure. The library stands on its own.