Developer Voices

Asciinema: Terminal Recording Done Right (with Marcin Kulik)


Listen Later

I have a theory that only bad projects get finished — good ones keep finding new things to do. Asciinema is a case in point. What started as a way to share terminal sessions with friends has, over 14 years, grown into a full suite of tools covering recording, hosting, playback, and live streaming — and been rebuilt multiple times along the way. So what does it actually take to record and replay a terminal session faithfully in a browser?

Joining us for this conversation is Marcin Kulik, Asciinema's creator. The project's architecture has passed through almost every interesting corner of software engineering: a Python recorder built around pseudo-terminals (PTY), a ClojureScript terminal emulator for the browser that hit performance limits with immutable data structures and garbage collection pressure, a move to Rust compiled to WebAssembly, a Go experiment that didn't last, and a new Rust CLI for concurrent live streaming backed by an Elixir/Phoenix server that calls Rust code via NIFs. The same Rust terminal emulator library now powers all three components — the browser player, the server, and the CLI.

If you've ever looked at those terminal animations embedded in a README and wondered what's underneath them, or if you're interested in how a passionate open-source developer navigates 14 years of language changes and rewrites, this conversation has plenty to offer.

---

Support Developer Voices on Patreon: https://patreon.com/DeveloperVoices

Support Developer Voices on YouTube: https://www.youtube.com/@DeveloperVoices/join

Asciinema: https://asciinema.org

Asciinema Docs: https://docs.asciinema.org

Asciinema CLI (GitHub): https://github.com/asciinema/asciinema

Asciinema Player (GitHub): https://github.com/asciinema/asciinema-player

Asciinema Server (GitHub): https://github.com/asciinema/asciinema-server

AVT - Rust terminal emulator library: https://github.com/asciinema/avt

vt-clj - the original ClojureScript terminal emulator: https://github.com/asciinema/vt-clj

Paul Williams' ANSI/VT100 State Machine Parser: https://vt100.net/emu/dec_ansi_parser

Rust: https://www.rust-lang.org

WebAssembly: https://webassembly.org

SolidJS: https://www.solidjs.com

Elixir: https://elixir-lang.org

Phoenix Framework: https://www.phoenixframework.org

Rustler (Rust NIFs for Elixir/Erlang): https://github.com/rusterlium/rustler

Clojure: https://clojure.org

ClojureScript: https://clojurescript.org

cmatrix: https://github.com/abishekvashok/cmatrix

Marcin Kulik on GitHub: https://github.com/ku1ik

Marcin Kulik on Mastodon: https://hachyderm.io/@ku1ik

Marcin Kulik on asciinema.org: https://asciinema.org/~ku1ik

"They're Made Out of Meat" demo: https://asciinema.org/a/746358

Kris on Bluesky: https://bsky.app/profile/krisajenkins.bsky.social

Kris on Mastodon: http://mastodon.social/@krisajenkins

Kris on LinkedIn: https://www.linkedin.com/in/krisjenkins/

---

0:00 Intro

2:28 What Is Asciinema?

4:48 How Asciinema Started

9:51 The Problem of Parsing Terminal Output

14:07 Building a Cross-Platform Recorder

17:01 Rewriting the Parser in ClojureScript

22:19 The Hidden Complexity of Terminals

29:28 Rendering Terminals in the Browser

39:47 When ClojureScript Can't Keep Up

45:28 Moving to Rust and WebAssembly

52:01 The Go Experiment

57:43 Adding Live Terminal Streaming

1:07:12 Can You Scrub Back in a Live Stream?

1:14:40 Editing Recordings

1:25:27 Outro

...more
View all episodesView all episodes
Download on the App Store

Developer VoicesBy Kris Jenkins

  • 5
  • 5
  • 5
  • 5
  • 5

5

30 ratings


More shows like Developer Voices

View all
Software Engineering Radio - the podcast for professional software developers by team@se-radio.net (SE-Radio Team)

Software Engineering Radio - the podcast for professional software developers

273 Listeners

The Changelog: Software Development, Open Source by Changelog Media

The Changelog: Software Development, Open Source

288 Listeners

Software Engineering Daily by Software Engineering Daily

Software Engineering Daily

624 Listeners

Talk Python To Me by Michael Kennedy

Talk Python To Me

583 Listeners

Syntax - Tasty Web Development Treats by Wes Bos & Scott Tolinski - Full Stack JavaScript Web Developers

Syntax - Tasty Web Development Treats

990 Listeners

CoRecursive: Coding Stories by Adam Gordon Bell - Software Developer

CoRecursive: Coding Stories

189 Listeners

Machine Learning Street Talk (MLST) by Machine Learning Street Talk (MLST)

Machine Learning Street Talk (MLST)

99 Listeners

Dwarkesh Podcast by Dwarkesh Patel

Dwarkesh Podcast

551 Listeners

Two's Complement by Ben Rady and Matt Godbolt

Two's Complement

31 Listeners

devtools.fm: Developer Tools, Open Source, Software Development by Andrew Lisowski, Justin Bennett

devtools.fm: Developer Tools, Open Source, Software Development

25 Listeners

Software Unscripted by Richard Feldman

Software Unscripted

29 Listeners

Oxide and Friends by Oxide Computer Company

Oxide and Friends

67 Listeners

Latent Space: The AI Engineer Podcast by Latent.Space

Latent Space: The AI Engineer Podcast

98 Listeners

Rust in Production by Matthias Endler

Rust in Production

25 Listeners

Fallthrough by Fallthrough Media

Fallthrough

13 Listeners