Releases: asciinema/asciinema-server
20250722
Notable changes
- new HTTP API for management of recordings and streams
- per-user stream limit now applies to live streams only, users can have any number of dead streams
- when streaming with
--title
option the title is now set on the stream and used for stream recordings - added gruvbox-dark theme (thanks @hupfdule!)
- uploads of recordings with invalid terminal size (cols or rows less than 1) are now rejected
- upgraded the player and avt to latest versions
- added audio URL attribute to recordings and streams (
audio_url
in the API), which will be used by the upcoming version of the player - fixed SMTP connection issues with TLS (#463, #464)
- fixed oEmbed endpoint crash when looking up non-existing recordings
- fixed duration calculation for very short (single-event) recordings
- code cleanup, lots of new tests
Breaking changes
- streaming related API endpoints used by asciinema CLI 3.0 RC3 (and earlier RCs) have been removed - if you use one of these RC versions then upgrade your CLI to the latest RC to be able to stream
- DB name used in dev env has been changed from
asciinema_development
toasciinema_dev
- runpsql -U postgres asciinema_development
and executeALTER DATABASE asciinema_development RENAME TO asciinema_dev
Upgrading
No manual changes needed other than bumping the container image version number as shown here.
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.
20241103
Notable changes
- upgraded the player and avt to latest versions
- disabled auto-update (at runtime) of timezone database file used by tzdata library, fixing deployment to read-only filesystems (re #453)
- updated link to the latest CLI RC pre-release binary on the live stream page
- updated live stream API endpoint path/method, needed for recent changes in the upcoming CLI 3.0
- UI tweaks
Upgrading
No manual changes needed other than bumping the container image version number as shown here.
20240627
Notable changes
- new identicons based avatars (see below)
- redesigned the filtering and sorting on the Explore page, for better use of horizontal space
- improved the iframe embed: matching background color, smarter margin, better footer text look
- upgraded the player and avt to the latest version - fixes rendering of RGB colors recorded on certain terminals (Kitty, WezTerm)
- fixed centering of the logo in embeddable SVG previews
The new identicons avatars are now used by default, replacing previously used gravatar.com. Shout out to @waseigo for his awesome identicon Elixir library.
This change was made to make asciinema server less dependent on 3rd party services. In fact, as of this release, asciinema server doesn't depend on any 3rd party (other than a SMTP server), and is a 100% local and self-contained service.
New DEFAULT_AVATAR
configuration variable can be used to select avatar implementation, accepting the following values:
identicon
(default)gravatar
Upgrading
If you wish to keep using gravatar.com then set DEFAULT_AVATAR=gravatar
environment variable.
Beside that, no manual changes are needed, other than bumping the container image version number as shown here.
20240523
Notable changes
- extended recording visibility to 3 options: public, unlisted, private (see below)
- added account deletion option, available from user settings page
- renamed
SMTP_FROM_ADDRESS
andSMTP_REPLY_TO_ADDRESS
config options toMAIL_FROM_ADDRESS
andMAIL_REPLY_TO_ADDRESS
(the old names are kept for backward compatibility) - improved reliability of mail delivery (upgraded SMTP client lib, surfaced send failures in the UI)
- UI tweaks
Old recording visibility options are mapped to the new ones as follows:
- previous
public
-> newpublic
- previous
secret
-> newunlisted
- same behavior, more appropriate name
The new private
visibility is now truly private, i.e. accessible only by the (logged-in) author of the recording. Note that private
recordings cannot be shared in any way; also they can't be embedded on external websites.
Upgrading
No manual changes needed other than bumping the container image version number as shown here.
20240515
Notable changes
- user account email addresses are now case-insensitive and automatically lower-cased (see Upgrading section below)
- extended live stream visibility to 3 options: public, unlisted, private
- fixed memory leak caused by telemetry_metrics_prometheus (which has been removed, for now)
- SVG preview images are now cacheable (
Cache-Control: public, max-age: ...
) - improved recording instructions on new user profile, added streaming instructions there too
- fixed embed script for private recordings
- added support for use of Nerd fonts in embed iframes (thanks @jonpetersathan!)
- added support for use of original terminal themes in embed iframes
- improved duration formatting on the live stream card on user profile
- recording files are now fetched via local path instead of absolute URL - easier for reverse proxies / front web servers
- various code cleanups and refactorings
Upgrading
For most folks no manual changes are needed, other than bumping the container image version number as shown here.
If it happened that you signed up multiple times with the same email address but different letter casing, e.g. foo@example.com and Foo@example.com, then the duplicate account is automatically renamed to 1_foo@example.com upon first boot of this version.
In such case, and if the other account had recordings which you'd like to access, you can merge the accounts by:
- attaching to the Elixir shell in the asciinema server container, e.g.:
docker-compose exec asciinema bin/asciinema remote
- merging the accounts by executing:
Asciinema.merge_accounts("1_foo@example.com", "foo@example.com")
Asciinema.merge_accounts
merges the first account (first arg) into the second account (second arg).
Example:
$ docker-compose exec asciinema bin/asciinema remote
Erlang/OTP 25 [erts-13.1.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit]
Interactive Elixir (1.14.3) - press Ctrl+C to exit (type h() ENTER for help)
iex(app@1.2.3.4)1> Asciinema.merge_accounts("1_foo@example.com", "foo@example.com")
{:ok, %User{...}}
I've already merged duplicate accounts on asciinema.org.
20240428
Notable changes
- exposed live streams in the UI: "Stream" link in the user menu, stream card on user profile
- upgraded live streaming endpoints to support latest asciinema CLI 3.0 RC1
- vastly improved robustness of live streaming
- added "Use the actual terminal theme when available" option to live stream settings
- added "Prefer original terminal theme" option to user settings
- upgraded the js player to the latest version
- made the flash messages disappear automatically or upon clicking "x"
- ... and many other code and test improvements
Upgrading
No manual changes needed other than bumping the container image version number as shown here.
20240324
Notable changes
- greatly improved recording preview cards and SVG embed images with regards to character rendering accuracy and grid alignment - ascii drawing, box elements, Powerline, kanji and emojis render much much better now
- fixed the behaviour of
UNCLAIMED_RECORDING_TTL
config option to match the docs - upgraded the player to the latest version
- improved the user settings page: split into sections, improved labels and hints
- added account-level font family setting
- improved wording around CLI authentication
- enabled use of the original (embedded) recording theme (when available)
- fixed styling/positioning of the sorting links on the Explore page
- improved snapshot (preview card) cropping algorithm
- added multi-platform build step (thanks @aemr3!)
A taste of the rendering improvements:
Upgrading
No manual changes needed other than bumping the container image version number as demonstrated here.
20240203
Notable changes
- added configuration option for upload size limit - see doc
- changed automatic deletion of unclaimed recordings to a 2-step process - see doc
- added new speed setting to the recording settings page
- removed support for legacy uploads (pre-version 1)
- improved email sending reliability
- implemented honeypot fields in the login form to reduce signup spam
- updated the "welcome" recording
- added forum link to the navbar
- performed internal code maintenance and dependency upgrades
- removed example docker-compose.yml (see details below)
The example docker-compose.yml has been removed because there isn't one which fits all setups. Refer to the self-hosting quick-start guide and server configuration docs for example snippets to use in your own docker-compose.yml. Example Nginx config file has been removed as well. The docs now suggest use of Caddy, which is easier to configure and provides automatic HTTPS. You're free to continue using Nginx if that's what you prefer.
Upgrading
No manual changes needed other than bumping the container image version number as shown here.