What's Changed
This release marks the stabilization of the load balancer. It's been running in production for quite some time now, and I'm pretty confident that it doesn't break anything.
- balancer: refactor remove_room to reduce errors in logs by @dyc3 in #1674
- balancer: fix room unloads sometimes causing canonical room mappings to get removed by @dyc3 in #1675
- server: gossip loaded rooms immediately on balancer connect by @dyc3 in #1673
- balancer: add another routing unit test by @dyc3 in #1676
- tests: add test for balancers unloading rooms by @dyc3 in #1672
- client: fix trusted user icon not rendering in user list by @dyc3 in #1677
- client: only send playback status updates if status changes by @dyc3 in #1678
- client: allow short passwords in dev mode by @dyc3 in #1679
- add permission:
manage-queue.play-nowby @dyc3 in #1680 - server: minor refactor to how permissions are checked by @dyc3 in #1681
- client: fix PermissionsEditor not rendering the actual permissions of the room by @dyc3 in #1683
- client: refactor components to make them more simple by @dyc3 in #1682
- jobs: update chunk size by @dyc3 in #1686
- vis: fix activity animations to stay confined to their own panel by @dyc3 in #1687
- vis: TopologyView: update node packing threshold by @dyc3 in #1688
- vis: refactor activity animations into a hook by @dyc3 in #1689
- vis: add
balancer_idto events by @dyc3 in #1690 - tests: update chatty-users load test by @dyc3 in #1692
- tests: tweak chatty-users again by @dyc3 in #1693
- balancer: degrade more gracefully when overloaded with new clients by @dyc3 in #1694
- deps: upgrade hyper to 1.3.0 by @dyc3 in #1695
- client: fix video controls hanging out of the player by @dyc3 in #1696
- deploy: increase traffic split to 50% by @dyc3 in #1697
- deps: update hyper to 1.3.1 by @dyc3 in #1698
- client: refactor LocaleSelector to be less complex by @dyc3 in #1699
- balancer: filter streamed events based on whether or not the collector is actually connected by @dyc3 in #1700
- Fix bug where putting more than one panels with streaming events in a dashboard causes them to error out. by @Victor-M-Giraldo in #1701
- vis: TopologyView: make region box padding configurable by @dyc3 in #1702
- reimplement
ProcessedTexttests by @dyc3 in #1704 - vis: TopologyView: increase font size of region names by @dyc3 in #1703
- vis: create a legend by @moreno-michael in #1668
- rework useColorProvider hook by @dyc3 in #1705
- vis: tweak legend appearance by @dyc3 in #1706
- add new bbox util methods by @dyc3 in #1707
- vis: prevent excessive rerendering by @dyc3 in #1708
- vis: simplify useD3Zoom by @dyc3 in #1709
- vis: TreeView: zoom to fit whole tree by @dyc3 in #1710
- deploy: increase client split to 70% by @dyc3 in #1711
- vis: TreeView: only auto zoom if there has been no user interaction by @dyc3 in #1712
- vis: TopologyView: add auto zoom to fit diagram by @dyc3 in #1713
- server: add
ott_websocket_kick_close_codesmetric by @dyc3 in #1715 - balancer: add
balancer_client_websocket_close_codesmetric by @dyc3 in #1716 - vis: improve initial zoom levels by @dyc3 in #1717
- vis: remove "global" from panel options by @dyc3 in #1718
- vis: TreeView: fix auto zoom sometimes cutting off balancer nodes by @dyc3 in #1719
- deploy: increase client split to 85% and switch to nginx alpine image by @dyc3 in #1720
- vis: fix color assignments sometimes being non unique by @dyc3 in #1721
- update spanish localization by @Victor-M-Giraldo in #1722
- deploy: tweak concurrency limits for balancer by @dyc3 in #1724
- server: disconnect from balancers on shutdown to make sure we don't send room unloaded close codes by @dyc3 in #1725
- deploy: fully switch to the balancer for all clients by @dyc3 in #1723
- balancer/server: fix monolith restarts causing all clients to get kicked and not recover completely by @dyc3 in #1729
- ci: temporarily disable prod deployments by @dyc3 in #1730
- deploy: staging: use minrooms selector by @dyc3 in #1726
- balancer: fix leaking BalancerClients by @dyc3 in #1728
- balancer: refactor polling_interval and reduce default to 5 seconds by @dyc3 in #1727
- balancer: actually fix leaking clients on monolith leave by @dyc3 in #1731
- balancer: refactor remove_client to be more lenient by @dyc3 in #1732
- collector: handle websocket pings by @dyc3 in #1733
- collector: handle websocket errors better by @dyc3 in #1734
- vis: fix datasource opening tons of websocket connections by @dyc3 in #1736
- deploy: switch to bluegreen deploy strategy by @dyc3 in #1737
- server: fix BalancerClients not getting cleaned up on room unloads by @dyc3 in #1744
- balancer: avoid sending close frame twice by @dyc3 in #1743
- remove
balancer-testercrate by @dyc3 in #1745 - remove
ws-fuzzcrate by @dyc3 in #1746 - dev: add vscode setting to disable sync button because its bad by @dyc3 in #1747
- balancer: add random monolith selector by @dyc3 in #1748
- tests: add monolith-restarts load test by @dyc3 in #1749
- deploy: prod: switch to HashRing selector by @dyc3 in #1750
- balancer: add UnloadReason by @dyc3 in #1741
- server: handle UnloadReason for room unloads by @dyc3 in #1742
- balancer: add Region type by @dyc3 in #1751
- balancer: implement Region type by @dyc3 in #1752
- balancer: track client edge region by @dyc3 in #1753
- deploy: reenable prod deployments by @dyc3 in #1754
- server: ensure balancer connections get closed before unloading rooms on shutdown by @dyc3 in #1755
- Switch to using zod for validation for patch endpoint. by @Victor-M-Giraldo in #1579
- tests: reimplement
PermissionsEditortests by @dyc3 in #1756 - client: visually simplify create room form by @dyc3 in #1757
- balancer: HashRing: repeat nodes on ring to balance better by @dyc3 in #1758
- server: add
ott_balancer_connectionsmetric by @dyc3 in #1759 - client: make restore queue setting dropdown same size as others by @dyc3 in #1761
- server: send details of zod validation errors by @dyc3 in #1763
- client: upgrade vuetify to 3.5.17 by @dyc3 in #1764
- ci: add job to compare bundle size in PRs by @dyc3 in #1767
- client: minor refactors for RoomSettingsForm by @dyc3 in #1762
- server: remove deprecated
permissionsfield fromGET /api/room/:roomendpoint by @dyc3 in #1768 - client: only submit changed settings to the server when changing settings by @dyc3 in #1765
- client: auto submit room settings on change by @dyc3 in #1766
- deps: remove
material-design-icons-iconfontby @dyc3 in #1769 - deps: upgrade typescript to 5.4.5 by @dyc3 in #1771
- ci: upgrade actions versions in bundle size job by @dyc3 in #1772
- client: fix vimeo player not respecting seeks by @dyc3 in #1775
- fix new clippy lints by @dyc3 in #1781
- build(deps): bump ws from 7.5.9 to 7.5.10 by @dependabot[bot] in #1780
- build(deps): bump braces from 3.0.2 to 3.0.3 by @dependabot[bot] in #1779
- RU locale update by @Insoulum in #1782
- server: refactor video highlighting, fix videos not getting highlighted in add previews by @dyc3 in #1778
- Localization for Brazilian Portuguese (pt-br) by @Kahlis in #1785
- build(deps): bump fast-loops from 1.1.3 to 1.1.4 by @dependabot[bot] in #1784
- update deps to fix rust builds by @dyc3 in #1788
- only render privacy policy on official site by @dyc3 in #1789
- tests: relax condition in flaky playback position test by @dyc3 in #1792
- client: move chat outside of youtube player bounds to comply with youtube TOS by @dyc3 in #1791
- Revert "client: move chat outside of youtube player bounds to comply with youtube TOS (#1791)" by @dyc3 in #1795
- Reapply "client: move chat outside of youtube player bounds to comply with youtube TOS (#1791)" by @dyc3 in #1796
- build(deps-dev): bump webpack from 5.89.0 to 5.94.0 by @dependabot[bot] in #1797
- upgrade axios to 1.7.4 by @dyc3 in #1799
- ci: filter ansi codes from bundle size outputs by @dyc3 in #1800
- ci: fix bundle size job not working on external PRs by @dyc3 in #1801
- client: slightly improve room layout on smaller screens by @dyc3 in #1802
- build(deps-dev): bump vite from 5.2.8 to 5.2.14 by @dependabot[bot] in #1804
- fix(client): fix incorrectly specified redirects in router by @dyc3 in #1809
- chore: fix new clippy lints by @dyc3 in #1810
- fix(server): fix crash when session token returns no data in auth middleware by @dyc3 in #1814
- fix(ci): fix broken jobs related to docker-compose by @dyc3 in #1815
- chore(docker): remove PGDATA from docker compose environment variables by @dyc3 in #1818
- fix(server/(config): add config validation for
session_secretby @dyc3 in #1820 - chore: pin rust version and fix lints by @dyc3 in #1823
- feat(client): save sponsorblock settings in browser and apply them on room creation by @mayudev in #1829
- fix(client): fix seek preview timestamp being positioned incorrectly for youtube videos. by @dyc3 in #1835
- build(deps): bump cross-spawn from 7.0.3 to 7.0.6 by @dependabot[bot] in #1822
- chore: add a log when youtube video api requests fail by @dyc3 in #1839
- feat: add "My Rooms" page to list rooms owned by the current user by @dyc3 in #1844
- feat: add button to let users delete permanent rooms by @dyc3 in #1845
- chore: fix some lints by @dyc3 in #1846
- update german language by @Sebasee009 in #1847
- ci: update node js versions by @dyc3 in #1850
- chore: update to node 20 by @dyc3 in #1857
- Fix index.ts error after Node20 Upgrade by @Sysadminfromhell in #1861
- Add Invidious Support by @Sysadminfromhell in #1862
- fix: force upgrade sodium-native to 4.3.2 to make password hashing work again on node 20 by @dyc3 in #1869
- fix(server): Correctly handle absolute URLs in HLS manifests by @WuTofu in #1873
- fix(server): Correctly handle a m3u8 manifest that contain segments directly by @WuTofu in #1875
- chore: add
@types/m3u8-parserand fix type errors by @dyc3 in #1876 - ci(bundle-size): don't fail on prs from forks by @dyc3 in #1877
- build(deps): bump @babel/runtime from 7.23.8 to 7.28.3 by @dependabot[bot] in #1856
- chore: minor lint fixes for tubi, pluto by @dyc3 in #1881
- Client: Extract HLS logic to a new HlsPlayer Component by @WuTofu in #1880
- fix: hls caption not showing when re-selecting a previously disabled track by @WuTofu in #1889
- An attempt to fix the e2e test by @WuTofu in #1890
- fix(client): reddit also uses HLS by @WuTofu in #1892
- client: Move dashjs to a new component, DashPlayer.vue, with caption support by @WuTofu in #1888
- chore(deps): minor dependency updates by @dyc3 in #1895
- server: Replace "secure-password" with "argon2" by @WuTofu in #1894
- Server: Add Field filtering for YouTube API Calls by @Sysadminfromhell in #1887
- Server: Ffprobe leak fix by @Sysadminfromhell in #1883
- chore(deps): major dependency upgrades by @dyc3 in #1896
- fix(server): Sequelize-cli now respects env files by @WuTofu in #1893
- [skip ci] Update node version to 20 in devcontainer and documentation by @WuTofu in #1900
- chore(deps): bump Cypress's version for client by @WuTofu in #1899
- refactor(client): migrate from @mdi/font to @mdi/js for smaller bundle by @WuTofu in #1901
- client: Add support for video quality selection for hls by @WuTofu in #1897
- client: add tooltips to video controls by @WuTofu in #1907
- fix(client): "auto" is not supported to show if isAutoQualitySupported is false by @WuTofu in #1906
- client: Implement video quality selection for dash by @WuTofu in #1902
- Fix(client): Ensure correct video quality selection between the auto and manual settings for DASH and HLS by @WuTofu in #1912
- (Deployment) Add SBOM and Provenance for Docker-compose build by @Sysadminfromhell in #1905
- Revert "(Deployment) Add SBOM and Provenance for Docker-compose build" by @dyc3 in #1914
- fix(client): Use useMouseInElement instead to trigger video controls during playback by @WuTofu in #1903
- refactor(client): simplify closed captions switcher and introduce video settings menu by @WuTofu in #1908
- feat(client): improves video quality labeling by @WuTofu in #1915
- (server) Add LBYR/Odysee Support by @Sysadminfromhell in #1904
- feat(client): Add visual indication for caption tracks by @WuTofu in #1916
- chore(client): Enhance test video display with grouped categories and improved styling by @WuTofu in #1917
- feat(client): Implement Picture-in-Picture button by @WuTofu in #1918
- Fix(client): fix issue where google drive can't play and remove video.js by @WuTofu in #1922
- build(deps): bump vite from 5.1.1 to 7.1.10 by @dependabot[bot] in #1923
- client: only show the PiP button when browser supports the PiP API by @WuTofu in #1924
- Fix(client): Fix incorrect logic for caption isEnabled by @WuTofu in #1928
- feat(client): display an error message when video is failed to load by @WuTofu in #1921
- client: add a volume icon and improve volume slider's tooltip style by @WuTofu in #1925
- client: ensure single active (and correct) chip selected for test videos by @WuTofu in #1926
- build(deps-dev): bump vite from 7.1.10 to 7.1.11 by @dependabot[bot] in #1927
- build(deps): bump brace-expansion from 1.1.11 to 1.1.12 by @dependabot[bot] in #1853
- build(deps): bump validator from 13.9.0 to 13.15.20 by @dependabot[bot] in #1929
- build(deps): bump min-document from 2.19.0 to 2.19.1 by @dependabot[bot] in #1932
- build(deps-dev): bump glob from 10.3.10 to 11.1.0 by @dependabot[bot] in #1933
- build(deps): bump validator from 13.9.0 to 13.15.23 by @dependabot[bot] in #1934
- feat: add forced adapter selection for add preview by @Copilot in #1938
- i18n: Update RU locale by @Insoulum in #1939
- build(deps): bump lodash from 4.17.21 to 4.17.23 by @dependabot[bot] in #1940
- build(deps-dev): bump webpack from 5.94.0 to 5.104.1 by @dependabot[bot] in #1943
- build(deps): bump axios from 1.12.2 to 1.13.5 by @dependabot[bot] in #1944
- chore: apply fixes that would be fixed by biome by @dyc3 in #1945
- chore: more misc fixes caught by biome by @dyc3 in #1946
- chore: various code quality improvements, caught by biome by @dyc3 in #1947
- chore: add AGENTS.md by @dyc3 in #1948
- chore: format/remove misc things by @dyc3 in #1956
- feat(client): client setting to boost audio by @dyc3 in #1962
- fix(client): fix client settings not rendering by @dyc3 in #1964
- feat(balancer): more metrics to diagnose deadlocks by @dyc3 in #1961
- fix(balancer): make in-flight metric more reliable by @dyc3 in #1967
- fix(client): fix direct videos not playing audio by @dyc3 in #1969
- refactor(client): migrate PlyrPlayer to composition API and remove Plyr by @WuTofu in #1966
- chore(client): remove SCSS preprocessor options for plyr by @WuTofu in #1970
- build(deps): bump flatted from 3.2.7 to 3.4.2 by @dependabot[bot] in #1971
- fix(jobs): fix oom database crashes by @dyc3 in #1973
- chore: Bump cypress to 15.12.0 and replace the HLS used for the e2e test by @WuTofu in #1972
- fix: strip trimming metadata on video end in looping modes by @dyc3 in #1963
- feat(client): Add captions/multi-quality support for DirectPlayer.vue with a new manifest format by @WuTofu in #1974
- fix(server): prevQueue doesn't get saved when the room gets unloaded and the current queue is empty by @WuTofu in #1975
- build(deps): bump convict from 6.2.4 to 6.2.5 by @dependabot[bot] in #1978
- build(deps): bump brace-expansion from 1.1.12 to 1.1.13 by @dependabot[bot] in #1979
- build(deps): bump dompurify from 2.4.7 to 2.5.9 by @dependabot[bot] in #1980
- feat(client): add a visibility icon next to the connection status by @WuTofu in #1981
- update german language by @Sebasee009 in #1982
- fix(client): fix DirectPlayer subtitle issues by @WuTofu in #1985
- build(deps): bump lodash from 4.17.23 to 4.18.1 by @dependabot[bot] in #1986
- feat(client): Allow users to add a subtitle track to the VideoQueueItem by @WuTofu in #1983
- feat: allow users to modify an existing queue item to add a subtitle track by @WuTofu in #1989
- build(deps-dev): bump vite from 7.1.11 to 7.3.2 by @dependabot[bot] in #1990
- build(deps): bump uuid from 9.0.0 to 14.0.0 by @dependabot[bot] in #1996
- feat: account management page by @dyc3 in #1998
- chore: migrate to biome by @dyc3 in #1957
- build(deps): bump postcss from 8.4.19 to 8.5.10 by @dependabot[bot] in #1999
- build(deps): bump protocol-buffers-schema from 3.6.0 to 3.6.1 by @dependabot[bot] in #1995
- chore: upgrade Node.js version from 20 to 22 in Dockerfiles by @WuTofu in #2000
- chore: ban vue options api for new components by @dyc3 in #2001
- chore: make odysee tests not create a random log file by @dyc3 in #2003
- chore: bump minimum node version, prep for node 26 by @dyc3 in #2002
- chore: bump @types/node to 22 by @WuTofu in #2005
- chore: remove pr commands, don't need it anymore by @dyc3 in #2006
- chore: swap js formatting to biome by @dyc3 in #2007
- chore(lint): enable biome's
useTopLevelRegexby @dyc3 in #2008 - chore: tweak formatting by @dyc3 in #2009
- chore: update biome to 2.4.14, misc lint improvements by @dyc3 in #2010
- chore: node 26 by @dyc3 in #2011
- chore: disable some eslint rules by @dyc3 in #2013
- chore: update biome, adjust linting, format everything but vue with biome by @dyc3 in #2015
- chore: formatting adjustments by @dyc3 in #2016
- fix: reject newlines in room title by @kimjune01 in #2017
- refactor: use vitest for component tests by @dyc3 in #2025
- chore: update to vite 8 by @dyc3 in #2024
- refactor(client): upgrade YoutubePlayer to modern vue component by @dyc3 in #2028
- fix(server): fix a possible bug where room state could get destroyed by @dyc3 in #2029
New Contributors
- @Kahlis made their first contribution in #1785
- @mayudev made their first contribution in #1829
- @Sebasee009 made their first contribution in #1847
- @Sysadminfromhell made their first contribution in #1861
- @WuTofu made their first contribution in #1873
- @kimjune01 made their first contribution in #2017
Full Changelog: v0.14.1...v0.15.0