20250509
This is quite a significant release with lots of good stuff!
Notable changes
Highlights:
- added support for asciicast v3 recording format
- added new stream management page (
/user/streams
), accessible from the profile page and the session dropdown menu - added basic user management and background job introspection to the admin endpoint
- recording and stream pages now use a background color matching terminal background color (darker shade of it) for greater immersion
- added "Past recordings" section to the stream page (see
STREAM_RECORDING
below) - added terminal version info (from XTVERSION query) to the recording and stream pages
- improved the onboarding instructions on new user's profile page
- new config option
UPLOAD_AUTH_REQUIRED
, to require authentication for all uploads - new config option
UPLOAD_PATH_TPL
, which allows using a custom directory structure for uploaded recordings (see Breaking changes section below) - new config option
STREAM_RECORDING
, which lets saving all streams into regular recordings - new config options
DEFAULT_RECORDING_VISIBILITY
/DEFAULT_STREAM_VISIBILITY
, for setting default recording/stream visibility (overridable by user-level setting) - new config options
DEFAULT_STREAMING_ENABLED
/DEFAULT_STREAM_LIMIT
, for enabling/disabling streaming for new users (overridable by admin-only user-level setting)
Improvements to live streaming:
- leaner streaming protocol - uses delta coding for timestamps, LEB128 encoding for all integers
- implemented WebSocket subprotocol negotiation for stream producer and consumer endpoints for future-proofing / backward compat
- more robust handling of stream producer (re)connections
Other changes:
- upgraded the player and avt to latest versions
- upgraded compilers used for Docker build - Elixir version to 1.18, Erlang/OTP to 26.2, Rust to 1.83
... and tons of other improvements and fixes.
Breaking changes
In relation to the new UPLOAD_PATH_TPL
config option, the default upload path for recordings in the file store have changed in this release:
previous: asciicasts/{shard}/{id}.{ext}
new: recordings/{username}/{year}/{month}/{day}/{id}.{ext}
For example:
previous: asciicasts/09/72/12790.cast
now: recordings/ku1ik/2025/04/04/12790.cast
This is a breaking change only if you were accessing the recording files directly and assuming the old directory structure. If you didn't then there's nothing to worry about. The files are automatically migrated via a background job, which runs daily, so there's no need to manually move anything.
Upgrading
No manual changes needed other than bumping the container image version number as shown here.