Declarative
Describe the intended systems, networks, artifacts and event timeline without tying the scenario to the implementation details of one deployment platform.
Cyber-testbed Reconstruction and Automation Description Language
CRADLE is a declarative and debuggable domain-specific language for describing cyber-testbed environments as code. It provides a high-level, static representation of computing infrastructure that can be reviewed, transformed and deployed on supported platforms.
metadata() >
name("HelloWorld-Win"),
eventType("sequence"),
object("HelloWorld").
instances() >
instance("win7"),
instance("router").
network("lan_0") >
subnet("192.168.56.0/24"),
endpoint("win7", "192.168.56.121"),
endpoint("router", "192.168.56.122").Why CRADLE?
CRADLE brings systems, networks, artifacts and event sequences into one structured scenario definition. Instead of spreading environment intent across configuration files, scripts, infrastructure settings and individual knowledge, teams can describe what a cyber environment should contain and how its events should progress in one place. The resulting static description can be reviewed, maintained and transformed for supported deployment environments.
CRADLE follows a Cyber Experimentation As Code (CEaC) approach, representing computing components and scenario intent as code rather than as disconnected setup instructions.
Describe the intended systems, networks, artifacts and event timeline without tying the scenario to the implementation details of one deployment platform.
Keep the environment and event sequence in a structured source description that can be transformed again for supported deployment targets.
Make environment intent inspectable so teams can review changes, understand scenario structure and diagnose issues more easily.
CRADLE in action
Define the environment once, generate the required deployment material and move through a consistent workflow.
metadata() >
name("HelloWorld-Win"),
eventType("sequence"),
object("HelloWorld").
instances() >
instance("win7"),
instance("router").
network("lan_0") >
subnet("192.168.56.0/24"),
endpoint("win7", "192.168.56.121"),
endpoint("router", "192.168.56.122").Supported workflow
CRADLE currently documents generation for libvirt, VirtualBox and SPHERE, with complete local workflow coverage for libvirt and VirtualBox.
Acknowledgements
CRADLE is developed with contributions from project leads, collaborators and supporting organisations.
Project Leads


Collaborators


Special Thanks
We also acknowledge the contributors and organisations that supported the development and evaluation of CRADLE.