Little update plates

hext
jot
python
r
Author

Matt Dray

Published

September 18, 2026

tl;dr

Small personal-project updates: {hext} now supports colour and jot handles linebreaks and unquoted inputs.

Stretching a metaphor

Tapas is:

  • little plates
  • shared with friends
  • delicious

I have a couple of project updates that are small, involve new contributors and make the tools more… tasty?

Update 1: {hext}

{hext} is a Very Important Package to generate text-only hex logos for your project, inspired by Yihui and Charlie. It’s now released as v0.2 on GitHub.

The main addition is colour. You can now use the col argument to colour all the characters in the hex. This is based on a limited set of ANSI escape codes, so you use "red" or "yellow", for example, with a default of "none".

A text-hexagon logo printed to a zsh terminal. The text inside the hexagon says 'hello this is hext', with each word on a different line, aligned left, right, centre and left, respectively. The background is black and the text is bright yellow.

Appearance when col = "yellow".

Originally I was going to allow different colours for the border and main content, but already this update goes beyond the stated package goal of ‘simplicity’1. Also I wrote it on a bus journey and reached my destination before I could do something more complicated anyway.

Bonus: Hanne Oberman contributed a documentation update to warn against bare backslashes, which could escape subsequent characters. Thanks Hanne.

Update 2: jot

I’ve continued to use jot, my Python-backed CLI, to record quick notes about what I’ve been up to at work.

There’s a new contributor: Dhruva Narayan. They’ve added a couple of small but useful PRs to solve two issues: linebreaks and unquoted text entry. Thanks Dhruva.

The tool has now been released as v0.4 on GitHub and uploaded to PyPI. Other updates in this release include jot files in Markdown format and the previously-mentioned ability to back-up your jot file to a GitHub gist.

Unbreak linebreaks

Text input is now sanitised by replacing linebreaks with spaces.

This is important because functions in jot assume there’s only one line per jotting. I think this makes the most sense conceptually, but also makes jot handling easier when presenting back to the user with options like --search and --list.

This was a bit of an edge-case, but multi-line jots were possible if the user had inserted a linebreak manually with \n or failed to close their quotation marks during text input.

Quote unquote

Speaking of quotation marks, it’s no longer necessary to use them for text input.

Rather than jot "hello there", you can now just do jot hello there. Think of the microseconds you’ll save by not typing these two extra characters.

Quotation marks are still supported to help handle a couple of edge cases. First, your input needs quoting if it contains special characters. Also, jot might get subcommands so we’d need to separate the meaning of jot search hello to search and jot "search hello" to jot.

Tapas

Yum yum.

Environment

Session info
Last rendered: 2026-09-18 11:27:44 CEST
R version 4.6.1 (2026-06-24)
Platform: aarch64-apple-darwin23
Running under: macOS Sequoia 15.6.1

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Europe/Rome
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] htmlwidgets_1.6.4 compiler_4.6.1    fastmap_1.2.0     cli_3.6.6        
 [5] tools_4.6.1       htmltools_0.5.9   otel_0.2.0        rstudioapi_0.19.0
 [9] yaml_2.3.12       rmarkdown_2.31    knitr_1.51        jsonlite_2.0.0   
[13] xfun_0.60         digest_0.6.39     rlang_1.3.0       evaluate_1.0.5   

Footnotes

  1. I suppose the user could provide their own escape codes in the text_* arguments if they’re masochistic enough.↩︎

Reuse