Giter Club home page Giter Club logo

sysgram.js's Introduction

About

Sysgram.js draw the system architecture using JavaScript.

npm version License

It is a Javascript based diagramming tool that renders from javascript syntax to create and modify diagrams dynamically.

Supported Providers:

aws provider azure provider gcp provider ibm provider kubernetes provider alibaba cloud provider oracle cloud provider openstack provider firebase provider digital ocean provider elastic provider outscale provider on premise provider generic provider programming provider saas provider

Installation

CDN

https://unpkg.com/sysgram.js@<version>/dist/sysgram.bundle.min.js
https://cdn.jsdelivr.net/gh/succeun/sysgram.js@<version>/dist/sysgram.bundle.min.js

To select a version:

Replace <version> with the desired version number.

Latest Version:

Installing

It can insert a script tag with an absolute address and a sysgram call into the HTML like so:

<!-- sysgram (latest) -->
<script src="https://unpkg.com/sysgram.js/dist/sysgram.bundle.min.js"></script>
<script>
function drawSample() {
    var EC2 = diagrams.aws.compute.EC2

	Diagram("Simple Diagram", function() {
		EC2("web")
	})
}
sysgram.initialize({startOnLoad:true});
</script>

<div class="sysgram" data-sysgram-function="drawSample"></div>

Doing so will command the sysgram parser to look for the <div> tags with class="sysgram".

From these tags sysgram will try to read the diagram definitons and render them into <svg>.

Or you can displayed a result with <div> tags from javascript function.

<script src="../dist/sysgram.bundle.js"></script>
<script>
    function drawSample() {
        var EC2 = diagrams.aws.compute.EC2

        Diagram("Simple Diagram", function() {
            EC2("web")
        })
    }
    window.addEventListener('DOMContentLoaded', function(event) {
        sysgram.initWithCode(drawSample, '.sample');
    });
</script>

<div class="sample"></div>

When developing locally, you must have a local web server due to hpcc-js/wasm. In this case, you can load the server as follows.

npm run dev

After executing this command, open http://localhost:4000/docs/examples/basic.html in the browser.

basic.html

Below is the most basic and simple example html.

<!DOCTYPE html>
<html>
<head>
	<!-- sysgram (latest) -->
	<script src="https://unpkg.com/sysgram.js/dist/sysgram.bundle.min.js"></script>
	<script>sysgram.initialize({startOnLoad:true});</script>
<head>
<body>
	<div class="sysgram">
var EC2 = diagrams.aws.compute.EC2

Diagram("Simple Diagram", function() {
	EC2("web")
})
	</div>
</body>
</html>

Example Diagram

Simple Diagram

var EC2 = diagrams.aws.compute.EC2
var RDS = diagrams.aws.database.RDS
var ELB = diagrams.aws.network.ELB

Diagram("Web Service", function() {
    ELB("lb")._$(EC2("web"))._$(RDS("userdb"))
})

Web Service

Complex Diagram

var { BigQuery, Dataflow, PubSub } = diagrams.gcp.analytics
var {AppEngine, Functions } = diagrams.gcp.compute
var BigTable = diagrams.gcp.database.BigTable
var IotCore = diagrams.gcp.iot.IotCore
var GCS = diagrams.gcp.storage.GCS

Diagram("Message Collecting", () => {
    ctx.pubsub = PubSub("pubsub")
    
    Cluster("Source of Data", () => {
        ArrayNode([IotCore("core1"),
                   IotCore("core2"),
                   IotCore("core3")])._$(ctx.pubsub)
    })

    Cluster("Targets", () => {
        Cluster("Data Flow", () => {
            ctx.flow = Dataflow("data flow")
        })
        
        Cluster("Data Lake", () => {
            ctx.flow._$([BigQuery("bq"),
                         GCS("storage")])
        })

        Cluster("Event Driven", () => {
            Cluster("Processing", () => {
                ctx.flow._$(AppEngine("engine"))._$(BigTable("bigtable"))
            })

            Cluster("Serverless", () => {
                ctx.flow._$(Functions("func"))._$(AppEngine("appengine"))
            })
        })
    })
    ctx.pubsub._$(ctx.flow)
})

Message Collecting

Examples can be found in examples, advanced examples

Credits

Many thanks to the d3 and d3-graphviz projects for providing the graphical layout and drawing libraries!

Thanks also to the Diagrams using Python project for usage of the python syntax.

Thanks to mingrammer(MinJae Kwon) for inspiration and starting point for developing.

sysgram.js's People

Contributors

succeun avatar

Watchers

James Cloos avatar  avatar

Forkers

cckmit

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.