IOViewer 0.1.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package IOViewer --version 0.1.0
                    
NuGet\Install-Package IOViewer -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="IOViewer" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="IOViewer" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="IOViewer" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add IOViewer --version 0.1.0
                    
#r "nuget: IOViewer, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package IOViewer@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=IOViewer&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=IOViewer&version=0.1.0
                    
Install as a Cake Tool

<p align="center"> <img src="docs/images/ioviewer-banner.png" alt="IOViewer" width="640"> </p>

IOViewer

Docs NuGet Release License: MIT Platform

IOViewer is a fast, 100% managed .NET library and command line tool that generates standalone, zero-dependency interactive 3D WebGL / HTML BIM & CAD model viewers from code, glTF/GLB, Wavefront OBJ, JSON, or sibling libraries (RvtIO, IfcIO, and NwcIO).

The generated HTML file is completely self-contained, offline-ready, and works in any modern browser without external servers or cloud dependencies.

Built clean-room under the IOExtend organization.

What it does

  • Generates standalone, zero-dependency single-file interactive 3D WebGL HTML viewers (.html).
  • Packs binary geometry into Base64 little-endian Float32Array positions and Uint32Array/Uint16Array indices for ~3x smaller payload than JSON.
  • Shifts model coordinates Relative-To-Center (RTC) to eliminate WebGL 32-bit floating point precision jitter on large georeferenced coordinates.
  • Features an interactive 3D ViewCube with orientation faces and directional navigation arrows for instant orthographic alignment.
  • Provides comprehensive sectioning: arbitrary cutting planes with in-scene 3D normal gizmo manipulators, plus 6-sided Section Box volumes with fit-to-selection.
  • Supports multiple display modes: Material colors & opacity, Diffuse Textures with real-world UV box projection, White/Clay architectural model, Wireframe, and global scene opacity.
  • Manages BIM hierarchies with Category trees, element counters, linked files, instant search, and instance/type property inspection.
  • Includes coordination tools: 3D spatial grids projection, interactive 3D point-to-point measurement, 4D TimeLiner schedule simulation player, and clash detection inspection.
  • Drives smooth camera animations: cubic Ease-In-Out transitions, 360° Turntable presentation orbit, and Saved Viewpoints Walkthrough Tours.
  • Imports standard 3D formats out of the box: binary glTF 2.0 (.glb), Wavefront OBJ (.obj), and JSON snapshots.

Install

Install the command line tool:

dotnet tool install --global IOViewer.Cli

Add the library to a .NET project:

dotnet add package IOViewer

The library targets .NET 8 and .NET 10. It uses managed code without native dependencies or Windows-only APIs and supports Windows, Linux, and macOS.

Command line

Generate standalone 3D HTML viewers from 3D models:

# Convert binary glTF 2.0 (GLB) to interactive HTML viewer
ioviewer model.glb -o viewer.html

# Convert Wavefront OBJ model to interactive HTML viewer
ioviewer model.obj -o viewer.html

# Convert and immediately preview in default web browser via built-in HTTP server
ioviewer model.glb --serve

Export structured JSON snapshots:

# Export model snapshot to structured JSON
ioviewer model.glb -o model.json

Diagnostics and progress go to standard error. Run ioviewer --help for the full list of options.

Library

Create a viewer document programmatically and export to HTML:

using IOViewer;
using IOViewer.Model;
using IOViewer.Exporters;

// Create viewer document
var doc = new ViewerDocument
{
    Title = "Commercial Building 3D Showcase",
    Author = "IOExtend"
};

// Add mesh geometry
var mesh = new ViewerMesh
{
    Id = 1,
    Name = "Curtain Wall Panel",
    Vertices = [new(0, 0, 0), new(3, 0, 0), new(3, 3, 0), new(0, 3, 0)],
    Indices = [0, 1, 2, 0, 2, 3],
    Color = new RgbaColor(100, 149, 237, 200),
    Opacity = 0.8
};
doc.Meshes.Add(mesh);

// Export to self-contained HTML
HtmlViewerExporter.Save(doc, "showcase.html", new HtmlViewerOptions
{
    Title = "Commercial Building 3D Showcase",
    IncludeProperties = true,
    IncludeViewpoints = true
});

Import a glTF / GLB model and convert to HTML viewer:

using IOViewer.Importers;
using IOViewer.Exporters;

// Load binary glTF 2.0 model
var doc = GlbViewerImporter.Load("complex_building.glb");

// Export to self-contained single-file HTML viewer
HtmlViewerExporter.Save(doc, "complex_building.html");

See the public API for the supported surface and getting started guide for detailed workflows.

Documentation

The documentation site with API references and guides is at https://ioextend.github.io/IOViewer/.

Limitations

  • Version 0.1.0 is an initial release. The API can evolve before 1.0.
  • Standalone HTML export generates self-contained files (assets inlined in HTML). Extremely large assemblies with millions of triangles should be exported with LOD simplification.

Build from source and tests

Use the .NET SDK selected by global.json, which specifies 10.0.100 with latestFeature roll-forward.

From the repository root:

dotnet build IOViewer.slnx -c Release
dotnet test

Contributing

See CONTRIBUTING.md and the Code of Conduct. Release changes are recorded in CHANGELOG.md.

Security

Report vulnerabilities through GitHub private vulnerability reporting in the repository's Security tab. Do not open public issues for security vulnerabilities. See SECURITY.md.

License and trademarks

IOViewer is licensed under the MIT License. Copyright holder: mahach666.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.2.0 44 11/12/2026
0.1.0 42 11/11/2026