What's new in asciinema - part III: the server Published on 12 Oct 2023 by Marcin Kulik

This is part 3 in the “what’s new in asciinema” series. In the first part we looked at the player, in the second part we covered the recorder, and in this one we’ll focus on the server.

Let’s begin with OPS-related stuff.

asciinema.org uses email-based login flow, where you get short lived login link (some call it “magic link”). Over last 10 years that email was delivered via several email providers. From the top of my head, roughly in order: Mailgun, Gmail, Sendgrid, Fastmail. I won’t go into details of why I’ve been switching from X to Y, as the reason was different in each case, but overall there was always something (and when it wasn’t a tech issue then it was a price issue). The last switch happened a few months ago to AWS SES. It’s been reliable (so far) and ridiculously cheap. asciinema server uses Bamboo library for email delivery, and thanks to Bamboo’s pluggable adapters it was trivial to switch. If you want to use SES for email delivery with your own instance of the server then follow the instructions here.

Next, the recent integration of libcluster will ensure live features of Phoenix framework, such as LiveView and PubSub, work seamlessly in multi-node setups (like the one on asciinema.org). This will come in handy for live streaming feature which should come soon (more on that in a future post).

Concluding the admin/OPS side, I’ll mention that I moved the official docker image of the asciinema server from docker.io/asciinema/asciinema-server to ghcr.io/asciinema/asciinema-server. Docker Inc.’s recent hostility towards open-source (without which it wouldn’t have existed in the first place) didn’t feel right. While they later apologized for “doing a terrible job” it was too little too late. Damage was done, I’m not going back there. They’re gonna pull off something similar in the future. GitHub’s ghcr.io is owned by another corporation, sure, but they seem to understand the value of open-source communities better than current Docker Inc. management, therefore until they prove me wrong I’m willing to keep the container images there. It’s not that hard to migrate away if they do.

Shifting under the hood of the server, there’s been a lot of maintenance and code refactoring. In addition to preparation for more real-time features mentioned earlier, Elixir, Erlang and Phoenix, upon which the server is built, were updated to newer versions (Elixir 1.14, Erlang/OTP 25.2, Phoenix 1.7). I started converting view templates to new .heex format, which elegantly solves view component reusability and composability, while ensuring HTML syntax validity at compile-time. Super neat stuff, and I’m excited about this, even though the conversion from .eex to .heex requires extra work.

Furthermore, the server got basic WebFinger endpoint (my asciinema.org user in WebFinger lookup service). Even though it’s not very useful right now, it will become instrumental in future developments ;)

SVG previews, which are available by appending .svg to a recording URL, got support for “true color” (24-bit SGR variant): https://asciinema.org/a/335480.svg

Finally, on the UI side, you might have noticed addition of Nord theme in theme selector (both in user settings and individual recording settings), as well as new font selector, which allows using one of Nerd Fonts variants with your recordings (useful if you have fancy shell prompt with symbols/icons). Additionally, recording metadata, i.e. icons for terminal environment (OS, term type, shell) and views count, received a bit of polish. Recording index pages were updated to use an appropriate number of thumbnail columns on various screen sizes.

Lastly, markers feature of the player has been exposed on recording settings page - you can configure a list of markers by simply listing their times and labels like this:

5.0 - Intro
11.3 - Installation
32.0 - Configuration
66.5 - Tips & Tricks

This concludes the server-related improvements, and the “what’s new in asciinema” series. I hope you enjoyed it. Don’t hesitate to reach out with feedback, I’m all ears (not as much as this little guy though).

Happy recording!


Did you like it? Feel free to send me an email with your feedback to . You can also reach me on Mastodon at @ku1ik@hachyderm.io. Thanks!