OpenSkp 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package OpenSkp --version 1.0.0
                    
NuGet\Install-Package OpenSkp -Version 1.0.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="OpenSkp" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OpenSkp" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="OpenSkp" />
                    
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 OpenSkp --version 1.0.0
                    
#r "nuget: OpenSkp, 1.0.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 OpenSkp@1.0.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=OpenSkp&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=OpenSkp&version=1.0.0
                    
Install as a Cake Tool

OpenSKP

The open-source SketchUp (.skp) file parser โ€” C# / .NET edition.

Parse .skp files without SketchUp. No SDK. No license. Just code.

License: MIT NuGet

๐Ÿ  openskp.com ยท ๐ŸŒ Try the Live Web Viewer ยท ๐Ÿ“– Docs ยท Changelog

This project was built by reverse engineering a proprietary binary format. It is not affiliated with or endorsed by Trimble Inc. or SketchUp.


๐ŸŒŸ What is OpenSKP?

OpenSKP is the first and only open-source, cross-platform parser for SketchUp binary files โ€” reverse-engineered from both the modern VFF container (SketchUp 2021+) and the classic MFC CArchive container (SketchUp 2013โ€“2020). It gives .NET developers (desktop, cloud, and mobile) full programmatic access to geometry, materials, components, layers, and metadata, with no SketchUp installation and no proprietary SDK required. The same parser and export API also ship as first-class packages for Python, TypeScript, Dart, and C++ โ€” see the project README for the full cross-language picture.

โœจ Features

  • Full-fidelity parsing โ€” vertices, edges, faces, normals, UV coordinates, nested component hierarchies, layers/tags, materials, textures, styles, and dynamic-component attributes.
  • Both SketchUp file generations โ€” modern VFF (2021+) and legacy MFC (2013โ€“2020) containers, transparently, behind one SkpFile.Open() call.
  • Scene baking โ€” an opt-in SkpFile.BuildScene() pass resolves the full placed scene graph to world-space, triangulated, export-ready geometry.
  • Native multi-format export โ€” glTF (GLB), Wavefront OBJ/MTL, STL, PLY, AutoCAD DXF (3DFACE and Polyface Mesh), IFC4 (BIM/ISO 10303-21 STEP), and JSON โ€” all written from scratch, no third-party CAD/BIM SDK involved. The DXF writer is verified against real desktop AutoCAD, not just lenient DXF readers.
  • No practical file-size ceiling โ€” unlike the CLR's ~2.1 GB array/ MemoryStream cap, OpenSKP's ChunkedBuffer and 64-bit TLV offsets remove that limit entirely: verified against a real 620 MB .skp file (153,586 definitions) with zero special configuration.
  • Structured observability โ€” opt-in progress reporting and location-carrying parse errors for debugging malformed or unusual files.

๐ŸŒ Try the Live Web Viewer (Drag-and-Drop)


๐Ÿš€ Installation

Install the package via the .NET CLI:

dotnet add package OpenSkp

Or via the NuGet Package Manager:

Install-Package OpenSkp

๐Ÿ’ป Quick Start

1. Parse an SKP File

Open and parse a SketchUp model to inspect its metadata:

using System;
using OpenSkp;

class Program
{
    static void Main()
    {
        // Open and decode an SKP file
        SkpModel model = SkpFile.Open("house.skp");

        Console.WriteLine($"SketchUp File Version: {model.Version}");
        
        // Print Layer Names
        Console.WriteLine("Layers:");
        foreach (var layer in model.Layers)
        {
            Console.WriteLine($"- {layer.Name} (RGB: {layer.ColorR}, {layer.ColorG}, {layer.ColorB})");
        }

        // Print Materials List
        Console.WriteLine("Materials:");
        foreach (var material in model.Materials)
        {
            Console.WriteLine($"- {material.Name} (Transparency: {material.Transparency})");
        }

        // Walk component definitions and their geometry
        foreach (var kvp in model.Definitions)
        {
            Console.WriteLine($"Definition {kvp.Key}: {kvp.Value.Name} - {kvp.Value.Vertices.Count} vertices, {kvp.Value.Faces.Count} faces");
        }

        // model.Root holds whatever is placed directly in the model (not
        // inside any component/group), including root-level instances.
        Console.WriteLine($"Root-level instances: {model.Root.Instances.Count}");

        // Build scene graph into world-space meshes and export to DXF / IFC / GLB / OBJ / STL / PLY
        Scene scene = SkpFile.BuildScene("house.skp");
        DxfExport.ExportDxf(scene, "house.dxf");
        IfcExport.ExportIfc(scene, "house.ifc");
        GlbExport.ExportGlb(scene, "house.glb");
        ObjExport.ExportObj(scene, "house.obj");
        StlExport.ExportStl(scene, "house.stl");
        PlyExport.ExportPly(scene, "house.ply");
    }
}

โš™๏ธ Target Frameworks

OpenSKP targets .NET Standard 2.0, ensuring full compatibility with:

  • .NET 5 / 6 / 7 / 8 / 9 (Console, Web APIs, ASP.NET Core)
  • .NET Core 2.0+
  • .NET Framework 4.6.1+ (WPF, WinForms)
  • Mono / Xamarin / .NET MAUI (iOS, Android)

๐Ÿญ Used in Production

OpenSKP powers the SketchUp import pipeline for FrameSmart (a 3D collaboration platform with nearly 200 active users) and IngeTrazo (a SketchUp-alternative 3D modeler with a BIM โ†’ IFC bridge). Using OpenSKP in your own project? Open an issue or a PR to get added here.


๐Ÿ–ฅ๏ธ Monorepo Package Ecosystem

OpenSKP is designed as a unified cross-platform monorepo:


๐Ÿ“„ License

This project is licensed under the MIT License โ€” see the LICENSE file for details.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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 was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on OpenSkp:

Package Downloads
OpenSkp.Fragments

Direct SketchUp (.skp) -> ThatOpen Fragments (.frag) export for OpenSkp - EXPERIMENTAL. Separate, opt-in package (mirrors Python's `pip install openskp[fragments]` extra) so the core OpenSkp package stays dependency-free for every other consumer; this one package takes the Google.FlatBuffers dependency Fragments export actually needs.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.4.0 1,327 10/27/2026
1.3.0 980 9/18/2026
1.2.0 6,987 9/4/2026
1.1.0 225 8/20/2026
1.0.0 895 8/13/2026
0.3.0 721 7/30/2026
0.2.0 149 6/18/2026
0.1.1 139 6/18/2026
0.1.0 150 6/18/2026