move impl to cpp
allow custom colors