Skip to main content

Our Philosophy

By order of decreasing importance:

Learn and create resources for others to learn

We are here to learn and share. As the name Lab suggests this is a place to make experiments and try out implementations.

By writing documentation and blog articles we also strive to share our findings with others.

Don't worry about what already exists

If you want to build something, go ahead!

While looking for inspiration, you will likely stumble upon people that have already done what you had in mind, perhaps even better. But if you let this stop you from starting your own version of this idea, you will never write a single line of code :(

Remember that we are here to learn and write code because we enjoy writing code. Don't let any other consideration stop you from doing what you want!

Telling a developer there is already code to do that is like telling a songwritter there is already a song about love - Every developer


It is when multiple people implement similar ideas that the best ones emerge. We can all learn from each other and anyone has a chance of finding sweet little details that improve the whole system.

Easy to use

We can't produce as many cool features as big softwares, so we should embrace our minimalistic essence and produce few but polished and intuitive features. Our tool might only be useful for a few use cases, but we want it to be the best for those use cases.

Build an ecosystem of open-source libraries

With Cool we aim to produce high-quality libraries that everyone can use and contribute to.


CoolLab must facilitate the experimenting process of generative art: it must be easy to iterate, customize, try things: you plug in nodes, things happen, you get visual and textual feedback if you do something wrong that cannot work (e.g. trying to connect incompatible types of nodes together). (Idea: the first time you do something wrong there is visual feedback, and if you do it again a popup with an error message appears).

Prefer Visual Quality to Performance

We are not building a game engine; even though performance is important because we want to be able to visualize our changes in real time, visual quality is and should remain our main focus.

Be cross-platform

Refuse any solution that would reduce accessibility to the software, especially when cross-platform solutions exist.

Examples of such technologies are Cuda (Nvidia only, can be replaced by Vulkan's compute shaders) and OpenGL 4.0 and greater (not suported on MacOS, can be replaced by Vulkan or WebGPU).

Non-destructive / Procedural

Destructive workflows are so frustrating and stressful to me

Programmer-like workflow

I want CoolLab projects to be versionnable through Github. This means that our project files should be text-based (json or xml).

Build great debug tools

They will help you a lot later down the road. And they can also be helpful to users, so keep them in the final build: for example to view the history, or the registries.