# \[ANN\] XKCDMakie.jl

**URL:** <https://discourse.julialang.org/t/ann-xkcdmakie-jl/139405>\
**Category:** Package Announcements\
**Tags:** package, announcement, plotting, makie, cairomakie\
**Created:** [September 12, 2026, 2:15pm UTC](https://discourse.julialang.org/t/ann-xkcdmakie-jl/139405 "2026-09-12T14:15:05Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![aryavorskiy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aryavorskiy/32/43466_2.png) [@aryavorskiy](https://discourse.julialang.org/u/aryavorskiy)\
**Post date:** [September 12, 2026, 2:15pm UTC](https://discourse.julialang.org/t/ann-xkcdmakie-jl/139405/1 "2026-09-12T14:15:05Z")

</div>

> Finally, a worthy competitor to Matplotlib’s `xkcd` mode

Introducing XKCDMakie.jl, a new Makie.jl “backend” that produces figures with a hand-drawn look and feel.

Paste into your REPL to install:

```julia
using Pkg; Pkg.add("XKCDMakie")

```

or

```repl
]add XKCDMakie

```

 ![demo](https://global.discourse-cdn.com/julialang/original/3X/7/7/77a084ad63ae9687fcfdb05d0333463113d5e36d.png)

> **Code for this figure**
>
> ```julia
> using XKCDMakie
> 
> fig = Figure(size=(600, 500))
> Label(fig[0, 1:2], "XKCDMakie.jl demo plot", fontsize=20, font=:bold)
> 
> xs = 0:0.1:10
> lines(fig[1, 1], xs, sin.(xs), axis=(;title="Line plots"), linestyle=:dash)
> lines!(fig[1, 1], xs, -sin.(xs), color=xs)
> textlabel!(fig[1, 1], Point2f(5, 0), "Sinewaves")
> 
> hist(fig[1, 2], randn(1000), normalization=:pdf,
> axis=(;limits=((-5, 5), (0, nothing)), title="Histograms and annotations"))
> n_pdf(x) = 1/sqrt(2pi) * exp(-x^2/2)
> annotation!(fig[1, 2], 3.5, n_pdf(0) / 2, 3, n_pdf(3), text="3 sigma\n limit",
> path=Ann.Paths.Arc(-0.4), style=Ann.Styles.LineArrow(), labelspace=:data)
> 
> xs = LinRange(0, 2pi, 15)
> ys = LinRange(0, 3pi, 10)
> us = [sin(x) * cos(y) for x in xs, y in ys]
> vs = [-cos(x) * sin(y) for x in xs, y in ys]
> strength = vec(sqrt.(us .^ 2 .+ vs .^ 2))
> arrow_fun(x) = Point2f(sin(x[1])*cos(x[2]), -cos(x[1])*sin(x[2]))
> arrows2d(fig[2, 1:2], xs, ys, arrow_fun, lengthscale=0.3, color=strength,
> axis=(;title="And even arrow plots!"))
> fig
> 
> ```

The idea was discussed [earlier](https://discourse.julialang.org/t/xkcd-style-plots/89477), so I decided to share what I managed to do on this part. I had a lot of fun working on this.

Also, **I used no AI** (otherwise what’s the fun?). This piece of slop was lovingly handcrafted.

---

<div class="post-metadata">

**Author:** ![simonsteiger](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simonsteiger/32/209862_2.png) [@simonsteiger](https://discourse.julialang.org/u/simonsteiger)\
**Post date:** [September 12, 2026, 2:25pm UTC](https://discourse.julialang.org/t/ann-xkcdmakie-jl/139405/2 "2026-09-12T14:25:36Z")

</div>

That’s so cool! What an awesome package.

---

<div class="post-metadata">

**Author:** ![Gattu\_Mytraya](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gattu_mytraya/32/45429_2.png) [@Gattu\_Mytraya](https://discourse.julialang.org/u/Gattu_Mytraya)\
**Post date:** [September 12, 2026, 4:17pm UTC](https://discourse.julialang.org/t/ann-xkcdmakie-jl/139405/3 "2026-09-12T16:17:53Z")

</div>

Awesome!! This will be so useful for presentations.

---

<div class="post-metadata">

**Author:** ![DoktorMike](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/doktormike/32/2736_2.png) [@DoktorMike](https://discourse.julialang.org/u/DoktorMike)\
**Post date:** [September 19, 2026, 9:27am UTC](https://discourse.julialang.org/t/ann-xkcdmakie-jl/139405/4 "2026-09-19T09:27:01Z")

</div>

That’s awesome!!
