Contributing
LUX is a project that anyone can contribute to. We believe in open discussions, constructive criticism and new ideas. If you see something that can be improved, open an issue or edit the docs.
A good way to start is searching for good first issue tags. When you find one you feel ready to work on, create a separate branch and make a pull request to the master when you are done.
If you feel uncertain about anything, start a discussion under the relevant issue or contact us directly.
What you need to know
Knowing the details of daylight simulation is desired but not required to contribute to this project. You can learn by doing or read the overview section.
Frameworks per project
- Python (Simulation engine, pre- and postprocessing)
- C# and Revit API (plugin development)
- Grasshopper and RhinoCommon (computational geometry)
- Typescript, ifc.js, three.js (web development)
Project Structure

The application is divided into several docker containers, one container responsible for one function.
These containers are not directly accessible via API; instead, they are connected to the interface server that accepts the requests and directs them to the respective containers in the correct order. This design serves as an extra layer of protection and ensures uniform request and response structure as well as modularity. One container can be versioned, replaced, updated or removed without having any effect on other services.
The interface server can be connected to different user interfaces via the same API requests. The idea with the user interfaces is to keep them as light as possible, keeping all the operations on the server side (as much as possible).
Contributing Guidelines
Follow existing code style. We hold ourselves to OOP with elements of FP and fancy software design patterns.
Make sure your development starts with one of the templates if you are starting a new repo. Any project or feature starts with unit tests.
Make sure you don't forget to comment your thinking process both in the code and in the related issues and PR discussions. No one can read minds! :) And, of course, every new development should be reflected in the documentation.
Support
Open an issue or get in touch if you need help. We are always happy to help each other learn and grow.