Skip to content

riolet/sadl

Repository files navigation

SADL

System Architecture Design Language

Overview

SADL is a language for describing and designing system architectures. It models systems as entities with connections between them.

Syntax

SADL files are organized into sections: #nodeclass, #linkclass, #instances, and #connections.

Node Classes

Define entity templates with connectors:

#nodeclass
web_server::
    https_listener (443)
    *mysql_connector
  • name or name (port) - Server connector (listens for connections)
  • *name - Client connector (initiates connections)

Client connectors are prefixed with *.

Multiple Ports and Ranges

proxy::
    ports (80, 443, 8000-8080)

UDP Protocol

TCP is the default. Use UDP() wrapper for UDP:

dns_server::
    dns_listener (UDP(53))

Link Classes

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

Instances

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

Connections

Connect instances using arrow syntax:

#connections
my_browser -> internal_web_server
internal_web_server -> primary_mysql_server

Comments

Lines starting with # (other than section headers) are comments.

Include

Include other SADL files to reuse definitions:

include "lib/webstack.sadl"

Complete Example

#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

Visualization (sadlmap)

SADL includes an interactive visualizer called sadlmap.

Run with Docker

docker run -p 8080:80 riolet/sadlmap

Then open http://localhost:8080

Features

  • 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

License

GPL-3.0 - See LICENSE for details.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published