:art: Diagram as Code for prototyping cloud system architectures

Overview

diagrams logo

Diagrams

license pypi version python version Run tests todos contributors

Buy Me A Coffee

Diagram as Code.

Diagrams lets you draw the cloud system architecture in Python code. It was born for prototyping a new system architecture design without any design tools. You can also describe or visualize the existing system architecture as well. Diagrams currently supports main major providers including: AWS, Azure, GCP, Kubernetes, Alibaba Cloud, Oracle Cloud etc... It also supports On-Premise nodes, SaaS and major Programming frameworks and languages.

Diagram as Code also allows you to track the architecture diagram changes in any version control system.

NOTE: It does not control any actual cloud resources nor does it generate cloud formation or terraform code. It is just for drawing the cloud system architecture diagrams.

Providers

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

Getting Started

It requires Python 3.6 or higher, check your Python version first.

It uses Graphviz to render the diagram, so you need to install Graphviz to use diagrams. After installing graphviz (or already have it), install the diagrams.

macOS users can download the Graphviz via brew install graphviz if you're using Homebrew.

# using pip (pip3)
$ pip install diagrams

# using pipenv
$ pipenv install diagrams

# using poetry
$ poetry add diagrams

You can start with quick start. Check out guides for more details, and you can find all available nodes list in here.

Examples

Event Processing Stateful Architecture Advanced Web Service
event processing stateful architecture advanced web service with on-premise

You can find all the examples on the examples page.

Contributing

To contribute to diagram, check out contribution guidelines.

Let me know if you are using diagrams! I'll add you in showcase page. (I'm working on it!) :)

Who uses it?

GitPitch

GitPitch is the perfect slide deck solution for Tech Conferences, Training, Developer Advocates, and Educators. Diagrams is now available as a dedicated Cloud Diagram Markdown Widget so you can use Diagrams directly on any slide for conferences, meetups, and training.

Cloudiscovery helps you to analyze resources in your cloud (AWS/GCP/Azure/Alibaba/IBM) account. It allows you to create a diagram of analyzed cloud resource map based on this Diagrams library, so you can draw the your existing cloud infrastructure with Cloudicovery.

Airflow Diagrams is an Airflow plugin that aims to easily visualise your Airflow DAGs on service level from providers like AWS, GCP, Azure, etc. via diagrams.

Other languages

  • If you are familiar to Go, you can use go-diagrams as well.

License

MIT

Comments
  • change the color for the clusters

    change the color for the clusters

    Hi Experts,

    I would like to change the color for the clusters like Tenancy, Compartment, VCN, OKE etc., Please refer below screenshots, Is that possible? If yes, can you pls guide me on that?

    Output from Diagram tool:

    diagram-screenshot

    Ideal output I would like to see:

    ideal_output

    kind/feature comp/cluster 
    opened by mumanoha 21
  • Update GCP Icons

    Update GCP Icons

    Hi there, I'm enjoying using Diagrams.

    But I've noticed a lot of the GCP icons appear to be outdated...

    There is a new GCP architecture icons pack available at this link: https://cloud.google.com/icons Is it possible to update the library to use these?

    Thanks, Soomin

    kind/feat/icon area/provider/gcp status/accepted 
    opened by soomineom 20
  • #90 #279 branded clusters [WIP]

    #90 #279 branded clusters [WIP]

    This is a PR based on https://github.com/mingrammer/diagrams/pull/90 add custom AWS clusters (see examples/aws.png for reference)

    I would love to here feedback before I will consider this to be ready.

    kind/feature status/need-to-review comp/cluster 
    opened by dan-ash 20
  • Basic support for C4 model primitives.

    Basic support for C4 model primitives.

    C4 is a model for visualizing software architecture. It defines a common terminology and a few core diagrams at different abstraction levels. We primarily use the System Landscape, System Context and Container diagrams so I started with just the entities needed for those.

    For a definition like this:

    from diagrams import Diagram
    from diagrams.c4 import Person, Container, Database, System, SystemBoundary, Relationship
    
    graph_attr = {
        "splines": "spline",
    }
    
    with Diagram("Container diagram for Internet Banking System", direction="TB", graph_attr=graph_attr):
        customer = Person(
            name="Personal Banking Customer", description="A customer of the bank, with personal bank accounts."
        )
    
        with SystemBoundary("Internet Banking System"):
            webapp = Container(
                name="Web Application",
                technology="Java and Spring MVC",
                description="Delivers the static content and the Internet banking single page application.",
            )
    
            spa = Container(
                name="Single-Page Application",
                technology="Javascript and Angular",
                description="Provides all of the Internet banking functionality to customers via their web browser.",
            )
    
            mobileapp = Container(
                name="Mobile App",
                technology="Xamarin",
                description="Provides a limited subset of the Internet banking functionality to customers via their mobile device.",
            )
    
            api = Container(
                name="API Application",
                technology="Java and Spring MVC",
                description="Provides Internet banking functionality via a JSON/HTTPS API.",
            )
    
            database = Database(
                name="Database",
                technology="Oracle Database Schema",
                description="Stores user registration information, hashed authentication credentials, access logs, etc.",
            )
    
        email = System(name="E-mail System", description="The internal Microsoft Exchange e-mail system.", external=True)
    
        mainframe = System(
            name="Mainframe Banking System",
            description="Stores all of the core banking information about customers, accounts, transactions, etc.",
            external=True,
        )
    
        customer >> Relationship("Visits bigbank.com/ib using [HTTPS]") >> webapp
        customer >> Relationship("Views account balances, and makes payments using") >> [spa, mobileapp]
        webapp >> Relationship("Delivers to the customer's web browser") >> spa
        spa >> Relationship("Make API calls to [JSON/HTTPS]") >> api
        mobileapp >> Relationship("Make API calls to [JSON/HTTPS]") >> api
    
        api >> Relationship("reads from and writes to") >> database
        api >> Relationship("Sends email using [SMTP]") >> email
        api >> Relationship("Makes API calls to [XML/HTTPS]") >> mainframe
        customer << Relationship("Sends e-mails to") << email
    

    It produces a diagram like this: container_diagram_for_internet_banking_system

    The implementation is a bit different from the other resources which are auto-generated based on images as far as I understand. If you'd prefer a different approach or would rather not have this upstream in diagrams, let me know! I also wasn't sure how to best integrate this in the documentation, but we could figure something out if this is a feature you'd like to see.

    Original discussion in #489.

    proposal comp/cluster comp/node comp/edge status/accepted 
    opened by mbruggmann 19
  • Label of edge misaligned

    Label of edge misaligned

    Hi there, Firstly, I love this project, thanks a lot! I am currently trying to create a diagram with labelled edges but the label position is incorrect.

    For example, when building this example from the doc. You can compare the position of label collect (on the right of the image, between metric and replica) with the one of the documentation (which seems correct).

    Tested with :

    • Ubuntu 18.04 and dot - graphviz version 2.40.1 (20161225.0304)
    • Ubuntu 20.04 and dot - graphviz version 2.43.0 (0)

    In both configurations, here is what I get: advanced_web_service_with_on-premise_(colored)

    Image from the documentation: image

    Any clue?

    bug comp/edge status/accepted 
    opened by tducret 16
  • How to change node color for OCI

    How to change node color for OCI

    First of all, Thanks a lot for this amazing innovative tool!! Great work!!

    I am new to this tool and still learning it, so please forgive me if I am wrong.

    Based on my research, there is no way to change the color of the node / cloud resources icon, lets say for OCI, it's always black, but Oracle is Red. Is that something that you guys can provide a resolution?

    Thanks in advance for the help / support!!

    kind/feat/icon comp/node area/provider/oci 
    opened by mumanoha 15
  • Update GCP icons

    Update GCP icons

    Update existing GCP icons using updated official GCP icons: see https://cloud.google.com/icons.

    Note, generic icons are updated with the corresponding new generic icon, except "ai-platform-data-labeling-service.png" since it now has its own unique icon.

    Closes #554.

    opened by DataDavD 14
  • Add icons to docs

    Add icons to docs

    Thought it could be useful to have an image showing what the icon looks like in the docs. Also fixes #466

    This is how the change looks:

    diagrams_docs_with_icons

    I couldn't decide how to handle the white icons from OCI, so they are currently not visible against the white background, but they all have a black icon alternative next to them which is visible so that shouldn't be much of an issue. Can update this though if there any any suggestions for handling the white icons.

    kind/docs status/accepted 
    opened by lrjball 14
  • Misaligned Node Labels

    Misaligned Node Labels

    By the way, excellent project!

    I've run the examples but the node labels are bad aligned. Maybe I'm using some incompatible graphviz version

    • graphviz: 2.40.1-2
    • diagrams: 0.2.1

    clustered_web_services

    bug 
    opened by bkmeneguello 14
  • Diagrams on the web #24 #177

    Diagrams on the web #24 #177

    Here a POC for a web generator.

    Instructions: Go in docker directory. Run docker-compose up --build Wait to complete then open your browser http://0.0.0.0:5000/

    It's an early version with bugs but basically you can build diagrams. Added fonts but only support Asian language CJK, and ascii + French (tested language). I mainly copy: http://webgraphviz.com/ :-)

    kind/feature proposal status/need-to-review 
    opened by gabriel-tessier 12
  • Add slack

    Add slack

    Motivation

    We sometimes do chatops with slack. We can potentially regard slack as a part of cloud architecture. So, it would be great to add the slack icon.

    Resources

    https://brandfolder.com/slack/logos

    Comment

    If it would be ok to add slack, I am not sure where it should be categorized.

    kind/feat/provider proposal status/accepted 
    opened by yu-iskw 11
  • Node as cluster

    Node as cluster

    This is a PR to replace #438 to fix up the merge conflicts. Most of the work has been done by others but I am willing to address any comments in this PR and keep it up to date to get it merged.

    Not tested as #799 needs merged too.

    opened by lazzurs 0
  • chore(deps): bump setuptools from 59.6.0 to 65.5.1

    chore(deps): bump setuptools from 59.6.0 to 65.5.1

    Bumps setuptools from 59.6.0 to 65.5.1.

    Release notes

    Sourced from setuptools's releases.

    v65.5.1

    No release notes provided.

    v65.5.0

    No release notes provided.

    v65.4.1

    No release notes provided.

    v65.4.0

    No release notes provided.

    v65.3.0

    No release notes provided.

    v65.2.0

    No release notes provided.

    v65.1.1

    No release notes provided.

    v65.1.0

    No release notes provided.

    v65.0.2

    No release notes provided.

    v65.0.1

    No release notes provided.

    v65.0.0

    No release notes provided.

    v64.0.3

    No release notes provided.

    v64.0.2

    No release notes provided.

    v64.0.1

    No release notes provided.

    v64.0.0

    No release notes provided.

    v63.4.3

    No release notes provided.

    v63.4.2

    No release notes provided.

    ... (truncated)

    Changelog

    Sourced from setuptools's changelog.

    v65.5.1

    Misc ^^^^

    • #3638: Drop a test dependency on the mock package, always use :external+python:py:mod:unittest.mock -- by :user:hroncok
    • #3659: Fixed REDoS vector in package_index.

    v65.5.0

    Changes ^^^^^^^

    • #3624: Fixed editable install for multi-module/no-package src-layout projects.
    • #3626: Minor refactorings to support distutils using stdlib logging module.

    Documentation changes ^^^^^^^^^^^^^^^^^^^^^

    • #3419: Updated the example version numbers to be compliant with PEP-440 on the "Specifying Your Project’s Version" page of the user guide.

    Misc ^^^^

    • #3569: Improved information about conflicting entries in the current working directory and editable install (in documentation and as an informational warning).
    • #3576: Updated version of validate_pyproject.

    v65.4.1

    Misc ^^^^

    v65.4.0

    Changes ^^^^^^^

    v65.3.0

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies python 
    opened by dependabot[bot] 0
  • chore(deps-dev): bump isort from 4.3.21 to 5.11.4

    chore(deps-dev): bump isort from 4.3.21 to 5.11.4

    Bumps isort from 4.3.21 to 5.11.4.

    Release notes

    Sourced from isort's releases.

    5.11.4

    Changes

    :package: Dependencies

    5.11.3

    Changes

    :beetle: Fixes

    :construction_worker: Continuous Integration

    v5.11.3

    Changes

    :beetle: Fixes

    :construction_worker: Continuous Integration

    5.11.2

    Changes

    5.11.1

    Changes December 12 2022

    ... (truncated)

    Changelog

    Sourced from isort's changelog.

    5.11.4 December 21 2022

    5.11.3 December 16 2022

    5.11.2 December 12 2022

    5.11.1 December 12 2022

    5.11.0 December 12 2022

    ... (truncated)

    Commits
    • 98390f5 Merge pull request #2059 from PyCQA/version/5.11.4
    • df69a05 Bump version 5.11.4
    • f9add58 Merge pull request #2058 from PyCQA/deps/poetry-1.3.1
    • 36caa91 Bump Poetry 1.3.1
    • 3c2e2d0 Merge pull request #1978 from mgorny/toml-test
    • 45d6abd Remove obsolete toml import from the test suite
    • 3020e0b Merge pull request #2057 from mgorny/poetry-install
    • a6fdbfd Stop installing documentation files to top-level site-packages
    • ff306f8 Fix tag template to match old standard
    • 227c4ae Merge pull request #2052 from hugovk/main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • chore(deps-dev): bump rope from 0.14.0 to 1.6.0

    chore(deps-dev): bump rope from 0.14.0 to 1.6.0

    Bumps rope from 0.14.0 to 1.6.0.

    Changelog

    Sourced from rope's changelog.

    Release 1.6.0

    New features & Enhancements

    • #559, #560 Improve handling of whitespace in import and from-import statements (@​lieryan)
    • #566, #567, #597 Fix variables in kwonlyargs and posonlyargs not being correctly passed to extracted methods (@​lieryan)

    Unit Test

    • #589, #596 Fix issue with sample_project() creating directories where it shouldn't when running tests (@​lieryan)
    • #547 Add config file for linters
    • #593 Remove only_for decorator for all python versions less than 3.7 (@​edreamleo)

    Tech Debt

    Release 1.5.1

    • #531 Add alternative way to retrieve version number from pyproject.toml

    Release 1.5.0

    Date: 2022-11-23

    Release 1.4.0

    ... (truncated)

    Commits
    • 85301a1 Bump version
    • 25e4736 Update CHANGELOG.md
    • 950f18a Missed fix from #546
    • ad886ca Create README.md
    • 7fc05ef Merge pull request #597 from python-rope/lieryan-posonlyargs-kwonlyargs-scope
    • c1b809c Mark test_extract_function_with_posonlyargs() for Python 3.8 and higher
    • d3bfca1 Remove unnecessary if isinstance(node, ast.arg) check
    • 5819fd2 Fix Python 3.7 doesn't have posonlyargs
    • 5f24a11 Simplify _get_argnames()
    • f1393db Update CHANGELOG.md
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • Labels not aligned to the Arrows (Edge).

    Labels not aligned to the Arrows (Edge).

    Hi, I am getting the labels not very well aligned to the Arrows (Edge). Can you please point me in the direction to solve it?

    dot - graphviz version 2.50.0 (20211204.2007) python packages: diagrams 0.23.1 graphviz 0.20.1

    latome_real-time_path_block_diagram-3.pdf

    from diagrams import Diagram, Edge, Cluster
    from diagrams.c4 import C4Node
    from functools import partial
    block = partial(C4Node, type='')
    conne = partial(Edge, splines='curved')
    
    efex_enc=16
    jfex_spn=32
    jfex_enc=16
    flat = False
    
    if flat:
        ids = range(efex_enc)
        jids = range(jfex_enc)
        di = {i : f'{i}' for i in range(efex_enc)}
        dr = {i : f'{i * 20}:{(i + 1) * 20 - 1}' for i in range(efex_enc)}
        jdi = {i: f'{i}' for i in range(jfex_spn)}
        jdr = {i: f'{i * 16}:{(i + 1) * 16 - 1}' for i in range(jfex_enc)}
    else:
        ids = [0, 1, 2, 15]
        di = {i : f'{i}' if i !=2 else '(...)' for i in range(efex_enc)}
        dr = {i : f'{i * 20}:{(i + 1) * 20 - 1}' if i !=2 else '(...)' for i in range(efex_enc)}
        jids = [0, 1, 2, 31]
        jdi = {i: f'{i}' if i != 2 else '(...)' for i in range(jfex_spn)}
        jdr = {i: f'{i * 16}:{(i + 1) * 16 - 1}' if i != 2 else '(...)' for i in range(jfex_enc)}
    
    
    with Diagram("LATOME real-time path block diagram", show=False, direction='LR',outformat="pdf"):
        lli_rx = block('Rx')
        lli_tx = block('Tx')
        istage = block('Istage')
        ser = block('Serializer')
        with Cluster("Remap"):
            ism = block("Input Switch matrix")
        user = block("User")
        #mon = block("Mon/TDAQ")
    
        with Cluster("Osum"):
            adapter = block("EMEC adapter")
            masking = block("Masking")
            osm = block("Output Switch Matrix")
            with Cluster("eFEX"):
                efexmle = block('MLE')
                efex_mle = [0]*efex_enc
                efex_crc = [0]*efex_enc
                efex_frb = [0]*efex_enc
                for i in range(efex_enc):
                    if i in ids:
                        with Cluster(f'eFEX encoder {di[i]}'):
                            efex_crc[i] = block(f"CRC {di[i]}")
                            efex_frb[i] = block(f"Frame builder {di[i]}")
                        efexmle >> conne(forward=True,label=f'{dr[i]}') >> efex_crc[i]
                        efex_crc[i] >> conne(label="20 & CRC") >> efex_frb[i]
            with Cluster("jFEX"):
                jfexssm = block('Sum Switch Matrix')
                jfexism = block('Input Switch Matrix')
                jfexmle = block('MLE')
                jfex_sum = [0]*jfex_spn
                jfex_crc = [0]*jfex_enc
                jfex_frb = [0]*jfex_enc
                for i in range(jfex_spn):
                    with Cluster(f'jFEX sum'):
                        if i in jids:
                            jfex_sum[i] = block(f"SUM {jdi[i]}")
                            jfexssm >> conne(label='10') >> jfex_sum[i] >> conne(label="1") >> jfexmle
                jfexism >> conne(label='224') >> jfexmle
                for i in range(jfex_enc):
                    if i in ids:
                        with Cluster(f'jFEX encoder {di[i]}'):
                            jfex_crc[i] = block(f"CRC {i}")
                            jfex_frb[i] = block(f"Frame Builder {i}")
                            jfexmle >> conne(forward=True,label=f'{jdr[i]}') >> jfex_crc[i] >> conne(label="16 & CRC") >> jfex_frb[i]
    
    
        lli_rx >> conne(label="48x8 words",style='dashed') >> istage >> conne(label="384") >> ism >> conne(label="320") >> user >> conne(label="320") >> adapter >> conne(label="320") >> masking >> conne(label="320") >> efexmle
        masking >>  conne(label="320") >> jfexism
        masking >> conne(label="320") >> jfexssm
        osm >> conne(label="48 frames",style='dashed') >> ser >> conne(label="48x7 words",style='dashed') >> lli_tx
    
        for i in range(efex_enc):
            if i in ids:
                efex_frb[i] >>  conne(label="1") >> osm
        for i in range(jfex_enc):
            if i in ids:
                jfex_frb[i] >>  conne(label="1") >> osm
    
    
    opened by mvsoliveira 0
Releases(v0.23.1)
  • v0.23.1(Nov 8, 2022)

    What's Changed

    • Update README.md by @lakshminarasimmanv in https://github.com/mingrammer/diagrams/pull/757
    • Add: Twilio by @zendern in https://github.com/mingrammer/diagrams/pull/331
    • feat: adding messenger and line icons by @mkfsn in https://github.com/mingrammer/diagrams/pull/412
    • Allow node.id to be specified and not automatically generated by @vanife in https://github.com/mingrammer/diagrams/pull/422
    • Allow Node arguments to be passed to Custom Node by @bra-fsn in https://github.com/mingrammer/diagrams/pull/437
    • autolabel flag in diagrams that modifies label by @anovis in https://github.com/mingrammer/diagrams/pull/482
    • chore(deps): bump minimist from 1.2.5 to 1.2.7 in /website by @dependabot in https://github.com/mingrammer/diagrams/pull/761
    • chore(deps-dev): bump pytest from 6.2.1 to 7.0.1 by @dependabot in https://github.com/mingrammer/diagrams/pull/656
    • docs(website): update text on top page. by @gabriel-tessier in https://github.com/mingrammer/diagrams/pull/571
    • Add raspbian gen os by @abrudner in https://github.com/mingrammer/diagrams/pull/589
    • Prefer subprocess run over call by @kkirsche in https://github.com/mingrammer/diagrams/pull/625
    • feat(node): Update Dremio icon by @gabriel-tessier in https://github.com/mingrammer/diagrams/pull/651
    • refactor: Reflect changes in Cluster class by @gabriel-tessier in https://github.com/mingrammer/diagrams/pull/653
    • feat(node): add AWS app-runner #645 by @gabriel-tessier in https://github.com/mingrammer/diagrams/pull/654
    • chore(deps): bump json-schema and jsprim in /website by @dependabot in https://github.com/mingrammer/diagrams/pull/772
    • docs: fix simple typo, clearning -> cleaning by @timgates42 in https://github.com/mingrammer/diagrams/pull/724
    • feat(node): Onprem network remove white backgound by @gabriel-tessier in https://github.com/mingrammer/diagrams/pull/697
    • Add: saas.alerting.Xmatters by @jaredcurtis in https://github.com/mingrammer/diagrams/pull/712
    • feat: add Fastly CDN. by @cherouvim in https://github.com/mingrammer/diagrams/pull/740
    • feat(node): add Generic OS Debian (#549) by @gabriel-tessier in https://github.com/mingrammer/diagrams/pull/570
    • Add icons to docs by @lrjball in https://github.com/mingrammer/diagrams/pull/499
    • Add support for Harbor as an on-prem registry by @DR-dev-0714 in https://github.com/mingrammer/diagrams/pull/766
    • feat(node): add Generic OS Red Hat by @bdsoha in https://github.com/mingrammer/diagrams/pull/780
    • Add MLflow to OnPrem MLOps by @xadrianzetx in https://github.com/mingrammer/diagrams/pull/698

    New Contributors

    • @lakshminarasimmanv made their first contribution in https://github.com/mingrammer/diagrams/pull/757
    • @mkfsn made their first contribution in https://github.com/mingrammer/diagrams/pull/412
    • @vanife made their first contribution in https://github.com/mingrammer/diagrams/pull/422
    • @bra-fsn made their first contribution in https://github.com/mingrammer/diagrams/pull/437
    • @anovis made their first contribution in https://github.com/mingrammer/diagrams/pull/482
    • @abrudner made their first contribution in https://github.com/mingrammer/diagrams/pull/589
    • @kkirsche made their first contribution in https://github.com/mingrammer/diagrams/pull/625
    • @jaredcurtis made their first contribution in https://github.com/mingrammer/diagrams/pull/712
    • @cherouvim made their first contribution in https://github.com/mingrammer/diagrams/pull/740
    • @DR-dev-0714 made their first contribution in https://github.com/mingrammer/diagrams/pull/766
    • @bdsoha made their first contribution in https://github.com/mingrammer/diagrams/pull/780
    • @xadrianzetx made their first contribution in https://github.com/mingrammer/diagrams/pull/698

    Full Changelog: https://github.com/mingrammer/diagrams/compare/v0.22.0...v0.23.1

    Source code(tar.gz)
    Source code(zip)
  • v0.22.0(Sep 13, 2022)

    What's Changed

    • Fix typo by @Sparkz0629 in https://github.com/mingrammer/diagrams/pull/730
    • Add GraphQL by @houmam in https://github.com/mingrammer/diagrams/pull/660
    • Fix For go get Deprecation by @tmvanetten in https://github.com/mingrammer/diagrams/pull/713
    • Basic support for C4 model primitives. by @mbruggmann in https://github.com/mingrammer/diagrams/pull/508

    New Contributors

    • @Sparkz0629 made their first contribution in https://github.com/mingrammer/diagrams/pull/730
    • @houmam made their first contribution in https://github.com/mingrammer/diagrams/pull/660
    • @tmvanetten made their first contribution in https://github.com/mingrammer/diagrams/pull/713
    • @mbruggmann made their first contribution in https://github.com/mingrammer/diagrams/pull/508

    Full Changelog: https://github.com/mingrammer/diagrams/compare/v0.21.1...v0.22.0

    Source code(tar.gz)
    Source code(zip)
  • v0.21.1(Feb 9, 2022)

  • v0.21.0(Jan 22, 2022)

    Added

    • Support Nagios: #638
    • Support GCP API Gateway: #636
    • Support Chatbot: #633
    • Support DigitalOcean provider: #621
    • Support Dapr: #591
    • Support K3: #575
    • Support Latex: #565
    • Support Puppet: #492
    • Support Dynatrace: #471
    • Support Dremio Service: #451
    • Support Tyk: #449
    • Support Starlette #443
    • Support SVN: #426
    Source code(tar.gz)
    Source code(zip)
  • v0.20.0(May 23, 2021)

    Added

    • Support IBM Provider: #525
    • Support Gitea: #478

    Fixed

    • Update Azure icons: #448, #494
    • Wrong type check and indentations
    • Wrong class names
    Source code(tar.gz)
    Source code(zip)
  • v0.19.1(Feb 22, 2021)

  • v0.19.0(Feb 22, 2021)

    Added

    • More AWS resources: #381
    • Support Azure VMScaleSet: #404
    • Support FastAPI: #380
    • Support flowchart symbols: #377
    • Support GCP monitoring: #343
    • Support PowerBI: #337
    • Support Humio: #409
    • Support New Relic: #340
    • Support Micronaut: #333
    • Support adding Presto, Apache Superset, Nextcloud: #327
    • Support nextcloud, bitwarden, boundary and ambassador: #363
    • Support Scala programming language: #373
    Source code(tar.gz)
    Source code(zip)
  • v0.18.0(Dec 3, 2020)

    Added

    • Support Azure Subnets: #360
    • Support GitHub Actions: #348
    • Support Outscale provider: #338
    • Support Cortex monitoring: #321
    • Support Discord: #313
    • Support CoreDNS and PowerDNS: #302
    • Support NATS: #301
    • Support container runtimes: #300
    • Support Jaeger: #299
    • Support Litmus Chaos and Chaos Mess for chaos engineering: #297
    • Support Dex and Federated OpenID Connect provider: #298
    • Support Buzfeed SSO and Oauth2 Proxy: #296
    • Support Vector aggregator service: #295
    • Support External DNS: #294
    • Support PVC, LXC, Java, DNS, and Zabbix: #291
    • Support Opnsense: #288
    • Support Generic Subnet: #285
    • Support Erlang and Elixir: #275
    • Support Rocketchat, Mattermost, and Microsoft Teams: #268
    • Support Akamai: #267
    • Support Cert Manager and Lets Encrypt: #265
    • Support Ocelot: #263
    • Support Open Service Mesh: #260

    Fixed

    • Correct spelling of Traditional Server: #351
    • Onprem storage incorrect config: #345
    Source code(tar.gz)
    Source code(zip)
  • v0.17.0(Aug 27, 2020)

    Added

    • Support GCP Endpoints: #259
    • Support DroneCI and Atlantis (Terraform): #255
    • Support Okta: #254
    • Support OutScale provider: #251
    • Support Prometheus Operator: #253
    • Support Snowflake: #245
    • Support for CJK fonts + Replace ms-fonts with opensans: #242
    • Support Pushover: #241

    Fixed

    • Update bm, vm cases for OCI
    • Set a dummy filename to prevent raise error when both name and filename are not provided: #240
    Source code(tar.gz)
    Source code(zip)
  • v0.16.0(Jul 13, 2020)

    Breaking Changes

    The following import changes:

    | Old import path | New import path | | -------------------------------------------------- | ---------------------------------------------------------- | | from diagrams.onprem.logging import Logstash | from diagrams.elastic.elasticsearch import Logstash | | from diagrams.onprem.monitoring import Kibana | from diagrams.elastic.elasticsearch import Kibana | | from diagrams.onprem.search import Elasticsearch | from diagrams.elastic.elasticsearch import Elasticsearch |

    The previous icon was the company icon, not the elasticsearch product.

    For the company icon: from diagrams.elastic.saas import Elastic

    Added

    • Docker local development setup: #210
    • Support OpenStack #211
    • Support SQL, Druid and Databricks
    • Support Cloudinary: #218

    Fixed

    • Clean GCP resources: #228
    • Support DataDog, PaperTrail, Syslog, Rsyslog and Graylog: #222
    • Update all OCI icon set (bark and white): #205
    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(Jun 28, 2020)

    Added

    • Support curvestyle option (ortho or curved)
    • Support Auth0, Cloudflare and Recombee: #209

    Fixed

    • Fix typo for PersistentVolume: #207
    • Fix misaligned label text position
    Source code(tar.gz)
    Source code(zip)
  • v0.14.0(Jun 17, 2020)

    Added

    • Support sagemaker for AWS provider: #204
    • Support ConcourseCI: #198
    • Support Tekton CLI: #199
    • Support more analytics tools for Onprem provider: #195
    • Support more resources for AWS provider: #192
    • Support kubernetes ecosystem: #188
    • Support Beats for ElasticStack provider: #153
    • Support more icons for Generic provider: #186
    • SUpport Opsgenie: #187
    • Support Tekton: #150
    • Support Generic provider: #171
    Source code(tar.gz)
    Source code(zip)
  • v0.13.1(Jun 2, 2020)

  • v0.13.0(May 31, 2020)

    Added

    • Support more DynamoDB and IAM nodes for AWS: #180
    • New provider elastic: #174
    • Support Rust: #179
    • Support Flux and Flagger: #147
    • New provider saas: #173
    • New provider firebase: #167
    • Support ZuulCI: #145
    Source code(tar.gz)
    Source code(zip)
  • v0.12.0(May 24, 2020)

    Added

    • Support GitlabCI: #166
    • Support Sentry: #165
    • Support Couchbase: #164
    • Support new IoT icons, and new Game, General and Robotics categories for AWS: #161
    • Support general icon set for Azure: #155
    • Support Fluent Bit: #154
    • Support integration services for Azure: #152
    • Support custom attribute options for Nodes: #151
    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(May 18, 2020)

    Added

    • Support programming provider (programming languages and frameworks): #112
    • Support NACL, Subnets, Route Table and VPC peering for AWS provider: #135
    • Support Loki: #139
    • Support Tableau and Metabase: #142
    • Support AWS Elemental Services: #149

    Fixed

    • Rename Cloudfront to CloudFront: #129
    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(May 6, 2020)

  • v0.9.0(Apr 25, 2020)

    Added

    • Support Thanos: #99
    • Support AWS VPC Endpoint: #101
    • Support AWS VPC Router: #102
    • Support Teamcity: #103
    • Support Pomerium: #104
    • Support Ansible and AWX: #110

    Fixed

    • Replace MD5 Hash with UUID: #94
    • Verify Edge attributes exist before setting: #96
    Source code(tar.gz)
    Source code(zip)
  • v0.8.2(Apr 10, 2020)

  • v0.8.1(Apr 2, 2020)

  • v0.8.0(Mar 28, 2020)

    Added

    • Support Apache Beam: #66
    • Support PFSense and VyOS: #67
    • Support Polyaxon: #74
    • Support Spinnaker: #77
    • Support Git, GitLab and GitHub of onprem.vcs: #80
    • Support Dgraph, JanusGraph and Scylla of onprem.database: #84
    Source code(tar.gz)
    Source code(zip)
  • v0.7.4(Mar 14, 2020)

  • v0.7.3(Mar 10, 2020)

  • v0.7.2(Mar 9, 2020)

  • v0.7.0(Mar 9, 2020)

    Added

    • Customer engagement services for AWS: https://github.com/mingrammer/diagrams/pull/57
    • Edge attributes support: https://github.com/mingrammer/diagrams/pull/48
    Source code(tar.gz)
    Source code(zip)
  • v0.6.5(Mar 7, 2020)

  • v0.6.4(Feb 29, 2020)

  • v0.6.3(Feb 25, 2020)

  • v0.6.2(Feb 23, 2020)

  • v0.6.1(Feb 23, 2020)

Owner
MinJae Kwon
A green Gopher & Pythonista 🥳 I love computer science, system design, and automating things 💕
MinJae Kwon
My attempt at this years Advent of Code!

Advent-of-code-2021 My attempt at this years Advent of Code! day 1: ** day 2: ** day 3: ** day 4: ** day 5: ** day 6: ** day 7: ** day 8: * day 9: day

1 Jul 06, 2022
A not exist cat image generator python package

A not exist cat image generator python package

Fayas Noushad 2 Dec 03, 2021
Random Turkish name generator with realistic probabilities.

trnames Random Turkish name generator with realistic probabilities. Based on Trey Hunner's names package. Installation The package can be installed us

Kaan Öztürk 20 Jan 02, 2023
A very terrible python-based programming language that uses folders instead of text files

PYFolders by Lewis L. Foster PYFolders is a very terrible python-based programming language that uses folders instead of regular text files. In this r

Lewis L. Foster 5 Jan 08, 2022
A hackers attempt at an MVP anki plugin

my anki plugin if you have found this by accident, you should probably run away this is nothing more than a hackers attempt at an MVP anki plugin I re

Chris Hall 1 Nov 02, 2021
Validate UC alumni identifier numbers with Python 3.

UC number validator Validate UC alumni identifier numbers with Python 3. Getting started Install the library with: pip install -U ucnumber Usage from

Open Source eUC 1 Jul 07, 2021
Play tic-tac-toe in PowerPoint

The presentation has around 6,000 slides representing every possible game state (and some impossible ones, since I didn't check for wins or ties). You play by clicking on the squares, which are hyper

Jesse Li 3 Dec 18, 2021
Advanced Keylogger in Python

Advanced Keylogger in Python Important Disclaimer: The author will not be held r

Suvanth Erranki 1 Feb 07, 2022
A simple package for interacting with the 9kw.eu anti-captcha service.

Welcome to captcha9kw’s documentation! captcha9kw is a smallish Python package for making use of the 9kw.eu services, including solving of interactive

2 Feb 26, 2022
Handwrite - Type in your Handwriting!

Handwrite - Type in your Handwriting! Ever had those long-winded assignments, that the teacher always wants handwritten?

coded 7 Dec 06, 2022
[arXiv 2020] Video Representation Learning with Visual Tempo Consistency

Video Representation Learning with Visual Tempo Consistency [Paper] [Project Page] News Full codebae is coming soon Pretained Models For now, we provi

DeciForce: Crossroads of Machine Perception and Autonomy 24 Nov 23, 2022
Retrieve bank transactions and categorize for budgeting use

Budgeting After trying out some budgeting software, I decided to make my own. selenium_scraper Using the selenium package, this script runs an instanc

Marc 1 Nov 10, 2021
Medical appointments No-Show classifier

Medical Appointments No-shows Why do 20% of patients miss their scheduled appointments? A person makes a doctor appointment, receives all the instruct

4 Apr 20, 2022
A Way to Use Python, Easier.

PyTools A Way to Use Python, Easier. How to Install Just copy this code, then make a new file in your project directory called PyTools.py, then paste

Kamran 2 Aug 15, 2022
Headless chatbot that detects spam and posts links to it to chatrooms for quick deletion.

SmokeDetector Headless chatbot that detects spam and posts it to chatrooms. Uses ChatExchange, takes questions from the Stack Exchange realtime tab, a

Charcoal 421 Dec 21, 2022
The Great Autoencoder Bake Off

The Great Autoencoder Bake Off The companion repository to a post on my blog. It contains all you need to reproduce the results. Features Currently fe

Tilman Krokotsch 61 Jan 06, 2023
SimBiber - A tool for simplifying bibtex with official info

SimBiber: A tool for simplifying bibtex with official info. We often need to sim

336 Jan 02, 2023
urlwatch is intended to help you watch changes in webpages and get notified of any changes.

urlwatch is intended to help you watch changes in webpages and get notified (via e-mail, in your terminal or through various third party services) of any changes.

Thomas Perl 2.5k Jan 08, 2023
An html wrapper for python

MessySoup What is it? MessySoup is a python wrapper for html elements. While still a ways away, the main goal is to be able to build a wesbite straigh

4 Jan 05, 2022
Master Duel Card Translator Project

Master Duel Card Translator Project A tool for translating card effects in Yu-Gi-Oh! Master Duel. Quick Start (for Chinese version only) Download the

67 Dec 23, 2022