# web-ifc
**Repository Path**: rambuild/web-ifc
## Basic Information
- **Project Name**: web-ifc
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MPL-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-01-18
- **Last Updated**: 2022-01-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
ifc.js
|
demo
|
discord
|
usage examples
|
npm package
|
contributing
web-ifc 
[](https://github.com/tomvandig/web-ifc/actions/workflows/build.yml)

**web-ifc** is a javascript library to read and write ifc files, at native speeds. **web-ifc** is part of the [ifc.js](https://ifcjs.github.io/info/) project, which aims to lower the threshold for developing open BIM applications.
## Status
Although it is quite stable and fast already, web-ifc is in **pre-alpha status** until ifc support matures. The list of currently supported ifc elements, or level of support for different ifc types, is an undocumented work in progress.
Depending on your models, web-ifc may be quick and correct, or slow and broken, please share any problematic models so I can take a look :)
## Install
`npm install web-ifc`
## Quick setup
```JavaScript
const WebIFC = require("web-ifc/web-ifc-api.js");
// initialize the API
const ifcApi = new WebIFC.IfcAPI();
// initialize the library
await ifcApi.Init();
// open a model from data
let modelID = ifcApi.OpenModel(/* IFC data as a string or UInt8Array */, /* optional settings object */, );
// the model is now loaded! use modelID to fetch geometry or properties
// checkout examples/usage for some details on how to read/write IFC
// close the model, all memory is freed
ifcApi.CloseModel(modelID);
```
See [examples](https://github.com/tomvandig/web-ifc/tree/main/examples/usage/src) for more details on how to use web-ifc.
## Building WASM module
### Setting up emscripten
The WASM library is built through emscripten, please see [the emscripten installation guide](https://emscripten.org/docs/getting_started/downloads.html) for information on how to set up emscripten. Afterwards both `setup-env` and `em++` need to be in your path.
### WASM library
Run `npm install` to install all dependencies.
Run `npm run setup-env` whenever you open a new terminal, this will set up the required emscripten environment variables for you to compile code.
Run `npm run build-release-all` to build a release version of the wasm binary and the accompanying web-ifc api. It will be placed in `./dist`.
Run `npm run dev` to launch a development server with a basic ifc file viewer.
## Stand alone C++
Although the primary focus of the library is to be used through WebAssembly in the browser/nodejs, the project can be used stand-alone as a c++ library or executable. See [here](https://github.com/tomvandig/web-ifc/blob/main/src/wasm/web-ifc-test.cpp) for a simple entry point to get started.
## Contributing
Want to help out? Great!
Please checkout [our contribution suggestsions](https://github.com/tomvandig/web-ifc/blob/main/contributing.md).