Projects
View on GitHub
fletcher-package/fletcher
fletcher-package/fletcher has 1,156 GitHub stars and 37 forks. GitHot measured -1 stars in 24 hours and +3 in 7 days. Last checked 2026-11-15 12:27 UTC. Last push 2026-11-13.
Measured star growth
- in 24h
- -1
- in 7 days
- +3
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
Typst package for drawing diagrams with arrows, built on top of CeTZ.
Creative & MediaREADME.md
Originalfletcher
fletcher (noun) a maker of arrows
A Typst package for drawing diagrams with arrows, built on top of CeTZ.
See the manual for documentation or ask the community for help.
#import "@preview/fletcher:0.5.9" as fletcher: diagram, node, edge
#diagram(cell-size: 15mm, $
G edge(f, ->) edge("d", pi, ->>) & im(f) \
G slash ker(f) edge("ur", tilde(f), "hook-->")
$)
// https://xkcd.com/1195/
#import fletcher.shapes: diamond
#set text(font: "Comic Neue", weight: 600) // testing: omit
#diagram(
node-stroke: 1pt,
node((0,0), [Start], corner-radius: 2pt, extrude: (0, 3)),
edge("-|>"),
node((0,1), align(center)[
Hey, wait,\ this flowchart\ is a trap!
], shape: diamond),
edge("d,r,u,l", "-|>", [Yes], label-pos: 0.1)
)
#set text(10pt)
#diagram(
node-stroke: .1em,
node-fill: gradient.radial(blue.lighten(80%), blue, center: (30%, 20%), radius: 80%),
spacing: 4em,
edge((-1,0), "r", "-|>", `open(path)`, label-pos: 0, label-side: center),
node((0,0), `reading`, radius: 2em),
edge(`read()`, "-|>"),
node((1,0), `eof`, radius: 2em),
edge(`close()`, "-|>"),
node((2,0), `closed`, radius: 2em, extrude: (-2.5, 0)),
edge((0,0), (0,0), `read()`, "--|>", bend: 130deg),
edge((0,0), (2,0), `close()`, "-|>", bend: -40deg),
)
#diagram($
e^- edge("rd", "-<|-") & & & edge("ld", "-|>-") e^+ \
& edge(gamma, "wave") \
e^+ edge("ru", "-|>-") & & & edge("lu", "-<|-") e^- \
$)
More examples
Pull requests are most welcome!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Change log
0.5.9
- Support named edges (#16, #96).
0.5.8
- Added bracket and parenthesis mark types, with shorthands
"[","]","(",")","bracket","parenthesis"(#102). - Added
cylinder,brace,bracket,parenandstretched-glyphnode shapes (#99, #109). - Allow specifying label positions as
(segment, position)(#107, #112, @deffi). - Fix bugs with anchors of absolutely-positioned enclose nodes (#95, #113).
- Fix some instabilities with edges related to division by zero (#100, #105).
0.5.7
- Update
cetzdependency to0.3.4fixing bugs withtypstversion0.13.1(#89, #90, #91).
0.5.6
- Require
typstversion>=0.13.0. - Update
cetzdependency to0.3.3. - Support CeTZ anchors on nodes which dynamically enclose other nodes (#81).
- Allow nested enclosing of nodes (#45).
- Add
floatingoption toedge()to make certain objects not affect the diagram's bounds (#38). - Make
debugannotations "floating" so they don't affect diagram size and layout.
0.5.5
- Update
cetzdependency to0.3.2. - Fix deprecated type comparisons (#75).
- Add space
line style for empty stroke (#70). - Fix bug with
label-sidefor corner edges (#74).
0.5.4
- Allow relative lengths for the
label-posoption ofedge()(#61). - Fix layout bugs for diagrams with non-default
axesoptions (#62, #66). - Fix a line breaking issue with justified text in nodes (#64).
0.5.3
- Support CeTZ anchors in edge coordinates, e.g.,
edge(<a.east>, ..). - Fix crash when
stroke: noneset on polyline edges (#60, @SillyFreak). - Fix bug with crossing edges in math mode (#54).
- Fix layout bugs for diagrams with non-default
axesoptions (#62, #66).
0.5.2
- Require
typstversion>=0.12.0. - Update
cetzdependency to0.3.1. Note: This may slightly change edge label positions. - Add
loop-angleoption toedge()(#36).
0.5.1
- Fix nodes which
encloseabsolute coordinates. - Allow CeTZ-style coordinate expressions in node
encloseoption. - Fix crash with polar coordinates.
- Fix edges which bend at 0deg or 180deg (e.g.,
edge("r,r")oredge("r,l")) and enhance the way the corner radius adapts to the bend angle. Note: This may change diagram layout from previous versions. - Improve error messages.
- Add marks for crow's foot notation:
n(many),n?(zero or more),n!(one or more),1(one),1?(zero or one),1!(exactly one). - Add
node-shapeoption todiagram().
0.5.0
- Greatly enhance coordinate system.
- Support CeTZ-style coordinate expressions (relative, polar, interpolating, named coordinates, etc).
- Absolute coordinates (physical lengths) can be used alongside "elastic" coordinates (row/column positions).
- Add
label-angleoption toedge(). - Add
label-wrapperoption to allow changing the label inset, outline stroke, and so on (#26). - Add
label-sizeoption to control default edge label text size (#35) - Add
trapeziumnode shape. - Disallow string labels to be passed as positional arguments to
edge()(to eliminate ambiguity). Used named argument or pass content instead.
0.4.5
- Add isosceles triangle node shape (#31).
- Add
fitanddiroptions to various node shapes to adjust sizing and orientation. - Allow more than one consecutive edge to have an implicit end vertex.
- Allow
snap-toto benoneto disable edge snapping (#32).
0.4.4
- Support fully customisable marks/arrowheads!
- Added new mark styles and tweaked some existing defaults. Note. This may change the micro-typography of diagrams from previous versions.
- Add node groups via the
encloseoption ofnode(). - Node labels can be aligned inside the node with
align(). - Node labels wrap naturally when label text is wider than the node. Note: This may change diagram layout from previous versions.
- Add a
layeroption to nodes and edges to control drawing order. - Add node shapes:
ellipse,octagon.
0.4.3
- Fixed edge crossing backgrounds being drawn above nodes (#14).
- Add
fletcher.hide()to hide elements with/without affecting layout, useful for incremental diagrams in slides (#15). - Support
shifting edges by coordinate deltas as well as absolute lengths (#13). - Support node names (#8).
0.4.2
- Improve edge-to-node snapping. Edges can terminate anywhere near a node (not just at its center) and will automatically snap to the node outline. Added
snap-tooption toedge(). - Fix node
insetbeing half the amount specified. If upgrading from previous version, you will need to divide nodeinsetvalues by two to preserve diagram layout. - Add
decorationsoption toedge()for CeTZ path decorations ("wave","zigzag", and"coil", also accepted as positional string arguments).
0.4.1
- Support custom node shapes! Edges connect to node outlines automatically.
- New
shapessubmodule, containingdiamond,pill,parallelogram,hexagon, and other node shapes.
- New
- Allow edges to have multiple segments.
- Add
verticesancorner-radiusoptions toedge(). - Relative coordinate shorthands may be comma separated to signify multiple segments, e.g.,
"r,u,ll".
- Add
- Add
dodgeoption toedge()to adjust end points. - Support
cetz:0.2.0.
0.4.0
- Add ability to specify diagrams in math-mode, using
&to separate nodes. - Allow implicit and relative edge coordinates, e.g.,
edge("d")becomesedge(prev-node, (0, 1)). - Add ability to place marks anywhere along an edge. Shorthands now accept an optional middle mark, for example
|->-|andhook-/->>. - Add “hanging tail” correction to marks on curved edges. Marks now rotate a bit to fit more comfortably along tightly curving arcs.
- Add more arrowheads for the sake of it:
}>,<{,/,\,x,X,*(solid dot),@(solid circle). - Add
axesoption todiagram()to control the direction of each axis in the diagram's coordinate system. - Add
width,heightandradiusoptions tonode()for explicit control over size. - Add
corner-radiusoption tonode(). - Add
strokeoption toedge()replacingthicknessandpaintoptions. - Add
edge-strokeoption todiagram()replacingedge-thickness.
0.3.0
- Make round-style arrow heads better approximate the default math font.
- Add solid arrow heads with shorthand
<|-,-|>and double-bar||-,-||. - Add an
extrudeoption tonode()which duplicates and extrudes the node's stroke, enabling double stroke effects.
0.2.0
- Experimental support for customising arrowheads.
- Add right-angled edges with
edge(..., corner: left/right).