# Granite: a terminal plotting library

**URL:** <https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778>\
**Category:** Announcements\
**Created:** [August 19, 2025, 3:41am UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778 "2025-08-19T03:41:20Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![mchav](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/mchav/32/5143_2.png) [@mchav](https://discourse.haskell.org/u/mchav)\
**Post date:** [August 19, 2025, 3:41am UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778/1 "2025-08-19T03:41:20Z")

</div>

Have been working on this for some time as part of dataframe but decided to split it off in case anyone also finds it useful.

The main library has no dependencies except base (by design) so it should in principle work on MicroHs as well (haven’t tried yet).

I hope someone finds this useful for a CLI tool. You have to do a little trickery on windows to get the unicode characters to show but it works there too.

 ![bar_and_pie](https://us1.discourse-cdn.com/flex002/uploads/haskell/original/2X/9/9718b81d0191addff348fcca1287b352e299bd25.png)

 ![scatter_and_histogram](https://us1.discourse-cdn.com/flex002/uploads/haskell/original/2X/c/cb1af25f41b127d63123d4456d1943da614c778d.png)

> **[GitHub - mchav/granite: A library for producing terminal plots.](https://github.com/mchav/granite)**
>
> A library for producing terminal plots.

---

<div class="post-metadata">

**Author:** ![romes](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/romes/32/2912_2.png) [@romes](https://discourse.haskell.org/u/romes)\
**Post date:** [August 19, 2025, 9:36am UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778/2 "2025-08-19T09:36:44Z")

</div>

Excellent work once again!

This looks great and I bet it is also much more satisfying code-wise to have it in a standalone library 🙂

---

<div class="post-metadata">

**Author:** ![mchav](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/mchav/32/5143_2.png) [@mchav](https://discourse.haskell.org/u/mchav)\
**Post date:** [August 19, 2025, 6:40pm UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778/3 "2025-08-19T18:40:39Z")

</div>

Thank you! Came at the cost of efficiency but that’s fine cause it looks pretty. Particularly proud of heatmaps:

 ![heatmap](https://us1.discourse-cdn.com/flex002/uploads/haskell/original/2X/4/4cf981fb36dc86e1f2961d6167d23db9fcc2fc98.png)

---

<div class="post-metadata">

**Author:** ![Bodigrim](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/bodigrim/32/1457_2.png) [@Bodigrim](https://discourse.haskell.org/u/Bodigrim)\
**Post date:** [August 19, 2025, 8:10pm UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778/4 "2025-08-19T20:10:33Z")

</div>

Wonderful! I’ve been looking for such library just a few weeks ago.

---

<div class="post-metadata">

**Author:** ![mchav](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/mchav/32/5143_2.png) [@mchav](https://discourse.haskell.org/u/mchav)\
**Post date:** [August 19, 2025, 8:57pm UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778/5 "2025-08-19T20:57:21Z")

</div>

Added it on hackage: [granite: Easy terminal plotting.](https://hackage.haskell.org/package/granite)

---

<div class="post-metadata">

**Author:** ![artem](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/artem/32/56_2.png) [@artem](https://discourse.haskell.org/u/artem)\
**Post date:** [August 20, 2025, 12:37am UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778/6 "2025-08-20T00:37:22Z")

</div>

This looks amazing. I want a criterion backend that plots with this.

---

<div class="post-metadata">

**Author:** ![artem](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/artem/32/56_2.png) [@artem](https://discourse.haskell.org/u/artem)\
**Post date:** [August 20, 2025, 12:39am UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778/7 "2025-08-20T00:39:38Z")

</div>

Also, please add the github link to the package description (the .cabal file).

---

<div class="post-metadata">

**Author:** ![lorenzo](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/lorenzo/32/1294_2.png) [@lorenzo](https://discourse.haskell.org/u/lorenzo)\
**Post date:** [August 20, 2025, 7:49am UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778/8 "2025-08-20T07:49:09Z")

</div>

Amazing work! Looking forward to using it

---

<div class="post-metadata">

**Author:** ![roqueando](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/roqueando/32/5110_2.png) [@roqueando](https://discourse.haskell.org/u/roqueando)\
**Post date:** [August 20, 2025, 8:40pm UTC](https://discourse.haskell.org/t/granite-a-terminal-plotting-library/12778/9 "2025-08-20T20:40:33Z")

</div>

That is so nice!! Amazing work man \<3 I will definitely use this
