Normale weergave
OBS Studio 32.2.0 Beta 2
Beta 2 Changes
- Fixed a CI deployment issue. There are no application changes since Beta 1.
32.2 New Features
- Replaced add source dropdown with new dialog [Warchamp7]
- Improved FPS selector UX [jcm93]
- Added missing file support for filters [exeldro]
- Added ability for plugins to set custom icons for new source types [cg2121]
- Included .webp files when adding a directory to Image Slide Show source [TarunCore]
- Added copy paste functions to frontend API [exeldro]
- Added filter to compose SDR into HDR [jpark37]
- Added delete as a hotkey to delete sources on macOS [PatTheMav]
- Added dynamic bitrate support to multitrack video [lexano-ivs]
32.2 Changes
- Forced Intel-based installations to update to Apple Silicon version on macOS [PatTheMav]
- This change means that OBS Studio versions built for Intel-based Macs but running on Apple Silicon Macs will automatically update to OBS Studio built for Apple Silicon Macs. If an installation was using third-party plugins, those plugins will no longer load until replaced with Apple Silicon versions.
- Fixed audio mixer state getting out of sync when changing settings via websockets or plugins [Warchamp7]
- Added theming for checked QToolButtons [glikely]
- Improved OpenGL performance slightly on low-end machines [kkartaltepe]
- Set minimum size for color source to 1 pixel [exeldro]
- Added minimum width to spinboxes [Warchamp7]
- Disallowed overwriting the crash handler [sebastian-s-beckmann]
- Applied process mitigation policies for Windows [notr1ch]
- Adjusted description of multitrack video [jhnbwrs]
- Changed new capture devices to use fallback frame rate by default [PatTheMav]
- Improved DLL loading behavior on Windows [notr1ch]
- Limited multitrack video config to Custom service [PatTheMav]
32.2 Bug Fixes
- Fixed OAuth and dock state save corruption [PatTheMav]
- Fixed group bounds not resizing when removing items [howellrl]
- Fixed canvas mixes not being restored after video reset [dsaedtler]
- Fixed some erroneous crashes during shutdown [Warchamp7]
- Fixed display capture sometimes capturing black after a duplicator failure [ThrowTop]
- Fixed color of controls dock output buttons in System theme [shiina424]
- Fixed virtual camera reset failures [stephematician]
- Fixed potential crash when user discards changes in the settings window [suogesi]
- Fixed incorrect return value in virtualcam filter [xtfo]
- Fixed source toolbar buttons not working after dragging a source into a group [Warchamp7]
- Fixed properties hint icon spacing [Warchamp7]
- Fixed potential crash when a video device reconnects on macOS [jcm93]
- Fixed an issue where PipeWire could fail on NVIDIA GPUs [hoshinolina]
- Fixed obs_canvas_get_video_info returning incorrect framerate [dsaedtler]
32.2 Deprecations
- Deprecated obs_properties_add_button [sebastian-s-beckmann]
Checksums
OBS-Studio-32.2.0-beta2-Sources.tar.gz: 2b643fba022a7a7b512522b598dfa587fd87be071e43ff345cd73608f7bdae13
OBS-Studio-32.2.0-beta2-Ubuntu-24.04-x86_64-dbsym.ddeb: ba2ce12e1a220c6aa5d00e23bc10bfead82dae263ac1c213a81e9ac88e122403
OBS-Studio-32.2.0-beta2-Ubuntu-24.04-x86_64.deb: bc02de836d115323c87eee5fca17c1bc3831ef5c1fc64709aeabd8dbce32785a
OBS-Studio-32.2.0-beta2-Ubuntu-26.04-x86_64-dbsym.ddeb: 84956ff43ffec70581db566adbfd29942bab783bc98a92620ac73fdc6f3e2006
OBS-Studio-32.2.0-beta2-Ubuntu-26.04-x86_64.deb: 1816bc64e4e587883a6887744e5e48348290e8944ac8c6c5866f3c39db9a4600
OBS-Studio-32.2.0-beta2-Windows-arm64-PDBs.zip: 3110e6a4a1fef3f5474de37962e97b702601380e5afba48ec905a79966f4acfe
OBS-Studio-32.2.0-beta2-Windows-arm64.zip: d8998e8f0d7ae05da07a62c4b31dacfbd9a0f22e819736d045d0a6db85afc9db
OBS-Studio-32.2.0-beta2-Windows-x64-Installer.exe: 10ed6505b22df7c3d7ce3c30e8584bd9c475f0775b8515ab5bb895eefae870e6
OBS-Studio-32.2.0-beta2-Windows-x64-PDBs.zip: 302e7039d31dc897a2ce9d7323e9409e2e4bfcfe3d374de1cc21d0dbba783083
OBS-Studio-32.2.0-beta2-Windows-x64.zip: 38914895b20a6a2ffad4ed54ed41bf5ab2461fb10192cddc721eabccff526eae
OBS-Studio-32.2.0-beta2-macOS-Apple-dSYMs.tar.xz: f2f4cf21a396147be3b6a301f08b272ae546da0d5d4be0dd34d7b52191519560
OBS-Studio-32.2.0-beta2-macOS-Apple.dmg: 902de6585cddf070a161c6278db857aa3d5986e840a67cebb647dbcdae68ea72
OBS-Studio-32.2.0-beta2-macOS-Intel-dSYMs.tar.xz: 3dd5316492e67b8fe53197c28a6ae2def05a06df2cdfc5ad5af4189fd808d5f0
OBS-Studio-32.2.0-beta2-macOS-Intel.dmg: cddff8ff00b96eec9f5fb7116b4729d7de50ae58611bbc605958f3c458ccd02e
macOS 27.0 beta 2 (26A5368g)
iOS 27.0 beta 2 (24A5370h)
HeidiSQL v12.20
12.20 - 2026-06-22
⛰️ Features
- Support some keywords like CURRENT_TIMESTAMP in SQLite default value drop-down - (dbadd37)
🐛 Bug Fixes
- SelectUserNode on macOS cannot find a newly created node with a TUser, probably because nodes were refreshed too late in OnBeforePaint - (f6c5d2d)
- Expect "IF NOT EXISTS" clause in trigger definition - (71af8d3)
- Reveal procedures and function in MySQL which are stored with correct case in mysql.proc - (106010e)
⚙️ Miscellaneous Tasks
- Ignore all .po translation files pulled from Transifex - (611212a)
- Restrict cliff release notes from previous tag to current one, prefer spaces indentation in Makefile variable assignment - (548f44f)
Note
For a list of all the changes up to date, please read CHANGELOG.md.
v12.20-Windows
Bump version for v12.20 release
SCS On The Road: Dodge Viper Scanning and Interview
Today, we're excited to share another episode of our SCS On The Road series, where we travel across North America to meet passionate vehicle owners and gather valuable reference materials for future projects.
This time, our journey brought us to Denton, Texas, where we had the opportunity to experience a true American automotive icon - the 1997 Dodge Viper GTS.
During our visit, we had the chance to document and scan this beautiful car, getting our vehicle artists the accurate reference data needed to faithfully recreate it for the Road Trip project in American Truck Simulator. From its distinctive exterior styling to the finer interior details, every piece of information helps us bring this legendary sports car to life in-game.
This vehicle belongs to Dino, who kindly welcomed our team and generously allowed us to document his prized Viper. We also had the pleasure of having an interview with him, where he shared more about his amazing ride.
The Dodge Viper remains one of the most recognizable American sports cars ever produced, and seeing this exceptionally preserved 1997 example in-person was a fantastic experience for our team.
We would like to extend a sincere thank you to Dino for taking the time to speak with us, sharing his story, and allowing us to scan and capture reference materials from his stunning Viper. Support from owners like Dino is invaluable and helps us create authentic experiences for players around the world.
We hope you enjoy this latest episode of SCS On The Road from Denton, Texas. Be sure to watch the video and learn more about this incredible machine and its owner.
Ready to hit the road in the Dodge Viper? Be sure to add the RAM & Dodge Car Pack for American Truck Simulator to your Steam Wishlist! To stay up to date with the latest development news for Road Trip, don’t forget to follow our blog, subscribe to our newsletter, and follow us on X/Twitter, Facebook, BlueSky, and Instagram.
DistroWatch Weekly, Issue 1178
Review: TBlock
News: Arch responds to more AUR attacks, Fedora's growing community, reasons to avoid immutable desktops, Ubuntu 26.10 to get speech recognition, Canonical updates its beta policy, highlights of KDE Plasma 6.7
Questions and answers: What is the significance of the AUR being compromised?
Released....
12.0 RC1
🚀 Jellyfin Server 12.0 RC1
We are pleased to announce the first release candidate preview release of Jellyfin 12.0!
This is a preview release, intended for those interested in testing 12.0 before it's final public release. We welcome testers to help find as many bugs as we can before the final release.
As always, please ensure you stop your Jellyfin server and take a full backup before upgrading!
A note about versioning
Starting with this release, we are dropping the preceeding 10. from our versioning. Thus, 10.11.x -> [10.]12.x = 12.x. The reason is simple: at this point in the project, we don't envision a hard break in the API like we planned way back in the early days, and this version scheme was causing a lot of confusion amongst users about what a "major" release was.
Thus, we are now on two digits:
- The first digit is the major release. Expect signifiant changes between major releases. Do not ever auto-update to a new major release without first checking the release notes, and always take a backup of your server data and config before a major release upgrade.
- The second digit is the minor release. These are primarily bug and security fix releases, and do not introduce significant feature or functionality changes. You can, usually, safely auto-update between minor releases and should not need a full backup, but it is prudent just in case. You should also ALWAYS strive to run the latest point release as security fixes are embargo'd for at most 2 weeks after the release.
What's new?
The main goal of this release has been performance. 10.11.0 dropped a major backend rewrite, and while it was broadly functional, it had a lot of rough edges. This release seeks to polish out most of those rough edges and bring better performance to all users.
There are many other small fixes, improvements, changes, and translations. See our draft release notes here or below for the full list of pull requests.
Note: You must be on Jellyfin 10.11.x (ideally, 10.11.11) before upgrading! If you are not, the upgrade will fail. I have been informed that I was wrong here, and upgrades from 10.10.7 are also possible, same as 10.11.x!
Note: The initial load of Jellyfin 12.x will run a few migrations and will take several minutes. Please be patient and do not interrupt the process.
Note: If you install the RC, you should disable all plugins and reinstall using the unstable plugin repository, or plugins may fail to load and cause unintended side effects.
Installing
This preview release is distributed in all our traditional forms, though not automatically via our Apt repository or latest tag.
- For all non-Docker environments, you can find the files for manual download in our repository by selecting "Stable Preview" for your OS.
- For Docker, you can pull the
12.0-rc1orpreviewtags.
What's Changed (since v10.11.x)
- Update CODEOWNERS to capture bump_version by @joshuaboniface in #7263
- Add css variable support for dark theme by @thornbill in #7277
- Refactor dark theme to base theme by @thornbill in #7343
- Hide empty message box if there isn't text by @viown in #6151
- Migrate dashboard user pages to use TS SDK by @viown in #7089
- Refactor light theme to use base theme by @thornbill in #7347
- Fix base theme icon color by @thornbill in #7386
- Add delay setting for photo slideshow by @nesnass in #7038
- Pass the new player to nextTrack to allow mixed playlist playback by @kevgrig in #5488
- Add HEVC level 6.2 (186) device capability check by @imtsuki in #6376
- Remove usages of deprecated framerate properties by @thornbill in #7395
- Add support for custom links in the experimental layout by @thornbill in #7394
- Use experimental layout by default by @thornbill in #7393
- Use enum for item actions by @thornbill in #7389
- Remove unused network share references by @thornbill in #7342
- Use consistent padding on item details screen by @thornbill in #7279
- Refactor themes structure by @thornbill in #7382
- Use sdk for item download url by @thornbill in #7412
- Remove dead itemsrefresher class by @thornbill in #7420
- Add support for scanning tartgeted paths with lint npm script by @tylers-username in #7436
- Tizen: Enable direct-play of anamorphic videos by @kinke in #7321
- Fix item grid inconsistencies by @thornbill in #7435
- Upgrade to NPM 11 and Node 24 active LTS by @larouxn in #7282
- Fix
.nvrmcto.nvmrctypo in PR GitHub workflow by @larouxn in #7522 - Fix jellyfin sdk type errors by @PeachesMLG in #7491
- Add missing Rewind & FastForward PlayState commands handling by @HamletDuFromage in #7527
- Remove unused AudioPodcast item type by @dfederm in #7532
- Remove reference to non-existing Recording media type by @dfederm in #7533
- Remove unused showFindNew export from itemidentifier.js by @dfederm in #7537
- Remove getData() and importFrom() dead code from userSettings.js by @dfederm in #7536
- Add max value to streaming bitrate textfield by @haleyburns in #7519
- Add video title to experimental layout by @viown in #7530
- Clarify Playlist and Collections delete prompt by @dfederm in #7534
- Remove old irrelevant comment about 'LabelSyncPlayTimeOffset' by @dfederm in #7535
- Add
caniuse-liteas dev dependency to keep it updated and update it by @larouxn in #7474 - Mitigate pull_request_target privilege escalation by @andrewrabert in #7616
- Add code assistance section to pull request template by @viown in #7619
- fix book player fullscreen on mobile apps by @dkanada in #7399
- Add playlist button and sort options to Playlists tab in experimental layout by @theguymadmax in #7538
- loosen anamorphic restrictions for browser device profiles by @meop in #7520
- Fix dashboard buttons overflow by @thornbill in #7648
- Stop using native scrollTo for smooth scrolling by @larsmunkholm in #7606
- move broken actions to workflow_run event by @dkanada in #7684
- Fix react cards showing default background when loading by @thornbill in #7674
- Hide home loading indicator optimistically by @thornbill in #7678
- Fix react card text missing keys by @thornbill in #7675
- define secrets for nested workflows by @dkanada in #7688
- Add error handling to rest of dashboard pages by @viown in #7223
- Migrate networking page to React by @viown in #7502
- add debug logging to PR step in workflow by @dkanada in #7690
- use pr list subcommand for pull request search by @dkanada in #7691
- Fix login loop by @Crashdummyy in #7685
- Add a Reset Filters button to bottom of filter dropdown by @1hitsong in #7130
- remove merge group events from main workflow by @dkanada in #7692
- Add watch feature to log viewer by @viown in #7268
- improve author and book support on itemDetails page by @dkanada in #7656
- Bump axios from 1.12.2 to 1.13.5 by @dependabot[bot] in #7578
- Fix password input type for CertificatePassword by @DatScreamer in #7696
- Use getBackupApi util from SDK by @thornbill in #7729
- Remove var mixin by @thornbill in #7647
- Cleanup typescript types by @thornbill in #7673
- Fix active library highlighting for items by @thornbill in #7644
- Extract getCardImageUrl and remove duplicate hook by @thornbill in #7676
- initial sections for book library view by @dkanada in #7354
- Fix multiselect panel styles by @thornbill in #7730
- Add display version util for 12.0 by @thornbill in #7677
- Fix sass if syntax by @thornbill in #7731
- Move users edit page to tabs by @viown in #7497
- Move card utils to utils directory by @thornbill in #7733
- Update Music Videos views in experimental layout by @theguymadmax in #7567
- Replace the buildin xbox limit it with a native shell option by @JPVenson in #7670
- Add default tab options for Home Videos and Photos library by @theguymadmax in #7557
- Add contributing guide and pr checklist by @thornbill in #7693
- Bump picomatch by @dependabot[bot] in #7762
- Add a gap to stack elements to prevent numbers from other adjacent stack to collapse and appear as one by @uxdesignerhector in #7419
- Add a folder view to the modern home videos library layout by @theguymadmax in #7741
- Fix CF pages deployment directory by @thornbill in #7784
- Fix react keys on item details metadata by @thornbill in #7785
- Fix theming for reactUtils component rendering by @thornbill in #7788
- Refactor wmc theme to use base theme by @thornbill in #7789
- Refactor blueradiance theme to use base theme by @thornbill in #7790
- Add explicit dependency on axios by @thornbill in #7797
- Bump lodash from 4.17.21 to 4.18.1 by @dependabot[bot] in #7793
- Compact the "playback info" overlay to add more infos by @nyanmisaka in #7291
- Enable AV1 fMP4 stream copy on TV clients by @nyanmisaka in #7802
- Add device id to StorageListItem by @thornbill in #7756
- add audiobooks back to book libraries by @dkanada in #7816
- Fix chromium browsers not cleaning up backdrops by @thornbill in #7738
- Cleanup removed api members by @thornbill in #7839
- SyncPlay menu update by @thornbill in #7643
- Add folders tab to experimental view in book libraries by @dkanada in #7822
- Fix backdrop size changing on mobile by @thornbill in #7849
- Fix clock icon alignment on scheduled tasks page by @TarasSmal in #7841
- Handle Seasons in recently added by @Shadowghost in #7623
- Add frame scrubbing controls by @flying-sheep in #7315
- Refactor user hooks to simplify usage by @thornbill in #7875
- Fix drawer display version by @thornbill in #7884
- Bump web version to 12.0.0 by @thornbill in #7885
- filter music artists from person results by @dkanada in #7882
- Disable sonarjs/aws-restricted-ip-admin-access lint rule by @terite in #7847
- Fix books not displaying in genre lists by @theguymadmax in #7911
- Fix blurry card images on high-DPI displays by @Maxr1998 in #7879
- Update sort options, default tab, and landing screen options for music videos by @theguymadmax in #7805
- Update Collections & Playlists library view for the modern layout by @theguymadmax in #7808
- Display music video title correctly if it belongs to an album by @hazemkrimi in #6819
- Fix keyboard controls working only on latin keyboard layouts by @MBR-0001 in #7398
- Fix duplicate locations by @Collin-Swish in #7469
- Update Mixed Media library view for the modern layout by @theguymadmax in #7821
- Fix genres not showing for collections and playlists by @theguymadmax in #7807
- Use innerHTML instead of replaceChildren to empty div by @mrxz in #7907
- Fix case sensitivity in library folder checks by @thornbill in #7914
- Move bitrate detection to web by @viown in #7864
- Bump axios from 1.13.6 to 1.16.0 by @dependabot[bot] in #7888
- Add translation for VideoRotationNotSupported by @nyanmisaka in #7894
- Use tanstack query for user settings by @thornbill in #7890
- Fix homescreen settings for mixed libraries by @theguymadmax in #7916
- Make library header sticky by @thornbill in #7836
- Use tanstack query for home screen sections by @thornbill in #7918
- show progress indicator for books by @dkanada in #7921
- add authors tab to book library by @dkanada in #7874
- Implemented sorting and filtering for Activity page by @bjorntp in #7431
- Fix behavior when applying filters and switching pages by @Shadowghost in #7820
- Fix keyboard in old browsers by @dmitrylyzo in #7917
- Add warning to backup operation if scan is running by @viown in #7923
- Add similarity provider configuration by @Shadowghost in #7663
- Fix xss in checkbox element by @thornbill in #7942
- Fix user view nav overflow logic by @thornbill in #7943
- Encode auth params when creating ApiClients by @thornbill in #7947
- Add collections tab for book libraries by @dkanada in #7946
- Start a library scan when adding folders to a library by @Shadowghost in #7952
- fix cardImage data-src set to "undefined" by @edvwib in #7929
- Add Collections and playlist tab to all libraries by @Shadowghost in #7939
- Add polish to library toolbar and menus design by @thornbill in #7927
- Reload item data on version change and use correct parts on playback by @Shadowghost in #7919
- Reload scroller on data receive by @Shadowghost in #7954
- Add OriginalLanguage as option to PreferredAudioLanguage by @Lampan-git in #6022
- Fix layout mode for library routing by @theguymadmax in #7951
- Replace ElevationScroll with OffsetAppBar by @thornbill in #7965
- Fix alphapicker alignment on desktop by @thornbill in #7964
- Fix backdrop in music queue by @me25542 in #7897
- Migrate WebSockets to SDK Subscriptions by @anultravioletaurora in #7838
- Disable touch switcher on experimental and disable scroll buttons on touch devices by @Shadowghost in #7971
- Studios tab extension by @Shadowghost in #7940
- Fix image upload spinner on failure by @darbyjack in #7949
- Implement studio search by @Shadowghost in #7970
- Support DOVI in mkv container on WebOS 25 and newer by @ErebZx in #7328
- Fix OSD animation event hiding header after leaving the video player by @brad1111 in #7968
- Fix navigation with game controllers by @MBR-0001 in #7975
- Fix slideshow interval not saving by @theguymadmax in #7983
- Use String.raw to avoid escaping backslashes in eslint config by @Mayme123 in #7866
- Remove repository prefix for pages deployment on push workflow by @nielsvanvelzen in #7978
- Fix broken layout on table pages by @thornbill in #7990
- Only show Play All button when items are present by @theguymadmax in #7988
- Add Play All and Shuffle buttons to series library by @theguymadmax in #7989
- Hide Group Versions for unsupported item types by @theguymadmax in #7999
- migrate book OSD to react component by @dkanada in #7848
- Fix Multiselect not working in collections by @austinhardaway in #7925
- Add still watching prompt by @thornbill in #7979
- When deleting a single item, include the name of the item in the confirmation message by @joshuaobrien in #7697
- Refactor library pages by @thornbill in #7998
- Fix playback issues in the home videos and photos library videos tab by @theguymadmax in #7986
- Fix blurhash and faster animation settings in new layout by @nyanmisaka in #8014
- Hold and drag on media no longer activates Multi-select by @bjorntp in #7732
- Merge library toolbar into main AppBar by @thornbill in #8030
- Fix Add to collection permissions by @theguymadmax in #8036
- Respect DisplayMissingEpisodes setting in item details pages by @lmaotrigine in #7810
- Add audiobooks to the authors tab by @theguymadmax in #8034
- Fix New Collection button permissions by @theguymadmax in #8037
- Always round up for card image sizes by @enter-a-random-username in #8022
- Add query caching to indexeddb by @thornbill in #7679
- Prevent invalid paths from being added to the list of folder paths by @theguymadmax in #8048
- Make Played and Unplayed filters mutually exclusive for the Modern view by @theguymadmax in #8002
- Fix errors on view change with pending requests by @thornbill in #8055
- Use plugin provided icon if available by @Shadowghost in #8053
- Adjust the section header link limit by @theguymadmax in #8019
- Remove pagination controls if user disabled by @thornbill in #8059
- Add Screensaver Time to Experimental layout by @dmitrylyzo in #8052
- Hide studios filter when empty by @theguymadmax in #8058
- Fix wrong settings applied on view change by @thornbill in #8062
- Disable play all and shuffle buttons instead of hiding by @thornbill in #8056
- Fix Duplicated
/socketConnections by @anultravioletaurora in #8011 - Add TV Shows creators to item details by @Rant423 in #8042
- Allow folders to be marked as played by @theguymadmax in #8063
New Contributors
- @nesnass made their first contribution in #7038
- @imtsuki made their first contribution in #6376
- @tylers-username made their first contribution in #7436
- @larouxn made their first contribution in #7282
- @HamletDuFromage made their first contribution in #7527
- @dfederm made their first contribution in #7532
- @haleyburns made their first contribution in #7519
- @meop made their first contribution in #7520
- @larsmunkholm made their first contribution in #7606
- @Crashdummyy made their first contribution in #7685
- @1hitsong made their first contribution in #7130
- @DatScreamer made their first contribution in #7696
- @uxdesignerhector made their first contribution in #7419
- @TarasSmal made their first contribution in #7841
- @flying-sheep made their first contribution in #7315
- @hazemkrimi made their first contribution in #6819
- @mrxz made their first contribution in #7907
- @Lampan-git made their first contribution in #6022
- @me25542 made their first contribution in #7897
- @anultravioletaurora made their first contribution in #7838
- @darbyjack made their first contribution in #7949
- @ErebZx made their first contribution in #7328
- @Mayme123 made their first contribution in #7866
- @austinhardaway made their first contribution in #7925
- @joshuaobrien made their first contribution in #7697
- @Rant423 made their first contribution in #8042
Full Changelog: v10.11.11...v12.0-rc1
12.0 RC1
🚀 Jellyfin Server 12.0 RC1
We are pleased to announce the first release candidate preview release of Jellyfin 12.0!
This is a preview release, intended for those interested in testing 12.0 before it's final public release. We welcome testers to help find as many bugs as we can before the final release.
As always, please ensure you stop your Jellyfin server and take a full backup before upgrading!
A note about versioning
Starting with this release, we are dropping the preceeding 10. from our versioning. Thus, 10.11.x -> [10.]12.x = 12.x. The reason is simple: at this point in the project, we don't envision a hard break in the API like we planned way back in the early days, and this version scheme was causing a lot of confusion amongst users about what a "major" release was.
Thus, we are now on two digits:
- The first digit is the major release. Expect signifiant changes between major releases. Do not ever auto-update to a new major release without first checking the release notes, and always take a backup of your server data and config before a major release upgrade.
- The second digit is the minor release. These are primarily bug and security fix releases, and do not introduce significant feature or functionality changes. You can, usually, safely auto-update between minor releases and should not need a full backup, but it is prudent just in case. You should also ALWAYS strive to run the latest point release as security fixes are embargo'd for at most 2 weeks after the release.
What's new?
The main goal of this release has been performance. 10.11.0 dropped a major backend rewrite, and while it was broadly functional, it had a lot of rough edges. This release seeks to polish out most of those rough edges and bring better performance to all users.
There are many other small fixes, improvements, changes, and translations. See our draft release notes here or below for the full list of pull requests.
Note: You must be on Jellyfin 10.11.x (ideally, 10.11.11) before upgrading! If you are not, the upgrade will fail. I have been informed that I was wrong here, and upgrades from 10.10.7 are also possible, same as 10.11.x!
Note: The initial load of Jellyfin 12.x will run a few migrations and will take several minutes. Please be patient and do not interrupt the process.
Note: If you install the RC, you should disable all plugins and reinstall using the unstable plugin repository, or plugins may fail to load and cause unintended side effects.
Installing
This preview release is distributed in all our traditional forms, though not automatically via our Apt repository or latest tag.
- For all non-Docker environments, you can find the files for manual download in our repository by selecting "Stable Preview" for your OS.
- For Docker, you can pull the
12.0-rc1orpreviewtags.
What's Changed (since v10.11.x)
- Update CODEOWNERS to capture bump_version by @joshuaboniface in #15236
- Update Jellyfin Server version in issue template by @dpieski in #15398
- Add all 10.11 versions to issue template by @anthonylavado in #15565
- Add version to StartupUI by @JPVenson in #15246
- Disable legacy authorization methods by default by @nielsvanvelzen in #15559
- Deprecate HasPassword property on UserDto by @nielsvanvelzen in #14950
- Add support for more embedded metadata tags by @allmazz in #15437
- Fix TV Series parsing containing only numbers. by @CodyEngel in #14824
- refactor(StreamInfo): reorganize subtitle URL logic and conditions by @sususu98 in #13977
- Add milliseconds to default console output format by @kevgrig in #15227
- Remove special client behavior for API response fields by @nielsvanvelzen in #15638
- Add subtitle extraction timeout configuration option by @KarkaLT in #15538
- Add CPU to issue template by @theguymadmax in #15704
- Fix episodes showing up on recently added shows by @theguymadmax in #15433
- Fix: normalize punctuation when computing CleanName so searches without punctuation match (closes #1674) by @audrey-inglish in #14879
- Locking cleaning by @MarkCiliaVincenti in #15713
- Add ability to sort and filter activity log entries by @crobibero in #15583
- Fix typo in CheckOrCreateMarker exception by @Xinerki in #15341
- avoid Take(0) when Limit == 0 in #14608
- Proper pinning of SkiaSharp to prevent accidental updates by @MarkCiliaVincenti in #15736
- Optimize GetUniqueFlags() by @stevenaw in #15774
- Remove legacy API route middleware by @nielsvanvelzen in #15669
- parse more information from book filenames by @dkanada in #15655
- Library: Async the SaveImages function by @luigi311 in #15718
- Update issue template version to 10.11.5 by @theguymadmax in #15798
- Fixed Multi Sort in New ActivityManager by @bjorntp in #15820
- Add myself to CONTRIBUTORS.md by @allmazz in #15831
- Fix GET MetadataEditor ContentTypeOptions for mixed content by @Smeagolworms4 in #15797
- Fixed issue with ABI Compatability - Difference not completing by @PeachesMLG in #15924
- Upgrade Swashbuckle and fix OpenAPI spec by @Shadowghost in #15886
- Optimize
StringHelper.FirstToUpper()by @stevenaw in #15916 - Fix API diff workflow by @Shadowghost in #15888
- Fix KeyNotFoundException in CryptographyProvider when iterations parameter is missing by @ZeusCraft10 in #15958
- Add TrueHD and DTS codes string for HLS by @nyanmisaka in #15959
- fix: Handle unknown item types gracefully in DeserializeBaseItem by @ZeusCraft10 in #15956
- Update to .NET 10.0 by @Bond-009 in #15475
- Refactor HLS transcode seeking by @abitofevrything in #15926
- Fix zh-CN subtitle language display by @ZeusCraft10 in #15947
- Fix typos in XML documentation comments by @vignesh1507 in #15997
- Update issue template version to 10.11.6 by @theguymadmax in #16059
- fix: prevent premature disposal of HTTP subtitle streams by @lostb1t in #14809
- SessionManager: Log when playback is started by @jpds in #15908
- extract local metadata from OPF and EPUB files by @dkanada in #15604
- Remove some deprecated API members by @nielsvanvelzen in #16110
- Fix: Resolve CA1849 synchronous IO in EpubImageProvider by @Gladtbam in #16124
- Fix TMDB language handling: support full ISO 639-1 + ISO 3166-1 codes (e.g. zh-CN, zh-TW) by @Daydreamer-riri in #16151
- Add curly brace and parentheses support for parsing attribute values by @nileshp87 in #14927
- Skip validation for empty landing preferences by @theguymadmax in #16178
- Trim names and roles for people by @theguymadmax in #16181
- Fix container and updated by @JPVenson in #16202
- Fix: Add 'Kairon; IRSE!' to artist whitelist by @loop95 in #14709
- Add moveToTop option to IPlaylistManager.AddItemToPlaylistAsync by @kevgrig in #15138
- TmdbSeriesProvider: Set ProductionYear field by @DerMaddis in #16144
- Fix episodes appearing in Season Unknown incorrectly and prevent unnecessary virtual season creation by @theguymadmax in #16236
- Mitigate pull_request_target privilege escalation by @andrewrabert in #16263
- Upgrade Swashbuckle to v10 by @Shadowghost in #16256
- Fix malformed query string in StreamInfo.ToUrl() causing 500 error via proxies by @cosu in #16255
- Revise note on hosting web client for development by @JPVenson in #16281
- Update JetBrains logo link in README.md by @anthonylavado in #16323
- AIFF support: add .aifc as audio file type, remove .aiff as image file type in #16274
- Use artist images for music library thumbnail by @theguymadmax in #16240
- Fix near-1:1 SAR values falsely flagged as anamorphic by @NoFear0411 in #16318
- Add missing ProducesResponseType(401) to QuickConnectController.InitiateQuickConnect by @JuanCalderon-17 in #16331
- Fix ItemValues Type checks by @Shadowghost in #16160
- Return BadRequest when an invalid set of filters is given by @Bond-009 in #16398
- Use generic Enum overloads to resolve CA2263 warnings by @jaxx2104 in #16395
- Respect library country code for parental ratings by @theguymadmax in #16388
- Fix remote image language priority to prefer English over no-language by @redinsch in #16368
- Recognize ".m4b", ".m4a", ".aac", ".flac", ".mp3", and ".opus" as an audio-book formats by @lousando in #15377
- include external IDs and URLs for book providers by @dkanada in #15593
- Fix int32 overflow in QSV rate-control parameter computation by @scheilch in #16376
- fix crashes on devices that don't support ipv6 by @JanzenJohn in #15841
- Fix filename truncation when bracketed tags appear mid-filename by @tyage in #16222
- Add spec-compliant dvh1 HLS variant for Dolby Vision Profile 5 by @NoFear0411 in #16362
- Fix attachment extraction of files without video or audio stream by @Shadowghost in #16312
- More robust date handling in Library DB migration by @Shadowghost in #16474
- Add ignore patterns for Hungarian sample files by @furdiburd in #16238
- fix: cap GetVideoBitrateParamValue at 400 Mbps by @scheilch in #16467
- recognize underscore and dot separators for multi-version grouping by @upscaylman in #16465
- split openapi workflows between pull request and merge by @dkanada in #16463
- Only set IsAvc for video streams by @Bond-009 in #16507
- Cleanup trickplay cache dir on failure by @Shadowghost in #16365
- remove nested directory for openapi workflows by @dkanada in #16524
- Update issue template version to 10.11.7 by @theguymadmax in #16530
- Add callback for segment data pruning to IMediaSegmentProvider by @Shadowghost in #16419
- fix openapi report and publish workflows by @dkanada in #16556
- Fix parental ratings not working on music albums by @theguymadmax in #16553
- Fix UDP Auto-Discovery returning IPv6 for cross-subnet IPv4 requests by @ZeusCraft10 in #15902
- fix invalid workflow on openapi report job by @dkanada in #16561
- edit openapi files in place with sed by @dkanada in #16569
- add StartIndex and ParentId to person search by @dkanada in #16397
- Add AlbumNormalizationGain field to BaseItemDto by @HeroBrine1st in #14745
- Reverse check for track changed by @bilbofroggins in #16501
- Fix BoxSet parentId being ignored in item queries by @theguymadmax in #16490
- Update issue template version to 10.11.8 by @theguymadmax in #16573
- Don't spam debug log with items without rating by @Bond-009 in #16342
- Backport security fixes by @Bond-009 in #16577
- Fix FolderStorageInfo to show parent filesystem by @joshuaboniface in #16456
- Fix HDR tonemapping for BDMV content by @ddemarco5 in #16609
- Fix language display for ISO 639-2-only codes (e.g. mul, und, mis, zxx) by @shocklateboy92 in #16567
- Respect EnableSubtitleExtraction setting in subtitle delivery by @LTe in #16380
- add NameStartsWith and NameLessThan filters to Person search by @dkanada in #16619
- Fix in-process restart by @Shadowghost in #16482
- Fix artist metadata not being fetched on initial library scan by @theguymadmax in #16606
- chore(ci): Add permissions grant by @jsoref in #13443
- fix: retain subtitles spanning HLS segment boundaries by @LiHRaM in #16594
- Don't allow library name with leading or trailing space by @gnattu in #13491
- Added Tanzania countries.json by @ewkonzo in #14406
- Move rename command permission check to script by @felix920506 in #11231
- Set XmlTvProgram.IsLive by @SenorSmartyPants in #8890
- Remove global subtitle configuration by @KGT1 in #14957
- Update to Jellyfin.XmlTv 10.12.0-pre1 by @Bond-009 in #16659
- Enable jellyfin.db customized path by @twsouthwick in #15355
- Include item path in provider error log messages by @johnpc in #16667
- Skip libraries without enabled subtitle providers in SubtitleScheduledTask by @MBR-0001 in #16649
- fix: add image/jpg to MIME type extension lookup by @jskoetsier in #16658
- Remove all JF contributors from Emby list by @Bond-009 in #16694
- Upgrade to xunit v3 by @Shadowghost in #16666
- Fix watched status resetting on re-watch by @MSalman5230 in #15762
- improve openapi endpoint categorization by @dkanada in #16698
- Fix IPv6 prefixes not recognized as proxy by @dwandw in #16672
- hide HLS controllers and deprecate unused endpoints by @dkanada in #16715
- fix: use symmetric 15s default for skip forward/backward lengths by @tcsenpai in #16739
- Avoid SSA to ASS conversion and loss of styles by @nyanmisaka in #16744
- feat/audiobook_chapters by @sevenrats in #16518
- Query Performance Improvements by @Shadowghost in #16062
- Fix FFProbeVideoInfo downloading subtitles without considering internal streams by @MBR-0001 in #16747
- Fix triple digit episode number handling by @Shadowghost in #16475
- fix person TotalRecordCount when limit is applied by @dkanada in #16616
- Fix Playlist and Boxset query, save and count performance by @Shadowghost in #16761
- Fix keyframe duration overshoot breaking playback by @dyld-w in #16704
- Implement ignore rule caching by @Shadowghost in #16166
- Honor episode NFO season during metadata merge by @itz4blitz in #16702
- Fix dummy chapter handling for videos with a single chapter or short duration. by @ExpctING in #16695
- Add CACHEDIR.tag support by @Shadowghost in #16478
- Keep legacy authorization enabled by @nielsvanvelzen in #16754
- Fix use of thread-unsafe List.Sort() by @gabeluci in #16777
- Guard against null-overwrite of saved audio/subtitle track selections by @llaforest in #16769
- Speed-up LatestItems for Music by @Shadowghost in #16756
- Fix EPG issues by @Shadowghost in #16220
- Fix rewatch query by @Shadowghost in #16778
- Remove unnecessary ToList calls in TrickplayManager by @poytiis in #16322
- Add different Slovak and Czech translation of Season for parsing by @Biosias in #16646
- Add the filename to exceptions in DeserializeFromFile() by @lcorbasson in #16246
- Fix UserManager after EFcore refactor (backport #15368) by @JPVenson in #16782
- Fix subtitle save path by @Shadowghost in #16779
- Move MusicBrainz Query client to plugin instance by @Shadowghost in #16780
- Fix unique people response for query if no item ID is supplied by @Shadowghost in #16783
- Ignore season directories with no video for TV Shows by @LmanTW in #16611
- Fix #16308: Community ratings not updating after changing .nfo file. by @PERSONALPANCHIWIRIS in #16466
- Remove DigitalOcean from sponsors section by @theguymadmax in #16788
- Fix Canadian rating and fallback to unrated if we have a CountryCode but no matching rating by @Shadowghost in #16328
- Add startup mode to migrate or seed the database on cmd by @JPVenson in #16319
- Fix live stream consumer leak on negative PositionTicks by @WizardOfYendor1 in #16321
- Parse provider IDs from season and episode folder/file names by @IDisposable in #16472
- Fix MusicBrainz test. by @IDisposable in #16789
- fix person type exclusion in api response by @dkanada in #16784
- Switch to new version scheme by @Shadowghost in #16758
- Allow tmdb as an alias for tmdbid provider id by @theguymadmax in #16433
- Add OriginalLanguage as option to PreferredAudioLanguage by @Lampan-git in #12579
- Fix CA1051 and CA1815 warnings, Change public fields to auto properties by @tjwalkr3 in #14847
- Fix Segment Provider Configuration by @Shadowghost in #16798
- IOException with STRM HTTP URLs by @benbenmoss in #16290
- Fix artist duplicates by @Shadowghost in #16807
- Add videoRotation profile condition by @nyanmisaka in #16803
- Print warning on invalid Subnets in Network/Proxy configuration by @Shadowghost in #16793
- Suppress CA2213 false positive on ApplicationHost._pluginManager (#2149) by @bittoby in #16792
- Use SortName when sorting by name by @Shadowghost in #16804
- Safeguard against invalid GUIDs by @Shadowghost in #16813
- consolidate OpenAPI categories and deprecate startup routes by @dkanada in #16757
- Reference correct .NET version in README by @Bond-009 in #16831
- return music artists from person endpoints by @dkanada in #16721
- Update log for user session related concurrency update fails by @JPVenson in #16835
- Add Accept-Language header support and cleanup translations by @Shadowghost in #16488
- Implement similarity providers by @Shadowghost in #15970
- Implement multiple versions for episodes. by @Shadowghost in #16828
- New filters for audio and subtitle languages by @TheMelmacian in #9787
- Set max rating for splashscreen to 13 by @theguymadmax in #16852
- Fix CA1819 warnings in ChannelFeatures by using IReadOnlyList by @jtvhd6 in #16853
- fix: add null check for non-existent program in GetProgram by @BrunoSync in #16858
- Misc fixes by @Shadowghost in #16837
- fix: write livetv recording NFO dateadded as UTC by @tayfun-akguc in #16863
- Embed external subtitles into MKV when transcoding by @LTe in #16448
- Use --batch --yes for installing jellyfin keyring in devcontainer by @IDisposable in #16878
- Fix integrated provider images by @Shadowghost in #16855
- Modernize version display in UI by @JPVenson in #16862
- Have device deletion take list of ids by @LePips in #12834
- Add support for filtering boxsets by parentId by @Shadowghost in #16882
- Reorder Migrations and fix failing migration by @JPVenson in #16861
- Add CI format check by @jakobkukla in #15250
- Fix Merge Conflict Labeler by @Bond-009 in #16892
- Add support for filtering playlists by parentId by @Shadowghost in #16893
- Update issue template version to 10.11.9 by @theguymadmax in #16897
- fix: suppress repeated PriorityClass warning in MediaEncoder by @psavarmattas in #16872
- Backport: Fix/user manager collation by @Bond-009 in #16919
- Update issue template version to 10.11.10 by @theguymadmax in #16927
- Fix inconsistent extradata generated by hevc_vaapi on AMD driver by @nyanmisaka in #16913
- Improve OriginalLanguage normalization and inheritance by @Lampan-git in #16829
- Fix movie recommendations by @Shadowghost in #16856
- Fix A/V desync when resuming HLS with video transcode + audio copy by @LTe in #16580
- Fix Merge Conflict Labeler #2 by @Bond-009 in #16963
- Add new viewtypes options by @theguymadmax in #16177
- Add a collection API for
Included Infeature by @XSAM in #15516 - Fix CA2007 warnings in InstallationManager by @jonesy827 in #16946
- Use ConfigureAwait(false) in CollectionController by @PCEWLKR in #16953
- Remove NowPlayingQueueFullItems from session DTOs by @PCEWLKR in #16976
- Compare old file byte-by-byte to new stream by @IDisposable in #16936
- Add support for VobSub subtitle streams by @altqx in #16552
- Fix inaccessible artist when they exist in multiple libraries by @theguymadmax in #16977
- Fix similarity by @Shadowghost in #16942
- Fix Schedules Direct API Error Codes by @arazilsongweaver in #16920
- Fix folders being identified as seasons in mixed libraries by @theguymadmax in #16259
- Only resolve symlinks on playback by @Shadowghost in #16965
- Re-disable legacy authorization methods by default by @theguymadmax in #16992
- Write subtitles using SubtitleEdit by @Bond-009 in #16805
- Fix recently added episode links and posters by @Shadowghost in #16967
- Trim tags by @theguymadmax in #16994
- Fix incorrect list capacity by @theguymadmax in #16996
- Only default recursive to true if we have includeItemTypes by @Shadowghost in #16999
- Make EncoderPreset non nullable by @nyanmisaka in #17007
- Extract attachments in one ffmpeg command when dumping by @Shadowghost in #16915
- Fix season unknown for flat TV structures by @theguymadmax in #16995
- Improve Merge Conflict Labeler by @Bond-009 in #17018
- Prefer subtitle extension over codec by @Bond-009 in #16998
- Enforce parental filtering on additional endpoints by @Shadowghost in #17019
- Fix playlist visibility by @Shadowghost in #17025
- Fix subtitle replacement not invalidating cache by @Shadowghost in #17028
- Fix external data pruning on item deletion by @Shadowghost in #16941
- Discover existing trickplay files on scan by @Shadowghost in #16945
- Update issue template version to 10.11.11 by @theguymadmax in #17035
- Fix xUnit1051 in UserManagerLockHelperTests by @Shadowghost in #17043
- fix(dto): prefer PlaylistsFolder primary image for playlists tiles by @beateixeira04 in #16520
- Implement search providers by @Shadowghost in #16121
- Refresh live TV channel image when remapped (alt #7843) (fixes #7834) by @Bond-009 in #10841
- Media source handling fixes by @Shadowghost in #17041
- Prefer local alternate versions when deduplicating linked children by @Shadowghost in #17042
- Add code assistance section to PR template by @nielsvanvelzen in #17054
- migrate local comic providers to server codebase by @dkanada in #16444
- Fix duplicate trickplay images for interlaced videos by @nyanmisaka in #17058
- Fix CleanName and CleanValue refresh by @Shadowghost in #17064
- Assign correct season info to new episodes by @ivanjx in #17051
- Fix duplicate key collision by @theguymadmax in #17083
- Fix AudioDb album description not displayed for English (mirror of #16606) by @Gadnief in #17081
- Add support for background images and episode thumbnails from XMLTV by @SheaSmith in #17077
- Fix AlbumIds filtering by Name instead of by Id by @matt-teahan in #17085
- Replace usage of SharpCompress by @Bond-009 in #17089
- Fetch TV Shows creators from TMDB by @Rant423 in #17107
- Always apply recursive when filters are requested by @Shadowghost in #17088
- Extend TranscodingReason reporting by @Shadowghost in #17106
- improve book resolution from filename by @dkanada in #17087
- Follow native interoperability best practices by @Bond-009 in #17099
- Fix episode air date offset after initial scan by @theguymadmax in #17121
- Fix series year lost during name parsing by @theguymadmax in #17112
- Fixed "Deleting media that is still being watched in SyncPlay results in errors" by @pokreman06 in #14935
- Skip parsing root-level folders in SeriesResolver by @theguymadmax in #17116
- Deprecate the redundant /Trailers endpoint by @moontwister in #17094
- Fix audio sample rate forced to 48 kHz for non-Opus codecs by @moontwister in #17090
- Fix Identify returning wrong results by @theguymadmax in #17146
New Contributors
- @dpieski made their first contribution in #15398
- @allmazz made their first contribution in #15437
- @CodyEngel made their first contribution in #14824
- @kevgrig made their first contribution in #15227
- @KarkaLT made their first contribution in #15538
- @audrey-inglish made their first contribution in #14879
- @Xinerki made their first contribution in #15341
- @stevenaw made their first contribution in #15774
- @luigi311 made their first contribution in #15718
- @bjorntp made their first contribution in #15820
- @Smeagolworms4 made their first contribution in #15797
- @ZeusCraft10 made their first contribution in #15958
- @abitofevrything made their first contribution in #15926
- @vignesh1507 made their first contribution in #15997
- @jpds made their first contribution in #15908
- @Gladtbam made their first contribution in #16124
- @Daydreamer-riri made their first contribution in #16151
- @nileshp87 made their first contribution in #14927
- @loop95 made their first contribution in #14709
- @DerMaddis made their first contribution in #16144
- @cosu made their first contribution in #16255
- @NoFear0411 made their first contribution in #16318
- @JuanCalderon-17 made their first contribution in #16331
- @jaxx2104 made their first contribution in #16395
- @redinsch made their first contribution in #16368
- @lousando made their first contribution in #15377
- @scheilch made their first contribution in #16376
- @JanzenJohn made their first contribution in #15841
- @tyage made their first contribution in #16222
- @furdiburd made their first contribution in #16238
- @upscaylman made their first contribution in #16465
- @HeroBrine1st made their first contribution in #14745
- @bilbofroggins made their first contribution in #16501
- @ddemarco5 made their first contribution in #16609
- @shocklateboy92 made their first contribution in #16567
- @LTe made their first contribution in #16380
- @LiHRaM made their first contribution in #16594
- @ewkonzo made their first contribution in #14406
- @twsouthwick made their first contribution in #15355
- @johnpc made their first contribution in #16667
- @jskoetsier made their first contribution in #16658
- @MSalman5230 made their first contribution in #15762
- @dwandw made their first contribution in #16672
- @tcsenpai made their first contribution in #16739
- @sevenrats made their first contribution in #16518
- @dyld-w made their first contribution in #16704
- @itz4blitz made their first contribution in #16702
- @ExpctING made their first contribution in #16695
- @gabeluci made their first contribution in #16777
- @llaforest made their first contribution in #16769
- @poytiis made their first contribution in #16322
- @Biosias made their first contribution in #16646
- @lcorbasson made their first contribution in #16246
- @LmanTW made their first contribution in #16611
- @PERSONALPANCHIWIRIS made their first contribution in #16466
- @WizardOfYendor1 made their first contribution in #16321
- @benbenmoss made their first contribution in #16290
- @bittoby made their first contribution in #16792
- @jtvhd6 made their first contribution in #16853
- @BrunoSync made their first contribution in #16858
- @tayfun-akguc made their first contribution in #16863
- @psavarmattas made their first contribution in #16872
- @XSAM made their first contribution in #15516
- @jonesy827 made their first contribution in #16946
- @PCEWLKR made their first contribution in #16953
- @altqx made their first contribution in #16552
- @arazilsongweaver made their first contribution in #16920
- @beateixeira04 made their first contribution in #16520
- @Gadnief made their first contribution in #17081
- @SheaSmith made their first contribution in #17077
- @matt-teahan made their first contribution in #17085
- @Rant423 made their first contribution in #17107
- @pokreman06 made their first contribution in #14935
- @moontwister made their first contribution in #17094
Full Changelog: v10.11.11...v12.0-rc1
Alpine 3.22.5, 3.23.5 released
Tim Retout: seL4 repo relationships
The seL4 organisation on GitHub uses git-repo to manage multiple source repositories, and so there are a large number of projects to get your head around when figuring out the ecosystem.
As an experiment, I have taken the various manifest files across the org, and constructed a graph based on how frequently each pair of repositories is mentioned in a manifest together. See below:
[This may render badly when syndicated outside of my blog; and also on small screens. And probably large screens. I’ve attempted to make sure there’s a non-JS fallback – on my site with JS enabled, if you hover over a node, it should highlight connected nodes.]
The colouring of the nodes is mostly manual; I experimented with graph clustering algorithms but have not found a satisfactory result so far. Still, some clusters are obvious:
-
Kernel – the
seL4microkernel proper. This often but not always co-exists with the main cluster of core libraries, but it is pulled away slightly by the verification and microkit manifests. -
Verification – the verification repositories (
l4v,HOL,graph-refine,polyml,isabelle) form a very distinct group. These are connected only to the seL4 microkernel itself, which is the only component formally verified. -
Microkit –
microkitis a newer operating system framework that does not use CAmkES, so stands apart from the rest of the pack. I chose to scope this work to the seL4 org, so the LionsOS ecosystem and sDDF which are maintained by Trustworthy Systems are not shown. Also not linked isrust-sel4, because this modern world isn’t using git-repo in the main to manage its repositories. -
RefOS – I’d not come across
refosbefore, but it appears to be an example OS from 2021 built on the seL4 kernel.
It’s quite hard to pull apart the CAmkES framework and the core
libraries; there are definitely some which are more associated with VM
management, but the overall shape of this co-occurence data is a messy
ball in the middle with some outliers in orbit. One observation is
that camkes is correctly identified as more peripheral than
camkes-tool, which contains the actual core CAmkES code.
Reflecting on this approach, in hindsight I’m surprised that using co-occurences worked as well as it did – there was no attempt to actually inspect the code and find direct mentions of other code e.g. library header dependencies. As the newer microkit effort largely eschews git-repo, better results might be found by actually taking that more detailed approach, so that graph edges could represent real dependencies between two packages. Additionally, this could allow diving into the various libraries held in the different ’libs’ repos, to get a more granular graph of relationships between them.
However, I think I spent more time on making it possible to render graphviz graphs easily on my blog than actually gaining any insight into the codebase!
Dirk Eddelbuettel: RcppArmadillo 15.4.0-1 on CRAN: New Upstream Minor
![]()
Armadillo is a powerful and expressive C++ template library for linear algebra and scientific computing. It aims towards a good balance between speed and ease of use, has a syntax deliberately close to Matlab, and is useful for algorithm development directly in C++, or quick conversion of research code into production environments. RcppArmadillo integrates this library with the R environment and language–and is widely used by (currently) 1282 other packages on CRAN, downloaded 47.1 million times (per the partial logs from the cloud mirrors of CRAN), and the CSDA paper (preprint / vignette) by Conrad and myself has been cited 697 times according to Google Scholar.
This versions updates to the 15.4.0 upstream Armadillo release made on Thursday. We had run a complete reverse-dependency check leading up to it, asserting there were no issues with packages dependent on it. As it sometimes goes with that many packages involved, one CRAN package reported one test failure. And it turned out to be both unrelated and pre-existing. But sorting this out over one round of email delayed things by a day. And then I went cycling for a good cause so this announcement post comes a little later than usual. The package has also been updated for Debian, built for r2u, and by now also at CRAN for the different binary releases.
All changes since the last CRAN release follow.
Changes in RcppArmadillo version 15.4.0-1 (2026-06-17)
Upgraded to Armadillo release 15.4.0 (Medium Roast Agave)
Added
fill::nan,fill::pos_inf,fill::neg_infas optional fill forms for theMatclassAdded
.push_back()for appending elements to vectorsFaster handling of
find()within.elem()Faster element-wise
min()andmax()Faster
conv_towhen element types of input and output objects are the same
Courtesy of my CRANberries, there is a diffstat report relative to previous release. More detailed information is on the RcppArmadillo page. Questions, comments etc should go to the rcpp-devel mailing list off the Rcpp R-Forge page.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub. You can also sponsor my Tour de Shore 2026 ride in support of the Maywood Fine Arts Center.
v0.16.10
[0.16.10] - 2026-06-21
If you are upgrading from v0.16.x, replace the binary (or run docker pull). If you are upgrading from v0.15.x and below, please read the upgrading documentation for more information on how to upgrade from previous versions.
Added
- International Domain Names (IDN) support (#207).
- OAuth:
- OAuth Profile for Open Public Clients (draft-ietf-mailmaint-oauth-public)
- Client secret verification for confidential clients.
- HTTP: Add
redirectRootoption toHttpobject to allow redirecting requests to the root path to a different path (e.g./account). - ACME:
reuseKeyoption to allow reusing private keys in renewals. - IMAP:
- IMAP Extension for Object Identifiers (draft-ietf-mailmaint-imap-objectid-bis)
GETJMAPACCESScommand to discover the JMAP session resource URL (#2736).
Changed
Fixed
- JMAP conformance (pass the jmap-test-suite tests):
- Methods are only available if their capability is in
using. - Reject requests that do not specify
application/jsonin theContent-Typeheader. - Require
accountIdargument on requests. - Return unparsable ids in
notFound/notUpdated/notDestroyed/notCopiedinstead of dropping them. - Default calendars and address books are not subscribed by default.
*/set: Unchanged immutableidproperty is rejected on update.*/queryand*/queryChanges: nullrejected asnotRequest`.Email/query:- Improper
anchorhandling. - Total miscount when
collapseThreadsis enabled. - Wrong sort order on
hasKeyword,allInThreadHaveKeyword, andsomeInThreadHaveKeywordconditions. - Non-standard header values are not searchable.
- Improper
Email/copy: Take the source message id from the value'sidproperty.Email/set: Bump reference-resolution max_depth from 1 to 2.Email/import: Reject blobs that do not contain valid messages.EmailSubmission/set: returnsendAtandundoStatusin the created response.Mailbox/set: ReturnalreadyExistsinstead ofinvalidPropertieswhen creating a mailbox with an existing name.SearchSnippet/get: incorrect response structure.Thread/changes: emit a container delete when a thread becomes empty.VacationResponse/set: incorrect singleton handling.
- Methods are only available if their capability is in
- IMAP: Discard oversized non-synchronizing literals (#2768).
- DANE: Improper
TLSArecord validation (#2328 - credits to @vdukhovni). - OIDC: Add default domain name to groups that are not email addresses.
- RocksDB: Enable blob garbage collection to reclaim disk space from deleted blobs.
- Sieve:
includestatements ignore capitalisation of sub-script names (#1643) - Cache: Invalidate negative email caches when an account is created.
- Troubleshoot tool: Use the configured source IP address when connecting to remote servers (#2867).
Check binary attestation here
Vasudev Kamath: Releasing debvulns: CLI for listing Debian vulnerabilities
Following up on my previous post, I have released the debvulns CLI. This utility uses the same parsing logic as the debsecan-mcp server but exposes the functionality directly via the command line.
Why a new CLI?
While Debian's native debsecan utility exists, it lacks modern output formats like JSON and CSV, and fails to expose a significant amount of metadata available in the Debian Security Team's daily snapshot.
Additionally, running a persistent Model Context Protocol (MCP) server introduces context window overhead. The manifests and tool descriptions required by the protocol consume tokens even when idle. For debsecan-mcp, the MCP Inspector utility shows an overhead of roughly 150 tokens.
By contrast, an LLM can parse a standard CLI help menu on-demand without permanently draining the context window. Integrating the CLI into a persistent agent workflow can be achieved via a skill file, allowing the LLM to leverage the tool without repeated discovery overhead.
What else is NEW?
During testing, I observed discrepancies between the output of debsecan-mcp/debvulns and native debsecan. Debugging with an LLM revealed a bug in the version comparison logic that caused debvulns to underreport vulnerabilities. This has been resolved.
The current interface supports structured formatting and customizable data backends:
usage: debvulns [-h] [-s {critical,high,medium,low,negligible}] [-f {json,csv}] [--sort-by {package,cve}] [--vuln-url VULN_URL] [--epss-url EPSS_URL] [--suite SUITE] [--cache-dir CACHE_DIR] [--no-cache] [-v] debvulns - CLI Debian Vulnerabilities Tracker options: -h, --help show this help message and exit -s, --severity {critical,high,medium,low,negligible} Filter vulnerabilities by severity -f, --format {json,csv} Output format (default: json) -sort-by {package,cve} Sort vulnerabilities by 'package' or 'cve' --vuln-url VULN_URL Custom URL or local path for Debian Security Tracker data --epss-url EPSS_URL Custom URL or local path for EPSS scores data --suite SUITE Debian suite name (e.g. bookworm, sid). Auto-detected by default. --cache-dir CACHE_DIR Directory to cache fetched and parsed data (default: /var/cache/debvulns) --no-cache Do not use cached data, force downloading and parsing -v, --verbose Enable verbose debug logging (sent to stderr)
By allowing users to override data sources with local snapshots of the Debian Security Tracker and EPSS feeds, debvulns can run natively in airgapped environments.
What Next?
The next step is building a Prometheus exporter for this vulnerability data to streamline scanning and monitoring across data center infrastructure. Stay tuned.
Part-DB 2.12.3
Important
This version contains security fixes, it is recommended to update to this version immediately.
Important
If you are using Part-DB it would be helpful if you fill out this short survey on your usage of Part-DB (Google Forms): https://forms.gle/Q15twx3YYq3qCNfe8
Part-DB 2.12.3
Security fixes
- Fixed missing SVG sanitatization, when file was uploaded with non-svg extension
- Added CSP headers to static files, to prevent script execution, should an vulnerable file be uploaded somehow
Other changes
- Updated KiCad symbols
- Updated dependencies
Full Changelog: v2.12.2...v2.12.3
Distribution Release: PorteuX 2.7
Gunnar Wolf: systemd for Linux SysAdmins
This post is an unpublished review for systemd for Linux SysAdmins
systemd. Yes, in full lowercase. If there is ever a technology to cause controversy in the Linux world, this is it. Since its inception in 2010, systemd’s goals were set quite high — replacing the vital part in every Linux system that takes care of the system boot process. It quickly reached maturity, allowing its to be adopted as the main init system in most major distributions just five years later. But even given we are describing events that happened over a decade ago, systemd adoption still raises the temperature in any Linux-related discussion.
David Both’s comprehensive book tackles the “what”, the “why” and the “how” issues surrounding systemd. Carefully divided in 16 chapters, going from explaining the basics and some of the technical and political history behind the project to the different subsystems and aspects covered by systemd, its almost 450 pages can scare people away — but the text is written in a very clear, tutorial-like fashion, and while it can be read sequentially, cover-to-cover, the book is amenable for readers to pick a single aspect and jump straight to the relevant chapter.
One of the frequent criticisms the systemd project has received is that it aims to basically rewrite all of a Linux system, and just looking at this book’s index shows there is some truth to it. The first chapter is an introduction to the systemd project and a brief overview of its history (including the controversies around it), and the following four chapters deal about understanding and controlling the system boot process.
But that still leaves ten chapters to account for — they cover different aspects or sub-projects of systemd, such as time and date issues (synchronization, time specifications, and controlling repetitive tasks), understanding and leveraging the system journal that strongly departs from the old syslog system, network configuration and firewall management, system health and performance debugging — all of them, aspects that in the traditional Unix philosophy were managed by independent programs… And I can identify several systemd sub-projects not covered by this book!
We long-time Unix and Linux administrators took pride in how highly performant and stable systems were supported by the simplicity of our tools; systemd critics point out this massive project has absorbed dozens of individual tools, yielding corporate control over vast swaths of vital system tooling. Truth is… as a sysadmin myself, systemd is today one of my greatest allies.
I appreciate the author evaluates every component independently, including his personal evaluation of each — even stating he prefers working with the traditional programs in several areas.
If there is a criticism I must make about this book is that, although typographically it is well formed and taken care of, given it includes large amounts of console captures, having a maximum width below 70 characters means several lines are unnaturally cut short (and continued with odd indentations). I understand there is probably no “right” way to solve this, but it does affect the feeling of naturally reading the text.
32.2.0-beta1: OBS Studio 32.2.0 Beta 1
32.2 New Features
- Replaced add source dropdown with new dialog [Warchamp7]
- Improved FPS selector UX [jcm93]
- Added missing file support for filters [exeldro]
- Added ability for plugins to set custom icons for new source types [cg2121]
- Included .webp files when adding a directory to Image Slide Show source [TarunCore]
- Added copy paste functions to frontend API [exeldro]
- Added filter to compose SDR into HDR [jpark37]
- Added delete as a hotkey to delete sources on macOS [PatTheMav]
- Added dynamic bitrate support to multitrack video [lexano-ivs]
32.2 Changes
- Forced Intel-based installations to update to Apple Silicon version on macOS [PatTheMav]
- This change means that OBS Studio versions built for Intel-based Macs but running on Apple Silicon Macs will automatically update to OBS Studio built for Apple Silicon Macs. If an installation was using third-party plugins, those plugins will no longer load until replaced with Apple Silicon versions.
- Fixed audio mixer state getting out of sync when changing settings via websockets or plugins [Warchamp7]
- Added theming for checked QToolButtons [glikely]
- Improved OpenGL performance slightly on low-end machines [kkartaltepe]
- Set minimum size for color source to 1 pixel [exeldro]
- Added minimum width to spinboxes [Warchamp7]
- Disallowed overwriting the crash handler [sebastian-s-beckmann]
- Applied process mitigation policies for Windows [notr1ch]
- Adjusted description of multitrack video [jhnbwrs]
- Changed new capture devices to use fallback frame rate by default [PatTheMav]
- Improved DLL loading behavior on Windows [notr1ch]
- Limited multitrack video config to Custom service [PatTheMav]
32.2 Bug Fixes
- Fixed OAuth and dock state save corruption [PatTheMav]
- Fixed group bounds not resizing when removing items [howellrl]
- Fixed canvas mixes not being restored after video reset [dsaedtler]
- Fixed some erroneous crashes during shutdown [Warchamp7]
- Fixed display capture sometimes capturing black after a duplicator failure [ThrowTop]
- Fixed color of controls dock output buttons in System theme [shiina424]
- Fixed virtual camera reset failures [stephematician]
- Fixed potential crash when user discards changes in the settings window [suogesi]
- Fixed incorrect return value in virtualcam filter [xtfo]
- Fixed source toolbar buttons not working after dragging a source into a group [Warchamp7]
- Fixed properties hint icon spacing [Warchamp7]
- Fixed potential crash when a video device reconnects on macOS [jcm93]
- Fixed an issue where PipeWire could fail on NVIDIA GPUs [hoshinolina]
- Fixed obs_canvas_get_video_info returning incorrect framerate [dsaedtler]
32.2 Deprecations
- Deprecated obs_properties_add_button [sebastian-s-beckmann]
Version 2.16.22 hardens Abyss Web Server against HTTP/2 BOMB attacks
Soul of Anatolia: Meet the Team
Today, we’re excited to introduce the team behind the upcoming Soul of Anatolia map expansion for Euro Truck Simulator 2. This upcoming DLC will take drivers on a journey through one of Türkiye’s most diverse and captivating regions, featuring a rich blend of landscapes, historic cities, cultural landmarks, and scenic roads waiting to be explored.
In this edition of Meet the Team, we’d like to give you a closer look at some of the people working on the project. They have prepared a few words about themselves, their roles, and the work they have been focusing on throughout the map's development. We hope you enjoy getting to know the team helping shape the world of Soul of Anatolia.
Ernest - ETS2 Map DLC Lead
"I’ve been working at SCS for seven years now, and during that time I’ve been involved in a wide range of projects. Following the Greece DLC, Soul of Anatolia is my second project as lead. Just as in the past, I’m fortunate to have a very talented and enthusiastic team, whose work, even now in the development stage, shows that Anatolia will once again be a breathtaking DLC. Türkiye is a beautiful country, and everyone on the team is fully committed and proud to bring it to players in the most perfect form possible. I can’t wait to show you more!"
Tomáš - Senior Map Designer
"I joined SCS in December 2017 as a map designer, and I’ve been working in the same role ever since. Over the years, I’ve created many locations in our game world that you can drive through. I played a major role in the creation of cities such as Klaipeda, Andenes, Larissa, Lillehammer, Zadar, Olbia, and Kovrov, and I am currently creating cities for the Soul of the Anatolia DLC. I have also created many roads connecting these cities.
One of the major tasks that is part of my job as a map designer is working on border crossings. If you’ve ever driven through a border crossing in our game, you’ve likely come across my work. At some point, I became a specialist in this area, and I’m now in charge of all work related to borders.
What I enjoy the most about being a map designer is discovering new possibilities for map creation. I always try to get the most out of a specific location and bring as much originality and authenticity as possible into the game world. What brings me the most joy is when a player drives along our roads and recognises places they’ve visited in real life. Euro Truck Simulator 2 is still just a game, but we strive to make the player feel like they’re moving through the real world, and when that feeling comes to the player, it’s a sign to me that I’m doing my job well."
Jakub - Map Designer
"My journey into game development began at SCS four years ago, when I joined the team working on the West Balkans DLC. Since then, I’ve had the opportunity to grow both professionally and creatively while contributing to projects such as the Greece DLC and the Nordic Horizons DLC.
Creating immersive game worlds is where I feel most at home. As a creative person with a keen eye for detail, map design allows me to make the most of my strengths, bringing virtual environments to life and shaping experiences for players to explore.
I specialise primarily in landscapes, expansive scenery, and distinctive locations with unique character and atmosphere. I enjoy finding ways to get the most out of every location and creating a world that feels natural and authentic.
The greatest reward for me is the moment when I see that players are truly enjoying the game and that the world we’ve worked on is able to draw them in.
In addition to designing the game world, I also contribute to the creation of cutscenes and enjoy sharing my experience with my colleagues. I consider the sharing of knowledge across the team to be an important part of our work, as is our collective effort to continually improve the quality of our game.
Soul of Anatolia will be another beautiful and entertaining map DLC. You have a lot to look forward to!"
Klára - Map Designer
"Hi, my name is Klára, and I have been working at SCS for 3 years. During this time, I had the opportunity to be part of the amazing map teams that worked on the Greece DLC and the Nordic Horizons DLC. This time we are going to Türkiye, a country that truly stands out with its breathtaking landscapes, rich history, and unique culture. I am looking forward to capturing its atmosphere and bringing it to our game. Buckle up because this is just the beginning, and there will be much more to see!"
Vlad - Map Designer
"I come from the modding community, where I passionately built map mods for ETS2 for more than 10 years. Now, I have finally decided to join SCS Software, where I've already been working for almost 2 months! As a former experienced logistician and expeditor, SCS' trucking games actually inspired me to study transport and logistics, which led me to work in the logistics industry in the past. On the modding forums, I'm also known by the nickname "Vladzz-G".
Türkiye is my first project at SCS. It is a quite mountainous country, so it’s a great challenge and opportunity to apply my 10 years of mapping experience to represent the region as realistically as possible. Even so, I am still discovering new mapping tricks that make the work easier. Right now, I’m working hard on a coastal city (the name of which I won't reveal just yet!), creating advanced road layouts and doing initial landscape work. It is interesting that a long time ago, I tried to avoid mapping mountainous areas because I thought it would be too difficult, and I mostly preferred mapping flat or gently rolling terrain. But now, I feel quite confident mapping mountains too!
I can't wait to see how this DLC will look in the end, and I'm so excited to share my work with you all when the official DLC releases!"
Ondřej - Junior Map Designer
"Hi, everyone. I've been a fan of city-builders and simulators for a long time now, so a few months ago I decided to join the SCS family as a map designer, which combines both of my favourite genres in one.
Currently, I'm still learning and working on my very first project. The southern part of the Turkish coastline is as beautiful as it is challenging. I think that with its big hills and windy roads, it will be a great visual experience."
Petr - Junior Map Designer
"Hi! I joined SCS Software a few months ago. Ever since I was a kid, I’ve always loved building miniature cities with toy blocks. Today, I’m a huge fan of building and strategy games, and I also love digital drawing. It’s awesome that I get to build worlds for a living!
Soul of Anatolia DLC is my first project. Currently, I’m working on the southern part of the country, which is known for its massive and beautiful mountain ranges. I’m still learning the ropes and gaining valuable experience from my amazing colleagues. I’m doing my best to truly capture the style of the local atmosphere. I’m giving it my all, and I really hope the players will enjoy exploring the new map."
Lucie - Junior Map Designer
"I joined SCS in 2024 as part of the Nordic Horizons team, where I spent most of my time creating roads throughout Finland.
Now, I have the opportunity to work on several cities and interesting locations across Anatolia. Each place has its own distinct character and atmosphere, which makes the work varied and constantly challenging. What I enjoy most is the chance to capture the richness and uniqueness of this region and bring it to life in our game world."
Kristýna - Map Designer
"I joined SCS Software in 2020 and started working on the Iberia DLC, which was then in the middle of production. The last project I had the honour of working on before Anatolia called me was Nordic Horizons. I moved to the south from the towns below the Arctic Circle - there couldn't be a bigger contrast! It is this diversity and learning the peculiarities typical of different countries that keep us curious and eager to present those beautiful places in our game.
I joined the Türkiye team in the pre-production phase. I worked on various tasks across the map and in the process, got to know the variability and diversity of the regions of Anatolia. I was greatly impressed by the traces of rich history in the landscape. Due to the focus of our game on transporting goods, for example, Sultanhani Caravanserai cannot be missing. It is fascinating that sometimes, even at first glance, an ordinary hill, around which we drive, hides an archaeological site of ancient monuments."
Pavel - Map Designer
"Hi, my name is Pavel, and I have been working at SCS Software for almost seven years. As a Map Designer, I have collaborated with many great people on projects such as the Iberia, West Balkans, and Greece DLCs.
Thanks to my passion for roads and driving, I gradually transitioned into the role of a road specialist, contributing my experience to other projects as well, including the Nordic Horizons DLC, the Scandinavia Refresh, and the Benelux Rework.
My goal is always to enrich each project with new ideas and details, such as new prefab types and road accessories, to bring the experience of our virtual world a little closer to the real one. I hope to deliver something special for you in this project as well."
That concludes today’s Meet the Team! We’d like to thank everyone featured in this blog for taking the time to share a little about themselves and their contributions to Soul of Anatolia.
We always enjoy giving our community a glimpse behind the curtain and highlighting the talented people who bring our virtual worlds to life. We hope you enjoyed learning more about the team and the passion driving this project forward.
As development continues, we look forward to sharing more updates from the road ahead. Until then, make sure to add the Soul of Anatolia DLC to your Steam wishlist and remember to follow us on X/Twitter, Instagram, Facebook, Bluesky, and TikTok, or subscribe to our newsletter, so you never miss any updates. Until next time, we will see you on the road!
Russell Coker: HP Z4 G4
In what is hopefully the conclusion of my hunt for a cheap tower server supporting REBAR [1] I have just bought a HP Z4 G4 with W-2125 CPU for $320.
Hardware
One interesting thing is that it has an adaptor from SATA power to 8 pin PCIe power. According to Wikipedia the 8 pin connector provides 150W at 12V [2]. According to Wikipedia SATA power cables include 3 12V pins each of which can deliver 1.5A [3] which is 54W. The system as I received it had a single SATA power plug connected so potentially 150W could be drawn from a connector designed for 54W. The first thing I did was to connect a second SATA power connector on the same cable so I could have connectors designed for a total of 108W supplying potentially 150W (and definitely more than 75W).
I found two versions of the specs for this system, this version seems to match what I bought as it references W-21xx CPUs [4] while this version matches what I would rather have with a W-22xx CPU [5]. The URL naming scheme implies that there are potentially at least a few other variants out there. So much for the “buy name brand and you can buy two systems with the same model and have them work the same” benefit you hope to get. Why don’t they just name them “G4.1”, “G4.2”, etc?
It seems that W-21xx and W-22xx CPUs are incompatible, so the W-2295 scoring 30,804 multithread and 2,634 single thread on passmark that I hoped to get isn’t an option [6].
The system is well designed for space efficiency, both it and the Z640 are 17cm wide but the Z4G4 allows my to close the lid with the Intel Battlemage card installed which doesn’t come close to fitting in a Z640. It has 8 DIMM sockets and with the ready availability of 32G DIMMS that allows 256G of RAM which is the maximum the motherboard supports. That compares well to the Z640 that only has 4 DIMM slots and the Z6G4 which only has 6.
The system supports a maximum RAM speed of DDR4-2666 which is better than the DDR4-2400 of the Z640 but less than the DDR4-2933 of the Z6G4.
The NVMe sockets on the motherboard are a convenient feature. Most systems I run need at most two NVMe devices so this saves a PCIe slot which is important when dealing with GPUs that take 2+ slots. Also for systems that don’t really need NVMe I can use some of the small NVMe devices that I have no other use for. 128G NVMe devices aren’t even worth selling and 256G will be of little use in the near future. So when I move to gen4 Z servers I can use up some of them without wasting slots.
Using the lesser socket LGA2066 in the Z4G4 is a minor annoyance, but for a single socket system 18 cores is probably enough.
The BIOS has an option for single-socket NUMA, which is basically locking cores in a single CPU to specific RAM channels. I enabled it but it did nothing presumably because I only have 2 DIMMs. When I get more DIMMs I’ll do some tests of that and compare it with NUMA on my Z840.
Variants
There are many different variants of the Z4G4 and the only way to recognise them is by the CPU not by any part number or serial number AFAIK. The first difference is between server grade CPUs (the W-2xxx CPUs) and desktop grade CPUs (the i7 and i9 CPUs). The systems with i7 and i9 CPUs don’t support ECC RAM which makes them less reliable, gives smaller limits for RAM
The below table compares the Z640 which is my current desktop PC with the Z4G4, Z6G4, and Z8G4 systems. For the latter 3 I have included multiple options for the parts that differ in different models in the same name series. The Z4G4 I have is an early one which only supports W-21xx CPUs which means a maximum RAM speed of 2666 and the best possible CPU would only be 15% faster than my Z640. I can only use this for ML stuff as it’s the only system I have with REBAR support (which works well).
| Z640 (1 socket) | Z4G4 | Z6G4 (1 socket) | Z8G4 | |
|---|---|---|---|---|
| DIMM slots | 4 | 8 | 6 | 24 |
| Max DDR4 speed | 2400 | 2666/2933 | 2666/2933 | 2666/2933 |
| Max DIMM size | 32G | 64G | 64G | 64G/128G |
| System Max Ram | 128G | 512G | 192G/384G | 1.5T/3T |
| CPU Socket | LGA2011-3 | LGA2066 | LGA3647 | LGA3647 |
| Best CPU | E5-2699A v4 | W-2195/W-2295 | Platinum 8180/W-3275 | Platinum 8180/8280 |
| Motherboard NVMe | 0 | 2 | 2 | ? |
Conclusion
In my previous blog post I concluded that the next step up for me would be DDR5 systems [10]. But now some of the LGA3647 systems are appealing. The Z8G4 would be a decent upgrade from my current Z840 build server and should be affordable long before any two socket DDR5 system becomes affordable.
The Z4G4 doesn’t have any potential for useful upgrades. But for me it was a good cheap way to house a GPU that had already damaged the motherboard of one good system. If the Z4G4 has a PCIe slot break the way my Z840 did then it wouldn’t bother me a lot. It was annoying to discover how limited this variant of the Z4G4 is after buying it, but at that price I can’t complain.
A Z6G4 could be a nice workstation if I found one at a really low price. The only reason I’d seek one out is if I had a need for a desktop workstation with REBAR support, which seems unlikely.
- [1] https://etbe.coker.com.au/2026/05/04/tower-servers-rebar/
- [2] https://en.wikipedia.org/wiki/PCI_Express#6-_and_8-pin_power_connectors
- [3] https://en.wikipedia.org/wiki/SATA#SATA_power_connectors
- [4] https://h20195.www2.hp.com/v2/getpdf.aspx/c05527757.pdf?ver=4
- [5] https://h20195.www2.hp.com/v2/getpdf.aspx/c05527757.pdf
- [6] https://tinyurl.com/2avfb8qe
- [7] https://tinyurl.com/2ddf7t5y
- [8] https://tinyurl.com/kgmagfs
- [9] https://etbe.coker.com.au/2026/04/10/hp-z640-e5-2696-v4/
- [10] https://etbe.coker.com.au/2025/08/02/server-cpu-sockets/
Related posts:
- Tower Servers and Resizable BAR A feature on modern PCIe implementations is “Resizable BAR” AKA...
- Server CPU Sockets I am always looking for ways of increasing the compute...
- More About the HP ML110 Gen9 and z640 In May 2021 I bought a ML110 Gen9 to use...
Russell Coker: Font Sizes
The Problem
In 2019 I blogged about getting a 4K monitor because of my vision being inadequate for a 2560*1440 monitor [1]. Now I’m using a 40″ 5120*2160 monitor [2] and still trying to find the correct balance between how much I want to see on the screen and what I am physically capable of seeing on screen.
Currently Kitty is my terminal emulator of choice [3]. What I most like about it is the feature of having multiple terminal windows in a single OS window, so instead of having 9 or 16 different xterm instances running all with possible alignment issues I have a single window for all terminals which can be brought to the foreground. The impending 6.7 release of KDE (my favourite Linux desktop environment) [4] includes the feature of per-screen virtual desktops which might be the feature I need to make multiple monitors usable for me. One of the factors stopping me from using multiple monitors in the past was the issue of not getting the alignment of dozens of xterms right if a monitor goes to sleep mode and is regarded as disconnected, moving a few Kitty windows is much easier than moving dozens of xterms (also a tiling window manager isn’t my style).
I’ve just decided that the Terminus font (my favourite out of the monospaced fonts in Debian) is too small for me at 9.0 point. But then I tried 10.0 which looked really ugly and an experiment showed that 10.5 looked good.
What I’ve Learned
This is the best explanation I’ve seen of how ridiculous the whole font point thing is [5]. It doesn’t and won’t ever correlate to pixels. So what we ideally want to do is set the size on screen to match the actual pixel size of the font. I can’t find any software to interrogate a font file and find out what sizes it supports. The web page for the Terminus font says that it supports 6×12, 8×14, 8×16, 10×18, 10×20, 11×22, 12×24, 14×28 and 16×32 [6]. So the question is how to get a terminal program that uses one of those.
Kitty doesn’t and won’t support specifying font size by pixel. I tried some other terminal programs, I started with the Debian Wiki page TerminalEmulator [7] which wasn’t very helpful, I added some new entries to that page. There doesn’t seem to be another option for a terminal emulator with multiple terminals in one OS window that can arrange them automatically. I didn’t even get to the stage of checking whether other terminal emulators supported font size in pixels.
The lcdf-typetools package contains the program otfinfo which gives some interesting information on fonts but nothing about the font sizes in pixels.
Sites like Coding Font to compare fonts [8] can never work properly as the fonts will always be slightly different sizes as the same point size doesn’t mean the same display size.
The Current Situation
On my 5120*2160 monitor with 9 Kitty terminal sessions with 9.0 point font they each have 277*50 characters. With 10 point it’s 237*46 but fuzzy and unpleasant to read. With 10.5 point it’s 208*43 which isn’t as good as I’m used to but is still almost 4.5* as many characters as the original 80*25 standard for terminals.
Some time before 2019 I had a 4*4 array of terminal windows that were 100*25 or 120*25. That left some space at the right and bottom so I could open another 8 or 9 terminals that were partially obscured if I needed to. By 2019 before getting a 4K monitor I had a 3*3 array of terminal windows as my standard desktop and a larger monitor that did 4K resolution allowed me to have 16+ terminals again. Now with Kitty I routinely have 9 terminals in a 3*3 array and I can easily open more if I need them and have them resize appropriately.
This situation works reasonably well, but the element of just trying different sizes in 0.5 point increments until I find something that looks good is unpleasant. I should be able to specify the next largest increment of the bitmaps in the font and just have it look good.
Conclusion
It would be good if more people tested the terminal emulators in Debian and added information to the wiki page about them. The current page is useful but needs more information to support the variety of features that people find important.
We need some tools to provide information on fonts in Debian, such as the sizes of bitmapped fonts.
The whole point size thing is just wrong and would ideally go away. The vast majority of font use nowadays is for things that will probably never end up on a printed page so trying to map it to a physical size in fractions of an inch makes no sense. But that’s just one of many horrible things used for backwards compatibility that aren’t going to go away any time soon. Really everything involving inches should go away.
- [1] https://etbe.coker.com.au/2019/11/18/4k-monitors/
- [2] https://etbe.coker.com.au/2024/07/23/more-5120×2160-monitor/
- [3] https://etbe.coker.com.au/2023/10/29/hello-kitty/
- [4] https://kde.org/announcements/plasma/6/6.7.0/
- [5] https://tonsky.me/blog/font-size/
- [6] https://terminus-font.sourceforge.net/
- [7] https://wiki.debian.org/TerminalEmulator
- [8] https://www.codingfont.com/
Related posts:
- Kitty and Mpv 6 months ago I switched to Kitty for terminal emulation...
- Hello Kitty I’ve just discovered a new xterm replacement named Kitty [1]....
- Source Code With Emoji The XKCD comic Code Quality [1] inspired me to test...
HeidiSQL v12.19
12.19 - 2026-06-20
⛰️ Features
- Label the new tab like the selected table, in the "Select top x rows" action - (f87cc85)
🚀 Enhancements
- Pass LogLevel=error to the SSH command line - (923296d)
🐛 Bug Fixes
- (ui) Apply "disabled painting" to tree node icons, not to the text which gets unreadable - (4b2f469)
- Crash in grid export with no focused column and usage of IfThen() which evaluates all arguments before the function is called - (bfe336b)
- Reveal default text value of SQLite columns - (7f6e368)
- Do not use INVISIBLE keyword on MariaDB - (fb082b8)
- Prevent duplicate icons in Linux Alt-Tab by providing StartupWMClass with what xprop told me in the WM_CLASS line - (249c311)
- Compiler error 4001 on arm64: Incompatible type - (1dbe1ae)
- Compiler error 4001 and 4025on arm64: Incompatible type for arg no. 1: Got "SYSTEM.UITYPES.TFontStyles", expected "GRAPHICS.TFontStyles" - (aefc8fb)
- Compiler error 4001 on arm64: Incompatible types: got "TFontStyles" expected "Set Of TFontStyle" - (f67445f)
- Unhide hint on lblPasswordHint - (5f35d41)
- Initially visible password hint may confuse user - (ed0f932)
- Set new authentication plugin only if the user changed it, and then hint the user this will reset the password - (4ed89b8)
- Error dialog due to unsupported SHOW GLOBAL VARIABLES query on MySQL 3.x servers - (49c70f8)
- Truncate strings on UTF-8 boundaries in StrEllipsis - (2174388)
- Prevent access violation on session disconnect (nil ActivePage) - (f878277)
- "sort alphabetically" checkbox in column selector does nothing on macOS - (ec2b942)
- A checkbox does not seem to have Focused on macOS during a mouse-click - (c21f646)
- Work around mysql bug for "hidden" routines in UPPERCASE databases - (f51834c)
⚙️ Miscellaneous Tasks
- Add missing download QT6ARM step to release job - (7df0567)
- Align hostname in Transifex config file with the one in my ~/.transifexrc - (1a316c6)
- Align Transifex config to current directory structure, and add a client for Windows - (40bfb69)
- Require new step in release job, fix /tmp naming - (1fb805d)
- Attempt to compile a QT6 binary for Linux ARM64 / RaspiOS - (5dc2bc4)
Localize
- Update compiled .mo translation files - (ae730a8)
Contributors
- @ansgarbecker
- @ in #2514
v12.19-Windows
Bump version for v12.19 release
Release 2026.06.20
Distribution Release: Home Assistant OS (HAOS) 18.0
Reproducible Builds (diffoscope): diffoscope 321 released
The diffoscope maintainers are pleased to announce the release of diffoscope
version 321. This version includes the following changes:
[ Chris Lamb ]
* Fix compatibility with Ocaml 5.4.1.
You find out more by visiting the project homepage.
Reproducible Builds (diffoscope): diffoscope 320 released
The diffoscope maintainers are pleased to announce the release of diffoscope
version 320. This version includes the following changes:
[ Chris Lamb ]
* Support androguard 4 and previous versions. Thanks, linsui!
(Closes: #1140016)
* Use --long-form arguments when calling apktool in order to support apktool
version 3. Thanks again to linsui. (Closes: #1140015)
* Update copyright years.
You find out more by visiting the project homepage.
Under The Hood: In-Game Map QA
Creating Euro Truck Simulator 2 and American Truck Simulator is a collaborative effort involving many talented teams across SCS Software. While map designers, artists, programmers and more build the driving experience, another team works alongside them to ensure everything functions exactly as intended before players hit the road.
In this Under the Hood blog, we'd like to introduce you to two members of our In-Game QA team, Ivan and David. We asked them about their day to day work, how testing fits into the development process, why quality assurance is about much more than simply playing the game and more!
David - ATS Map QA Lead
"Hey, fellow truckers! My name is David, and I'm 28 years old. I joined SCS as a junior tester when I was just 20, and at the time, I was the youngest employee in the entire company. Today, I'm the QA Lead for ATS map testing. That means I organize and oversee the testing of all ATS map DLCs, communicate with the leads of our map design teams, solve the most complex issues and bugs we encounter, and simply be there for my team whenever they need help. Over the years, I've seen SCS Software grow from a team of around 100 employees into a company of more than 400. When I joined, we were working on the Oregon DLC, and it has been incredible to see how our development and testing processes have evolved and improved alongside our expanding game worlds."
Ivan - World Map Design QA Lead
"Hi everyone! My name is Ivan, and I've been with SCS Software for a little over six years. I started out as a junior tester, but soon after, I took on the responsibility of overseeing map testing for Euro Truck Simulator 2. Today, my role is World Map Design QA Lead, and I manage our entire map testing team, which currently consists of 20 people. Together, we oversee testing for both American Truck Simulator and Euro Truck Simulator 2. While my colleague Davincillo handles the day to day management of ATS, my main focus over the years has remained on ETS2."
When people hear "game testing" they often imagine that you simply get to play games all day. How different is the reality?
"Map testing is definitely not just playing the game all day. That's a classic myth. While the 'playing' aspect certainly has its place, it really only happens during the final stages of our testing process. The reality is far more methodical. We spend hours, or even days, testing one specific part of the map. We drive through the same stretch of road multiple times, checking completely different things on each pass while using different camera views and debug tools.
Simply playing the game is not enough to be a good tester. There is a specific skill set you need, these include attention to detail, a logical and analytical mindset, a good understanding of game industry standards, and a passion for making games more enjoyable for others. Communication skills are also vital because finding a bug is only half of the job. The other half is making sure the right people understand the issue. Ultimately, a good tester should save developers time. Instead of simply reporting that 'something is wrong,' a proper report explains the issue, how to reproduce it, what causes it, and potentially how it could be fixed."
What does a typical day look like for a QA Lead?
"Every day is a little different, but it generally consists of a mix of meetings, coordination, and oversight. Most of my time is spent assigning work, tracking testing progress, reviewing reported bugs, and regularly syncing with developers. Some days are calm and focused on planning, while others are all about solving unexpected, fast-moving issues. A large part of the job involves working closely with the team, discussing the bugs we find, figuring out the best approach, and deciding together what needs the most urgent attention."
What are some of the main things your teams are looking for when testing the game?
"It heavily depends on the stage of production. In the early stages, we focus mostly on the road network itself, its layout, and ensuring the drive is smooth. A big part of this phase is also checking the functionality of the economy and verifying the placement of game elements such as gas stations, companies, and truck dealers. In the later stages, our focus shifts to the AI's ability to navigate the road network, alongside visual polish, correct signage, and core gameplay. This is also when we examine performance across different areas to identify and fix any problematic frame rate drops.
Broadly speaking, we focus on almost everything related to the map. That includes road layouts and collisions, the job economy, gas station distribution, sleep areas and service locations, the UI map and its icons, direction blockers, road markings, traffic signs, speed limits, traffic lights, navigation and voice guidance, garage cutscenes, AI trajectories, triggers, quality consistency, scene logic, terrain, vegetation, world and country borders, asset collisions, gaps in terrain, floating objects, performance-heavy locations, environmental sounds and more!"
What do you enjoy most about working in QA?
"Being a game tester is a dream job for many people, and in many ways, it really is. There is an incredibly rewarding feeling in knowing that you're the safety net protecting the player's immersion and helping make the game better for everyone. It's deeply satisfying to watch a messy, broken build gradually turn into a polished world that millions of people will enjoy driving through.
When a new DLC is released and you see players talking about how smooth the roads feel, how great the scenery looks, or how well everything runs, it's a fantastic feeling. You can look at that and think, 'Yeah, my team helped build that.'"
When a new map DLC or major update enters testing, how do you approach such a large project from start to finish?
"The QA process often begins before production even starts. We provide early feedback on concepts to avoid known issues before development kicks off. Once production begins, we use an agile testing approach, working through multiple iterations throughout development rather than waiting until the very end to deliver one massive list of issues.
Our systematic testing process is divided into four iterations and an economy test. The first iteration focuses entirely on road layouts, ensuring roads, turns, and slopes are safely drivable, even with the longest trailers and low-power engines. The economy test then verifies that companies generate jobs correctly and that cities provide a healthy variety of destinations. As development progresses, later iterations shift towards visual quality, gameplay consistency, and overall polish.
To make testing manageable, we divide each project into smaller sections, sometimes resulting in dozens or even hundreds of individual tasks covering specific roads and cities. These are tracked throughout development, allowing us to revisit the same areas at different stages. We use maps, checklists, internal tools, and bug-tracking systems to ensure every square mile is covered, while also encouraging testers to explore freely because unexpected issues are often found where nobody would think to look."
Many players only see the finished product. Roughly how much testing goes into a map expansion, update, or feature before release? Does it differ depending on what needs testing?
"There is a massive amount of testing involved, and it differs greatly depending on the project. Smaller projects, such as special event maps, can be thoroughly tested in just a few days. On the other hand, a huge project like the Nordic Horizons expansion takes thousands of hours of rigorous testing before it is ready for release.
Every single road, city, company, gas station, sleep area, tollgate, and ferry is tested at least four times, with a different tester each time. To give some insight into the scale, our Mantis bug tracker recorded 6,849 reports for the Illinois DLC, while South Dakota has generated 6,318 reports so far. These reports range from tiny holes in the terrain that are almost impossible to notice to major bugs that can cause the game to crash. Every report is assigned a priority and severity level so that the most serious issues are addressed first."
How closely do QA teams work with map designers, programmers, artists, and other departments throughout development?
"We work very closely across departments because testing is integrated throughout the entire development cycle. As map QA, we collaborate most closely with the map design and art teams. While the majority of our day-to-day communication happens through reports in the Mantis bug tracker, we also actively discuss issues through private messages on our internal chat system, and arrange direct meetings whenever an issue is important enough. Our interaction with the programming department is mostly on a need-to-know basis, usually when there is an issue involving erratic AI behaviour or when a brand-new code feature is being implemented directly into the map."
What tools or methods help you track, reproduce, and report issues efficiently?
"We rely on several internal systems that are connected to one another to track individual bugs and the overall progress of a DLC. We use a specialised internal reporting tool that allows a tester to submit a bug directly from the game or the map editor into our central bug-tracking database. Within a few minutes, the report appears and can even be viewed directly inside the map editor itself. This allows map designers to immediately see the exact issue within their active workspace and resolve it much more efficiently, saving a significant amount of time throughout development."
If there's one thing you'd like for people to better understand about QA and the work your teams do, what would it be?
"We'd like players to understand that map testing is a highly skilled, technical job, not simply driving around looking at the scenery or casually stumbling across a floating tree. In reality, a good tester is part detective and part data analyst. If we come across a strange physics bump on a highway or see AI traffic piling up at a roundabout, we don't just report it and move on. We have to understand exactly why it's happening. Translating what is broken on the road into actionable, structured information that our developers can easily understand and fix takes time, patience, and deep knowledge of the game."
What is one aspect of QA work that you think players would be most surprised to learn about?
"Players would probably be surprised by just how much knowledge about the game and real-world infrastructure you need to become a good tester. Our team has to maintain a solid understanding of complex internal game rules, real-world traffic laws, and regional layout standards across different countries.
It's similar to the difference between someone who owns a truck and knows how to drive it and a mechanic who can remove the entire engine, take it apart piece by piece, and put it back together again. Becoming a highly skilled map tester can take years, and many testers naturally become specialists in certain areas of the game because they spend so much time working with those specific systems behind the scenes."
Have you encountered any particularly memorable, unusual, or funny bugs during your time at SCS Software?
Ivan: "Absolutely. Simulators have incredibly complex physics engines, and when things go wrong, they go wrong hilariously. It never gets old seeing an AI vehicle catapulted straight into space. Sometimes, our map designers also leave creative little surprises or jokes for us to discover during development, although we always make sure they don't make it into the live version of the game.
David: "One memorable moment happened while I was parking at a company prefab. I heard a train horn somewhere in the distance, and the sound kept getting louder until suddenly it was right next to me. The only problem was that there was no train there, and there weren't even any railway tracks nearby. A moment later, something invisible hit my truck and launched it all the way across the company. For a few seconds, I genuinely thought I had discovered a haunted company prefab."
How valuable are bug reports and feedback from the community when helping improve the game?
"Community feedback is extremely valuable to us. While our internal QA process is thorough, there are always issues that slip through, and players help us catch them by spotting details or inconsistencies that we might miss. What makes community feedback especially useful is the context players provide. Many are very familiar with the real-world locations we recreate, so they can quickly point out inaccuracies that would otherwise be difficult for us to notice. They also encounter a huge variety of gameplay situations, which helps surface edge cases that are hard to reproduce internally.
"In many cases, a well written report from the community can save us hours of investigation because players provide screenshots, videos, logs, save files, and clear reproduction steps."
Do you have a message for our community?
"A huge thank you for your support, feedback, and for riding along with us for so many years. It's an amazing feeling to work on a game where the players care just as much about the world as the people who build it. Your dedication pushes everyone at the studio to keep raising the bar with every new state, country, and feature. Safe travels, and we'll see you out on the road!"
We'd like to thank both David and Ivan for taking the time out of their busy days to chat with us about their roles in QA and how the team plays such an integral part in bringing our truck simulator titles to life. We hope you've learned a little more about the work that goes on behind the scenes. If you enjoyed this edition of Under the Hood, be sure to leave them a message in the comments below or on our social media channels. Until next time, keep on truckin'!