BIM Interoperability API for Revit, Archicad and IFC
Features β’ Quick Start β’ Development β’ Production β’ Documentation
This project provides a complete BIM interoperability layer for architectural software, enabling seamless conversion between:
- Revit (.rvt) β IFC
- RVT β IFC: Cloud-based via Autodesk Platform Services (APS/Forge)
- IFC β RVT: Local via Revit Plugin
- Archicad (.pln) β IFC
- Both directions via Archicad Plugin (local)
- Revit β Archicad (via IFC as intermediate format)
graph TB
subgraph Client["π Client Browser"]
Frontend["React Frontend<br/>Port 3001"]
end
subgraph Backend["π₯οΈ Backend Services"]
NodeAPI["Node.js API<br/>Port 3000<br/>β’ REST API<br/>β’ WebSocket Manager"]
PythonBridge["Python Bridge<br/>Port 5000<br/>β’ Plugin Communication"]
end
subgraph Cloud["βοΈ Cloud Services"]
APS["Autodesk APS/Forge<br/>β’ RVT β IFC Conversion"]
end
subgraph Plugins["π Desktop Plugins"]
RevitPlugin["Revit Plugin<br/>Port 8082<br/>β’ IFC β RVT"]
ArchicadPlugin["Archicad Plugin<br/>Port 8081<br/>β’ PLN β IFC"]
end
Frontend <-->|"HTTP/WebSocket"| NodeAPI
NodeAPI <-->|"Cloud API"| APS
NodeAPI <-->|"WebSocket Bridge"| PythonBridge
PythonBridge <-->|"WebSocket"| RevitPlugin
PythonBridge <-->|"WebSocket"| ArchicadPlugin
style APS fill:#e1f5ff
style RevitPlugin fill:#fff9c4
style ArchicadPlugin fill:#c8e6c9
style NodeAPI fill:#f3e5f5
style PythonBridge fill:#f3e5f5
- REST API (Node.js + TypeScript + Fastify)
- Autodesk Platform Services (Cloud conversion for RVT β IFC)
- Python Bridge (Flask + Plugin communication)
- Desktop Plugins (Revit C# + Archicad C++)
- Web Interface (React + TanStack Router)
- Documentation (Fumadocs + Code Hike)
- β Real-time conversion progress via WebSocket
- β Multi-format support: RVT, PLN, IFC
- β Chain conversions: Automatic Revit β IFC β Archicad workflows
- β Plugin status monitoring in real-time
- β Job management with automatic cleanup (TTL-based)
- β Internationalization: Portuguese and English support
- β File download after conversion
- β RESTful API with Scalar/Swagger documentation
- β WebSocket Context: Global state management for jobs
- β Dark mode support in web interface
- β Cross-platform backend (Windows, Linux, macOS)
- β Drag-and-drop file upload
- Node.js >= 18.0.0 (LTS recommended: 20.x)
- pnpm >= 8.0.0
- Python >= 3.8 (3.13+ recommended)
Windows:
git clone https://github.com/Shobon03/ts-ifc-api.git
cd ts-ifc-api
scripts\setup.batLinux/Mac:
git clone https://github.com/Shobon03/ts-ifc-api.git
cd ts-ifc-api
chmod +x scripts/*.sh
./scripts/setup.shOr manually:
pnpm install
cd backend/python
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txtStart all services in development mode with hot-reload:
pnpm devOr start services individually:
pnpm dev:backend # Node.js API (port 3000)
pnpm dev:python # Python bridge (port 5000)
pnpm dev:frontend # React app (port 3001)
pnpm dev:documentation # Fumadocs docs (port 3002)| Service | URL | Description |
|---|---|---|
| Backend API | http://localhost:3000 | Node.js REST API + WebSocket |
| Python Bridge | http://localhost:5000 | Archicad plugin communication |
| Frontend | http://localhost:3001 | React web interface |
| Documentation | http://localhost:3002 | Fumadocs documentation site |
| API Reference | http://localhost:3000/docs | Scalar API documentation |
Windows:
scripts\build.batLinux/Mac:
./scripts/build.shOr with pnpm:
pnpm buildWindows:
scripts\start.batLinux/Mac:
./scripts/start.shOr with pnpm:
pnpm start# Install PM2
npm install -g pm2
# Build
pnpm build
# Start with PM2
pm2 start ecosystem.config.js
# Configure to start on boot
pm2 startup
pm2 saveFor detailed build and deployment instructions, see BUILD.md.
Complete documentation is available at http://localhost:3002 (when running pnpm dev:documentation).
- Introduction: What is the system and how it works
- Getting Started: Your first conversion
- File Conversion: Detailed guide for all conversion types
- Troubleshooting: Common issues and solutions
- Architecture: System overview and component interaction
- Setup: Environment configuration
- Backend Node.js: Fastify API and WebSocket
- Backend Python: Flask bridge and Archicad integration
- Frontend: React application with TanStack Router
- Revit Plugin: C# WebSocket plugin for IFC β RVT import (RVT β IFC handled by APS)
- Archicad Plugin: C++ plugin for bidirectional PLN β IFC conversion
- Endpoints: Complete REST API documentation
- WebSocket Protocol: Real-time communication spec
- Data Models: TypeScript types and Zod schemas
- Frontend README
- Backend Node.js README
- Backend Python README
- Revit Plugin README
- Archicad Plugin README
- Architecture Overview
- Architectural Decisions
- Build Instructions
- Deploy Checklist
ts-ifc-api/
βββ backend/
β βββ node/ # Fastify REST API + WebSocket
β β βββ src/
β β β βββ routes/ # API endpoints
β β β βββ services/ # Business logic
β β β βββ ws/ # WebSocket handlers
β β β βββ types/ # TypeScript types
β β β βββ utils/ # Utilities
β β β βββ tests/ # Unit tests
β β βββ README.md
β βββ python/ # Flask + Archicad API bridge
β βββ src/
β β βββ server.py # Flask application
β β βββ archicad/ # Archicad integration
β βββ README.md
βββ frontend/ # React web application
β βββ src/
β β βββ routes/ # TanStack Router pages
β β βββ components/ # React components
β β βββ lib/ # WebSocket, i18n, utils
β β βββ assets/ # Styles and static files
β βββ README.md
βββ plugins/
β βββ revit/ # Revit C# plugin (95% complete)
β β βββ IfcToRevitConverter/
β β βββ README.md
β βββ archicad/ # Archicad C++ plugin (65% complete)
β βββ ArchiCAD-IFC-Plugin/
β βββ BUILD_INSTRUCTIONS.md
β βββ README.md
βββ documentation/ # Fumadocs documentation site (Next.js 15)
β βββ content/docs/
β β βββ user-guide/
β β βββ developer-guide/
β β βββ plugins/
β β βββ api/
β βββ README.md
βββ scripts/ # Build and setup automation
β βββ setup.bat / setup.sh
β βββ build.bat / build.sh
β βββ start.bat / start.sh
βββ BUILD.md # Detailed build instructions
βββ DEPLOY_CHECKLIST.md # Production deployment guide
βββ README.md # This file
- Node.js 18+ with TypeScript (20.x LTS recommended)
- Fastify 5.6 - Fast web framework
- Zod 4.1 - Schema validation
- @fastify/websocket - WebSocket support
- Axios - HTTP client
- APS SDK - Autodesk Platform Services (for RVT β IFC cloud conversion)
- React 19.2 - UI library
- TanStack Router 1.133 - File-based routing
- TanStack Query 5.90 - Server state management
- Tailwind CSS 4.1 - Styling
- Vite 7.1 - Build tool
- React Hook Form + Zod - Form validation
- Lucide React - Icons
- Flask 3.1 - Web framework
- Archicad 28.3000 - Archicad API
- Revit API 2025.4 + .NET 8.0 (C#)
- Archicad API DevKit 28.4 + C++17
- Boost.Beast - WebSocket/HTTP (Archicad)
- WebSocketSharp - WebSocket server (Revit)
- Fumadocs - Documentation framework (Next.js 15)
- Code Hike - Code highlighting and annotations
- MDX - Markdown with React components
| Component | Status | Completeness |
|---|---|---|
| Backend Node.js | β Production Ready | 100% |
| Backend Python | β Production Ready | 100% |
| Frontend | β Production Ready | 100% |
| Revit Plugin | β Production Ready | 100% |
| Archicad Plugin | β Production Ready | 100% |
| Documentation | β Complete | 100% |
| Conversion | Method | Technology |
|---|---|---|
| RVT β IFC | βοΈ Cloud | Autodesk Platform Services (APS/Forge) |
| IFC β RVT | π₯οΈ Local | Revit Plugin + Python Bridge |
| PLN β IFC | π₯οΈ Local | Archicad Plugin + Python Bridge |
| IFC β PLN | π₯οΈ Local | Archicad Plugin + Python Bridge |
sequenceDiagram
participant User
participant Frontend
participant Node.js
participant APS as Autodesk APS
User->>Frontend: Upload RVT file
Frontend->>Node.js: POST /models/generate-ifc
Node.js->>APS: Upload to OSS bucket
Node.js->>APS: Start conversion job
loop Poll status every 5s
Node.js->>APS: Check manifest
APS-->>Node.js: Progress: 0-100%
Node.js-->>Frontend: WebSocket update
end
APS-->>Node.js: Conversion complete
Node.js->>APS: Download IFC
Node.js->>Node.js: Save to disk
Node.js-->>Frontend: Download URL
User->>Frontend: Download IFC
sequenceDiagram
participant User
participant Frontend
participant Node.js
participant Python
participant Revit as Revit Plugin
User->>Frontend: Submit IFC file
Frontend->>Node.js: POST /models/convert-from-ifc
Node.js->>Python: Trigger conversion
Python->>Revit: WebSocket command
Revit->>Revit: Import IFC β RVT
Revit-->>Python: Progress updates
Python-->>Node.js: Forward progress
Node.js-->>Frontend: WebSocket update
Revit-->>Python: Conversion complete
Python-->>Node.js: Forward completion
Node.js-->>Frontend: Download URL
User->>Frontend: Download RVT
sequenceDiagram
participant User
participant Frontend
participant Node.js
participant Python
participant Archicad as Archicad Plugin
User->>Frontend: Upload PLN/IFC file
Frontend->>Node.js: POST /models/...
Node.js->>Python: Trigger conversion
Python->>Archicad: WebSocket command
Archicad->>Archicad: Convert PLN β IFC
Archicad-->>Python: Progress updates
Python-->>Node.js: Forward progress
Node.js-->>Frontend: WebSocket update
Archicad-->>Python: Conversion complete
Python-->>Node.js: Forward completion
Node.js-->>Frontend: Download URL
User->>Frontend: Download result
- β Complete conversion pipeline: All formats fully supported (RVT β IFC β PLN)
- β Hybrid architecture: Cloud (APS) for RVTβIFC, Local plugins for other conversions
- β Real-time progress tracking: WebSocket communication for all conversions
- β Production ready: All components tested and stable
- βΉοΈ IFC Validation: UI available, backend integration planned for future release
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
See BUILD.md for detailed development environment setup.
- IFC validation backend integration
- Extended unit and integration test coverage
- Docker containerization
- Performance optimizations for large models
- Additional IFC schema versions support
This project is licensed under GPL-3.0 - see LICENSE for more details.
This project is a part of my final thesis for my undergraduate Computer Science degree.