CPQ System (Configure, Price, Quote) for configurable product automation in SolidWorks through in-app capture, C# rules engine, web forms, and automatic generation of variants and documentation.
Features • Tech Stack • Quick Start • Manual • Documentation • Roadmap
✅ Phase 0: Foundations (Completed)
✅ Phase 1: WPF Administrator Shell (Completed)
✅ Phase 2: Roslyn Rules Engine (Completed) — 41/41 tests passing
✅ Phase 3: Database + Identity + Forms System (Completed)
✅ Phase 4: API Controllers + Web Frontend (Completed) — 27/27 integration tests passing
✅ Phase 5: Administrator Node Panels (Completed) — 6 panels fully functional
✅ Phase 6: SwWorker Service (Completed) — Model capture & generation working
✅ Phase 7: Document Generation (Completed) — QuestPDF + OpenXML + templates
✅ Phase 8: Web Runtime + Client Portal (Completed) — Full React portal with dynamic forms
✅ Phase 9: Production Deployment (Completed) — Docker, CI/CD, E2E, Installers, Monitoring
🎉 MVP v1.0.0-rc1 COMPLETE
🔄 Branch dev — Architectural pivot underway:
✅ Phase A: NexusCad.SwAddIn — Task Pane shell (xCAD.NET)
✅ Phase B: Capture dimensions from active selection
✅ Phase C: Custom Properties / Features / Drawings / File Formats
📋 Phase D: @nexuscad/cli + Vite plugin + create-nexuscad-form template
📋 Phase E: Form runtime loader (iframe sandbox + postMessage)
📋 Phase F: Web admin (users, rules, jobs) in web/admin/*
📋 Phase G: Remove NexusCad.Admin WPF + migrate legacy forms
🚀 Status: MVP complete. Branch
devreplaces the WPF Administrator withNexusCad.SwAddIn(capture inside SolidWorks) + VSCode-based form authoring + web admin. See ADR-001 for full rationale.
- What is NexusCad?
- Key Features
- Tech Stack
- Architecture
- Quick Start
- Requirements
- Development Installation
- Documentation
- Roadmap
- DriveWorks Equivalence
- Contributing
- License
- Legal Notice
NexusCad enables companies with configurable products to capture engineering knowledge from their SolidWorks models and expose it to non-technical users (sales, customers, partners) through intuitive web forms.
- ✅ SolidWorks model variants (parts, assemblies, drawings)
- ✅ Derived documentation: quotes, technical sheets, BOMs
- ✅ Drawings: PDF, DXF, STEP, IGES, Parasolid, STL
- ✅ Complete traceability of each generated variant
| Feature | Description |
|---|---|
| 🎯 SolidWorks Capture Add-in | Task Pane inside SolidWorks — capture dimensions, features, custom properties, drawings, and file formats (DriveWorks-style) |
| ⚡ C# Rules Engine | Sandboxed Roslyn expressions, no Excel, with dependency analysis and incremental recalc |
| 📝 VSCode Form Authoring | @nexuscad/cli + create-nexuscad-form (Vite + TS) for authoring configurators locally |
| 🌐 Web Client Portal | React 18 + TypeScript — runtime for end users, bundles loaded in <iframe sandbox> |
| 🛡️ Web Admin | Manage users, rules, jobs, projects, and document templates at /admin/* |
| 🤖 SolidWorks Worker | COM Interop (external, no UI) for background variant generation |
| 📄 Document Generation | QuestPDF + OpenXML for quotes, technical sheets, and BOMs |
| 🔐 Multi-user | Roles: Admin, Author, Commercial, Client |
| 📊 Job Monitoring | Hangfire dashboard + Serilog → Seq |
| 🗄️ Flexible Database | SQLite (dev) / PostgreSQL 16 with JSONB (prod) |
- Language: C# 12 on .NET 8 LTS
- REST API: ASP.NET Core Web API + Swagger/OpenAPI
- ORM: Entity Framework Core 8 + Npgsql / SQLite
- Job Queue: Hangfire
- Rules Engine: Microsoft.CodeAnalysis.CSharp.Scripting (Roslyn)
- Documents: QuestPDF (PDF) + DocumentFormat.OpenXml (DOCX)
- Logging: Serilog + Seq
- Auth: ASP.NET Core Identity + JWT
- Client & Commercial Web (
NexusCad.Web): React 19 + TypeScript + Vite + Tailwind CSS 4 - State / data: Zustand (auth) + TanStack Query (API cache)
- Package Manager: npm
- Capture Add-in:
NexusCad.SwAddIn— xCAD.NET 0.8.3 COM Add-in, Task Pane hosted inside SolidWorks - Generation Worker:
NexusCad.SwWorker— external COM Interop (no UI), pool per SW license
- Unit Tests: xUnit + FluentAssertions + NSubstitute
- Integration Tests: Testcontainers + PostgreSQL
- E2E Tests: Playwright + TypeScript
- Containers: Docker + Docker Compose (PostgreSQL 16 + Seq)
- CI/CD: GitHub Actions
- Installers: Inno Setup (Windows)
NexusCad does NOT use Excel anywhere:
- ❌ Rules engine → C# with Roslyn, not
=IF(...)formulas - ❌ Templates → DOCX and PDF, not XLSX
- ❌ Import/Export → CSV / JSON, not
.xlsx
SolidWorks Web portal Author's machine
┌─────────────────────────┐ ┌──────────────────────────┐ ┌─────────────────────────┐
│ NexusCad.SwAddIn │ │ web/ (React 18 + MUI 9) │ │ VSCode + @nexuscad/cli │
│ · Task Pane "Capture" │ │ · Runtime cliente │ │ · create-nexuscad-form │
│ · Captured Models │ │ · Bundles en iframe │ │ · vite dev + push │
│ · Dimensions/Features │ │ sandbox │ │ · autogen'd typings │
│ · Custom Properties │ │ · /admin/* │ └────────────┬────────────┘
│ · Drawings/File Fmts │ └────────────┬─────────────┘ │
└────────────┬────────────┘ │ REST + JWT │ REST (push bundle)
│ REST + JWT └──────────────┬──────────────┘
└────────────────────────────────────────── ┘
▼
┌────────────────────────────────────────────┐
│ NexusCad.Api (ASP.NET Core, .NET 8) │
│ · /api/projects, /api/captures, /api/rules│
│ · Roslyn rules engine (NexusCad.Rules) │
│ · QuestPDF + OpenXML (NexusCad.Documents) │
│ · ASP.NET Identity + JWT + Hangfire │
└─────────────────┬──────────────────────────┘
│
┌───────────┴───────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ SQLite (dev) │ │ NexusCad.SwWorker │
│ PostgreSQL 16 (prod)│ │ · External COM │
│ · domain + captures│ │ · variant export │
└─────────────────────┘ └─────────────────────┘
NexusCad.Core → Domain entities, interfaces, role constants
NexusCad.Infrastructure → EF Core, Identity, Repositories, Migrations
NexusCad.Rules → Roslyn C# scripting engine + dependency graph
NexusCad.Documents → QuestPDF + OpenXML generation
NexusCad.Api → REST API + JWT + Swagger (Windows Service in prod)
NexusCad.SwAddIn → SolidWorks COM Add-in (xCAD.NET), Capture Task Pane
NexusCad.SwWorker → Background process for variant generation via COM
NexusCad.Forms → Legacy form schema (deprecated, compat read-only)
NexusCad.Admin → (Deprecated) WPF shell — removal in Phase G
web/ → React 18 + TS + MUI 9 (runtime + /admin/*)
git clone https://github.com/JaviFRx/NexusCad.git
cd NexusCad
git checkout dev
dotnet restore
.\dev-scripts\start-dev.ps1
Stops the NexusCadApi Windows Service if installed, then runs in console mode on http://localhost:5140. Swagger at /swagger.
Default credentials: admin@nexuscad.local / Admin123!
In a separate elevated PowerShell window (run as Administrator):
.\dev-scripts\register-swaddin.ps1
Builds the Add-in, runs regsvr32 on the comhost DLL, and writes the SOLIDWORKS Addins registry entries.
- Open SolidWorks → Herramientas → Complementos → tick NexusCad Capture
- The "NexusCad Capture" tab appears in the right-side strip
- Login →
http://localhost:5140, seed credentials - + Nuevo creates a project
- Open any
.SLDPRT→ Añadir doc activo como Master captures it - Click a dimension in the FeatureManager → Capturar dimensión seleccionada
- Verify via Swagger:
GET /api/projects/{projectId}/captures/models
Add-in log: Get-Content "$env:TEMP\nexuscad-swaddin.log"
cd src/NexusCad.Web
npm install
npm run dev # Vite on http://localhost:5173
| Component | Version | Required for |
|---|---|---|
| Windows | 10/11 or Server 2019+ | All (SolidWorks is Windows-only) |
| .NET SDK | 8.0 | Build and run all .NET projects |
| SolidWorks | 2024+ (tested on 2026) | SwAddIn + SwWorker |
| Node.js | 20+ | NexusCad.Web client portal |
| npm | 10+ | included with Node.js |
| Docker Desktop | latest | Optional — Postgres + Seq locally |
SQLite is the default dev database (nexuscad.db in repo root). Postgres is only required for prod-equivalent testing.
👀 Option A: Just exploring / Read-only
git clone https://github.com/JaviFRx/NexusCad.git C:\Programacion\NexusCad
cd C:\Programacion\NexusCad
dotnet restore
✅ Quick and simple
🤝 Option B: Contributing (Recommended)
- Fork at https://github.com/JaviFRx/NexusCad (click Fork)
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/NexusCad.git C:\Programacion\NexusCad
cd C:\Programacion\NexusCad
git remote add upstream https://github.com/JaviFRx/NexusCad.git
dotnet restore
✅ You can commit to your fork
✅ You can create Pull Requests
✅ You can sync with upstream via git fetch upstream
🔧 Option C: Core team / Direct access
git clone https://github.com/JaviFRx/NexusCad.git C:\Programacion\NexusCad
cd C:\Programacion\NexusCad
dotnet restore
✅ Direct push access
| Document | Description |
|---|---|
| MANUAL.md | 📖 End-user manual — how to operate NexusCad (Capture, authoring, web portal) |
| PLAN.md | 📋 Full architecture, domain model, roadmap (authoritative source of truth) |
| CLAUDE.md | 🤖 Guidance for AI assistance — current decisions and conventions |
| docs/ADR-001-sw-addin-vscode-authoring.md | 🔄 The dev branch architectural pivot |
| docs/FORMS-HYBRID-ARCHITECTURE.md | 📋 Legacy hybrid form schema (slated for removal Phase G) |
| docs/FASE-*.md | ✅ MVP v1 phase write-ups — historical |
| dev-scripts/README.md | 🔧 PowerShell helper scripts |
# Build (solution = .slnx, not .sln)
dotnet build NexusCad.slnx
# Tests
dotnet test
dotnet test tests/NexusCad.Rules.Tests
dotnet test --filter "FullyQualifiedName~RoslynSandboxTests"
# EF Core migrations
dotnet ef migrations add <Name> `
--project src/NexusCad.Infrastructure `
--startup-project src/NexusCad.Api
dotnet ef database update `
--project src/NexusCad.Infrastructure `
--startup-project src/NexusCad.Api
# Postgres + Seq locally
docker-compose up -d
# SwAddIn lifecycle (elevated PowerShell)
.\dev-scripts\register-swaddin.ps1
.\dev-scripts\unregister-swaddin.ps1
# Web
pnpm --dir web install
pnpm --dir web dev
pnpm --dir web build
pnpm --dir web lint
# E2E Playwright (web must be running)
cd tests/e2e; pnpm install; pnpm exec playwright install
cd tests/e2e; pnpm test
| Phase | Description | Status |
|---|---|---|
| 0 | Foundation (solution, projects, Docker, EF Core) | ✅ Complete |
| 1 | Administrator WPF shell + Auth | ✅ Complete |
| 2 | Roslyn rules engine + dependency graph | ✅ Complete — 41/41 tests |
| 3 | Database + Identity + Hybrid Forms System | ✅ Complete |
| 4 | API Controllers + Web Runtime (React) | ✅ Complete — 27/27 tests |
| 5 | Administrator panels (Security, Tables, Autopilot) | ✅ Complete |
| 6 | SolidWorks Worker (COM Interop + capture) | ✅ Complete |
| 7 | Document generation (PDF, DOCX, templates) | ✅ Complete |
| 8 | Web Portal + Dynamic Forms Runtime | ✅ Complete |
| 9 | Production deployment + optimization | ✅ Complete |
| Phase | Scope | Status |
|---|---|---|
| A | Bootstrap NexusCad.SwAddIn — Task Pane shell via xCAD.NET |
✅ Done |
| B | Capture dimensions from active SW selection | ✅ Done |
| C | Custom Properties / Features / Drawings / Replacement Models / File Formats | ✅ Done |
| D | @nexuscad/cli + Vite plugin + create-nexuscad-form template |
📋 Next |
| E | Form runtime loader (<iframe sandbox> + postMessage bridge) |
📋 |
| F | Migrate admin (users, rules, jobs, monitoring) into web/admin/* |
📋 |
| G | Remove NexusCad.Admin WPF + migrate legacy forms |
📋 |
See PLAN.md for complete details.
NexusCad takes DriveWorks Pro as a functional reference:
| DriveWorks Pro | NexusCad | Technology |
|---|---|---|
| Capture (panel inside SW) | NexusCad.SwAddIn |
xCAD.NET Task Pane |
| Administrator (rules / forms author) | web/admin/* + VSCode + @nexuscad/cli |
React + VSCode CLI |
| User / Live | web/ runtime |
React 18 + TypeScript |
| Autopilot | NexusCad.SwWorker |
.NET Background Service + COM |
| Group / Individual | NexusCad.Api + Database |
ASP.NET Core + EF Core |
| Engine (Excel) | NexusCad.Rules |
Roslyn C# Scripting |
| Documents | NexusCad.Documents |
QuestPDF + OpenXML |
| Aspect | DriveWorks | NexusCad |
|---|---|---|
| License | Proprietary | AGPL v3 + Commercial |
| Rules engine | Excel formulas | C# with Roslyn |
| Database | SQL Server | PostgreSQL / SQLite |
| Form authoring | Built-in GUI | VSCode + TS + Vite |
| Documents | Excel + Word | QuestPDF + OpenXML (no Excel) |
⚠️ Project in active architectural pivot. External PRs not accepted yet.
- Search existing issues: https://github.com/JaviFRx/NexusCad/issues
- Open a new Issue with: steps to reproduce, expected vs. actual behavior, environment info
Open an Issue with the enhancement label describing the problem, your proposed solution, and alternatives considered.
| License | Use it when… | File |
|---|---|---|
| AGPL-3.0 | You're fine sharing modifications and complying with §13 (network use). Internal use, open-source forks, evaluation. | LICENSE |
| Commercial | You want to ship NexusCad inside a proprietary product, or run a modified version as SaaS without releasing your fork. | COMMERCIAL-LICENSE.md |
Contributors must accept the CLA. Sign off commits with git commit -s.
NexusCad is an independent project with no affiliation, sponsorship, or endorsement from DriveWorks Ltd. or Dassault Systèmes.
- "DriveWorks", "DriveWorks Pro", "DriveWorks Administrator", "DriveWorks Autopilot" and "DriveWorks Live" are registered trademarks of DriveWorks Ltd., mentioned here exclusively for descriptive purposes under nominative fair use.
- "SOLIDWORKS" is a registered trademark of Dassault Systèmes SolidWorks Corporation.
- No logos or screenshots of third-party commercial products are included in this repository.
Built with .NET 8, SolidWorks API, xCAD.NET, React, Roslyn, and EF Core