Show HN: Rewindtty – Record and replay terminal sessions as structured JSON
30 points
3 days ago
| 4 comments
| github.com
| HN
debba
3 days ago
[-]
Hi HN,

I built rewindtty, a small tool in C that lets you record a terminal session and later replay it, using a simple JSON log format that includes:

- timestamp - command (user input) - output (stdout) - stderr

It works like this:

- rewindtty record session.json # Runs a shell, records the session - rewindtty replay session.json # Replays it step by step

Under the hood:

- Uses fork() to manage the pseudo-terminal - Captures stdout/stderr with timestamps - Stores everything in structured JSON for easy analysis, replay or transformation

Why I made this: I wanted a minimal tool to track terminal interactions — for debugging, documentation, and reproducibility — without relying on heavier tools or external formats.

It’s still early, but the core works and I’d love feedback or suggestions.

GitHub: https://github.com/debba/rewindtty

reply
sunscream89
3 days ago
[-]
You have scratched a long persistent itch. Good work!

And I love that you used c. Nothing against rust, or (ahem) “go”, but it’s good to see you doing something in c!

reply
debba
3 days ago
[-]
Yeah, it’s just a side project for now, but I’m hoping to make it more solid over time. As for C, I wanted to challenge myself and step away from what I usually do — try something a bit different.
reply
reagle
11 hours ago
[-]
On github, I see an asciinema tag, but no explanation of the differences?
reply
debba
10 hours ago
[-]
It's not related to asciinema, it's a totally different project. Asciinema is a much more complex and structured project than mine; mine is the result of a few hours of free time—I was looking for a lighter solution.
reply
Waraqa
12 hours ago
[-]
Have you made an online demo for the browser player? I guess it will have potential uses in tutorials
reply
debba
10 hours ago
[-]
Not for now. That's a side project and it is really new and still a bit rough around the edges; it’s only a few days old. I’ll do it soon, meanwhile if you want to contribute you’re welcome :)
reply
loloquwowndueo
13 hours ago
[-]
Is this ttyrec with json output?
reply
JdeBP
12 hours ago
[-]
No.

Because checking some of the Debian patches accrued against ttyrec, and the source to rewindtty, it seems that rewindtty does not have some of the common programming mistakes that the author of ttyrec made a quarter of a century ago.

* https://sources.debian.org/src/ttyrec/1.1.7.1-1/debian/patch...

* https://github.com/debba/rewindtty/blob/develop/src/recorder...

* https://github.com/mjording/ttyrec/blob/master/ttyrec.c#L328

rewindtty will error out if the SHELL environment variable's value does not have a directory prefix, but at least it won't outright crash. (-:

reply
JdeBP
12 hours ago
[-]
By the way, debba: execvp()/execlp() and _PATH_BSHELL out of <paths.h> as the fallback are the ways to go, here.
reply
debba
10 hours ago
[-]
Ouch sorry, I thought you meant 'it has the same features as ttyrec with JSON output.' Regarding the issue, I need to go into a bit more detail; if you like, feel free to make a PR on GitHub.
reply
debba
10 hours ago
[-]
sorry, in the last reply I told you 'yes, exactly'. I meant It has the same features as ttyrec with JSON output
reply
debba
13 hours ago
[-]
yes exactly
reply