A WebGL viewer for large 3D models of buildings and infrastructure built on Three.JS and forked from VIM-WebGL-Viewer.
👉 Try a live demo, watch a short video on YouTube, or browse the API docs.
💬 We also welcome you to join the conversation on Discord.
At Ara 3D along with our partners and customers who develop technology for AECO (Architecture Engineering Construction and Owners) professionals needed a simple open-source library to efficiently load and display large 3D BIM (Building Information Modeling) models in WebGL.
"It's incredibly enjoyable to work with—strikes the perfect balance between built-in functionality like highlighting and zoom-to-extent features, without feeling overly prescriptive. Outstanding work 🙌" - Louis Trümpler.
We needed the viewer to be easy to customize for different use cases while providing support for large numbers of similar objects, which is common in BIM models.
There are many excellent WebGL viewers (see the Appendix below). Three.JS makes writing a simple one easy, at least at first. Adding common features quickly turns into a lot of work, especially if you have large architectural or BIM models with lots of objects.
This library is a good starting point for your own 3D viewing needs if you want:
At Ara3D we created a simple 3D web-viewer in March 2019 which had support for multiple file formats.
The VIM team took over the project in July 2021 and the team, mostly Simon Roberge, added many features and enhancements. They also customized the project to meet the needs of their PowerBI offering.
On December 17, 2024, the VIM team archived the project, and merged it with their React-based viewer project into a new repository https://github.com/vimaec/vim-web. Today the VIM viewer is very powerful, but has become very specialized to their use-cases.
This project revives the spirit of the original viewer, while leveraging many of the excellent contributions made by VIM. This repository was created on March 26th 2025 from a snapshot of the VIM repository from 2022, but with some significant refactoring.
We also took the excellent examples that were created by Simon and compiled them in a single easy to view demo.
There are a number of differences between this project and the one currently maintained by VIM:
The project uses vite for bundling and development.
Some of the common tasks, which can be found in the package.json
.
npm run dev
- Running the vite dev server with "hot reloading" npm run build:docs
- Building the examples and API documentation. npm run serve:docs
- Testing the built examples and API documentation locally npm run build:lib
- Building the library as a JavaScript module (.mjs
) fileW
, Up
- Move camera forward
A
, Left
- Move camera to the left
S
, Down
- Move camera backward
D
, Right
- Move camera to the right
E
- Move camera up
Q
- Move camera down
Shift
- faster camera movement while pressed
+
- Increase camera speed
-
- Decrease camera speed
Space
- Toggle orbit mode
Home
- Frame model
Escape
- Clear selection
F
Frame selection
Hold left click + Move mouse
- Rotate camera in current mode Hold right click + Move mouse
- Pan/tilt cameraHold middle click + Move mouse
- Truck/pedestal cameraMouse wheel
- Dolly Camera Left click
- Select object Ctrl + Mouse wheel
- Increase/decrease camera speedOne Finger swipe
- Tilt/Pan camera Two Finger swipe
- Truck/Pedestal camera Two Finger pinch/spread
- Dolly CameraWhat is on the horizon:
Feel free to log issues or submit pull requests.
We also offer very affordable custom software development services if you are using this project in a commercial context. For more information reach out to us at info@ara3d.com.
Generated using TypeDoc