NwcIO is a fast, 100% managed .NET library and command line tool that reads Autodesk Navisworks cache and document files (.nwc, .nwd, .nwf) directly from disk without Navisworks or the Navisworks API, and exports IFC, glTF, OBJ, HTML, and JSON.
Built clean-room under the IOExtend organization alongside RvtIO and IfcIO.
- Reads scene hierarchy, geometry meshes, materials, transforms, GUIDs, and property categories.
- Exports to standard Industry Foundation Classes (IFC2X3 & compact IFC4), binary glTF 2.0 (
.glb), Wavefront OBJ, and structured JSON. - Coordinates multi-model federated assemblies with 3D geometric clash detection, proximity clustering, and clash matrix execution.
- Manages saved viewpoints, dynamic section planes, redlines, selection sets, and search sets with Navisworks XML and buildingSMART BCF 2.1 exchange.
- Supports 4D TimeLiner construction simulation with Microsoft Project XML (
.xml) and Primavera P6 (.xer) exchange, appearance profiling, spatial grids, 3D measurement, and revision comparison. - Generates standalone, zero-dependency interactive 3D WebGL HTML viewers (
.html) with 6-sided section box, turntable orbit, and viewpoint walkthrough tours.
Install the command line tool:
dotnet tool install --global NwcIO.CliAdd the library to a .NET project:
dotnet add package NwcIOThe library targets .NET 8 and .NET 10. It uses managed code without native dependencies or Windows-only APIs and supports Windows, Linux, and macOS.
Export to IFC, glTF GLB, Wavefront OBJ, or JSON:
# Convert to IFC2X3 (default) or modern compact IFC4
nwcio model.nwc model.ifc --ifc-schema IFC4
# Convert to binary glTF 2.0 (with PBR materials and vertex normals)
nwcio model.nwc model.glb
# Export 3D meshes to Wavefront OBJ
nwcio model.nwc model.obj
# Export scene hierarchy and properties to JSON
nwcio model.nwc model.jsonCoordinate models, detect clashes, and export BCF:
# Run clash detection across a folder of federated models and export buildingSMART BCF 2.1
nwcio ./models --clash-bcf clashes.bcfzip --clash-tolerance 0.01
# Group detected clashes into proximity clusters while exporting
nwcio ./models --clash-bcf clashes.bcfzip --clash-group proximity --clash-radius 1.0
# Execute multi-discipline clash matrix across a federated folder
nwcio ./models --clash-matrix matrix.json --clash-matrix-md matrix.md --clash-matrix-bcf matrix.bcfzip
# Export standalone 3D WebGL HTML viewer with sectioning and measure tools
nwcio model.nwc --html-viewer viewer.html --grids grids.xmlTimeLiner, viewpoints, search sets, and revision diff:
# Import a 4D schedule, link it to geometry and simulate a specific date
nwcio model.nwc --timeliner-xml schedule.xml --link-timeliner --timeliner-simulate 2026-06-01 --timeliner-csv sim.csv
# Export saved viewpoints and section planes to BCF 2.1 or Navisworks XML
nwcio model.nwc --viewpoints-bcf viewpoints.bcfzip --viewpoints-xml viewpoints.xml
# Compare two model revisions (added, deleted, modified geometry & properties)
nwcio revision.nwc --diff baseline.nwc --diff-json diff.json --diff-bcf diff.bcfzipDiagnostics and progress go to standard error. Run nwcio --help for the full list of options.
Open a Navisworks document, inspect elements, and export to GLB or IFC:
using NwcIO;
using NwcIO.Model;
using NwcIO.Model.Sets;
// Open document directly from disk
var doc = NwcDocument.Open("model.nwc");
Console.WriteLine($"Source: {doc.FileInfo?.SourcePath}");
Console.WriteLine($"Meshes: {doc.Meshes.Count}, Transforms: {doc.Transforms.Count}");
// Query nodes with a search condition (category, property, operator, value)
foreach (var node in doc.FindNodes(new NwcSearchCondition("Item", "Type", NwcSearchOperator.Equals, "Wall")))
{
Console.WriteLine($"Node: {node.Name} (Class: {node.Class})");
}
// Export to binary glTF 2.0 and IFC4
doc.SaveGlb("model.glb");
doc.SaveIfc("model.ifc", new NwcIfcExportOptions { SchemaVersion = NwcIfcSchemaVersion.Ifc4 });Run 3D geometric clash detection between documents:
using NwcIO;
using NwcIO.Model;
using NwcIO.Model.Clash;
var archDoc = NwcDocument.Open("Architecture.nwc");
var mepDoc = NwcDocument.Open("MEP.nwc");
// Federate the models, then run a hard clash test with broad-phase AABB
// and narrow-phase triangle intersection. Exclude pairs inside a single model.
var assembly = NwcAssembly.Create("Federated Model", archDoc, mepDoc);
var test = new NwcClashTest("Architecture vs MEP", NwcClashTestType.Hard, tolerance: 0.01);
test.Rules.Add(NwcClashRule.SameFile()); // Compare elements from different models only.
NwcClashDetector.Run(assembly, test);
Console.WriteLine($"{test.TotalClashCount} clashes detected");
// Group clashes by spatial 3D proximity and export BCF 2.1
NwcClashGrouper.GroupByProximity(test, clusterDistance: 1.5);
NwcClashBcfExporter.Save("Clashes.bcfzip", test);See the public API for the supported surface and getting started guide for detailed workflows.
The documentation site with API references and guides is at https://ioextend.github.io/NwcIO/. offers an automatically generated overview of the repository.
Reads binary Navisworks Cache (.nwc), Navisworks Document (.nwd), and Navisworks Federated (.nwf) files. Tested against models saved across Navisworks 2016 through 2026.
- Version 0.10.0 is a preview. The API can evolve before 1.0.
- Geometry extraction supports triangle meshes, line sets, cylinders, and point clouds; proprietary custom parametric solids are tessellated.
- Writing native
.nwdfiles is not supported (export targets native.nwc, open standards: IFC, GLB, OBJ, JSON, HTML, BCF, and Navisworks XML exchange).
NwcIO reads and writes its own format. These extras are frozen: they receive bug fixes only, with no new features or options.
- HTML viewer, GLB and OBJ export, and IFC export.
- Clash detection (triangle-level and bounding-box engines), clash grouping, clash matrix, and the HTML clash report.
- Measure, grids, revision diff, and BCF.
- TimeLiner schedule import and export, selection and search sets, appearance profiler, mesh clipper, and Navisworks XML exchange. These stay in NwcIO.
Viewing will move to IOViewer through a planned NwcIO.Scene adapter over the shared IOScene model, which is also planned. Coordination features such as clash, measure, diff, and BCF will move to a planned IOCoord package, and GLB export to a shared GLB writer in a planned IOScene.Formats package. None of these packages is published yet. The frozen features stay available and are removed no earlier than NwcIO 1.0, and only after a published replacement exists.
Use the .NET SDK selected by global.json (currently 10.0.401, with latestFeature roll-forward within the 10.0.x band).
From the repository root:
dotnet build NwcIO.slnx -c Release
dotnet testSee CONTRIBUTING.md. Release changes are recorded in CHANGELOG.md.
Report vulnerabilities through GitHub private vulnerability reporting in the repository's Security tab. Do not open public issues for security vulnerabilities. See SECURITY.md.
NwcIO is licensed under the MIT License. Copyright holder: mahach666.
NwcIO is not affiliated with, endorsed by or sponsored by Autodesk. Autodesk and Navisworks are trademarks of Autodesk, Inc.
The file format is read by analysing binary streams for interoperability. No Autodesk code or binaries are included.
