❌

Lees weergave

Release 2026.08.20

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.08.20

GitHub Container Registry:

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

Changes

  • upgrade yt-dlp from 2026.7.4 to 2026.8.19 (8695478)

  •  

v12.3.0

⚠️ Potential Breaking Changes

Fixed storage connections leaking when asset requests were cancelled or a transformation failed, which eventually made every asset request return a permission error until Directus was restarted (#28076)
exists() now throws when the lookup itself fails, for example on a timeout, a connection error or rejected credentials, instead of also reporting false. Callers that relied on a false result for any failure need to handle the error. Note that S3 answers 403 rather than 404 for a missing object when the credentials cannot list the bucket, so granting s3:ListBucket is needed to keep getting a clean "missing" answer.

Fixed "Update Items" and "Delete Items" operations affecting every item in a collection when given an empty or missing key or query (#27759)
Nothing to target is a no-op

"Update Items" and "Delete Items" operations now return null instead of falling back to every item whenever the configuration doesn't target anything β€” that is, when key is empty or missing (e.g. [], "") and query is empty or missing (e.g. {}). "Update Items" additionally returns null when there is nothing to write, i.e. an empty or missing payload (e.g. {}, or [] for a batch payload). Flows that relied on the previous fallback to every item can use {"limit": -1}.

Contradictory options error

"Update Items" and "Delete Items" operations now throw an error when both key and query are defined. "Update Items" also throws when key or query is combined with a batch payload.

Updated ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION to match ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION (6000 px) (#28111)
The default maximum output dimension is now 6000 px. Users who rely on the previous limit of 3000 px can explicitly configure ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION.

Used the pm2 bundled with @directus/api in the Docker images instead of installing a separate copy, so its dependencies follow the versions pinned by the workspace (#28120)
If you extend the Docker image: it now boots via CMD ["node", "docker-entrypoint.cjs"], which runs the same bootstrap then pm2-runtime sequence as before. pm2-runtime is no longer on the PATH, so a custom CMD that called it directly should hand off to docker-entrypoint.cjs instead. pm2 itself remains on the PATH for docker exec diagnostics.

  • @directus/api
    • Fixed "Update Items" and "Delete Items" operations affecting every item in a collection when given an empty or missing key or query (#27759 by @ComfortablyCoding)
  • @directus/storage-driver-cloudinary
    • Fixed storage connections leaking when asset requests were cancelled or a transformation failed, which eventually made every asset request return a permission error until Directus was restarted (#28076 by @dstockton)
  • @directus/storage-driver-s3
    • Fixed storage connections leaking when asset requests were cancelled or a transformation failed, which eventually made every asset request return a permission error until Directus was restarted (#28076 by @dstockton)
  • @directus/storage-driver-local
    • Fixed storage connections leaking when asset requests were cancelled or a transformation failed, which eventually made every asset request return a permission error until Directus was restarted (#28076 by @dstockton)
  • @directus/storage-driver-supabase
    • Fixed storage connections leaking when asset requests were cancelled or a transformation failed, which eventually made every asset request return a permission error until Directus was restarted (#28076 by @dstockton)
  • @directus/sdk
    • Updated outdated type definitions for directus_files, directus_collections, directus_deployments, directus_settings, and directus_users (#27945 by @kheiner)

✨ New Features & Improvements

  • @directus/app
    • Added search-first AI tool discovery for chat and MCP tools, with schema pinned as a root chat tool. (#27797 by @bryantgillespie)
    • Added a caption field to the WYSIWYG image drawer, which wraps the image in a figure with a figcaption (#28026 by @alvarosabu)
    • Added the collection name appended to display template in item and drawer headers (#28078 by @AlexGaillard)
  • @directus/api
    • Added search-first AI tool discovery for chat and MCP tools, with schema pinned as a root chat tool. (#27797 by @bryantgillespie)
  • @directus/cli
    • Introduced @directus/cli (d6s / directus-cli) β€” a client-side CLI that syncs schema and configuration between Directus instances through committed JSON files, with sync pull, sync diff, sync push, and an interactive wizard (#27861 by @bryantgillespie)
  • @directus/types
    • Updated outdated type definitions for directus_files, directus_collections, directus_deployments, directus_settings, and directus_users (#27945 by @kheiner)

πŸ› Bug Fixes & Optimizations

  • @directus/app
    • Removed unused dependencies across the monorepo (#28049 by @ComfortablyCoding)
    • Removed dead β€œSave and Quit” dropdown row outside the content item view (#28051 by @robluton)
    • Fixed relational items with unsaved nested values, such as newly added translated items in a content version, rendering as -- instead of their display template (#28010 by @alvarosabu)
    • Fixed the repeater interface options showing empty sub-fields, and dropping their key and type on save, when the sub-fields were created through the API without repeating the key and type inside their meta (#28041 by @lazerg)
    • Fixed relational fields showing stale values after a manual flow updated them (#28056 by @AlexGaillard)
    • Fixed the Markdown interface's Edit and Preview buttons not indicating which view is currently active (#28023 by @Aniket-a14)
    • Fixed silent failure of dragging & dropping files with an unrecognized extension into the file library (#28093 by @alvarosabu)
    • Fixed a request for a non-existent item when opening an item whose Many-to-One field references an unsaved parent (#27975 by @sourav-18)
    • Updated outdated type definitions for directus_files, directus_collections, directus_deployments, directus_settings, and directus_users (#27945 by @kheiner)
    • Fixed field configuration appearing to close when selecting related collection that switches interface (#28118 by @robluton)
    • Fixed the translations interface AI translation button only showing for admins (#28089 by @AlexGaillard)
    • Fixed SSO login redirecting to the last visited page instead of the originally requested page (#28080 by @AlexGaillard)
    • Stopped the policy creation modal from writing app access permission rows to the database, matching the policy detail page where app access permissions are applied at runtime instead of stored (#28101 by @alvarosabu)
    • Added block-level custom formats to the WYSIWYG interface, so block, selector and items entries in the Custom Formats option apply classes and attributes to paragraphs, headings and other block nodes from the Formats dropdown (#28044 by @alvarosabu)
    • Fixed WYSIWYG content the editor can't represent being hidden and unrestorable in the comparison modal (#28067 by @alvarosabu)
  • @directus/api
    • Fixed storage connections leaking when asset requests were cancelled or a transformation failed, which eventually made every asset request return a permission error until Directus was restarted (#28076 by @dstockton)
    • Added a batch-import regression test pinning that a negative temporary key maps like any other non-existent auto-increment key in merge mode (#27861 by @bryantgillespie)
    • Updated MCP tool descriptions and safety annotations for connector clients. (#28090 by @bryantgillespie)
    • Updated or replaced various dependencies to address GHSA-rgw5-rvv9-x895 (#28050 by @br41nslug)
    • Improved MS SQL Server reliability and performance by optimizing schema introspection and only enabling trigger compatibility when required (#27699 by @br41nslug)
    • Updated various dependencies to address CVEs (#28110 by @br41nslug)
    • Fixed slow extension sync from remote storage during startup. Added EXTENSIONS_STORAGE_MAX_CONCURRENCY to configure the maximum number of concurrent requests to the extensions storage location (#27989 by @dstockton)
    • Updated ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION to match ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION (6000 px) (#28111 by @ComfortablyCoding)
    • Removed unused dependencies across the monorepo (#28049 by @ComfortablyCoding)
    • Fixed TranslationsService.updateMany incorrectly rejecting single-row updates containing both key and language (#28001 by @suhailopensource)
    • Fixed collection names with surrounding whitespace being accepted on creation (#28038 by @lazerg)
    • Fixed WebSocket rate limiting breaking on shared Redis setups where keys must start with a per-project prefix. The WebSocket limiter now accepts RATE_LIMITER_WEBSOCKETS_* values as overrides, including RATE_LIMITER_WEBSOCKETS_KEY_PREFIX to override the Redis key prefix. (#28107 by @AlexGaillard)
  • @directus/storage-driver-azure
    • Fixed storage connections leaking when asset requests were cancelled or a transformation failed, which eventually made every asset request return a permission error until Directus was restarted (#28076 by @dstockton)
  • @directus/storage-driver-gcs
    • Fixed storage connections leaking when asset requests were cancelled or a transformation failed, which eventually made every asset request return a permission error until Directus was restarted (#28076 by @dstockton)
  • @directus/release-notes-generator
  • @directus/schema
    • Improved MS SQL Server reliability and performance by optimizing schema introspection and only enabling trigger compatibility when required (#27699 by @br41nslug)
  • @directus/env
    • Fixed slow extension sync from remote storage during startup. Added EXTENSIONS_STORAGE_MAX_CONCURRENCY to configure the maximum number of concurrent requests to the extensions storage location (#27989 by @dstockton)
    • Updated ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION to match ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION (6000 px) (#28111 by @ComfortablyCoding)
  • @directus/extensions-registry
  • @directus/composables
  • @directus/extensions
  • @directus/errors
  • @directus/stores
  • @directus/utils
    • Removed unused dependencies across the monorepo (#28049 by @ComfortablyCoding)
    • Updated ESLint dependencies eslint, @eslint/js, eslint-plugin-vue, and typescript-eslint. Replaced eslint-plugin-import with eslint-plugin-import-x (#28047 by @br41nslug)
  • @directus/sdk
    • Removed unused dependencies across the monorepo (#28049 by @ComfortablyCoding)
    • Fixed an unhandled rejection in the sdk realtime client when the socket errored or closed during the auth handshake (#28009 by @Deluvio)
  • @directus/specs
    • Fixed OpenAPI spec drift, added missing query parameters, and ensured consistent parameter ordering across list endpoints (#27938 by @kheiner)
  • @directus/types
    • Fixed extensions that set sandbox without an enabled flag being rejected as invalid (#28087 by @dstockton)
  • @directus/extensions-sdk
    • Fixed extension validate crashing on extensions with a disabled sandbox due to an invalid findIndex call (#28087 by @dstockton)

πŸ“¦ Published Versions

  • @directus/app@17.1.0
  • @directus/api@39.0.0
  • @directus/cli@12.2.0
  • @directus/composables@11.6.1
  • create-directus-extension@12.1.3
  • @directus/env@6.2.1
  • @directus/errors@2.5.1
  • @directus/extensions@4.0.3
  • @directus/extensions-registry@4.0.3
  • @directus/extensions-sdk@18.0.3
  • @directus/memory@4.0.3
  • @directus/pressure@4.0.3
  • @directus/release-notes-generator@3.0.1
  • @directus/schema@14.0.2
  • @directus/schema-builder@1.0.2
  • @directus/specs@15.1.1
  • @directus/storage-driver-azure@13.0.3
  • @directus/storage-driver-cloudinary@14.0.0
  • @directus/storage-driver-gcs@13.0.3
  • @directus/storage-driver-local@14.0.0
  • @directus/storage-driver-s3@14.0.0
  • @directus/storage-driver-supabase@5.0.0
  • @directus/stores@3.0.1
  • @directus/themes@2.0.3
  • @directus/types@16.2.0
  • @directus/utils@13.5.3
  • @directus/validation@3.0.3
  • @directus/sdk@25.0.0

  •  

Release 2026.08.18

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.08.18

GitHub Container Registry:

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

Changes

  • fix: let the download reach the PO token provider (closes #1064) (f3c464f)
  • feat: carry the SponsorBlock toggle into subscriptions (b10bb61)
  • feat: first-class SponsorBlock toggle (8c2990e)

  •  

Release 2026.08.17

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.08.17

GitHub Container Registry:

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

Changes

  • fix: detect channels addressed without a tab (closes #1024) (e15aff3)
  • fix: carry yt-dlp warning context on the DownloadError path (closes #1047) (fccd207)
  • fix: keep generated filenames within the filesystem limit (closes #1034) (6461924)
  • feat: show the queued format in the Downloading table (closes #551) (c68fcad)
  • feat: DEFAULT_FOLDER pre-selects a download folder (closes #875) (a4454ac)
  • feat: shift-click to select a range of rows (closes #525) (75fe1f0)
  • fix: surface yt-dlp warning context on failed downloads (5826d0d)

  •  

Release 2026.08.16

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.08.16

GitHub Container Registry:

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

Changes

  • feat: let a subscription carry clip bounds (closes #1049) (aac9c63)
  • feat: allow a subscription's download folder to be changed (closes #1052) (3444b16)
  • build(deps): upgrade frontend dependencies to Angular 22.1 (59cf84a)
  • build(deps): upgrade Python dependencies (99b6452)

  •  

Release 2026.08.15

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.08.15

GitHub Container Registry:

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

Changes

  • docs: note that a configured proxy needs no ALLOW_PRIVATE_ADDRESSES (c8fb5bb)
  • fix: let a configured proxy live on any internal address (closes #1055) (de57484)
  • fix: judge the IPv4 tunnelled inside IPv6 transition addresses (7082858)
  • build(deps): bump aiohttp in the uv group across 1 directory (97d1cc8)

  •  

Release 2026.08.04

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.08.04

GitHub Container Registry:

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

Changes

  • fix: scope the connect-time loopback allowance to the configured proxy (482381d)
  • docs: put the closing keyword in the commit subject (0445f58)
  • docs: require Closes #N in commits that resolve an issue (6551f7a)

  •  

v12.2.0

⚠️ Potential Breaking Changes

Restricted the settings fields readable with minimal app access to those actually needed by non-admin users, no longer exposing admin-only and sensitive AI configuration fields (#27996)
The minimal app permissions now grant read access to only a subset of directus_settings fields. This applies to new policies, existing policies are untouched.

Replaced the TinyMCE editor powering the WYSIWYG with Tiptap... (#27754)
The WYSIWYG interface now runs on Tiptap instead of TinyMCE

  • tinymceOverrides no longer has any effect. Stored values are kept and a console warning is logged, but the editor ignores them. Use the fontsize/fontfamily toolbar menus and customFormats instead.
  • TinyMCE is no longer bundled with the app, so anything depending on it (custom plugins, skins, content CSS, the global tinymce object) no longer applies.
  • Existing content that contains markup the editor would normalize now locks the field read-only until the warning dialog is confirmed. Editing and autosave are blocked while locked, including raw-value editing.

Fixed deployment webhooks resolving a project from the wrong provider when external IDs collide (#27816)
The DeploymentProjectsService.readByExternalId method now takes the deployment ID as its first argument (i.e. readByExternalId(deploymentId, externalId))

Added support for multi-collection flat data imports (#27984)
Import file size is now capped by default
A new IMPORT_MAX_FILE_SIZE environment variable (default: 50mb) limits the size of uploaded import files and schema snapshots. Previously, imports were effectively unrestricted, allowing files larger than 50mb to be processed. With this change, imports exceeding the configured limit will be rejected. Increase IMPORT_MAX_FILE_SIZE to restore the previous behavior.

Updated background query flag handling for POST /utils/import/:collection
The background query flag now treats a valueless indicator (i.e. ?background) as true. If you previously relied on a valueless background flag being interpreted as false, pass an explicit value instead (i.e. ?background=false).

Added a mode parameter and partial snapshot support to the schema diff endpoint (#27984)
The SDK schemaDiff command now takes its options as an object (schemaDiff(snapshot, { force, mode }))

Added support for restricting image transformation output size via ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION (#27995)
Image transformation output is now restricted
Image transformations that project an output larger than ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION (default 3000 px) on either axis are now rejected with an IllegalAssetTransformationError.

  • @directus/app
    • Replaced the TinyMCE editor powering the WYSIWYG with Tiptap (#27754 by @alvarosabu)

      To avoid data loss, the editor preserves attributes (class, id, title, role, lang, dir, data-*, aria-*) and non-schema semantic tags. If stored HTML still contains markup the editor would normalize, the field is locked read-only with a warning dialog, so no edit or autosave can rewrite it before you confirm; raw-value editing is disabled while locked so the warning can't be bypassed.

  • @directus/api
    • Restricted the settings fields readable with minimal app access to those actually needed by non-admin users, no longer exposing admin-only and sensitive AI configuration fields (#27996 by @br41nslug)
    • Fixed deployment webhooks resolving a project from the wrong provider when external IDs collide (#27816 by @MahinAnowar)
    • Added support for multi-collection flat data imports (#27984 by @ComfortablyCoding)
    • Added support for restricting image transformation output size via ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION (#27995 by @br41nslug)
  • @directus/sdk

✨ New Features & Improvements

  • @directus/app
    • Added JSON path filtering to Studio filters. (#27918 by @robluton)
    • Added search to the collection selection in relationship configuration (#27950 by @baguse)
    • Added global setting for default save action (#27993 by @robluton)
    • Added LICENSE_KEY_MANAGEMENT_ENABLED to control license key management (#27779 by @AlexGaillard)
  • @directus/api
  • @directus/composables
  • @directus/system-data
  • @directus/types
  • @directus/env
    • Added LICENSE_KEY_MANAGEMENT_ENABLED to control license key management (#27779 by @AlexGaillard)
    • Added support for multi-collection flat data imports (#27984 by @ComfortablyCoding)
    • Added support for restricting image transformation output size via ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION (#27995 by @br41nslug)
  • @directus/sdk
  • @directus/specs
  • @directus/errors

πŸ› Bug Fixes & Optimizations

  • @directus/app
    • Fixed the translations split view hiding the second language when resizing the window (#27681 by @valerkahere)
    • Fixed geometry fields losing their subtype on schema changes (#27828 by @rajkumar0932)
    • Fixed stale dynamic permission presets after editing current account (#27899 by @scarab-systems)
    • Fixed a type error in the module bar default configuration (#27944 by @kheiner)
    • Amended app's save-as-copy logic to not create new items when only adjusting order on relationals (#27871 by @AlexGaillard)
    • Fixed the auth module registering a permanent cookie polling interval (#27851 by @dstockton)
    • Fixed presentation fields allowing required and/or readonly to be set (#27688 by @sourav-18)
    • Fixed missing translations for the Datetime display timezone options (#28000 by @lazerg)
    • Fixed dropdown menus shifting position when flipped above their trigger. (#27958 by @Harshith-muddasani)
    • Updated the remaining *.io references to the current *.com domains where possible (#27948 by @kheiner)
    • Updated the onboarding flow to replace the Privacy Policy link with the Data Processing Agreement (#27934 by @JamesW1)
    • Fixed live preview requesting a draft version before it exists, which caused a forbidden error (#27848 by @dstockton)
    • Fixed issue causing singleton primary key mismatch (#27919 by @robluton)
    • Restricted the settings fields readable with minimal app access to those actually needed by non-admin users, no longer exposing admin-only and sensitive AI configuration fields (#27996 by @br41nslug)
    • Fixed many-to-one fields to display the saved key when the referenced item is inaccessible due to permissions (#27899 by @scarab-systems)
    • Fixed a Forbidden error when publishing an itemless content version without delete permission on directus_versions (#27892 by @alex-hsieh)
  • @directus/api
    • Updated the remaining *.io references to the current *.com domains where possible (#27948 by @kheiner)

    • Added global setting for default save action (#27993 by @robluton)

    • Fixed OpenAPI spec error schema to match API error format (#27885 by @kheiner)

    • Restricted license key previews to administrators after initial project setup (#27886 by @ComfortablyCoding)

    • Stopped logging the missing custom IP header warning on /server/ping and /server/info, which are commonly hit directly (health checks) (#27903 by @dstockton)

    • Updated axios, sharp, liquidjs, js-yaml, minimatch, adm-zip, brace-expansion, linkify-it, fast-xml-parser and tar to address CVEs (#27990 by @br41nslug)

    • Fixed parsing of the deep query parameter, GraphQL nested arguments, and CSV import headers so keys dont collide with built-in object property names (#27992 by @br41nslug)

    • Fixed schema apply ignoring configured license (#27869 by @ComfortablyCoding)

    • Fixed aliased relational fields returning null in GraphQL when nested inside a Many-to-Any field (#27864 by @apoorva-01)

    • Fixed IP denylist not enforced for AI chat file downloads (#27994 by @br41nslug)

    • Fixed background imports (POST /utils/import/:collection?background=true) intermittently hanging and importing nothing when running behind a streaming proxy or CDN. (#27862 by @dstockton)

      Added an IMPORT_MAX_FILE_SIZE environment variable that caps the size of an uploaded import file, returning 413 Content Too Large when exceeded. Unset (unlimited) by default.

    • Fixed requests referencing duplicate primary keys resulting in forbidden error (#27882 by @lazerg)

    • Fixed manual flows triggerable by non authenticated users (#27997 by @br41nslug)

    • Fixed count, countAll, and PK counts being inflated when filtering across relations (#27926 by @ComfortablyCoding)

    • Fixed TUS uploads not respecting FILES_MIME_TYPE_ALLOW_LIST (#27793 by @amitmishra11)

    • Fixed WebSocket handlers not validating query parameters (#27845 by @tsushanth)

    • Fixed unnecessary schema cache rebuilds on permission-related changes (#27876 by @dstockton)

  • @directus/sdk
    • Updated the remaining *.io references to the current *.com domains where possible (#27948 by @kheiner)
    • Fixed nested filters on relational fields losing type inference, so filtering a related collection's field (e.g. filter: { o2m: { id: { _eq: 5 } } }) is now type-checked instead of silently accepting any value (#27815 by @MahinAnowar)
    • Removed phantom timestamp from directus_operations (#27942 by @kheiner)
    • Fixed an unhandled rejection in the sdk realtime client when the connection closed during a heartbeat ping (#27846 by @apoorva-01)
  • @directus/specs
    • Updated the remaining *.io references to the current *.com domains where possible (#27948 by @kheiner)

    • Fixed OpenAPI spec error schema to match API error format (#27885 by @kheiner)

    • Fixed background imports (POST /utils/import/:collection?background=true) intermittently hanging and importing nothing when running behind a streaming proxy or CDN. (#27862 by @dstockton)

      Added an IMPORT_MAX_FILE_SIZE environment variable that caps the size of an uploaded import file, returning 413 Content Too Large when exceeded. Unset (unlimited) by default.

    • Added missing /users registration and 2FA endpoint openapi specs (#27857 by @kheiner)

    • Removed OpenAPI query parameters that the underlying controllers never honor (#27922 by @kheiner)

    • Added missing id path parameter to the /comments/{id} OpenAPI spec (#27884 by @kheiner)

  • @directus/constants
    • Updated the onboarding flow to replace the Privacy Policy link with the Data Processing Agreement (#27934 by @JamesW1)
  • @directus/system-data
    • Restricted the settings fields readable with minimal app access to those actually needed by non-admin users, no longer exposing admin-only and sensitive AI configuration fields (#27996 by @br41nslug)
  • @directus/env
    • Fixed background imports (POST /utils/import/:collection?background=true) intermittently hanging and importing nothing when running behind a streaming proxy or CDN. (#27862 by @dstockton)

      Added an IMPORT_MAX_FILE_SIZE environment variable that caps the size of an uploaded import file, returning 413 Content Too Large when exceeded. Unset (unlimited) by default.

  • @directus/utils
    • Fixed background imports (POST /utils/import/:collection?background=true) intermittently hanging and importing nothing when running behind a streaming proxy or CDN. (#27862 by @dstockton)

      Added an IMPORT_MAX_FILE_SIZE environment variable that caps the size of an uploaded import file, returning 413 Content Too Large when exceeded. Unset (unlimited) by default.

  • @directus/schema
    • Fixed MSSQL schema introspection reporting the byte size as max_length for non-character types (#27825 by @BIGSUS24)
  • @directus/storage-driver-cloudinary
    • Fixed Cloudinary uploads failing when the configured root contains whitespace (#27841 by @itsabhay1)

πŸ“¦ Published Versions

  • @directus/app@17.0.0
  • @directus/api@38.0.0
  • @directus/composables@11.6.0
  • @directus/constants@14.4.1
  • create-directus-extension@12.1.2
  • @directus/env@6.2.0
  • @directus/errors@2.5.0
  • @directus/extensions@4.0.2
  • @directus/extensions-registry@4.0.2
  • @directus/extensions-sdk@18.0.2
  • @directus/memory@4.0.2
  • @directus/pressure@4.0.2
  • @directus/schema@14.0.1
  • @directus/schema-builder@1.0.1
  • @directus/specs@15.1.0
  • @directus/storage-driver-azure@13.0.2
  • @directus/storage-driver-cloudinary@13.0.2
  • @directus/storage-driver-gcs@13.0.2
  • @directus/storage-driver-s3@13.0.2
  • @directus/storage-driver-supabase@4.0.2
  • @directus/system-data@4.6.0
  • @directus/themes@2.0.2
  • @directus/types@16.1.0
  • @directus/utils@13.5.2
  • @directus/validation@3.0.2
  • @directus/sdk@24.0.0

  •  

Release 2026.07.27

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.27

GitHub Container Registry:

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

Changes

  • feat: write playlist/channel metadata files where their items go (#660) (06c63ec)
  • feat: let subscriptions be renamed from the list (#1044) (d66b04c)
  • refactor: make POST /retry take a singular id (ff1b73a)
  • fix: carry retry context through url indirection and re-gate retry options (08dccd9)
  • build(deps): bump actions/setup-python in the github-actions group (1f20aae)
  • fix: add track_number to compact entry extra keys (8a29f3a)
  • feat: add retry functionality for failed downloads (1839e54)
  • docs: cache-bust screenshot embed so the refreshed GIF shows (fceac97)
  • docs: refresh screenshot.gif for the current UI [skip ci] (a13762a)

  •  

Release 2026.07.24

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.24

GitHub Container Registry:

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

Changes

  • Added handling for unsupported URL (4e27600)
  • build(deps): bump actions/setup-node in the github-actions group (1c7261a)
  • fix: release per-download status_queue proxy on close to stop FD leak (4cf2b1b)
  • refactor: simplify music metadata processing by removing unused code and improving album signal detection (f3d670e)
  • feat: add music metadata processing and writing functionality (edf101f)

  •  

5.4.4

Note

UpSnap is, and always will be, free and open source software.

If someone is asking you to pay money for access to UpSnap binaries, source code, or licenses, you are being scammed.

The official and only trusted source for UpSnap is this repository (and its linked releases).
Do not pay third parties for something that is provided here for free.

Changelog

Bug fixes

Others

  •  

Release 2026.07.21

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.21

GitHub Container Registry:

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

Changes

  • feat: ALLOW_PRIVATE_ADDRESSES to opt out of the SSRF checks (closes #1036) (e061a8a)
  • docs: document the SSRF guard's connect-time coverage limitations (13cb65d)
  • fix: re-validate outbound connections at fetch time against internal hosts (1b02a99)
  • fix: fail closed when an SSRF-guarded host cannot be resolved (ebcfe57)
  • fix: enforce download-dir containment at the resolved-path chokepoint (3bd2c3e)
  • ci: update releases in place instead of delete-and-recreate (707f700)
  • chore: rework issue and discussion templates around scope policy (c519f45)

  •  

Release 2026.07.18

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.18

GitHub Container Registry:

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

Changes

  • feat: graceful cancel β€” SIGINT with SIGKILL escalation so partial files are finalized (closes #438) (4b05022)
  • ci: enforce the 25k Docker Hub limit on README.md (0dc9b0b)
  • docs: restructure README around the wiki as companion documentation (96f5ffe)
  • docs: add test gotchas, option checklist, and security invariants to AGENTS.md (1eafecd)
  • docs: encode project scope boundary in AGENTS.md (8fe81de)
  • docs: document pairing MeTube with a music tagger (fa02717)

  •  

Release 2026.07.16

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.16

GitHub Container Registry:

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

Changes

  • upgrade dependencies (8071611)
  • fix: prefer topic channel for album artist (220f991)
  • fix: block SSRF via user-submitted URLs (6d05287)
  • feat: add AlbumArtistPostProcessor to fill missing album-artist metadata (c104e30)

  •  

5.4.3

Note

UpSnap is, and always will be, free and open source software.

If someone is asking you to pay money for access to UpSnap binaries, source code, or licenses, you are being scammed.

The official and only trusted source for UpSnap is this repository (and its linked releases).
Do not pay third parties for something that is provided here for free.

Changelog

Others

  •  

Release 2026.07.13

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.13

GitHub Container Registry:

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

Changes

  •  

Release 2026.07.12

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.12

GitHub Container Registry:

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

Changes

  • fix: harden download lifecycle, subscriptions, and UI robustness (3ea4732)

  •  

Release 2026.07.10

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.10

GitHub Container Registry:

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

Changes

  • fix: honor OUTPUT_TEMPLATE for channel downloads (closes #1024) (e2c7778)
  • upgrade dependencies (c34a18d)

  •  

Release 2026.07.09

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.09

GitHub Container Registry:

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

Changes

  • Don't mark a subscription as broken just because all entries are filtered out as they have already been downloaded (ad90609)

  •  

Release 2026.07.05

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.07.05

GitHub Container Registry:

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

Changes

  • fix: fsync parent dir after direct-write fallback for durability parity (54463ba)
  • fix: serialize state before truncating in the direct-write fallback (b00d478)
  • fix: force 0600 on fallback state rewrites, not just creation (96e88a3)
  • fix: create fallback state file with owner-only 0600 permissions (49a46a7)
  • fix: make fsync best-effort so only mkstemp/replace failures fall back (961b54a)
  • fix: surface real storage errors from direct-write fsync fallback (e0549d6)
  • fix: limit atomic-write fallback to atomic-unsupported errnos (f315b75)
  • fix: fall back to direct write when atomic state save hits EPERM on NFS (c2c129d)

  •  

5.4.2

Note

UpSnap is, and always will be, free and open source software.

If someone is asking you to pay money for access to UpSnap binaries, source code, or licenses, you are being scammed.

The official and only trusted source for UpSnap is this repository (and its linked releases).
Do not pay third parties for something that is provided here for free.

Changelog

Bug fixes

Others

  •  

v12.1.1

Note

Directus is free for individuals and organizations under $5M annual revenue and 50 employees.
Get your free license key at directus.com/oig

πŸ› Bug Fixes & Optimizations

πŸ“¦ Published Versions

  • @directus/app@16.2.1
  • @directus/api@37.0.1

  •  

v12.1.0

Note

Directus is free for individuals and organizations under $5M annual revenue and 50 employees.
Get your free license key at directus.com/oig

⚠️ Potential Breaking Changes

  • @directus/api
    • Limited sensitive system mutations defined by GRAPHQL_SINGLE_USE_MUTATIONS to single use (#27801 by @br41nslug)
    • Removed /utils/hash/generate and /utils/hash/verify endpoints (#27774 by @br41nslug)
    • Fixed failed TUS file replacements leaving orphaned file records. Hardened upload path validation to prevent writes to extension and temporary storage directories (#27803 by @br41nslug)
    • Updated GraphQL WebSocket restrictions to match the HTTP endpoint and hid validation hints when introspection is disabled (#27801 by @br41nslug)
    • Added CORS_ORIGIN checks for websocket connections (#27812 by @br41nslug)
  • @directus/specs
    • Removed /utils/hash/generate and /utils/hash/verify endpoints (#27774 by @br41nslug)
  • @directus/sdk
    • Removed /utils/hash/generate and /utils/hash/verify endpoints (#27774 by @br41nslug)
  • Hardened the published Docker image and added a distroless Docker Hardened Image (DHI) variant alongside it. The standard image now applies outstanding OS-level patches at build time and drops npm/npx from the runtime; the new DHI variant is published under a -dhi tag suffix (#27670 by @br41nslug)

✨ New Features & Improvements

πŸ› Bug Fixes & Optimizations

  • @directus/app
    • Restored pre-v12 back button behavior: returns to the previously visited item/page when navigating via a relation, and to the collection listing when landing on an item directly (#27799 by @robluton)
    • Fixed the public page foreground image rendering side-by-side with the shader background instead of overlaying it (#27782 by @alvarosabu)
    • Added clearable indicator to input hash field (#27729 by @robluton)
    • Added lazy loading of social icons on v-button (#27724 by @alvarosabu)
    • Bumped version of @directus/license package (#27785 by @AlexGaillard)
    • Fixed array indexing (e.g. field[0] or field.0) in display and preview URL templates, so a template like {{ categories[0].name }} now resolves to the indexed value instead of rendering empty (#27773 by @dstockton)
    • Fixed a stored XSS vulnerability where the project color could break out of the generated favicon's SVG markup and inject arbitrary HTML (#27810 by @br41nslug)
    • Fixed an internal server error when validating out-of-range integer values (#27321 by @sourav-18)
    • Added interface settings for collection status field (#27781 by @robluton)
  • @directus/api
  • @directus/extensions-sdk
  • @directus/system-data
  • @directus/composables
  • @directus/validation
    • Fixed an internal server error when validating out-of-range integer values (#27321 by @sourav-18)
  • @directus/env
    • Limited sensitive system mutations defined by GRAPHQL_SINGLE_USE_MUTATIONS to single use (#27801 by @br41nslug)
  • @directus/utils
    • Classified the embedded IPv4 of IPv6 transition forms (IPv4-compatible, NAT64, 6to4) in IpBlocklist.checkAddress so they cannot bypass an IPv4 deny rule (#27698 by @joeltco)
  • License keys correctly validate, even when NODE_ENV=development

πŸ“¦ Published Versions

  • @directus/app@16.2.0
  • @directus/api@37.0.0
  • @directus/composables@11.5.1
  • create-directus-extension@12.1.1
  • @directus/env@6.1.0
  • @directus/extensions@4.0.1
  • @directus/extensions-registry@4.0.1
  • @directus/extensions-sdk@18.0.1
  • @directus/memory@4.0.1
  • @directus/pressure@4.0.1
  • @directus/specs@15.0.0
  • @directus/storage-driver-azure@13.0.1
  • @directus/storage-driver-cloudinary@13.0.1
  • @directus/storage-driver-gcs@13.0.1
  • @directus/storage-driver-s3@13.0.1
  • @directus/storage-driver-supabase@4.0.1
  • @directus/system-data@4.5.1
  • @directus/themes@2.0.1
  • @directus/utils@13.5.1
  • @directus/validation@3.0.1
  • @directus/sdk@23.0.0

  •  

Release 2026.06.28

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.06.28

GitHub Container Registry:

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

Changes

  • upgrade to Angular 22 (51fd203)
  • upgrade dependencies (d136344)
  • Bump actions/checkout from 6 to 7 in the github-actions group (33f1412)

  •  

Release 2026.06.20

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.06.20

GitHub Container Registry:

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

Changes

  • fix open download of cookie files (ce897ee)
  • upgrade dependencies (dd1b4c2)

  •  

Release 2026.06.18

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.06.18

GitHub Container Registry:

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

Changes

  • Incorporate PR feedback (04b9366)
  • Create AUDIO_DOWNLOAD_DIR in Docker image (d157444)

  •  

Release 2026.06.16

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.06.16

GitHub Container Registry:

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

Changes

  •  

Release 2026.06.13

Docker Images

Docker images have been built and pushed:

Docker Hub:

  • alexta69/metube:latest
  • alexta69/metube:2026.06.13

GitHub Container Registry:

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

Changes

  •  

v12.0.2

Note

Directus is free for individuals and organizations under $5M annual revenue and 50 employees.
Get your free license key at directus.com/oig

✨ New Features & Improvements

  • create-directus-extension

πŸ› Bug Fixes & Optimizations

πŸ“¦ Published Versions

  • @directus/app@16.1.1
  • @directus/api@36.0.2
  • create-directus-extension@12.1.0

  •  

v12.0.1

Note

Directus is free for individuals and organizations under $5M annual revenue and 50 employees.
Get your free license key at directus.com/oig

✨ New Features & Improvements

  • @directus/app
    • Added keyboard-editable date entry directly in the datetime field. The field shows its formatted value at rest and swaps to editable date segments on focus, while a calendar button still opens the picker popup. (#27693 by @robluton)
    • Added inline editing support to the JSON repeater interface. (#26863 by @bryantgillespie)

πŸ› Bug Fixes & Optimizations

  • @directus/app
    • Fixed license badge spacing issue (#27713 by @robluton)
    • Fixed license modals being impossible to dismiss when shown above a route drawer (e.g. field detail pages) by keeping dialog focus traps stacked in visual order, and scoped license dismissal cookies to the whole app so dismissals persist across navigation (#27714 by @dstockton)
  • @directus/api
    • Fixed revision snapshots being assigned to the wrong items during batch updates when read order differs (#27407 by @luciemdx)

πŸ“¦ Published Versions

  • @directus/app@16.1.0
  • @directus/api@36.0.1

  •  
❌