Pikchr (pronounced "picture") is a [PIC][1]-like markup
language for diagrams in technical documentation. Pikchr is
designed to be embedded in [fenced code blocks][2] of
Markdown or similar mechanisms of other documentation markup languages.
[1]: https://en.wikipedia.org/wiki/Pic_language
[2]: https://spec.commonmark.org/0.29/#fenced-code-blocks
For example, the diagram:
``` pikchr
arrow right 200% "Markdown" "Source"
box rad 10px "Markdown" "Formatter" "(markdown.c)" fit
arrow right 200% "HTML+SVG" "Output"
arrow <-> down 70% from last box.s
box same "Pikchr" "Formatter" "(pikchr.c)" fit
```
Is generated by 7 lines of Markdown:
~~~~~~
``` pikchr
arrow right 200% "Markdown" "Source"
box rad 10px "Markdown" "Formatter" "(markdown.c)" fit
arrow right 200% "HTML+SVG" "Output"
arrow <-> down 70% from last box.s
box same "Pikchr" "Formatter" "(pikchr.c)" fit
```
~~~~~~
Pikchr diagrams can appear in:
* Documentation
* Wiki pages
* Tickets and bug reports
* Forum posts
* Check-in comments
* Anywhere else that Markdown or similar markup languages are used
Pikchr diagrams are easy to generate. The language is simple.
There is lots of documentation and examples on-line (links below).
Anyone who is comfortable using Markdown should be able to pick up Pikchr
with minimal extra effort.
Pikchr is safe for use in internet-facing applications. Hostile
Pikchr scripts cause no harm (apart from generating ugly diagrams).
## Demos
* [Example Pikchr Scripts](./doc/examples.md)
([light-mode](/doc/trunk/doc/examples.md?skin=default&once) or
[dark-mode](/doc/trunk/doc/examples.md?skin=darkmode&once))
* [](/pikchrshow) ← Enter Pikchr text and see the result on-line
* [Source text for this page](./homepage.md?mimetype=text/plain)
## Pikchr Documentation
* [Purpose And Scope Of Pikchr](./doc/purpose.md)
* [Pikchr User Manual](./doc/userman.md)
* [An Example Of How A Pikchr Script Is Written](./doc/teardown01.md)
* [Pikchr Language Spec](./doc/grammar.md)
* [Differences From PIC](./doc/differences.md)
* [Invoking Pikchr From Markdown](./doc/usepikchr.md)
* [How To Build Pikchr From Source](./doc/build.md)
* [Use Case: SQLite Syntax Diagrams](./doc/sqlitesyntax.md)
* [Release History](./doc/changelog.md)
## Copies Of Historical PIC Documentation
* [BWK paper on the original PIC](/uv/pic.pdf)
* [DPIC Documentation](/uv/dpic-doc.pdf)
* [ESR GnuPIC Docs](/uv/gpic.pdf)
## Source Code
* [Download](./doc/download.md)
* [How To Build Pikchr From Source](./doc/build.md)
* [How To Integrate Pikchr Into Other Applications][integ]
## External Links
* [Go port of pikchr](https://github.com/gopikchr/gopikchr) and
a [blog post](https://zellyn.com/gopikchr-a-yakshave/) about how
that port came to be, both by Zellyn Hunter.
* [mdbook-pikchr](https://crates.io/crates/mdbook-pikchr), by
Konstantin Podsvirov, is a pikchr-aware preprocessor for mdBook.
* Support for pikchr in [IntelliJ-based
IDEs](https://github.com/YannCebron/IntelliPikchr/) by Yann Cébron.
* pikchr has been integrated into the [kroki.io](https://kroki.io/)
diagram-rendering service.
* The 8th programming language added pikchr support [in version
22.04](https://8th-dev.com/forum/index.php/topic,2473.0.html).
* [Node.js pikchr module](https://github.com/tenuki/pikchr) by
David Weil.
* A [pikchr filter for
pandoc](https://code.jboy.space/pikchr-filter/doc/trunk/README.md)
implemented in Lua.
* [Adamantine Pick](https://github.com/notlibrary/obsidian-adamantine-pick)
adds pikchr support to the Obsidian knowledge-base app.
* [pikchr-cmd](https://github.com/zenomt/pikchr-cmd), by Michael
Thornburgh, is a command-line Pikchr preprocessor tool for use
with any Markdown formatter.
## Source-Code License: 0-clause BSD
The Pikchr source code is a self-contained original work. It has no
external dependencies apart from the standard C library and does not
use code taken from the internet or other external sources. All of the Pikchr
source code is released under a [zero-clause BSD license][0BSD]. After being
processed using [Lemon][lemon], the Pikchr source code is a single
file of C89 named "`pikchr.c`". These features
are designed to make Pikchr [easy to integrate into other systems][integ].
[0BSD]: https://spdx.org/licenses/0BSD.html
[lemon]: https://www.sqlite.org/lemon.html
[integ]: doc/integrate.md