OpenLB is a numerical framework for lattice Boltzmann simulations, created by students and researchers with di erent background in computational uid dynamics. The code can be used by application programmers to implement speci c ow geometries in a straightforward way, and by developers to formulate new models. To please the rst audience, OpenLB o ers a neat interface through which it is possible to set up a simulation with little e ort. For the second audience, the structure of the code is kept conceptually simple, implementing basic concepts of the lattice Boltzmann theory step-by-step. Thanks to this, the code is an excellent framework for programmers to develop pieces of reusable code that can be exchanged in the community. One key aspect of the OpenLB code is genericity in its many facets. Basically, generic programming is intended to o er a single code that can serve many purposes. On one hand, the code implements dynamic genericity through the use of object-oriented interfaces. One use of this is that the behavior of lattice sites can be modi ed during program execution, to distinguish for example between bulk and boundary cells, or to modify the uid viscosity or the value of a body force dynamically. Furthermore, C++ templates are used to achieve static genericity. As a result, it is sucient to write a single generic code for various 3D lattice structures, such as D3Q15, D3Q19, and D3Q27