[HN Gopher] Include diagrams in your Markdown files with Mermaid ___________________________________________________________________ Include diagrams in your Markdown files with Mermaid Author : todsacerdoti Score : 514 points Date : 2022-02-14 16:58 UTC (6 hours ago) (HTM) web link (github.blog) (TXT) w3m dump (github.blog) | mappu wrote: | Gitea has had this feature for a while, it's really excellent. | kderbyma wrote: | mermaid is great. I used a mermaid plugin for my own markdown | support - formatting took a bit of a hit so maybe this will | prompt better native support. | msdrigg wrote: | Cool, now do latex | martinwoodward wrote: | Talking about it - https://talk.commonmark.org/t/math- | rendering-re-visited/4086 | eminence32 wrote: | Gitlab supports mermaid too. It's always nice when there's | feature parity between the two, as it makes it easier to jump | between them. | this_steve_j wrote: | Azure Devops wikis have excellent (although not full support) | for mermaid diagrams. One power user feature I like is the | ability to add a hyperlink to graph nodes like so: | | click NodeName "URL" | Someone wrote: | I like markdown, and can see the lure of additions such as this | one, but I also sometimes wonder whether we gained much compared | to _troff_ and its companion programs ( _pic_ , _eqn_ , _tbl_ , | _chem_ , etc. See https://www.troff.org/prog.html). | | If we added Unicode support and _html_ and _pdf_ output to those, | I think the main thing we would miss is readability of the raw | text. That doesn't look like much progress in half a century. | tannhaeuser wrote: | > _That doesn't look like much progress in half a century._ | | Considering the author of groff became _the_ SGML expert, with | SGML supporting custom syntax parsing ranging from troff-like | line commands all the way to markdown or Wikimedia syntax or | subsets thereof precisely for unifying ad-hoc syntax, and SGML | the basis for the HTML vocabulary from which these want to run | away, I 'd rather say tech is re-invented in generational | circles. Or devs simply like to grow mini languages ;) | [deleted] | tombert wrote: | I'm surprised I've never heard of this...there appears to be a | pandoc filter readily available for this. This will be useful... | medv wrote: | Ansi draw tool what can parse boxes and move them? | timwis wrote: | I'm super excited for this! | | One thought though, on the syntax. Wouldn't it be a bit odd if | suddenly this line in a README.md: ```js | const foo = 1 + 1 ``` | | Rendered as: `2` | | ? Isn't that kind of what we're doing here with the mermaid | source tag? That tag is for showing source code, no? Feels like | there should be another tag for rendering it. | mminer237 wrote: | I agree. R Markdown has R code execution as part of it's | Markdown flavor and it distinguishes code block vs code | execution as ```R vs ```{R} | asiachick wrote: | Yes, it sucks. This is why we can't have nice things. Because a | million different programmers always choose some random | incompatible interpretation and then we're all stuck with it. | | Another similar example, all of VSCode's configuration files | are called filename.json but they aren't actually json (any | spec compliant json parser would barf on them). | | They could just have easily named them filename.jsonc (or | whatever they actually are) but they didn't so we're stuck with | all these .json files that json parsers won't actually parse | and special hacks to validate them differently based on like if | they're in a .vscode folder or if their name is some specific | filename. | | Unfortunately there's no way to wrangle millions of programmers | so we're stuck with whatever bad decisions become popular. | | IF that's not clear above, for example, trailing commas and | comments are not allowed in JSON but they are in JSONC. You'd | like your editor to highlight errors. Typically this is done by | filename extension. .json = comments show as errors, .jsonc = | comments OK. But VSCode named it's .jsonc files as .json so | every editor that wants to be able to show if there are errors | in your file now needs some random heuristic to decide how to | interpret the file..... all because of a bad decision by 1 or 2 | programmers that ended up being popular and now their too | entrenched to fix it. | | The same thing is true here. ``` is supposed to mark a | codeblock as in show the text as is, whitespace as is, line | breaks as is. If you want to write a tutorial on how to use | mermaid in markdown you'd want ``` to show the mermaid source. | Use some other tag for rendering. But now where stuck with an | exception and more will be added. | | And before you go say "there's no official spec", so what!? | It's called being consistent and interpreting the contents of a | ``` block is inconsistent. | qbasic_forever wrote: | Only the mermaid identifier is supported for triple backticks | blocks, you can't put js and have it spit out script that | executes in the browser. | acchow wrote: | It's rendering style, not execution. | tehbeard wrote: | You missed the point, that being; isn't triple backticks | meant for whitespace preserving, highlighted in certain cases | source code? And not embedding other file types. | qbasic_forever wrote: | No there's not a formal requirement or spec for how | markdown blocks are rendered. Even things like syntax | highlighting are optional choices different renderers make | (and even the whole idea of highlighting is not specified | or defined, how do you define the grammer, etc?). | | Some tools in the computational notebook space use markdown | with fenced code blocks as blocks of executable code, see | for example jupytext: https://github.com/mwouts/jupytext/bl | ob/main/docs/formats.md or myst markdown: https://myst- | parser.readthedocs.io/en/latest/syntax/syntax.h... or | nbconvert: https://nbconvert.readthedocs.io/en/latest/ | dijit wrote: | There is a formal spec (from github themselves) for how | it's rendered. | | What's debatable is what the spec does with the "info" | section. | | https://github.github.com/gfm/#fenced-code-blocks | qbasic_forever wrote: | Sure but there's no markdown spec. Markdown is purely a | series of blog posts by John Gruber and a collection of | different implementations. CommonMark is as close to as | it's gotten to a formal spec, and even it says there is | no requirement the info string (i.e. text like mermaid | after backticks) be interpreted for specific rendering | (or not rendering) of the content: | https://spec.commonmark.org/0.28/#fenced-code-blocks | e12e wrote: | I think op meant that we can: ```ruby | # syntax highlighted as ruby a = 1 + 1 ``` | | And: ```js // syntax highlighted as | js a = 1 + 1 ``` | | So maybe we should have something like a "bang" prefix to | _evaluate and inline /embed_ like: ```!ruby | # evaluated as ruby a = 1 + 1 # renders 2 | because of implicit return? ``` | martinwoodward wrote: | The idea of the bang syntax came up. | https://talk.commonmark.org/t/mermaid-generation-of- | diagrams... | | But in the end went with simple. There will be a very | limited subset that will render this way - executing raw | code without the users permission in the browser just opens | up too much attack surface area that we'd need a very | compelling use case to do the security work necessary to | make it protected (even if that was possible) | mintplant wrote: | Alright, but how do I embed highlighted Mermaid source | code in Markdown now? | e12e wrote: | I don't think github should (generally) render stuff in | the browser (although I see that both "benign"[1] graphs | and source code highlights, not to mention the somewhat | simple translation from Markdown to html - probably | _could_ be done in the browser as js /wasm. | | But for "markdown the language" having a standard syntax | for embed/evaluate along with prettify/highlight would've | been nice - effectively a standard markup for multi- | language "notebooks"/literate programs (maybe we need a | triplet: format, render/embed, transclude/literate | programming). | | Github could then opt-in to highlighting the N languages | they do, and initially _only_ try to render mermaid | graphs. Then perhaps also graphviz graphs. Etc. | | [1] I'm sure one could do some minor DOS at least with a | 500 mb graph.. | reificator wrote: | Which is the exact inconsistency under scrutiny here. | qbasic_forever wrote: | Markdown supports arbitrary HTML, you can do this: | # Heading <script> const foo = 1 + 1; | window.alert(`1 + 1 = ${foo}`); </script> | Paragraphs of exposition. | | In practice most markdown renderers will strip HTML or at | least script tags as it is obviously a cross site security | risk to allow github.com to serve user uploaded scripts | without sanitization. | reificator wrote: | I think you're caught up on exactly the opposite of the | complaint here. People aren't requesting JS execution, | they have the various "notebook" solutions for that. | | People are saying that triple backtick fenced code blocks | are used to preserve whitespace and fixed width, usually | with syntax highlighting as a bonus. That's the expected | behavior. | | However with the described mermaid support, it's taking a | fenced code block with a mermaid tag and transforming it | into a graph. | | When inspecting the text content of a markdown file, | there's no difference between a `javascript` tagged code | block, a `haskell` tagged one, and a `mermaid` tagged | one. But now when rendering, the mermaid one is special | cased. | | This is undesirable for multiple reasons, the most | obvious being that it's now harder to write a README that | displays mermaid syntax. | | A good starting point would be either different syntax or | a different tagging convention. For instance I think I | saw `!mermaid` suggested, where the `!` would mean that | the code should be interpreted instead of rendered as | code. | | I don't have a horse in the race of what this looks like, | only that there should be a distinction between rendered | and interpreted code blocks. | qbasic_forever wrote: | You're pushing a rock up hill--many markdown renderers | natively support mermaid, plantUML, etc. using fenced | code blocks. | | If you explicitly want source code rendering don't add | the mermaid tag to the block. There could be an argument | that now you don't get syntax highlighting, but remember | syntax highlighting itself is not part of any markdown | spec and it differs wildly between implementations--there | is no common grammar or spec for it even. | | In all cases these are still valid markdown files and | will pass through markdown processing, rendering, etc. | systems without breaking them. | reificator wrote: | > _You 're pushing a rock up hill--many markdown | renderers natively support mermaid, plantUML, etc. using | fenced code blocks._ | | And yet Github's markdown support carries much more | weight. Raising concerns at this point is a perfectly | reasonable thing to do. | Ajedi32 wrote: | Agreed; this is an annoying inconsistency. If you want to embed | and render a non-Markdown file in Markdown, there's already | another, far better syntax for that which is more in-line with | the spirit of Markdown's "just text" philosophy: | | ![Chart](./charts/chart-file.mermaid) | Arnavion wrote: | It's nice to have the diagram source in the same file that | uses it, instead of a separate file that needs to be kept in | sync. | dijit wrote: | Since it's sufficiently different to how it's rendered its | really more like an SVG than a table. | | So, the question is would you rather have SVGs inline? | | Personally I think the reference to another file is a | perfectly fine compromise, as the content is sufficiently | different to no longer be markdown. | brainfish wrote: | I think this is a false equivalence. The content of SVGs | is non-semantic; to get from SVG code to Meaning one | needs to do some sort of rendering and re-interpreting of | the resulting image. Even if for some simple images that | could be done in-brain, that is not usually the case. | Whereas something like Mermaid is intended to be | meaningful both as code and as rendered output, just like | Markdown itself. Having that additional meaning inline | can be very helpful to faster understanding of the | content, which is not usually going to be the case for | inline'd SVG. | dijit wrote: | I don't know if it's a false equivalence, because I've | read (and certainly written) a fair number of mermaid | diagrams which are extremely hard to understand without | seeing the rendered content. | Arnavion wrote: | It's subjective, in my opinion. I might be fine with | inline SVGs if they were "smaller", ie didn't have the | doctype and root element and general XML verbosity on all | nodes. PlantUML / Mermaid have a much more to-the-point | syntax. | | Also, I personally hate markdown tables since editing | even a single cell means that I likely have to then | resize either the entire row or the entire column, or | both. So when I do need tables I use HTML tables anyway. | | At any rate, a middle-ground might be to have the diagram | source as references at the end of the document, and | reference those from the use site, like | `![Chart][#chart]` or something. So you don't have to see | the diagram source inline if you don't like it, but it's | still there in the same file. | 0xbadcafebee wrote: | Do they support a markdown Table of Contents yet? | infensus wrote: | Not as a syntax, but headings are parsed and there's a TOC | dropdown to the left of the filename | no-dr-onboard wrote: | Protip to anyone using Mermaid.js | | Don't. | | It's a sea shanty of XSS vulns. | | https://snyk.io/vuln/npm%3Amermaid | [deleted] | DiabloD3 wrote: | This seems to be incorrect, the current version has no CVEs | according to that tracker. | kuroguro wrote: | I think the parent comment is just saying that multiple vulns | have been found recently. There's a good chance there's more. | AlfeG wrote: | Not sure if this is bad? Should we abandon any lib that has | cve? | billconan wrote: | I don't quite understand. Does XSS mean it runs user submitted | js code? | | I thought it would have a parser that parses the submitted code | to generate its own graph representation. there shouldn't be a | chance for running js, no? | Someone1234 wrote: | Does this mean it is bad or simply popular? Unpopular/untested | libraries rarely have previously found XSS vulnerabilities for | example. | gavingmiller wrote: | 3 is hardly a sea shanty of vulnerabilities for a 7 year old | library. I think you're conflating releases with vulns. | mafro wrote: | I use Monodraw on macOS and then embed the ASCII art into the | Markdown in my README. | | For example, https://github.com/mafrosis/step-ca-on-rpi#sso-for- | ssh | | I'd usually commit the source .monodraw files to the repo, but | for some reason I didn't in that example repo :/ | sandreas wrote: | I like svgbob[1] and textik[2]. Far from perfect, but pretty good | already. | | [1]: https://ivanceras.github.io/svgbob-editor/ [2]: | https://textik.com | HNSucksAss wrote: | jonpalmisc wrote: | I think this is a good change. While I would have preferred to | see support for Graphviz over Mermaid, I understand Mermaid was | probably chosen for the sake of easier integration. Either way, | it will be nice to be able to embed diagrams rather than | constantly re-generate and re-commit images to the repo. | WalterGR wrote: | Has Graphviz been re-implemented in JavaScript or compiled to | WASM? | schemescape wrote: | Yes, several times: | | http://viz-js.com/ | | https://www.npmjs.com/package/@hpcc-js/wasm | | I even did it myself a few months ago :) | donatj wrote: | It's a simple well documented language. Righting a fully | functional JS Graphviz parser from scratch would take a | couple days at most. | WalterGR wrote: | The parser is only the beginning. Table stakes. For | example: GraphViz has 8 layout engines. Which of those need | to be implemented in JS? | ygra wrote: | Having tried to think about how to map Graphviz (language | parsing, styles, and layout) onto our graph drawing | offering, I'm not sure I can agree here. The dot graph | description language itself is fairly simple (-ish). There | are a few nasties like the HTML record support, which can | be annoying to support, but overall that part isn't so bad. | When it comes to laying out the graphs and rendering | anything Graphviz has so many unique features that it can | be a lot more work. | [deleted] | lelandbatey wrote: | Other services, such as Gitlab[0], allow you to embed | Graphviz & PlantUML into a README just like (and alongside) | Mermaid, but the images are rendered server-side. | | [0] - https://docs.gitlab.com/ee/administration/integration/p | lantu... | jonpalmisc wrote: | There are definitely some JS libraries for it that exist. I | don't know all the details but I often find myself Googling | "graphviz online" and clicking the first link to quickly mock | up diagrams. So in short, I've used it on the web before. | djur wrote: | I believe Mermaid supports a wider range of diagram types than | Graphviz. Graphviz doesn't support sequence diagrams, for | instance, unless I'm missing something. | eurasiantiger wrote: | No data flow diagrams though, and that is a really big | omission which other diagrams don't cover well. | nanomonkey wrote: | Github will render org-mode markdown, so I've been making my | documentation with it, and rendering graphviz diagrams using | dot notation and org-mode's source code rendering capability. | The rendered images are stored in your repo and show up inline. | floodle wrote: | I'm curious why they went for mermaid rather then GraphViz. Can | anybody comment? | limmeau wrote: | Mermaid has explicit support for diagrams that look UML-ish | (never mind the filled triangle arrowheads for inheritance): | class, state and sequence diagrams. Graphviz doesn't do that | easily. | lelandbatey wrote: | PlantUML[0], which is built on top of Graphviz, does have | support for UML and other services such as Gitlab do support | direct embedding of PlantUML (which also means you can embed | Graphviz, since PlantUML is an extension of Graphviz). | | [0] - https://plantuml.com/object-diagram | smasher164 wrote: | I like this approach of using the tag associated with a code | block to determine how to render the output. It's the same | approach I take in my markdown-derived markup language: | https://github.com/smasher164/mexdown. | | The top example there takes a GraphViz description and passes it | into the dot command, placing the resultant SVG into the HTML | output. | thrower123 wrote: | Huh, they must have taken the integration they've had for a | couple years now on the Azure Devops wikis and shifted it over to | the GitHub side. | ktzar wrote: | I hope they support the full suite of mermaid diagrams, not | just a small subset like they do in Azure DevOps. Which is | quite frustrating. My team has to take pngs and keep the source | code at the bottom of wiki pages. | dima55 wrote: | org-mode and org-babel already do this | kaycebasques wrote: | sequencediagram.org is a pleasant (and free) tool for generating | standalone diagrams like this outside of GitHub. I discovered it | while helping Corrily with their docs, e.g. the diagram at the | top of this page: https://docs.corrily.com/docs/price- | optimization-overview | lelandbatey wrote: | Something to know is that sequencediagram.org seems to be just | a website skin around PlantUML Sequence Diagrams[0]. PlantUML | is open source and is ultimately built on top of Graphviz as | well. | | Another nice thing is that PlantUML is supported (alongside | Mermaid) in GitLab, and has been supported for at least two | years. You can embed PlantUML diagrams into your README without | committing any images to the repo or linking to external | images, just like Mermaid.[1] | | [0] - https://plantuml.com/sequence-diagram | | [1] - | https://docs.gitlab.com/ee/administration/integration/plantu... | chrisweekly wrote: | If you start getting into this kind of thing, you'll want to take | a look at https://kroki.io which supports Mermaid along with lots | of other diagramming formats. | perth wrote: | I love Mermaid! I used to use that bitch all the time in college | to make beautiful flowcharts and my friends would always ask me | how I made them so nice looking. Another awesome thing about | Mermaid is since it's grounded in the HTML/CSS/JS web stack you | can easily modify certain things in diagrams to do any custom | tricks you need for your specific diagram. Aka Mermaid is | hackable and I love software that is designed to give you that | freedom. | thangalin wrote: | Re: https://github.com/github/markup/issues/533 | | I'm the main author of KeenWrite (see screenshots[1]), a type of | desktop Markdown editor that supports diagrams. It's encouraging | to see that Mermaid diagrams are being supported in GitHub. There | are a few drawbacks on the syntax and implications of using | MermaidJS. | | First, only browser-based SVG renderers can correctly parse | Mermaid diagrams. I've tested Apache Batik, svgSalamander, resvg, | rsvg-convert, svglib, CairoSVG, ConTeXt, and QtSVG. See issue | 2485[2]. This implies that typesetting Mermaid diagrams is not | currently possible. In effect, by including Mermaid diagrams, | many documents will be restricted to web-based output, excluding | the possibility of producing PDF documents based on GitHub | markdown documents (for the foreseeable future). | | Second, there are numerous text-to-diagram facilities available | beyond Mermaid. The server at https://kroki.io/ supports Mermaid, | PlantUML, Graphviz, byte fields, and many more. While including | MermaidJS is a great step forward, supporting Kroki diagrams | would allow a much greater variety. (Most diagrams produced in | MermaidJS can also be crafted in Graphviz, albeit with less terse | syntax.) | | Third, see the CommonMark discussion thread[3] referring to a | syntax for diagrams. It's unfortunate that a standard "namespace" | concept was not proposed. | | Fourth, KeenWrite integrates Kroki. To do so, it uses a variation | on the syntax: ``` diagram-mermaid ``` | ``` diagram-graphviz ``` ``` diagram- | plantuml ``` | | The diagram- prefix tells KeenWrite that the content is a | diagram. The prefix is necessary to allow using any diagram | supported by a Kroki server without having to hard-code the | supported diagram type within KeenWrite. Otherwise, there is no | simple way to allow a user to mark up a code block with their own | text style that may coincide with an existing diagram type name. | | Fifth, if ever someone wants to invent a programming language | named Mermaid (see MeLa), then it precludes the possibility of | using the following de facto syntax highlighting: | ``` mermaid ``` | | My feature request is to add support for Kroki and the diagram- | prefix syntax. That is: ``` diagram-mermaid | ``` | | And deprecate the following syntax: ``` mermaid | ``` | | And, later, introduce the language- prefix for defining code | blocks that highlight syntax. That is, further deprecate: | ``` java ``` | | With the following: ``` language-java | ``` | | That would provide a "namespace" of sorts to avoid naming | conflicts in the future. | | [1]: | https://github.com/DaveJarvis/keenwrite/blob/master/docs/scr... | | [2]: https://github.com/mermaid-js/mermaid/issues/2485 | | [3]: https://talk.commonmark.org/t/mermaid-generation-of- | diagrams... | stakkur wrote: | Thereby creating a hard dependency for your markdown files, | obviating their portability. | animal_spirits wrote: | There's no hard dependency at all. The markdown will parse just | fine without mermaid.js, it basically just takes a code block | and runs it through the mermaid.js code if it matches the | language | stakkur wrote: | I'm not talking about a dependency for the file to be | readable. I'm talking about a dependency for the diagram to | be useful. I'm not opposed to extending markdown, but most | functionality like this seems to involve bolting on external | dependencies to take advantage of it. | djur wrote: | There's also been other Markdown renderers that support this | exact syntax for Mermaid blocks for ages. I have a site | that's generated using mkdocs that uses Mermaid diagrams, and | I was able to open up one of the files from that site in | Github and view the diagrams. | qbasic_forever wrote: | The alternative is no diagram at all, which sucks for | understanding, or linking to an image that's likely just a | binary blob which is now a hard dependency on your markdown | file too. Mermaid is a great fit, it's a text description of | common graph types and it's meant to be read, written, and | understood by humans in text form. | ghostoftiber wrote: | I want a lucidchart or drawio style support for mermaid. There's | plugins to let them render mermaid.md files but I haven't seen | anything which just lets me draw arrows between shapes and label | things. Someone please make this happen, I will be forever | grateful. | zellyn wrote: | Like pikchr.org? I love it. Now I have to see if I can get | pikchr support added to Mermaid, and we'll be off to the races! | sidharthv wrote: | Would you be willing to file a feature request in | https://github.com/mermaid-js/mermaid-live-editor/issues ? | | Disclosure: I'm a maintainer for the project and the feature | will be a bit tricky, but should be doable. | | One issue is that unlike drawio, mermaid doesn't support custom | placement of nodes. We could have different style arrow popups, | which could render corresponding connections in default | locations. | | I also feel that this would be a very nice feature to have. | | If anyone is interested in implementing, please let us know, | and we can discuss ideas. | urashidmalik wrote: | That is pretty complicated Just use | | 1. Visual code draw.io extenstion 2. Save diagram as | FILENAME.drawio.svg 3. Link file in markdown | zmmmmm wrote: | Been using in this way with Gitlab along with PlantUML for years. | Slightly prefer PlantUML, feel like its a little bit more similar | to native markdown due to the way it employs natural language. | Would be nice if Github looked at that option too. | j0yb0y wrote: | This can be done with Bitbucket but the existing marketplace | plug-in has been broken since they added the connect/disconnect | webhooks as mandatory. Of course, the plug-in is provided by | bitbucket ...so that's fun. | | I wrote a trivial webstack to answer 200 to the webhook and then | everything works. (Don't know if I can publish it unfortunately.) | | (Condolences to those stuck on Bitbucket). | tjk_ wrote: | Mind if I ask if you're having this issue on Bitbucket Cloud | (bitbucket.org) or Bitbucket Server (self-hosted)? | [deleted] | MrTortoise wrote: | I love how people keep discovering mermaid because i remember | when i did many many years ago and it still brings me happiness | today. | donatj wrote: | With Mermaid, the usage seems very locked down to a handful of | use cases. | | I want to be able to point a method of a classDiagram at a | decision chart with arrows then to the row of a database table. | | This is the sort of thing I reach to either Graphiviz or for | Omnigraffle currently, and this doesn't seem to solve. | | With Mermaid each type of diagram is distinct and locked down to | specific intended uses. | boomskats wrote: | Well this only took a few years! So happy to finally see it in. | | They should really unlock this issue[0] and let people know. | | [0] https://github.com/github/markup/issues/533 | emj wrote: | IETF RFCs has some nice diagrams in ASCII | https://datatracker.ietf.org/doc/html/rfc5905 | | Also The Arte of ASCII RFC8140 | https://datatracker.ietf.org/doc/html/rfc8140 | ak217 wrote: | Mermaid is fantastic. Aside from mermaid, I've recently been | introduced to nomnoml (https://nomnoml.com/) and it is fantastic | as well. | | My wish is for Mermaid and nomnoml to become universally | supported among Markdown web renderers (I'm looking first and | foremost at Github of course). | Ciph wrote: | I love mermaid, but I'm also very annoyed by the variety of how | its implemented in different markdown editors. One thing that I | find quite annoying is the lack of fontawesome support - afaik | only the live mermaid editor and hack.md supports it out of the | box. Other editors require a lot of .conf file editing. | | Thanks for the tip of nomnoml, didn't know about it. | KaoruAoiShiho wrote: | I'm using mermaid to render this route map for interactive | fiction: https://fiction.live/tsukihime/Satsuki-Yumizuka- | Route/4B9obc... | | How does nomnoml compare? The results are with mermaid are not | ideal for me. | | Edit: That one above is actually relatively decent. The results | with mermaid can get a lot worse, actually to the point of | uselessness. | | Terrible examples below | | https://fiction.live/stories/The-Hypno-Games/eSSzPJ6qiqAC746... | | https://fiction.live/stories/The-Gynarchy/czyGfAtJpRgtzGFmW/... | thuringia wrote: | I don't know about nomnoml but dot/graphviz works very well | for this type of chart. Definitely another idea to try out. | | PS: thanks for investing so much work into Tsukihime! | bumblebeast wrote: | It would be nice to have this tool: http://ditaa.sourceforge.net/ | | So ASCII drawings could be rendered into pretty ones. | mongol wrote: | Mermaid looks similar to PlantUML. Anyone that gave used both and | can compare? | pizza234 wrote: | In the past I used to use Mermaid for simple (but not trivial) | flow charts and class diagrams. | | I've found some minor rough edges, but in particular, a couple | of missing features, one of which I needed (edges going from | attribute to attribute in class diagrams). | | PlantUML didn't have any of those limitations, so I switched, | and never looked back. | | For simple-but-not-trivial diagrams, I didn't find any | substantial difference in terms of syntax (complexity). I don't | have experience on complex diagrams, though. | majkinetor wrote: | PlantUML offered more decade ago. Marmaid is a toy compared to | it. | | However, since its so powerful, its hard to write. Actually, | any given diagram is not that hard, but to keep all those | syntax rules in head is IMO almost impossible. | Ciph wrote: | They are quite similar, PlantUML has support for more types of | diagrams than mermaid (such as network diagram), but IMO | PlantUML is "messier" to write, I find Mermaid more elegant in | writing diagrams. | w4rh4wk5 wrote: | Semi-related question: does mermaid-cli still bring along | chromium to 'render' images? | donio wrote: | I just tried to install it and yes, it looks like mmdc still | requires puppeteer and chromium. Which seems a bit ridiculous | for a CLI tool. | schemescape wrote: | Yes, it uses browser APIs (e.g. SVGGraphicsElement.getBBox()) | to measure text, compute transformations, etc. | | I had hoped to use Mermaid in a static site generator to create | SVG diagrams at build time (to avoid requiring JavaScript), and | this dependency was irritating enough that I abandoned Mermaid | entirely and instead compiled Graphviz to WebAssembly (and | honestly I prefer Graphviz's syntax, although it doesn't | support nearly as many diagram types as Mermaid). | w4rh4wk5 wrote: | Yeah, I was wanted to use the Git graph feature to create | some nice diagrams. I expected the cli to work just like | graphviz. Yet I was greeted by a stacktrace from Chromium | since it did not work in WSL. | | The whole idea of depending on a full blown Chromium for your | cli tool just to convert that mermaid description into an SVG | or PNG seems bad to me. It was my personal turning point | where I stopped using JavaScript based tools in my toolbox. | avgcorrection wrote: | I think so-called ASCII-art is more in the spirit of Markdown. | | The nice thing about the original Markdown (modulo bugs) is that | things are written the way one would write plaintext documents | which are supposed to be easily read in a text editor. So you | don't write bullet lists like this: | | - Bullet 1 - Bullet 2 - Bullet 3 | | And hope that some post-processing will add linebreaks for you. | You write it like this: | | - Bullet 1 | | - Bullet 2 | | - Bullet 3 | | Similarily there have been many tools that let you add so-called | ASCII-art diagrams to Markdown documents. | | The spirit behind the kind of thing in the OP, on the other hand, | is that one should get nicely formatted HTML from Markdown for | the purpose of online consumption. Which is a very different | goal. | | So if I were to judge the syntax itself (since that is what | matters most to the original spirit of Markdown.pl) I would say | that it seems pretty decent. Not as "declarative" (!) as ASCII- | art, but most probably much easier to edit. | rektide wrote: | > _Similarily there have been many tools that let you add so- | called ASCII-art diagrams to Markdown documents._ | | here-in is the nub. these are self contained(/embeddable?) | editors of what is essentially non-textual content. there's a | concealed inner data-model which is rendered/transpiled into | text. | | i far far far far prefer a text mark up, which is easy to | directly edit, which is fairly readable on it's own (imo | mermaid reads very nicely). maaking the inner data model both | explicit directly workable like this is ascendant beyond | compare. | | mermaid also has predictable rendering rules, where-as there's | much more author's opinion/whim about crafting ascii-diagrams, | which are open ended. this makes it more predictable as a | reader, with diagrams following common layout & flow patterns | that one can come to expect. | | the other boom to mermaid is it's not that hard to parse. i | have investigated how available the mermaid team makes the | parser but having a relatively-simple well-specified machine | readable format opens so so many doors. | | absolutely the right choice using human editable text markup | inside human editable markdown. | birdyrooster wrote: | the nub | yu-carm-kror wrote: | If I need something to look good as text without any rendering | I write text (a .txt file). Even the most basic features of | markdown (inline code, italics, etc) look pretty nasty without | post rendering. | OJFord wrote: | I strongly disagree with that, they're about as clear and | unintrusive as I can imagine, what else would you do? | | Personally _I_ even sometimes use them when markdown isn't | available, as in won't be rendered. | raman162 wrote: | I agree that ASCII-art definitely is more cenetered around the | original markdown spirit but I personally struggle making my | ASCII-art diagrams in Vim. Looking at the mermaid, syntax it | looks like I can whip up something equivalent really quick. As | a developer I also don't mind that the mermaid syntax reads | like pseudocode so it's probably easy for me to digest. | tasty_freeze wrote: | One thing that might help is using ":set virtualedit=all". | This makes all lines act as if there are unlimited spaces at | the end of line. That means you can move anywhere on the | screen by cursor or by clicking with your mouse, etc, and not | have to worry about typing in all the padding yourself. Once | you place a character at column N, it will insert spaces up | to column N-1 then place the new character. | corysama wrote: | http://casual-effects.com/markdeep/ has had ASCII-art-as- | vector-image features for quite some time now. It's in need of | a good editor, though. | berkes wrote: | While I agree, formatting languages like Mermaid or PlantUML | are human readable enough to grasp them and their meaning from | reading the textual form. | | And, as others below point out, editability is another great | treat of Markdown. ASCII charts are very hard to format; you'll | really need tools or editor plugins for that. | | So I think that Mermaid (and PlantUML) strike a very pragmatic | and human-friendly balance. Which, IMO is the actual spirit of | Markdown. | Steltek wrote: | > ASCII charts are very hard to format; you'll really need | tools or editor plugins for that. | | Even with tools and plugins, creating tables in Markdown (in | any flavor) is painful enough that I just don't even try. No | one really expects to edit an image with a text editor but | tables are tantalizing close. | | I'd sooner have ASCII inspired tables that are easier to edit | than images and diagrams. | moolcool wrote: | To that point, ASCIIFlow is an amazing tool which I use | constantly when working on markdown files | https://asciiflow.com/#/ | enzanki_ars wrote: | ASCIIFlow is less accessible than Mermaid though for folks | that use screen readers. Mermaid can be read as is from the | source, or be transformed into a readable format for screen | readers, but ASCIIFlow has no such mechanism to translate it | into a format that can be accessible. | llimllib wrote: | I used it yesterday and really wished it supported dashed | lines! | mafro wrote: | Nice tip! I use Monodraw which is macOS only | Steltek wrote: | Behaves like it's Chrome only? Gonna have to pass on that | one. | | Or maybe MacOS only? I dunno. Definitely doesn't feel snappy | and certain things just don't work. | daptaq wrote: | The "spirit of markdown" has long been abandoned by GitHub, | more often than not the offline readability of a README is | absolutely ignored in exchange for a safe-HTML subset to create | kind-of websites below the directory listing of a repository. | | It should really be called RENDERME. | avgcorrection wrote: | > It should really be called RENDERME. | | Hah--yes! | spoils19 wrote: | RENDERME, nice one! | julienb_sea wrote: | To be fair, I'm not sure "offline readability" is an actual | problem anymore. VS Code and (presumably) other IDEs offer a | very simple live-preview window for viewing and editing | markdown files. | darknavi wrote: | Assuming that those tools also implement the same set of MD | functionality (like Mermaid) | armchairhacker wrote: | We need to go back to something like Word documents. We've | come full circle | daptaq wrote: | While it is true, these features seem to me to be added | because Markdown is (ab)used the way it is. The issue is if | you are working in an environment where it isn't possible, | e.g. on a server where you only have vi/nano, and not even | a TUI browser (or if you don't want to use an editor based | on electron). | | My issue is that you can still have a nice readme (often | even giving a better, brief overview) by sticking to HTML- | free Markdown. | | Gitlab seems to be slightly better than Github, by allowing | things like badges to be listed outside of the README, in | the header of the repository page. | tomrod wrote: | I'm getting vibes of "MOISTURIZE ME" from Doctor Who. | didericis wrote: | Which specific github flavored features violate the original | spirit of markdown? I only use the basic syntax, but I don't | think I've run across a readme edit that hasn't adhered to | that original spirit. | anderspitman wrote: | I don't think GP was suggesting that there's anything | specific wrong with GFM, but more that the way github | encourages READMEs to be used (by auto-rendering all | READMEs to HTML) creates an abstraction that shadows the | readable-as-text goals of markdown. | Jtsummers wrote: | > readable-as-text goals of markdown. | | Markdown was meant to be rendered, not left as plaintext | (for viewing, at least as a primary use-case). It's name | is a punny joke, but it's a lightweight mark _up_ | language that was meant to be a lightweight way to write | formatted text that would be rendered as formatted HTML. | GFM seems in keeping with this for the most part. | avgcorrection wrote: | > Markdown was meant to be rendered, not left as | plaintext (for viewing, at least as a primary use-case). | [...] meant to be a lightweight way [...] | | No, that was not the primary design goal. | | > The overriding design goal for Markdown's formatting | syntax is to make it as readable as possible. The idea is | that a Markdown-formatted document should be publishable | as-is, as plain text, without looking like it's been | marked up with tags or formatting instructions. While | Markdown's syntax has been influenced by several existing | text-to-HTML filters, the single biggest source of | inspiration for Markdown's syntax is the format of plain | text email. | | https://daringfireball.net/projects/markdown/ | OJFord wrote: | But Mermaid code is much more readable in plaintext than | a link to an image elsewhere? | | I wish they wouldn't have used code blocks though - I | commented on this recently about some other plugin that | was doing it: usually ``` gets syntax highlighted and | 'pre' formatting, but otherwise its contents is | unchanged; it's unusual to _execute_ the contents. | ```python print(42) ``` | | Renders print(42) | | Not 42 | | ! | | In my opinion it would've been better to use $$ as often | used for mathjax, $$mermaid or something. Since it is | expected that an _interpretation_ of $$ | \code\here $$ | | is rendered, rather than it itself. And if we _want_ the | code itself, we have: ```tex | \code\here ``` | | ! How do you give an example of Mermaid code in a Readme? | I'm sure they've thought of it, it can be escaped, but | why? Why is it different? | Jtsummers wrote: | > Markdown is a text-to-HTML conversion tool for web | writers. Markdown allows you to write using an easy-to- | read, easy-to-write plain text format, then convert it to | structurally valid XHTML (or HTML). | | Literally the first paragraph from your link. I'm having | trouble reconciling that first paragraph with the idea | that it wasn't meant to be rendered as HTML. | daptaq wrote: | The "easy-to-read [...] plain text format" indicates to | me that the idea was that markdown should be readable in | plaintext form too. The ability to convert it to HTML is | a different goal? | Jtsummers wrote: | Maybe? My point, though, is that from day 1 it was meant | to be rendered as HTML. So what Github does with it | (rendering README.md files) is perfectly compatible with | that original intent. Just like everyone who used | md->html renderers for their blogs or whatever other | content. | | If you just want plaintext, then you don't need markdown | or any other markup. Just a plaintext file, like, I don't | know, a README file. Don't throw .md (or .org in my case) | on it, and it won't get rendered. | daptaq wrote: | Rendering has HTML isn't really the issue, imo. The | question is rather how readable the source remains, when | you foget to fold lines, insert too many images without | alt texts, intersperse regular HTML, etc. | chipotle_coyote wrote: | I think you're talking past each other a little. Markdown | was designed to let you "write HTML using an easy-to- | read, easy-to-write plain text format", _and_ to "be | publishable as-is, as plain text". Those are both | explicitly stated design goals. | | The argument that GitHub is abandoning the "spirit of | Markdown", I surmise, is that a README file written in | Markdown should be equally readable whether you're | reading it as rendered HTML or not. It may be a minor | quibble in some respects, but I think it's a valid minor | quibble. If I open your README file in my editor, I | shouldn't have to run it through external software to | make it comprehensible. I mean, maybe your project has an | awesome logo, but would you just drop SVG code in the | middle of the README file and tell me that if I was using | the proper rendering engine it wouldn't be profoundly | annoying? No, of course you wouldn't, because you're not | a jerk. :) | | Personally, I try to use only the "reference" style of | links in README files so they look like "footnotes" when | read as plain text, try not to include images unless | they're both supplemental and _really_ helpful when | rendered on GitHub (e.g., screenshots for editor themes), | etc. Mermaid seems like it would be awesome for | generating diagrams for _finished pages,_ but it doesn 't | seem at all like a good fit for READMEs. | Jtsummers wrote: | It is still readable, though. It's not like there's a | base 64 encoded blob in the middle. Mermaid is reasonably | comprehensible (as reasonable as any other code block, at | least) without any rendering. | avgcorrection wrote: | "A text-to-HTML conversion tool" with the "overriding | design goal" of "[making] it as readable as possible". | | You wrote: | | > Markdown was meant to be rendered, not left as | plaintext | | Then the overriding design goal would not be to make it | "as readable as possible" in its "raw" form (because what | would be the point of that?). So this is clearly a | falsehood. | | Markdown was meant to be readable as-is. Meaning that you | could read it as-is or render it. At your leisure. | | Also literally your words: | | > was meant to be a lightweight way | | With the overriding goal of making it "as readable as | possible". Keyword "override". Which means that it _takes | precedence_ over being "lightweight". | | Then you literally wrote: | | > that it wasn't meant to be rendered as HTML. | | Clearly a falsehood or a strawman as I only emphasized | the "overriding design goal". Markdown was supposed to be | able to be rendered as HTML... _and_ to be readable as- | is. | | The part that you were wrong about was this: | | > Markdown was meant to be rendered, not left as | plaintext | | It was designed to be _readable_ as plaintext as well... | so this assertion of yours is false since it implies that | plaintext readability was not a consideration. But it was | in fact the _primary_ design goal when making the syntax. | | I hope this clears things up. | daptaq wrote: | My go-to example is uBlock: https://raw.githubusercontent.c | om/gorhill/uBlock/master/READ..., despite being a great | add-on, has 1/3-1/2 of unlegible Markdown, that looks nice | when rendered. | glennvtx wrote: | README.HTML | runarberg wrote: | Shameless plug. I wrote a math authoring tool Mathup[1] with | that purpose in mind. That you could author math really easily | which would also be easy to read in plaintext. You could write | things like 1+2 / 3+4 which you would be rendered as you would | expect, or you could write your matrices like A = [a, b; c, d]. | | My main reason for writing it was for inclusion in markdown | documents. | | https://runarberg.github.io/mathup/ | prpl wrote: | There is also https://github.com/asciitosvg/asciitosvg | | Used in zeromq docs. | jasonlotito wrote: | ASCII-art is generally difficult to write as denoted by the | numerous tools that have been created to generate ASCII-art for | markdown. ASCII-art is also much more difficult to edit after | the fact. | | The spirit of Markdown is succinctly described on DF's Markdown | project website. | | "Markdown allows you to write using an easy-to-read, easy-to- | write plain text format." | | Mermaid makes it easy-to-read and easy-to-write. ASCII is easy- | to-read, but hardly easy-to-write. While Mermaid isn't as nice- | to-read, it's still easy-to-read. It's also much easier to | modify than ASCII art. | | Finally, Markdown itself was designed that while the text is | easy to read, Markdown itself is a conversion tool. It | literally takes the text and changes it into something that is | more readable. This can be seen with how Markdown handles | tables. It's literally HTML table tags rather than ASCII | designed tables. | | This is very much in the spirit of Markdown, and things like | this have already been done in the original implementation. | throw0101a wrote: | > _I think so-called ASCII-art is more in the spirit of | Markdown._ | | If you're simply doing a _less_ on a file, then sure. But if | you want to do a 'render' on the Markdown and convert it to | another format (HTML, PDF) then having a mechanism that can | translate ASCII to something graphical could be useful. | | In some ways this is what the DOT language does in Graphviz: | | * https://graphviz.org/gallery/ | | > _The spirit behind the kind of thing in the OP, on the other | hand, is that one should get nicely formatted HTML from | Markdown for the purpose of online consumption. Which is a very | different goal._ | | I'm not sure if there's a way to have both ASCII art and it be | renderable to graphics. Closest that I could find: | | * https://github.com/martinthomson/aasvg | actually_a_dog wrote: | I saw several things that looked promising on Github: | | * https://github.com/ivanceras/svgbob | | * https://github.com/ggerganov/dot-to-ascii (renders DOT to | ascii. Combine this with an SVG renderer, maybe?) | | * https://github.com/ivanceras/spongedown | | Also, this SO question: | https://stackoverflow.com/questions/3211801/graphviz-and- | asc... | | I'm sure there are more out there. | p20z wrote: | has anyone had success using mermaid diagrams for real-time | collaboration? Seems you should be able to use this to draw | pictures while chatting with someone, akin to a white-boarding | experience. | innolitics wrote: | I really like diagrams as text for simple diagrams where you | don't care too much about the formatting. I think Figma is better | if you really care about the formatting. I just discovered this | the other day, but you can create mermaid diagrams in Notion by | adding a codeblocks and selecting the "mermaid" language from the | dropdown. | victor106 wrote: | For those interested in this I highly recommend the book | mentioned in the blog post "The Official Guide to Mermaid.js" | [deleted] | a-dub wrote: | this looks excellent! last time i needed something like this it | was fairly time consuming to do it in tikz, something quick in | markdown is an awesome idea! | citizenkeen wrote: | Just so we're clear, if I deploy to production on a Monday, I get | to start enjoying my weekend? | kilovoltaire wrote: | This is interesting, but I personally really like that markdown | is almost as legible as plain text as when rendered, which things | like this sort of break. | | So I think I'd prefer ASCII art diagrams for this sort of thing. | (In fact there was recently an ASCII diagram drawing tool on the | HN front page, https://asciiflow.com/ ) | riffic wrote: | if you use Obsidian, Mermaid is supported natively. | plett wrote: | It works in Joplin too | jopsen wrote: | I like the idea of mermaid.js, but why does it have to be so | ugly. | | I don't know why, but whenever I've had a look at mermaid.js, it | always made me feel like the syntax and generated diagrams were | ugly. Am I the only one who thinks this? | | Also what's up with all the useless diagram types? | lpghatguy wrote: | This is a problem I've always had with Mermaid too. Custom | theming is a no-go; it's easier to make attractive diagrams | with GraphViz. | | I remember the docs for Mermaid.js talk about varying document | trust levels, which is not something I want involved in a | diagramming DSL. | eurasiantiger wrote: | Yes, it is ugly. The layout engine doesn't do "these elements | are kinda the same thing so place them side by side". No | hierarchy model, no constraints, everything is always placed on | one axis according to order and then pretty much shifted | randomly to not collide. Spiderwebs everywhere. | | Also, ER diagrams are nigh unreadable due to the unusual | relationship visual style used. | rektide wrote: | nicely seen[1] on their roadmap a month ago. | | not github specific but i really enjoyed this quite long | post/tutorial on realtime collaboration with mermaid (using | notion)[2]. | | [1] https://github.com/github/roadmap/issues/372 | https://news.ycombinator.com/item?id=29927962 (72 points, 14 | comments, 31 days ago) | | [2] https://www.happyandeffective.com/blog/realtime- | collaborativ... https://news.ycombinator.com/item?id=30238208 (12 | points, 2 comments, 7 days ago | berkes wrote: | Joplin, the Open source note-taking app1, has Mermaid built-in. | | I use those a lot when keeping my notes on arcitectures, design | patterns and software design. I prefer this, vastly, over Google | Docs + draw.io. | | The only thing I dislike about Mermaid-in-Joplin is that the | live-pre-render of the actual chart fails and shows an error | whenever there is an error in the source of the diagram. Which | makes sense. But is annoying because *when you are typing out the | syntax, there always is an error untill you finish the class, | object, some bracket or relation. | | 1https://joplinapp.org/ EDIT: I'm not affiliated to joplin in any | way. Just love it. | [deleted] | Ciph wrote: | Another annoyance is how the sync between the editor and | preview pane "jumps" uncontrollably when using mermaid. I do | however love it too and comitted to use it over other note- | taking software. | laurent123456 wrote: | This is a known issue which hopefully should be fixed soon: | https://github.com/laurent22/joplin/issues/6074 | aseattledev1234 wrote: | This is great, I have used mermaid for years and glad to see | GitHub adding support. | blackdogie wrote: | This is a nice addition. | | I would love to see it working in the Github Wiki too. ___________________________________________________________________ (page generated 2022-02-14 23:00 UTC)