---
name: LiveKit Egress
slug: livekit-egress
type: github
source_url: https://github.com/livekit/egress
organization: LiveKit
organization_slug: livekit
total_releases: 21
latest_version: v1.12.0
latest_date: 2025-12-05
last_updated: 2026-04-19
tracking_since: 2022-05-19
canonical: https://releases.sh/livekit/livekit-egress
organization_url: https://releases.sh/livekit
---

<Release version="v1.12.0" date="December 5, 2025" published="2025-12-05T19:15:06.000Z" url="https://github.com/livekit/egress/releases/tag/v1.12.0">
## Version 1.12.0

 ## Changelog

 ### Added
* Ability to request dot file dumping through gst callbacks (#1072)
* Invoke UpdateEgress on each stream retry attempt (#1055)
* Logging for file outputs exceeding set of file size thresholds (#1079)
* Ability for configuring max file size in bytes as a storage quota (#1080)
* Setting chrome.log debug file size limits & rotation (#1081)

 ### Fixed
* Update eslint for js-yaml vuln fixes (#1074)
* Update protocol and x/crypto (#1082)
* Make stats meaningful for SRT and prevent log noise (#1075)
* Fix for racy addition of app sources (#1073)
* Ensure pipeline is at least in PAUSED state before pushing data to app sources by (#1076)
</Release>

<Release version="v1.11.0" date="November 17, 2025" published="2025-11-17T23:42:20.000Z" url="https://github.com/livekit/egress/releases/tag/v1.11.0">
## Version 1.11.0

## Changelog

### Added
-  Allow setting a default role ARN for S3 upload requests (#958)
- Agent testing (#960)
- Adding audio mixer QoS stats processing (#969)
- Add content checks to file integration tests (#988)
- Basic content checks for segment tests (#990)
- Handle small audio gaps by the signal time stretching/compression instead of having discontinuities (#974)
- Adding MP3 to the supported audio types for audio only recordings (#1007)
- Adding burst estimator (#1026)
- Adding gstreamer pipeline running/playhead time accessors (#1025)
- Adding latency overrides per request types (#1050)
- Add PSRPC observability to IOInfoClient (#1056)
- Add a watchdog to shutdown egress on PSRPC failures (#1061)

### Fixed
- set status to failed when an egress is killed (#961)
- Log SDK app writer source stats on EOS (#963)
- Align test source output buffer duration with opus frame size (#966)
- disable rtcp for room composite (#971)
- Don't log every single audio discontinuity (#985)
- Switch from react-scripts to vite for egress-templates build (#989)
- Use specific template version with egress versions (#1000)
- Snap audio PTS back to the regular time grid (#1002)
- Speed up build time (#1004)
- Don't delete test results immediately - keep them for eventual after run analyisis (#1005)
- do not send eos on participant composite video tracks (#1008)
- Skip dummy video packets (#1013)
- Extend max allowed RTP timestamps diff (#1016)
- Use arrival time and one way delay estimation in PTS calculation. (#1015)
- Stair step discrete corrections of track start time (#1019)
- Update sdk to include quanitzed SRs adjustments (#1020)
- Go SDK for track synchronizer packet stats (#1021)
- Go SDK to set initial PTS to estimated PTS (#1022)
- Restore defaultRTPMaxAllowedTsDiff setting (#1023)
- Drop old samples when sample queue overflows. (#1024)
- Add controller nil checks to IPC handler (#1027)
- Update server-sdk to pull in the fix for initialize timing (#1029)
- RemoveTrack after finish. (#1030)
- Adding linters (#1033)
- Update server-sdk to pull in logs sampling fix (#1035)
- Update server-sdk to pull in the fix for ensuring no PTS regressions (#1039)
- Adding more logs around stopping pipeline (#1042)
- Update server-sdk to include the fix for sanitized SRs (#1043)
- Detect & handle missing PTS after vp9parse element (#1046)
- Adjusting UpdateEgress retry logic (#1048)
- VP9 - Drop a frame with an invalid PTS and wait for key frame  (#1047
- Adding a workaround for baseparse gstreamer bugs which could produce buffer with no valid PTS (#1049)
- Fix filename templating in case of multi output (#1051)
- Log egressID in io client worker (#1054)
- Pay attention to context deadline on IO update (#1062)
- Close grpc ClientConn in the main process (#1064)
- Logging significant IPC callbacks (#1066)
- retry S3 upload on 409 or 429 (#1069)
- Disable scenecut when keyframe interval is set (#1070)
</Release>

<Release version="v1.10.0" date="August 6, 2025" published="2025-08-06T13:19:52.000Z" url="https://github.com/livekit/egress/releases/tag/v1.10.0">
## Egress version 1.10.0

# Changelog

- fix segment panic for very large durations (https://github.com/livekit/egress/pull/869)
- update logger (https://github.com/livekit/egress/pull/870) (https://github.com/livekit/egress/pull/874) (https://github.com/livekit/egress/pull/878) (https://github.com/livekit/egress/pull/894) (https://github.com/livekit/egress/pull/898) (https://github.com/livekit/egress/pull/918)
- fix panic on reading stream stats (https://github.com/livekit/egress/pull/881)
- fix for sdk room composite (https://github.com/livekit/egress/pull/883)
- do not log an empty string an error for glib errors/warnings (https://github.com/livekit/egress/pull/885)
- use core.Fuse in the source logic (https://github.com/livekit/egress/pull/888)
- do not fail image output if no dimension is set (https://github.com/livekit/egress/pull/890)
- support extra webhooks in egress requests (https://github.com/livekit/egress/pull/891)
- fix race between track subscriptions and audio bin creation (https://github.com/livekit/egress/pull/892)
- chrome logging + extended logging controls (https://github.com/livekit/egress/pull/897)
- add support for IMAGE_SUFFIX_NONE_OVERWRITE (https://github.com/livekit/egress/pull/895)
- update dependency @babel/runtime to v7.26.10 [SECURITY] (https://github.com/livekit/egress/pull/875)
- update all deps and go version (https://github.com/livekit/egress/pull/901)
- update template deps (https://github.com/livekit/egress/pull/902)
- update jitter buffer (https://github.com/livekit/egress/pull/903)
- fix audio gaps (https://github.com/livekit/egress/pull/905)
- use the livekit go-gst fork (https://github.com/livekit/egress/pull/904) (https://github.com/livekit/egress/pull/906) (https://github.com/livekit/egress/pull/933)
- update nth-check template dep (https://github.com/livekit/egress/pull/907)
- improved update management (https://github.com/livekit/egress/pull/909)
- SDK timing (https://github.com/livekit/egress/pull/910)
- update README yaml config regarding storage (https://github.com/livekit/egress/pull/916)
- move latencies to config (https://github.com/livekit/egress/pull/915)
- remove process handler on launch failure (https://github.com/livekit/egress/pull/917)
- nil check primary error (https://github.com/livekit/egress/pull/919)
- fix json ignore (https://github.com/livekit/egress/pull/920)
- fix audio mixer (https://github.com/livekit/egress/pull/924)
- adopt storage version of blob uploader (https://github.com/livekit/egress/pull/925)
- update storage, handler logger (https://github.com/livekit/egress/pull/930)
- feat(cli): update to urfave/cli/v3 (https://github.com/livekit/egress/pull/928)
- limit pulse clients (https://github.com/livekit/egress/pull/931)
- allow setting GST_DEBUG env at runtime (https://github.com/livekit/egress/pull/876)
- add GetAvailableMemory to monitor (https://github.com/livekit/egress/pull/932)
- fix azure urls (https://github.com/livekit/egress/pull/935)
- memory updates (https://github.com/livekit/egress/pull/936)
- delete the handler temporary context rehardless of the handler termination status (https://github.com/livekit/egress/pull/934)
- increase audio alignment threshold (https://github.com/livekit/egress/pull/937)
- fix race in audio track subscription (https://github.com/livekit/egress/pull/938)
- add duration to presigned urls (https://github.com/livekit/egress/pull/941)
- use gstreamer 1.24.12 (https://github.com/livekit/egress/pull/943)
- allow uploading to S3 using AssumeRole (https://github.com/livekit/egress/pull/940)
- update pion dependencies (https://github.com/livekit/egress/pull/946)
- fix for AssumeRole credential insertion (https://github.com/livekit/egress/pull/948)
</Release>

<Release version="v1.9.0" date="January 7, 2025" published="2025-01-07T00:53:43.000Z" url="https://github.com/livekit/egress/releases/tag/v1.9.0">
## Version 1.9.0

## Changelog

### Added

- Support for backup storage (#792) (#793) (#795) (#825)
- Log per egress memory usage (#821)
- Support for participant egress screen share (#829)
- Use the SDK to handle audio only room composite requests with the default template (#817)

### Fixed

- Skip AWS logging on successful upload (#762)
- Reduce duplicate test runs (#763)
- Fix s3logger memory usage (#764)
- Disable SDK Async-connect (#768)
- Faster startup (#769)
- Queue 15 min worth of segments (#770)
- Use config value for max upload queue size (#772)
- Disable-features Translate in headless Chrome (#775)
- Add a back off top laylist upload retries (#779)
- Remove audio with image-only egress (#782)
- Adopt AWS SDK v2 (#783)
- Force CBR for streams output (#785)
- Don't update bucket region with custom endpoints (#786)
- Set a region field when using a custom endpoint (#788)
- Ignore websocket close errors (#790)
- Avoid recording room composite before video is decoded (#806)
- Fix max concurrent web check (#810)
- Use Ubuntu 24.04 base image (#811)
- Move IO timeouts to config (#814)
- Upgrade to pion/webrtc v4 (#818)
- Kill highest memory egress when OOM (#826)
- Udpate livekit JS dependencies and call setRoom in default template (#835)
</Release>

<Release version="v1.8.4" date="May 21, 2024" published="2024-05-21T05:37:22.000Z" url="https://github.com/livekit/egress/releases/tag/v1.8.4">
### Changed
* Preset 0 (720p, 30fps) is now the default recording option (#640)

### Fixed
* Zombie processes eventually causing chromium or X to fail (#673)
* Pipeline getting stuck with Participant composite when a track is unpublished (#635, #644)
* ImageOutputs broken when used with other outputs (#642)
* Fixes to jitter buffer and track synchronizer for track/track composite egress (#643, #660)
* Race on shutdown causing some final updates not to send (#666, #667, #674)
</Release>

<Release version="v1.8.2" date="March 8, 2024" published="2024-03-08T00:37:37.000Z" url="https://github.com/livekit/egress/releases/tag/v1.8.2">
### Added
* Audio-only cpu requirements (#597)
* is_disabled prometheus metric for terminating nodes (#622)
* Details field in EgressInfo (#627)

### Fixed
* Race condition with deadlock (#608)
* Critical gstreamer error with Participant egress (#624, #626, #628)
* Keyframe intervals for segments and streams (#611, #618)
* multi output use case with image outputs and local image save path (#614)
* Force IPv4 with GCP client (#623)
* Marking aborted egress as failed (#620, #625)
</Release>

<Release version="v1.8.0" date="January 13, 2024" published="2024-01-13T17:48:35.000Z" url="https://github.com/livekit/egress/releases/tag/v1.8.0">
Requires livekit-server v1.5.1+

### Fixed
- Track/Track composite failures when video track begins muted (#524)
- Segment upload failures if queue gets backed up (#509)
- Sync issues (#498, #507)
- Stream reconnections (#503)
</Release>

<Release version="v1.7.9" date="September 13, 2023" published="2023-09-13T19:20:31.000Z" url="https://github.com/livekit/egress/releases/tag/v1.7.9">
### Fixed
* Pulse not closing properly eventually causing all room composite and web egress to fail (#486)
</Release>

<Release version="v1.7.8" date="September 8, 2023" published="2023-09-08T22:39:36.000Z" url="https://github.com/livekit/egress/releases/tag/v1.7.8">
### Fixed
* Improved RTMP retry policy (#444)
* Pipeline frozen errors (#459)
* Websocket egress marked as failed after being stopped (#450)
* Negative waitgroup counter bug with track/track composite egress (#463)

### Added
* Supports decoding vp9 tracks with track/track composite egress (#465)

### Changed
* Chrome sandboxing is now a config option, disabled by default (#481)
</Release>

<Release version="v1.7.5" date="July 5, 2023" published="2023-07-05T22:12:22.000Z" url="https://github.com/livekit/egress/releases/tag/v1.7.5">
**NOTE**: as of v1.7.5, chrome sandboxing is enabled for increased security. As a result, the service is no longer run as `root`
inside docker, and all Egress deployments (even local) require `--cap-add=SYS_ADMIN` in your `docker run` command.
Without it, all web and room composite egress will fail with a `chrome failed to start` error.

### Fixed
* Hang if EndRecording called before StartRecording (#392)
* Panic on concurrent websocket writes
* CPU overscheduling (leads to audio loss and other issues) (#396, #403, #406)
* Hang on gstreamer internal deadlock (#407)

### Added
* Include logs from gstreamer (#398, #401, #411)
* Save space by deleting local segments once uploaded (#405)

</Release>

<Release version="v1.7.2" date="June 5, 2023" published="2023-06-05T18:23:12.000Z" url="https://github.com/livekit/egress/releases/tag/v1.7.2">
## Added
* AwaitStartSignal option for web egress (if true, it will not start until your website logs `START_RECORDING`)

## Fixed
* New jitter buffer to help with track/track composite latency issues
* Updated track synchronizers to help with a/v sync issues
* Track websocket egress will send pings to keep websocket connection alive
* An instance will not schedule above 80% CPU (maxing out CPU causes issues)
* An instance will now accept a request if it's idle and requirement == total CPUs (for example, room_composite_cost = 4 and your pods have 4 CPU)

## Changed
* Redacted stream keys in logs will show the starting and ending characters so they can be identified
</Release>

<Release version="v1.7.0" date="April 27, 2023" published="2023-04-27T00:38:46.000Z" url="https://github.com/livekit/egress/releases/tag/v1.7.0">
## Fixed

* State management bugs (#292, #333)
* Service stops replying for existing egress on shutdown (#297)
* Server panics (#301, #320, #348)
* Track sync/timestamping issues (#305, #313)
* Cost config not respected (#346)

## Updated

* Templates use livekit-components (#323, #350)
* Better input validation (#322, #328) 
</Release>

<Release version="v1.6.0" date="March 9, 2023" published="2023-03-09T22:59:54.000Z" url="https://github.com/livekit/egress/releases/tag/v1.6.0">
## Added

* Multiple outputs enabled (max one of each type) - for example, you can stream to multiple providers and store an mp4 all with one egress (currently only available by using twirp directly, sdk updates coming soon)
* Added timestamp suffix option with segmented file output, to match Agora's TS filename conventions

## Fixed

* VP8 resolution change issue with track egress (`Caps changes not supported by Mastroska` error)
* Updated GStreamer to v1.22.0 for improved stability 
* New internal communication system ([PSRPC](https://github.com/livekit/psrpc)) with improved reliability - can be turned on by setting [UsePSRPC](https://github.com/livekit/livekit/blob/master/pkg/config/config.go#L253) to `true` in LiveKit Server config
* Various A/V sync and reliability improvements

## Changed

* Google cloud storage config `Credentials` now takes a string instead of bytes to match the egress config


</Release>

<Release version="v1.5.3" date="December 16, 2022" published="2022-12-16T20:46:12.000Z" url="https://github.com/livekit/egress/releases/tag/v1.5.3">
## Version 1.5.3

## Changelog
### Fixed

- Config refactoring https://github.com/livekit/egress/pull/173 & https://github.com/livekit/egress/pull/174
- Fix track websocket test https://github.com/livekit/egress/pull/176
- Better S3 credentials handling and validation https://github.com/livekit/egress/pull/177
- Fix issue where egress in state STARTING or ACTIVE would never change to COMPLETED
- Do not log failures due to misconfigured egress requests with "error" severity https://github.com/livekit/egress/pull/183
- Update logging library https://github.com/livekit/egress/pull/185
- Redact upload secrets before sending status events https://github.com/livekit/egress/pull/186
- Fix failure to unload pulseaudio plugin causing eventual pulseaudio failure.

### Added
- Add process manager object to start and manage handler processes https://github.com/livekit/egress/pull/175
- Shutdown service if we hit a fatal error, such as pulseaudio failing https://github.com/livekit/egress/pull/181
- Log Chrome errors https://github.com/livekit/egress/pull/182
</Release>

<Release version="v1.5.2" date="November 19, 2022" published="2022-11-19T03:43:46.000Z" url="https://github.com/livekit/egress/releases/tag/v1.5.2">
## Changelog
### Fixed
- support for running on linux systems with no cgroup support https://github.com/livekit/egress/pull/169
- CPU usage ratio reporting when a cgroup CPU quota is set https://github.com/livekit/egress/pull/169
- H264 subscription support with web composite exports on arm64 https://github.com/livekit/egress/pull/171
</Release>

<Release version="v1.5.1" date="November 9, 2022" published="2022-11-09T21:38:48.000Z" url="https://github.com/livekit/egress/releases/tag/v1.5.1">
## Changelog
### Fixed
- support for older linux kernels with cgroup v1 #155
- default HLS segment and playlist filename #166
- S3 upload metadata #156
- fix for disabling storing manifest #159
- interaction with Digital Ocean S3 Implementation #162

### Added
- support for Aliyun OSS storage backend #152
- support for web egress #155
</Release>

<Release version="v1.4.0" date="September 12, 2022" published="2022-09-12T23:37:02.000Z" url="https://github.com/livekit/egress/releases/tag/v1.4.0">
### Fixed
- Choppy audio when streaming to Youtube (#107)
- Added support for CJK unicode characters in templates (#98)
- Allow query parameters in custom template base (#99)

### Changed
- Upgraded Gstreamer from 1.18.5 to 1.20.3 (#102)
- Upgraded default layouts (#100)
</Release>

<Release version="v1.3.0" date="August 31, 2022" published="2022-08-31T23:06:57.000Z" url="https://github.com/livekit/egress/releases/tag/v1.3.0">
### Fixed
- Rare freezing and/or segmentation faults, primarily with track composite (#92) (#93) (#94)

### Changed
- Egress stopped due to session limit now returns `LIMIT_REACHED` status instead of `FAILED` (#90)
- Track egress for vp8 tracks will output a .webm file instead of .ivf (#96)
</Release>

<Release version="v1.2.0" date="August 18, 2022" published="2022-08-18T06:21:07.000Z" url="https://github.com/livekit/egress/releases/tag/v1.2.0">
### Added
- Support for session timeouts (#76)
- Redis sentinel support (#71)

### Fixed
- File upload not running with track egress (#70)
- Bug where StopEgress RPCs return "no response" for track and track composite egress (#71)
- Failure when track is not immediately available with track and track composite egress (#72)
- Test suite reliability, along with testing cloud uploads (#71)

</Release>

<Release version="v1.1.0" date="August 4, 2022" published="2022-08-04T06:41:13.000Z" url="https://github.com/livekit/egress/releases/tag/v1.1.0">
### Added
- HLS segmented file output (#38 #41 #42 #68)
- Configurable CPU costs for accepting requests (#47)
- Redis TLS (#54)
- Configurable temp dir for file writes (#55)
- EgressInfo contains RoomName (#64)

### Fixed
- Redis channel full error with long running and/or frequent egress (#33)
- Negative duration on aborted egress (#36)
- X11 server crash on rtmp output failure (#50)
- Potential file collisions while writing (#51)
- Incorrect filename in FileInfo (#66)

### Changed
- Each egress now runs in its own process to avoid potential security holes (#37)
- Retry file uploads on failure (#39 #56)
- Improved room composite startup speed (#57)
- Updated base image to Ubuntu 22.04 (#65)

</Release>

<Pagination page="1" total-pages="2" total-items="21" next="https://releases.sh/livekit/livekit-egress.md?page=2" />
