❌

Lees weergave

v1.11.2 - Docker Fix

1.11.2 (2026-09-26)

1.11.2 fixes the Docker image and the standalone tarballs of 1.11.1, which did not start. It contains all the security fixes from 1.11.1, so please update.

Thank you for your donations:

One-time

Monthly

Fixes

  • Docker: The server starts again. 1.11.1 excluded data/ from the standalone build with a pattern that also dropped Next.js's own metadata modules, so the Docker image and the bulwark-standalone-* tarballs failed on startup. npm start and Bulwark Lite were not affected

  •  

v1.11.1 - Security Hardening, Tasks in Month View & Multi-Account Fixes

1.11.1 (2026-09-26)

1.11.1 is a security and bug-fix release. It fixes four reported vulnerabilities, two of them critical, and the findings of a security audit. Please update.

Thank you for your donations:

One-time

Monthly

Security

  • Admin: Only a Stalwart superuser gets into the admin dashboard. The admin probe accepted Stalwart's default tenant-admin role, so the administrator of a single tenant was signed into a dashboard that configures the whole instance (GHSA-v6hr-cmxm-pv73, thanks @douwezijlstra-frl)
  • Admin: Admin status is only taken from an admin-configured server. A context cookie minted while custom JMAP endpoints were allowed let a user-chosen server keep answering the admin probe after the switch was turned off (GHSA-j867-89p4-v8hm, thanks @Vip3r-MC)
  • API: Cross-origin writes are refused on the JMAP passthrough and every other cookie-authenticated /api/ route, not only /api/auth/*. A page on a same-site sibling origin could run arbitrary JMAP as the signed-in user. The gate also decides on the decoded path, so /api/%61uth/... no longer skips it (GHSA-9mvj-98f5-9q6g, thanks @kah-ja)
  • Admin: Admin sign-in attempts are also capped at 50 per 15 minutes across all clients, because a forged X-Forwarded-For got a fresh per-IP budget when no reverse proxy is in front (GHSA-7pj2-232x-6698, thanks @richardweinberger)
  • Admin: Impersonation no longer puts the Stalwart master password into the session cookie. The webmail creates an app password on the target mailbox that expires after 8 hours and is revoked on sign-out, and a used impersonation link is refused after a restart or on another replica
  • Mail: A sender can no longer fake a DMARC or DKIM pass in the security badges, with a crafted envelope address or an Authentication-Results header of their own
  • Mail: Opening an SVG attachment's thumbnail on its own no longer runs the sender's script in the webmail origin
  • Mail: Remote content stays blocked in the mobile conversation view, the .eml attachment preview, the quoted original of a reply or forward, the print view, and for URL spellings the filter missed (backslashes, CSS escapes, image-set())
  • Mail: Links in image maps (<area>) no longer keep window.opener
  • Mail: A mailto: unsubscribe goes to the single address in the link, and the confirmation shows recipient, subject and body before sending
  • Mail: A crafted winmail.dat no longer freezes the tab
  • Composer: A sender name containing a quote can no longer add a recipient to a draft
  • Filters: Rule names, header names and sizes are escaped, so rules from plugins or imported filter sets cannot add commands such as redirect to the Sieve script
  • Plugins: Hooks and slots need a declared permission, like the host API does. http.post can no longer reach the JMAP passthrough, /api/admin/*, /api/settings or other credentialed routes, and plugin storage is kept per account and deleted on sign-out
  • Themes: The theme CSS sanitizer no longer lets remote resources through (url(//host), CSS escapes, image-set(), @font-face sources), and theme CSS can only target :root and .dark, also when a plugin transforms it
  • Files: WOPI file downloads are always served as inert attachments, so a blob typed text/html cannot run script in the webmail origin
  • Server: The SSRF guard also blocks loopback beyond 127.0.0.1, CGNAT, benchmark, multicast and reserved ranges, and NAT64, 6to4 and Teredo addresses that wrap an internal IPv4 address. Telemetry targets are checked at connect time, and OAuth token and revocation requests never follow redirects
  • Auth: Synced settings are keyed on the account a bearer token belongs to, so on a multi-domain server john@b.example can no longer read the settings of john@a.example
  • Auth: Wrong passwords tried through the login pre-check are limited, so the route can no longer be used as a password oracle or trip Stalwart's ban against the webmail itself
  • Auth: Signing out ends office editor sessions opened in that browser, and a full sign-out clears search history, open tabs, Files recents, staged plugin uploads and the other accounts' leftovers, also in other open tabs
  • Auth: Signing out when another account's restore had failed no longer leaves that account resumable
  • Auth: The failed TOTP login no longer passes on a user-chosen server's error body
  • Server: Visitors who are not signed in no longer get detailed health data, the pending advisory text, the plugin list, the full admin policy or every server's domain list
  • Server: The setup token is passed in the URL fragment, so it stays out of access logs, referers and history
  • Server: Not-found pages outside the app tree cannot be framed, ALLOWED_FRAME_ANCESTORS never applies to the admin dashboard or setup, and sibling subdomains can no longer widen the sidebar-app frame-src
  • Server: Favicons are only served as raster images
  • Docker: Runtime state and secrets (data/, local-data/, .env) stay out of the standalone build and the image, and the mock JMAP server can no longer be switched on in a release build
  • Lite: Sign-out revokes the refresh token, and a failed token login no longer keeps the password in sessionStorage
  • Lite: Every static page gets a CSP that allows only its own inline scripts, the Stalwart bundle refuses to run inside a foreign frame, and the Stalwart install instructions use a tagged release with a published .sha256 instead of releases/latest

Features

  • Calendar: Tasks with a due date show in the month view (#1107)

Changes

  • Plugins: Hooks that change outgoing mail need email:send, and display takeovers need email:render-takeover. Plugins that don't declare them lose those hooks
  • Themes: Theme CSS keeps only :root and .dark rules plus @font-face, @keyframes, @media and @supports. Every url() except a #fragment is removed
  • Admin: Impersonated sessions end after 8 hours, and sessions minted by earlier versions are signed out
  • Server: /api/health?detailed=true needs a session

Fixes

  • Mail: The inbox keeps rendering when a message has an unparsable date (#1099)
  • Mail: A folder no longer switches back to the unified inbox while it loads (#1102, thanks @guisea)
  • Mail: Replies in the unified inbox come from the identity of the account that received the mail (#1104)
  • Mail: Mail deleted during a list refresh no longer reappears (#966)
  • Mail: The message list no longer jumps while attachment chips load
  • Mail: Scrolling the unified inbox, cross-account views, tag views and "All folders" search no longer skips messages
  • Mail: A failed message-list read keeps the list on screen instead of showing an empty folder
  • Mail: Marking read, starring, tagging, emptying a folder and cancelling a scheduled send report it when the server refuses them
  • Mail: Tagging and pinning write only the keywords that change, so they no longer mark mail unread that was read on another device
  • Mail: New mail and folder changes keep arriving for users with seven or more shared accounts
  • Send: A dropped connection can no longer send a message twice
  • Send: Undo and edit of a message sent from a group identity act in the group's own account
  • Composer: A reply draft stays in its thread when it is re-opened or undone
  • Composer: An open draft stays on its own account across an account switch
  • Accounts: Quick account switches no longer mix up identities, so replies go out with the right From address
  • Accounts: Folders, filters and the account security page no longer show the previous account's data after a switch
  • Accounts: Settings sync turns back on after signing out of one of several accounts
  • Push: A notification opens its message in the account it came from
  • Calendar: Events you declined show struck through (#1110)
  • Calendar: Daily recurring events keep going past a DST gap
  • Calendar: iCal subscriptions stay with the login that created them, so refreshing or removing one no longer touches a calendar of another login
  • Auth: SSO sign-in behind nginx no longer fails with a 502 when the cookies would overflow its header buffer (#1096)
  • Auth: Sign-in and addresses work on internationalized domains (#1100)
  • Lite: A rate-limited token endpoint no longer signs you out
  • i18n: The dark/light mode titles and the "Themes" settings tab are translated in every language (#1105, #1106, thanks @dulinux), and so is the themes settings panel
  • i18n: Updated Portuguese (Brazil) translation (#1106, thanks @dulinux)

  •  

Release 2026.09.26

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.09.26

GitHub Container Registry:

  • ghcr.io/alexta69/metube:latest
  • ghcr.io/alexta69/metube:2026.09.26

Changes

  • chore: upgrade Python and frontend dependencies (f5e5ab3)
  • fix: say when an add is skipped because the video is in the download archive (98b0b10)
  • feat: Auto audio format and a Tags choice for what gets written into the file (ee2bb0b)
  • docs: reword the contribution guidance (d959cbc)
  • ci: warn when the README passes a 15,000-byte budget (04ebfb8)
  • docs: restructure the README as a landing page and variable reference (d310bcc)
  • docs: state in SECURITY.md that MeTube does not request CVEs (f319b26)

  •  

v2.14.0

Note

This release adds bulk actions for vulnerability findings, a redesigned risk-based security view, container process visibility, and search in the template selector.
It also improves update workflows, Compose handling, backups, Easy Join, and activity processing while resolving several access and configuration issues.

Security and vulnerability management

  • Added bulk ignore and restore actions for vulnerability findings β€” 8dd49f1ac48b6dc1a17c960e08287338934eb33f (#4158) (@kmendell)
  • Redesigned the risk-based security view β€” cac682df3161e4228b5217fc3c9361700485c280 (#4204) (@kmendell)
  • Improved the risk score model β€” 0238e1414138788e1b674b1ae9d1ffc5b65adc38 (#4205) (@kmendell)
  • Fixed environment-admin resource pages requesting globally protected data β€” 91825a6865e1e3a5a5913c0dfb938dc4093dbfe6 (#4151) (@kmendell)
  • Accepted Safari’s unrequested appid=false value during passkey assertions β€” a7db1aeafd3aff1e5e3161780dd37d117ac0084a (#4208) (@kmendell)

Containers, projects, and updates

  • Added a container processes tab β€” bbc70f7d6007b3532c1bc103e30e1cb9222ef6fe (#4187) (@kmendell)
  • Routed container updates through the activity system β€” 2e35dfda39ed51e692fb4b00c944fd1ba6ceb6e5 (#4167) (@kmendell)
  • Resolved pending update status consistently across containers, projects, and the dashboard β€” aaac10a0d5e1105edfa01a0708f4cdbaf6e96375 (#4189) (@kmendell)
  • Preserved Compose formatting when applying tag updates β€” b9d64a9f116f700f64fa30ebc04d5816e3174f20 (#4172) (@kmendell)
  • Recreated namespace dependents when updating Compose services β€” 33216715407a75a2b2ce499d228dab68a847ac87 (#4179) (@kmendell)
  • Preserved pinned Compose tags unless enabled by the updater strategy β€” 72532defe45ac340d07aaf01b6d6a9e393972d87 (#4180) (@kmendell)
  • Continued checking for updates for containers excluded from automatic updates β€” 4eeb7d43d3c4aea469803ea6f94645ab94f8de1c (#4181) (@kmendell)
  • Logged project updates during Git sync only when content changed β€” 439aee51db0e19769928e68454d610f2cb53cfcd (#4206) (@kmendell)
  • Skipped symlinked external bind sources when preparing project updates β€” bcaa9d447b5aa044c60a9aa657179b8000dfa2d7 (#4207) (@kmendell)
  • Kept the project Save action mounted to maintain a stable toolbar layout β€” dd37ce953c0e673776f7a843fabff612fa928147 (#4157) (@kmendell)

Environments, backups, and configuration

  • Allowed token re-entry when changing an agent API URL β€” af4dab5f00980e34c3870deffae636eb4a498793 (#4160) (@kmendell)
  • Allowed deleting backup records for missing snapshots β€” b30e617cfa403d91fd6306dfe88bdd2133a8dcb6 (#4161) (@kmendell)
  • Surfaced Docker join errors and added a manager-address override to Easy Join β€” e2312137c99ff400f8473265780816d6bf9cab3f (#4191) (@kmendell)
  • Allowed dots and hyphens in .env variable names β€” 144d7acced1ba23e0661148ce29b3db107732b58 (#4199) (@DominikZublasing)
  • Added search to the template selection dialog β€” 4bbcbfea6274e149a57daa386a57543df688f380 (#4183) (@kmendell)
  • Forwarded proxy configuration to Trivy scan containers β€” 85b9b16baa0d79edc7ab3d01df98dcd3d811a1d1 (#4168) (@kmendell)

Activity processing

  • Isolated activity subscriber payloads to prevent concurrent writes β€” 9fc00866b9107366824b91cdd887de54c8b089d6 (#4159) (@kmendell)

  •  

Release 2026.09.25

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.09.25

GitHub Container Registry:

  • ghcr.io/alexta69/metube:latest
  • ghcr.io/alexta69/metube:2026.09.25

⚠️ Action needed for bookmarklet users

MeTube now refuses requests sent from other websites unless their origin is listed in CORS_ALLOWED_ORIGINS. This closes a security hole (GHSA-cxj8-27g9-669f). If you use a bookmarklet, add the sites you use it on, e.g. CORS_ALLOWED_ORIGINS=https://www.youtube.com. Details in #1085.

Changes

  • docs: point readers at the wiki from the README top and the issue forms (dfe3daa)
  • fix: let a refused bookmarklet see why it was refused (e165b36)
  • test: pin that scheme-less internal URLs are refused before any fetch (2979e3a)
  • fix: refuse state-changing requests and socket connections from other sites (772a16c)

  •  

BookStack v26.09

Links

Upgrade Notices

  • Config - An APP_KEY value now must be set. It should be already set in the vast majority of cases, we just no longer fall back to a default value where unset, and instead error. If you get an error upon access after upgrading, ensure a key is set. You can find guidance here.

Full List of Changes

  • Added interface layout system for UI customization, with theme system support. (#6179)
  • Added API endpoints for searching within a specific book or chapter. Thanks to @enableservices. (#6182)
  • Added a page scroll progress indicator. (#6176, #5932)
  • Added ability to easily download API docs as JSON or HTML. (#6198)
  • Updated translations with the latest Crowdin changes. (#6225)
  • Updated app logo with better accessibility text. (#6171)
  • Updated codebase static analysis to PHPStan Level 5. (#6143, #6089)
  • Updated config to remove default APP_KEY value. (#6210)
  • Updated new WYSIWYG editor with a range of fixes and improvements. (#6207)
  • Updated page create/update endpoints to allow a changelog message. (#6162)
  • Updated user password changes to require their existing password. (#6181)
  • Fixed incorrect LDAP group result handling scenario. (#6088)
  • Fixed lack of label text connected to checkboxes for screen readers. Thanks to @MHameed. (#6173)
  • Fixed markdown table alignment being removed by page content filtering. (#6167)
  • Fixed page content popup being caught in text selection range. (#6214)
  • Fixed unexpected error when using an invalid page ID with the API. (#6136)

  •  

v5.55.1

5.55.1 (2026-09-24)

This is a hotfix release patching v5.55.0 that were causing a performance drop for the projects that have the documentation plugin.

βͺ Revert

  • documentation: restore properties for repeated relation targets (#27592), reverted in (#27783)

  •  

v1.11.0 - Bulwark Lite, Single-Occurrence RSVP & Stalwart Compatibility Fixes

1.11.0 (2026-09-23)

1.11.0 introduces Bulwark Lite, a static build of the webmail that runs without a Node server, and fixes many places where Bulwark and Stalwart disagreed about mail, filters, calendars, contacts and files. It contains everything from the three 1.11.0 betas. The latest Docker tag moves to this release.

Thank you for your donations:

One-time

Monthly

Features

  • Lite: Bulwark Lite, a static build that talks to the JMAP server straight from the browser. npm run build:lite builds it, and every release ships bulwark-lite-<version>.zip for any static web host
  • Lite: bulwark-lite-stalwart.zip, a Stalwart Application bundle that picks up its mount prefix at runtime, with OpenID Connect login
  • Lite: Container image ghcr.io/bulwarkmail/webmail-lite (#1081)
  • Themes: "Flat fields" theme
  • Calendar: Attendees can answer a single occurrence of a recurring event (#1086)
  • Mail: Office attachments open read-only in the document editor, straight from the message, when a WOPI editor is configured (#1047)
  • Push: Optional inbox-only push notifications (#983, thanks @guisea)
  • Mail: Toasts for mail actions that gave no feedback, and an "email sent" toast after immediate sends
  • Filters: "Keep a copy" option for forward actions
  • Filters: Per-rule "Also move messages marked as spam" option
  • Admin: Login page toggles in admin settings for the version, the 2FA code option, the heading and the subtitle (#1068)
  • Navigation: Deep links resolve to the local instance

Changes

  • Auth: Signing out of an SSO account also signs out of the identity provider when it advertises an end_session_endpoint (#905). Set OAUTH_END_SESSION=false to keep the provider session, for example when other apps share it, and OAUTH_POST_LOGOUT_REDIRECT_URI to send users back to the webmail afterwards
  • Filters: Move and copy rules leave mail that Stalwart marked as spam in Junk. Before, a rule such as "subject contains invoice" also collected phishing. "Keep" rules stay unguarded as the allow-list
  • Mail: Search sends terms exactly as typed, without adding a prefix wildcard, in tag views too
  • Mail: The message list loads attachment chips lazily, so large folders open faster (#1089)
  • Send: Scheduled send is limited to 7 days, the most Stalwart accepts
  • UI: Icon set migrated from Lucide to Tabler Icons
  • Docker: Pre-releases no longer move the latest tags
  • Docs: Most README details moved to the website docs, with new screenshots

Fixes

  • Mail: "All folders" search includes shared accounts (#1082)
  • Mail: A search inside a tag view narrows the tag instead of replacing it (#1084, thanks @rotterp)
  • Mail: Leaving an account drops a search folder scope that belongs to it (#1084, thanks @rotterp)
  • Mail: A failed search shows an error instead of "No results found"
  • Mail: In unified views, threads belong to the account that owns them (#1012, thanks @lucamzanon)
  • Mail: A failed move between accounts no longer deletes the original
  • Mail: "Mark all as read" marks every unread message instead of skipping pages past the first 500
  • Mail: Mark as spam and not spam report moves the server refuses
  • Mail: Unread-first order keeps bringing up unread mail past the first page
  • Mail: The tag button in a row's hover actions opens the tag picker instead of clearing the message's tags (#1032, thanks @douwezijlstra-frl)
  • Mail: Tag and tab counters no longer download every matching id
  • Mail: Text in fixed-width tables wraps to the screen on iOS (#1020)
  • Mail: Mail action toasts show again
  • Send: A send the server refuses is reported as failed instead of sent. When only filing the sent copy fails, a warning says so, so the mail is not sent twice
  • Send: A From override is also used as the envelope sender where the server accepts it. Where it doesn't, as on Stalwart, the composer says that the identity's address shows in the Return-Path (#1009)
  • Send: Sending with an identity adds its Bcc addresses
  • Composer: Attachments over the server's size limits are refused before upload
  • Composer: A staged attachment is kept until its upload finishes
  • Filters: Filters keep running while the auto-reply is on, and saving a filter no longer turns the auto-reply off
  • Filters: "Mark read", "star" and "add label" reach mail that the same rule moves, and rules keep their target folder after it is renamed
  • Filters: Forward actions respect the server's redirect limit (one on Stalwart) instead of being dropped without notice
  • Auto-reply: A warning appears before saving an auto-reply that Stalwart would refuse as too long
  • Calendar: Edits to a single occurrence stay on that occurrence and keep its details
  • Calendar: Date ranges are queried in the right time zone, and long recurring series or more than 1000 events no longer leave the calendar incomplete
  • Calendar: When the server refuses an event's invitations, you can save the event without sending them
  • Calendar: Subscriptions that fail with "Not authenticated" name the cause, such as a mail server certificate the webmail server does not trust (#1073)
  • Calendar: The subscription dialog no longer promises CalDAV URLs
  • Calendar: The import dropdown opens above the day and week views (#1049)
  • Contacts: Contacts with calendar, scheduling or free/busy links save, and cleared fields are cleared on the server
  • Contacts: vCard import no longer sends fields Stalwart rejects and writes addresses in the RFC 9553 form
  • Contacts: Deleting an address book that still holds contacts works
  • Files: Every file is listed, even when the account has more than maxObjectsInGet (#1069)
  • Files: Copying a folder copies its contents, and changes inside a shared drive go to the drive's account
  • Files: An upload or new folder whose name is taken becomes "name (2)" instead of failing
  • Files: Sharing works on Stalwart versions before 0.16.6
  • Files: Names Stalwart refuses are caught before sending, uploads store an accepted variant, and Office files keep their MIME type on Stalwart 0.16.6 and later
  • Account: You stay signed in after changing your password in settings
  • Account: Users who are not admins see their name, and changing the password or turning TOTP off asks for the current code
  • Auth: OAuth endpoints on the configured issuer's own host are accepted when they resolve to a private address, so split-DNS setups no longer need OAUTH_ALLOW_PRIVATE_ENDPOINTS (#1028)
  • Auth: Linking the mobile app re-authenticates against the account's own identity provider when OAuth is configured per server
  • Push: Push subscriptions are renewed before Stalwart's 7-day expiry, so a tab or app left open for over a week keeps getting notifications
  • Sharing: Principals are listed in directories with more than 500 users
  • Lite: The login page hides the server field once config.json sets jmapServerUrl (#1087)
  • Plugins: The plugin sandbox follows the app's "Automatic" language (#976, thanks @bartfaizoli76)
  • UI: The global error page loads the app's styles

  •  

Release 2026.09.23

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.09.23

GitHub Container Registry:

  • ghcr.io/alexta69/metube:latest
  • ghcr.io/alexta69/metube:2026.09.23

Changes

  • fix: stop folder errors from reading as a successful add (closes #1082) (292fe2d)

  •  

v12.4.1

πŸ› Bug Fixes & Optimizations

  • @directus/api
    • Fixed reading from folders endpoint as non admin (#28286 by @Nitwel)

πŸ“¦ Published Versions

  • @directus/app@18.0.1
  • @directus/api@39.2.1

  •  

v1.11.0-beta.3 (Pre-release)

Pre-release. General test build for 1.11.0. Not recommended for production. The latest Docker tag stays on 1.10.0. To try it, use ghcr.io/bulwarkmail/webmail:1.11.0-beta.3.

Bulwark Lite zips (bulwark-lite-1.11.0-beta.3.zip for static hosts, bulwark-lite-stalwart.zip for Stalwart Applications) are attached once the Build Static Lite workflow finishes.

Added

  • Attendees can answer a single occurrence of a recurring event (#1086).
  • Optional inbox-only push notifications (#983, thanks @guisea).
  • OpenID Connect login in the Bulwark Lite bundle for Stalwart.
  • Bulwark Lite as a container image (#1081).

Changed

  • The message list loads attachment chips lazily, so large folders open faster (#1089).
  • Mail search sends search terms exactly as typed, without adding a prefix wildcard. This also applies in tag views.
  • Scheduled send is limited to 7 days, the most Stalwart accepts.

Fixed

  • "All folders" search includes shared accounts (#1082).
  • A search inside a tag view narrows the tag instead of replacing it.
  • Leaving an account drops a search folder scope that belongs to it (#1084, thanks @rotterp).
  • In unified views, threads belong to the account that owns them (#1012, thanks @lucamzanon).
  • A failed move between accounts no longer loses the message.
  • "Mark all as read" marks every unread message and reports spam moves the server refuses.
  • Send and search report failed JMAP calls instead of claiming success.
  • Attachments over the server's size limits are refused before upload.
  • Sending with an identity adds its Bcc addresses.
  • Tag and tab counters no longer download every matching id.
  • Mail filters keep running while the auto-reply is on, keep flags and folder targets when mail is moved, and no longer pull spam out of Junk.
  • A warning appears before you save an auto-reply that Stalwart would refuse as too long.
  • Edits to a single occurrence stay on that occurrence and keep its details.
  • Calendar ranges are queried in the right time zone and past the server limits.
  • If the server refuses an event's invitations, you are offered to save the event anyway.
  • The calendar subscription dialog no longer promises CalDAV URLs.
  • Contacts with calendar links or cleared fields save correctly.
  • Files lists every file, even when the account has more than maxObjectsInGet (#1069).
  • Files can copy whole folders and write to shared drives, shares files on Stalwart versions before 0.16.6, and handles file names and types Stalwart refuses.
  • You stay signed in after changing your password in settings.
  • Users who are not admins see their name and can change a TOTP password.
  • Push subscriptions are renewed before Stalwart's 7-day expiry.
  • Sharing lists principals in directories with more than 500 users.
  • The plugin sandbox follows the app's "Automatic" language (#976, thanks @bartfaizoli76).
  • The global error page loads the app's styles.

Please report problems in the issue tracker.

  •  

v5.55.0

5.55.0 (2026-09-23)

πŸš€ New feature

  • admin: record token management in audit logs (#27605)
  • admin: content type folders (#27419)

πŸ”₯ Bug fix

  • ai endpoints requested when the ai feature is unavailable (#27525)
  • admin: suppress MISSING_TRANSLATION errors to fix sluggish editing (#26108)
  • admin: sso default role placeholder shows "choose here" twice (#27685)
  • content-manager: create on the fly prefills inverse from component paths (#27636)
  • content-manager: saved list sort resets on base-route navigation (#27663)
  • core/core: koa response helper types missing in consumer projects (#27380)
  • database: updateMany with relation filter subquery (#26909)
  • database: document-id migration can take hours on large localized tables (#27404)
  • database: updateMany ignores _q and filters (#27769)
  • documentation: restore properties for repeated relation targets (#27592) β€” ⚠️ Reverted in v5.55.1 (causing a performance drop for Strapi projects with the documentation plugin) β€” please update your projects to 5.55.1 instead if you're impacted ⚠️
  • graphql: exclude custom resolvers from built-in query field detection (#27462)
  • upload: store unsigned urls in richtext and blocks fields (#27593)
  • upload: media library degrades for roles without settings.read (#27687)
  • upload: show more media grid columns on wider screens (#27711)
  • utils: normalize string chunks before buffering streams (#27700)

βš™οΈ Chore

  • deps: remove unused dependencies from @strapi/strapi (#27540)
  • docker: postgres dev container fails to start on postgres 18 (#27668)
  • upload: promote the new media library out of future/ (#27666)

❀️ Thank You

  •  

v12.4.0

⚠️ Potential Breaking Changes

Updated MapLibre GL JS from 1.15.3 to 6.9.0 (#28216)
The map layout and the geometry interface now require WebGL2, which MapLibre has mandated since v3. Browsers that only support WebGL1, chiefly Safari 14 and earlier and older Android devices, will no longer render maps.

Dragging with a pointer or a mouse wheel keeps the hovered item popup pinned to the cursor as before. Touch drags no longer reposition it, since the underlying touch event carries no cursor coordinates.

Updated Unhead from 1.11.20 to 3.4.1 (#28248)
@directus/themes now requires @unhead/vue 3.x as a peer dependency. Projects that pair it with their own Unhead instance need to upgrade and follow the v2 and v3 migration guides.

Updated outdated type definitions for directus_comments, directus_flows, directus_operations, directus_presets, directus_roles, and directus_versions (#27956)
The following fields are now correctly marked as nullable:

  • @directus/types: Comment.user_created, Comment.user_updated, FlowRaw.user_created, OperationRaw.options, OperationRaw.user_created, Preset.collection, Role.description, and ContentVersion.hash
  • @directus/sdk: DirectusRole.parent and DirectusVersion.hash

Updated outdated type definitions for directus_relations, directus_policies, directus_shares, directus_access, directus_comments, and directus_versions (#27970)
Breaking changes in @directus/sdk:

  • DirectusRelation.meta and DirectusRelation.schema are now nullable
  • DirectusPolicy.ip_access and DirectusRelation.meta.one_allowed_collections are now correctly typed as string[]

Breaking changes in @directus/types:

  • Policy.enforce_tfa is no longer nullable
  • Share.name, role, password, user_created, date_created and times_used are now nullable

Fixed read permissions not enforced when resolving item keys for updateByQuery and deleteByQuery (#28143)
Update/delete by query now resolves the affected items with the read permissions enforced:

  • Read access to the collection's primary key field is now required.
  • The affected items are scoped to what the role can read, irrespective of update rights.
  • Nested o2m saves require read access on the child collection.

Added native mailtrap email transport support via EMAIL_TRANSPORT=mailtrap (#27873)
The transport is configured through the following environment variables:

  • EMAIL_MAILTRAP_TOKEN β€” an API token from https://mailtrap.io/api-tokens. Required.

  • EMAIL_MAILTRAP_SANDBOX β€” send to the testing inbox instead of real recipients.

  • EMAIL_MAILTRAP_TEST_INBOX_ID β€” which testing inbox to send to. Required in sandbox mode.

  • EMAIL_MAILTRAP_BULK β€” send via the bulk stream. Cannot be combined with sandbox mode.

  • @directus/app

  • @directus/themes

  • @directus/types

    • Updated outdated type definitions for directus_relations, directus_policies, directus_shares, directus_access, directus_comments, and directus_versions (#27970 by @kheiner)
  • @directus/sdk

    • Updated outdated type definitions for directus_relations, directus_policies, directus_shares, directus_access, directus_comments, and directus_versions (#27970 by @kheiner)
    • Removed the unused helper types ToTuple and TupleToUnion (#27956 by @kheiner)

✨ New Features & Improvements

  • @directus/app
    • Disabled inactive collections in the Studio, preventing them from being selected or used while being viewable (#27792 by @br41nslug)
    • Moved Flows into its own module and improved how they're organized and managed, including folders, search and filtering, import and export, and duplication (#28206 by @robluton)
    • Added support for hiding a manual Flow's own button, so it runs only from a Manual Flow field (#28206 by @robluton)
    • Added support for setting the From Name in the Send Email operation (#28206 by @robluton)
  • @directus/api
    • Moved Flows into its own module and improved how they're organized and managed, including folders, search and filtering, import and export, and duplication (#28206 by @robluton)
    • Added support for hiding a manual Flow's own button, so it runs only from a Manual Flow field (#28206 by @robluton)
    • Added support for setting the From Name in the Send Email operation (#28206 by @robluton)
    • Added native mailtrap email transport support via EMAIL_TRANSPORT=mailtrap (#27873 by @tsokolovs)
  • @directus/system-data
    • Moved Flows into its own module and improved how they're organized and managed, including folders, search and filtering, import and export, and duplication (#28206 by @robluton)
  • @directus/specs
    • Moved Flows into its own module and improved how they're organized and managed, including folders, search and filtering, import and export, and duplication (#28206 by @robluton)
  • @directus/types
    • Moved Flows into its own module and improved how they're organized and managed, including folders, search and filtering, import and export, and duplication (#28206 by @robluton)
  • @directus/cli
    • Moved Flows into its own module and improved how they're organized and managed, including folders, search and filtering, import and export, and duplication (#28206 by @robluton)
  • @directus/sdk
    • Moved Flows into its own module and improved how they're organized and managed, including folders, search and filtering, import and export, and duplication (#28206 by @robluton)
  • @directus/env
    • Added native mailtrap email transport support via EMAIL_TRANSPORT=mailtrap (#27873 by @tsokolovs)

πŸ› Bug Fixes & Optimizations

  • @directus/app
    • Fixed the image editor's error notice rendering as an unstyled info message instead of an error (#28245 by @Nitwel)
    • Updated Unhead from 1.11.20 to 3.4.1 (#28248 by @br41nslug)
    • Fixed relational edits made in quick succession saving duplicate create or update entries for the same row, which made the stale entry win and dropped block editor changes inside translations (#28247 by @alvarosabu)
    • Fixed the filter delete (x) button in the search bar's filter popover becoming unclickable on hover. (#28114 by @aniruddhav25)
    • Fixed table row context menus staying open when opening the menu on another row (#28191 by @robluton)
    • Updated outdated type definitions for directus_comments, directus_flows, directus_operations, directus_presets, directus_roles, and directus_versions (#27956 by @kheiner)
    • Updated outdated type definitions for directus_relations, directus_policies, directus_shares, directus_access, directus_comments, and directus_versions (#27970 by @kheiner)
    • Blocked crud usage for inactive collections and added a COLLECTION_INACTIVE error (#27792 by @br41nslug)
    • Updated dompurify, joi, express, qs, uuid, diff, pm2, OpenTelemetry and AI SDK dependencies to address CVEs (#28242 by @br41nslug)
    • Fixed the date picker calendar showing English weekday names and starting the week on Sunday regardless of the user language (#28147 by @lazerg)
    • Replaced lodash with lodash-es in the Studio (#28245 by @Nitwel)
    • Added new DEV_APP_PORT env var for setting the app port while in development mode (#28112 by @robluton)
  • @directus/api
    • Updated outdated type definitions for directus_comments, directus_flows, directus_operations, directus_presets, directus_roles, and directus_versions (#27956 by @kheiner)
    • Updated outdated type definitions for directus_relations, directus_policies, directus_shares, directus_access, directus_comments, and directus_versions (#27970 by @kheiner)
    • Blocked crud usage for inactive collections and added a COLLECTION_INACTIVE error (#27792 by @br41nslug)
    • Updated dompurify, joi, express, qs, uuid, diff, pm2, OpenTelemetry and AI SDK dependencies to address CVEs (#28242 by @br41nslug)
    • Updated stream-json from 1.9.1 to 3.6.0 (#28251 by @br41nslug)
    • Fixed read permissions not enforced when resolving item keys for updateByQuery and deleteByQuery (#28143 by @br41nslug)
    • Fixed relational fields ordering to align with the order of fields in query parameters. (#28197 by @wakqasahmed)
    • Fixed Oracle JSON filtering and json() function returning quoted strings for scalar string values (#28264 by @wofiporia)
    • Fixed schema cache synchronization timeouts leaving stale bus subscriptions and pending timers behind (#28178 by @lazerg)
    • Fixed the global access cache ignoring the client IP (#28190 by @br41nslug)
    • Updated sharp, nodemailer, tiptap, js-yaml and mysql2 dependencies (#28219 by @br41nslug)
    • Fixed the block editor flickering and losing its controls while editing a version (#28105 by @alvarosabu)
    • Fixed schema diff generation for nested metadata additions and removals (#27880 by @thribhuvan003)
    • Fixed FilesService.uploadOne to prevent client payloads from overwriting system fields (e.g., uploaded_by, created_on etc) (#28208 by @br41nslug)
    • Fixed year() function on Oracle returning the ISO week-numbering year instead of the calendar year, and made the Oracle date part functions (year, month, week, day, weekday, hour, minute, second) return numbers instead of zero padded strings (#28257 by @galshir)
    • Fixed uploaded_on not being set for TUS uploads (#28043 by @kheiner)
    • Fixed comment updates and deletes enforcement (#28162 by @kheiner)
    • Fixed foreign key constraints being dropped when updating a relation with a partial payload (#28137 by @lazerg)
    • Updated Flows and Operations tools to automatically fix incorrect X/Y positions for flow operations when used through (#28159 by @bryantgillespie)
      MCP and AI Assistant
  • @directus/types
    • Updated outdated type definitions for directus_comments, directus_flows, directus_operations, directus_presets, directus_roles, and directus_versions (#27956 by @kheiner)
    • Blocked crud usage for inactive collections and added a COLLECTION_INACTIVE error (#27792 by @br41nslug)
  • @directus/sdk
    • Updated outdated type definitions for directus_comments, directus_flows, directus_operations, directus_presets, directus_roles, and directus_versions (#27956 by @kheiner)
    • Added missing empty-parameter validation to readRelationByCollection, createField, deleteCollection, utilsExport, utilsImport, utilitySort, triggerFlow, and readShareInfo (#27970 by @kheiner)
    • Updated known-but-not-enforced string fields on directus_users, directus_settings, directus_deployment_runs (#28129 by @kheiner)
  • @directus/errors
    • Blocked crud usage for inactive collections and added a COLLECTION_INACTIVE error (#27792 by @br41nslug)
  • @directus/schema-builder
    • Blocked crud usage for inactive collections and added a COLLECTION_INACTIVE error (#27792 by @br41nslug)
  • @directus/utils
    • Blocked crud usage for inactive collections and added a COLLECTION_INACTIVE error (#27792 by @br41nslug)
  • @directus/memory
    • Fixed the local key-value store treating equal setMax values as updates (#28172 by @jashkarangiya)
    • Fixed concurrent local KV updates losing increments or overwriting larger values in setMax. (#28194 by @jashkarangiya)
  • @directus/release-notes-generator

πŸ“¦ Published Versions

  • @directus/app@18.0.0
  • @directus/api@39.2.0
  • @directus/cli@12.3.0
  • @directus/composables@11.6.3
  • create-directus-extension@12.1.5
  • @directus/env@6.3.0
  • @directus/errors@2.5.2
  • @directus/extensions@4.0.5
  • @directus/extensions-registry@4.0.4
  • @directus/extensions-sdk@18.0.5
  • @directus/memory@4.0.5
  • @directus/pressure@4.0.5
  • @directus/release-notes-generator@3.0.2
  • @directus/schema-builder@1.0.3
  • @directus/specs@15.2.0
  • @directus/storage-driver-azure@13.0.5
  • @directus/storage-driver-cloudinary@14.0.2
  • @directus/storage-driver-gcs@13.0.5
  • @directus/storage-driver-s3@14.0.2
  • @directus/storage-driver-supabase@5.0.2
  • @directus/system-data@4.7.0
  • @directus/themes@3.0.0
  • @directus/types@17.0.0
  • @directus/utils@13.5.5
  • @directus/validation@3.0.5
  • @directus/sdk@26.0.0

  •  

v2.13.1

Note

This release fixes project directory creation, container update, and upgrade workflows.
It also improves backup coverage and updates the Compose example configuration.

Project and Compose fixes

  • Create missing project bind directories as the runtime user β€” 8bcb59d538a28bcd149b42bcbb9e096d10eb1059 (#4138) (@kmendell)
  • Update the Compose example to include DISTRIBUTION=1 β€” 1b21e5c3594d3e60d8f8a449981a078a989790d6 (@kmendell)

Container update and backup fixes

  • Allow manual updates for containers excluded from automatic updates β€” 6c227d02de0f412371f4124214934af2933fe7f5 (#4139) (@kmendell)
  • Preserve data volumes when recreating containers during upgrades β€” 75f6ddb2bb8cee8cec52259d11d5123fe7b97f4d (#4141) (@kmendell)
  • Include separately mounted projects in system backups β€” 081e638de8000ec033a7fe4b4ac036ff8571e238 (#4144) (@kmendell)

  •  

v1.11.0-beta.2 - Bulwark Lite (Pre-release)

Pre-release. This is a test build for Bulwark Lite. Not recommended for production. The latest Docker tag stays on 1.10.0. To try the server build, use ghcr.io/bulwarkmail/webmail:1.11.0-beta.2.

Bulwark Lite

  • bulwark-lite-1.11.0-beta.2.zip: unpack it on any static web host and set your JMAP server in config.json. The JMAP server must allow CORS from the webmail origin.
  • bulwark-lite-stalwart.zip: a Stalwart Application bundle that serves itself under the configured prefix (e.g. /webmail).

The Lite zips are attached once the Build Static Lite workflow finishes (a few minutes after publishing).

Changes since beta.1

  • Toasts for mail actions that had no feedback, plus an "email sent" toast after immediate sends
  • Toasts show again
  • Deep links resolve to the local instance
  • A staged attachment is kept until its upload finishes

Please report problems in the issue tracker.

  •  

Part-DB 2.18.0

Warning

After upgrade, you need to run php bin/console doctrine:migrations:migrate (or equivalent) as webserver user after upgrade.. If you are running a docker container, use sudo docker exec --user=www-data partdb php bin/console doctrine:migrations:migrate, or sudo -E inside the docker container, to ensure that the migrations are applied to the correct database.

Note

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.18.0

New features

  • Added generic AI client, that can be used for any OpenAI compatible LLM API (#1551)
  • Allow to specify a color for custom part states by @killecaptron in #1537
  • Retrieve and store stock levels from info providers for parts by @killecaptron in #1538
  • Allow to configure which field groups are exported to KiCad by @lukas-runge in #1533
  • Show DEFAULT_URI value in server info page
  • Report an AI provider error instead of ending the request with a 500 by @killecaptron in #1539
  • Added an debug_vars() twig functions in the twig label sandbox to list all available variables
  • Do not download non-downloadable attachments and improve handling changing URLs on attachment merge by @killecaptron in #1531
  • Rate limit requests to info providers by @killecaptron in #1536
  • Allow direct refreshing parts from the info provider they were created with & batch refreshing by @killecaptron in #1532

Bug fixes

  • fix(mcp): gate the read-only get_part_details tool with read permission by @wangzhengzhuo05 in #1546
  • Fixed compatibility of AI extractor with OpenAI LLMs @killecaptron in #1540
  • Version the cache keys of the info provider DTOs to avoid exceptions after upgrade by @killecaptron in #1530
  • Fix stale KiCad category listing after EDA settings change by @lukas-runge in #1534
  • fix(eda): inherit KiCad reference prefix from ancestor categories by @wangzhengzhuo05 in #1547
  • Correctly reset collection forms on form reset (thanks @LMatt08)
  • Fixed error that unique entitity validation failed, even when one of two duplicate entries should be deleted

Other changes

  • Updated dependencies
  • Updated translations
  • Removed jquery dependency
  • Updated KiCAD symbols and footprints
  • Fixed deprecations & code structure

New Contributors

Full Changelog: v2.17.0...v2.18.0

  •  

Release 2026.09.20

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.09.20

GitHub Container Registry:

  • ghcr.io/alexta69/metube:latest
  • ghcr.io/alexta69/metube:2026.09.20

Changes

  • build: pin the frontend builder image to the last QEMU-safe digest (300bf79)
  • fix: align the row action icons across both download tables (ec01524)
  • fix: stop offering a dead Start button on queued downloads (closes #1081) (a6d81d4)

  •  

v2.13.0

Note

This release adds richer log controls, Telegram topic destinations, bulk container updates, retained logs, and project editor preferences.
It also improves update workflows, registry handling, UI behavior, and performance across projects, activity, and image updates.

Features

  • Added a stream label toggle for distinguishing STDOUT and STDERR in logs. (#3976, 4f10dee49f7a3c4b32a695cc9f05584403ea674d) β€” @kmendell
  • Added Telegram topic destinations for notifications. (#3978, e47164421a22b8a9f12714a923be566889d2cbe1) β€” @kmendell
  • Added a timestamp toggle to the log viewer controls. (#3979, 9fa57c867b1085a7142d7e755f87ddd9318b1a1d) β€” @kmendell
  • Added personal defaults for the project editor layout. (#3986, 67b34b9c032d8f56379ed60322839d39dc5af855) β€” @kmendell
  • Added bulk updates for selected containers. (#3971, 0365c6861d50ef5fc5aaf7f816e370955eadc398) β€” @mewajda
  • Added retained log viewing for stopped projects. (#4097, b350d394cd19027e90bb8dd581474de54745c434) β€” @kmendell

Fixes and UI improvements

  • Nested Compose services and networks under their respective sections in the outline. (#3985, f4573188664d88d6d3a8ac0427c34611211dcb72) β€” @angst911
  • Let the backend generate run IDs for manually submitted jobs. (#3987, af96a6e99b3fdc0b64cd8b26552e624be7732e54) β€” @kmendell
  • Added a separate tag-listing timeout for large registries. (#3990, 5262d2f33af966b856a10b8572c061bf7ba8fc18) β€” @kmendell
  • Updated the sidebar update item. (#4003, 476d8b17fc4f695e90a2758740fa77acf8ab42aa) β€” @kmendell
  • Sorted containers globally by live CPU and memory usage. (#4099, 18e4e3f5b1b2d8abf3999008cf3a0934bae6d4f3) β€” @kmendell
  • Surfaced Update All startup errors and adopted already-running jobs. (#4104, dc89ea0b1920f4f2d6eefb92f2cafb9b528822ca) β€” @kmendell
  • Sorted network subnet and gateway columns numerically. (#4119, 324adf3585ece4ecd1f4f3317875521398028ea7) β€” @kmendell
  • Prevented header actions from overlapping badges and added per-device layout modes. (#4121, 9454ce57db6763263e4628cc58a4c2e1c169183d) β€” @kmendell
  • Included container image references in update discovery. (#4126, e0357ec8468fadb8a8daba7804ec20594092d3b0) β€” @kmendell
  • Displayed project-scoped versions instead of image digests. (#4127, ddead64b8b96e0929a0e79acd8d1a4f350e2f5a3) β€” @kmendell

Performance

  • Skipped repeated per-message visibility reads and source lookups on the local activity stream. (#4105, 423cd549b74271f8a4b3992cf04e5920d6a06dc5) β€” @kmendell
  • Resolved GitOps Compose paths once per project list request. (#4106, f5d6f37dba1c9cab72271d6e9d183cbe1f7fd79e) β€” @kmendell
  • Enriched filtered project lists after pagination. (#4108, 92349aa97949e54ee2409a1c4a3c35758df60e8a) β€” @kmendell
  • Deduplicated and parallelized container tag checks. (#4109, 57812f8f0511e9f2d3f6b6fa17242da6db98d592) β€” @kmendell
  • Replaced repeated update-record scans with indexed lookups. (#4110, 109f22402d059167b079f735b19b72e4029ca4ef) β€” @kmendell

  •  

v0.20.0

What's Changed

  • Add network monitoring from agents (#2266, #1911)
  • Add container image update available flag (#2211)
  • Add btrfs filesystem reporting as storage pools (#2315)
  • Add persistence of view preferences and language to user settings (#1831)
  • Add TRUSTED_PROXY_IPS allowlist for TRUSTED_AUTH_HEADER (#2327)
  • Add ZFS utilities to Intel and NVIDIA agent images (#2288, #2311)
  • Revert SMART warnings for certain attributes (#2296, #2308, #2347)
  • Improve NVMe data units display as human-readable GB/TB (#2303)
  • Fix agent disconnects during slow collections by extending WebSocket deadline (#2294)
  • Fix missing root CA certificates in base agent image (#2291)
  • Fix false RAID health warnings during healthy data scrubbing (#2109)
  • Fix ZFS monitoring when /dev/zfs is unavailable (#2325)
  • Fix spurious HUB_URL warning in SSH-only mode (#2316)
  • Fix idle GPU utilization display in systems table (#2312)
  • Fix session handling to clear auth store after token expiry (#2310)
  • Fix chart history handling when switching to live charts (#2333)
  • Update Go dependencies

New Contributors

Full Changelog: v0.19.0...v0.20.0

  •  
❌