nomnoml [![npm version](https://badge.fury.io/js/nomnoml.svg)](https://badge.fury.io/js/nomnoml) [![Known Vulnerabilities](https://snyk.io/test/npm/nomnoml/badge.svg)](https://snyk.io/test/npm/nomnoml) [![web site](https://img.shields.io/badge/web-nomnoml.com-brightgreen)](https://www.nomnoml.com) ======= Hello, this is [nomnoml](http://www.nomnoml.com), a tool for drawing UML diagrams based on a simple syntax. It tries to keep its syntax visually as close as possible to the generated UML diagram without resorting to ASCII drawings. Created by [Daniel Kallin](https://github.com/skanaar) with help from a group of [contributors](https://github.com/skanaar/nomnoml/graphs/contributors). ## Library The [nomnoml](https://www.nomnoml.com) javascript library can render diagrams on your web page. The only dependency is [graphre](https://github.com/skanaar/graphre). Install nomnoml using either _npm_ or good old script inclusion. ## SVG output in NodeJS ``` npm install nomnoml ``` ```js var nomnoml = require('nomnoml') var src = '[nomnoml] is -> [awesome]' console.log(nomnoml.renderSvg(src)) ``` In the SVG output the node name is attached to SVG shapes and `` containers with `data-name` attribute. You can use this to implement interactive diagrams. ```js document.querySelector('svg').onclick = function (e) { console.log(e.target.closest('g[data-name]')?.attributes['data-name']) } ``` ## HTML Canvas rendering target ```html ``` ## Command Line Interface `npx nomnoml` exposes the SVG renderer with a command-line interface. This mode also supports the `#import: ` directive for dividing complex diagrams into multiple files. ``` npx nomnoml input-file.noml ``` ## Web application The [nomnoml](http://www.nomnoml.com) web application is a simple editor with a live preview. It is purely client-side and uses your browser's _localStorage_, so your diagram should be here the next time you visit (but no guarantees). ### Example This is how the Decorator pattern can look in nomnoml syntax: [Decorator pattern| [Component||+ operation()] [Client] depends --> [Component] [Decorator|- next: Component] [Decorator] decorates -- [ConcreteComponent] [Component] <:- [Decorator] [Component] <:- [ConcreteComponent] ] ### Association types - association -> association <-> association --> dependency <--> dependency -:> generalization <:- generalization --:> implementation <:-- implementation +- composition +-> composition o- aggregation o-> aggregation -o) ball and socket o<-) ball and socket ->o ball and socket -- note -/- hidden ### Classifier types [name] [ name] [ name] [ name] [ name] [ name] [ name] [ name] [ name] [ name] [ name] [ name] [ name] [ name] [ name] [ lollipop] [ name] [ socket] [ name] [ name] [ name] [ name] [