m

messeji

@preview

Typeset multi-page chat histories, including from external JSON files.

v0.3.0
MIT

Package Information

Last Updated
Authors
Kai Anter
Categories
visualizationfun

1. Get the package

Download the package using the TPIX CLI:

tpix get @preview/messeji:0.3.0

2. Import in your Typst file

Add this to your .typ file:

#import "@preview/messeji:0.3.0": *

Version History

0.3.0
15c0da826837...
0.2.0
3b335521b805...
0.1.0
359b18bbdb11...

messēji

messēji ("Message" in Japanese) is a Typst package for typesetting chat
histories in a modern, minimal design, inspired by popular messengers. No manual
copying to your Typst document required, just pass in a JSON file.

Example Chat

Main features of messēji include:

  • Support for quoted messages
  • Image messages (with and without captions)
  • Displaying timestamps between messages
  • Simple data model to read from external files (JSON, YAML, ...) if you want to
    typeset very long chat histories
  • Reacting to messages

To see how it works, read the short introduction below, or
the messeji user manual
for a more in-depth explanation.

Import

#import "@preview/messeji:0.3.0": messeji

Basic Usage

The JSON file just needs to be an array of messages:

[
  {
    "date": "2026-12-25T09:41:00",
    "msg": "Merry Christmas! 🎄",
    "from_me": false
  },
  {
    "msg": "Thank you! 😊",
    "ref": "Merry Christmas! 🎄", // Responses to messages have to be duplicated
    "from_me": true
  }
]

Then, you can import the JSON file with the built-in JSON parser from Typst and
typeset it by calling messeji:

#let parsed-data = json("mychat.json")
#messeji(chat-data: parsed-data)

If you don't want to use a JSON file or parse your own filetype, you just have
to pass a list of messages to messeji:

#let my-messages = (
  (
    date: "2024-01-01T12:00:00",
    msg: "This is defined directly in the Typst file.",
    from_me: false,
  ),
  (
    msg: "Nice!",
    from_me: true,
  ),
)
#messeji(chat-data: my-messages)

Theming

You can also customize the appearance of the messages. This is explained in
the messeji user manual.

Known Issues

Currently, there is no support for:

  • Group chats (only 1-on-1 chats)
  • Displaying names / profile pictures next to the messages

These features are currently not planned to be implemented. However, if you need
them, create an issue and I'll look
into it (if I have the time).