npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sysgram.js

v0.1.6

Published

Sysgram.js draw the system architecture using JavaScript.

Downloads

7

Readme

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.