This project addresses modelling and discrete-event simulation of complex systems through coloured Petri nets. Rainbow is the name of both the modelling language and the graphical supporting toolset. Rainbow uses Java as the net annotating language. Places have a colour set class which is directly programmed in Java. Input arcs have variables as arc inscriptions, and can have guards. Output arcs have arc inscriptions which can be variables or functions. Transitions can specify a guard which controls its enabling. Tokens (colours) are time stamped. Different token selection policies (e.g. FIFO, FIFO Random, Random and so forth) can be associated to places in order to regulate the binding process. The Rainbow tool assists the graphical editing of a model and allows debugging, discrete-event simulation and statistical data collection. Actually, statistics can be computed by introducing in a model suitable subnets. A Rainbow model is externalised using XML and associated DTD. To make it possible to simulate large systems, a Rainbow model can be split into regions (subnets) assigned for execution to different Logical Processes (LPs) of a distributed simulator. Distributed simulation depends on an implementation of a Rainbow executor on top of Temporal Uncertainty Time Warp.