System Architecture Design Language
SADL is a language for describing and designing system architectures. It models systems as entities with connections between them.
SADL files are organized into sections: #nodeclass, #linkclass, #instances, and #connections.
Define entity templates with connectors:
#nodeclass
web_server::
https_listener (443)
*mysql_connector
nameorname (port)- Server connector (listens for connections)*name- Client connector (initiates connections)
Client connectors are prefixed with *.
proxy::
ports (80, 443, 8000-8080)
TCP is the default. Use UDP() wrapper for UDP:
dns_server::
dns_listener (UDP(53))
Define valid connection patterns between connector types using arrow syntax:
#linkclass
browser_client.https_connector -> web_server.https_listener
web_server.mysql_connector -> mysql_server.mysql_listener
Create instances of node classes, optionally with IP addresses:
#instances
web_server internal_web_server(192.168.1.10), external_web_server(10.0.10.10)
browser_client my_browser
Connect instances using arrow syntax:
#connections
my_browser -> internal_web_server
internal_web_server -> primary_mysql_server
Lines starting with # (other than section headers) are comments.
Include other SADL files to reuse definitions:
include "lib/webstack.sadl"
#nodeclass
browser_client::
*https_connector
web_server::
https_listener (443)
*mysql_connector
mysql_server::
mysql_listener (3306)
#linkclass
browser_client.https_connector -> web_server.https_listener
web_server.mysql_connector -> mysql_server.mysql_listener
#instances
web_server internal_web_server(192.168.1.10)
browser_client my_browser
mysql_server primary_db(192.168.1.11)
#connections
my_browser -> internal_web_server
internal_web_server -> primary_db
SADL includes an interactive visualizer called sadlmap.
docker run -p 8080:80 riolet/sadlmapThen open http://localhost:8080
- Schema view: Visualize node classes and link classes
- Instance view: Visualize deployed instances and connections
- Pan: drag on empty space
- Zoom: mouse wheel
- Drag nodes to reposition
GPL-3.0 - See LICENSE for details.