Release 26.06.29-01
Release: v26.06.22-03 → v26.06.29-01
Caution
Rollback Warning: This release contains irrevertable changes that are non-trivial to rollback from.
- Page API: Reshapes the
GET /api/v1/page/_render-sourcesresponse (genericfiles[]+ opt-in Sass source maps) and preview/live mode handling — consumers depend on the new contract. (#36264) - Publishing API: Adds a new
SCHEDULEDstatus tier toGET /api/v1/publishing, changing the response contract that downstream callers consume. (#36275) - Workflow: Changes the workflow fire-action REST contract to accept (and warn on) payloads carrying system location fields instead of rejecting them. (#36326)
Features & Enhancements
- Content Drive: Uploads now prompt for Asset vs File, send the chosen base type to the backend, and the backend resolves a content type from the
FILEASSETbase type (matching mime type to theacceptfield variable). (#36243, #36317) - Image Editor: New standalone
@dotcms/image-editorAngular library replaces the legacy Dojo editor, wired into Edit Content's binary field with server-rendered preview, crop/focal tools, command history, and download. (#36236) - dotAI / SDK: Productionizes the agentic runtime as
@dotcms/ai(sandboxed code execution against the dotCMS API) and migrates the MCP server onto it, addingdownload_assets/upload_assetstools. (#36309) - Site Search: Vendor-neutral Site Search with an OpenSearch implementation and a phase-aware router that dual-writes and reads correctly across ES→OS migration phases. (#36282)
- Folder API: New
GET /api/v1/folder/searchendpoint with name filtering, pagination, and sort, backed by a batch permission check that collapses N+1 permission queries into one SQL round-trip (fixes ~2s response times on large sites). (#36308) - Image Processing: Registers the libvips
rotatefilter (?filter=rotatenow works) and adds aSHARED_COMPLETEDdotGeneratedmode that generates renditions on local scratch and shares only the finished file across clustered instances. (#36284) - Container/JVM:
setenv.shnow auto-selects the GC algorithm by available vCPUs — G1GC with periodic GC for 1–3 vCPUs, ZGC for 4+ — overridable viaJAVA_OPTS_MEMORY. (#36259) - Cache: H22 async cache commits migrated from a fixed platform-thread pool to virtual threads (Java 25), with behavior and backpressure preserved. (#35992)
- Edit Content: The Tags field now shows a
Search tags or type to create one.placeholder in its empty state. (#36291) - SDK Examples: The
examples/nextjsreference example migrated to TypeScript (Next.js 16, React 19, Tailwind v4) with a refreshed "TravelLux" brand identity. (#36330)
Fixes and Known Issues
- Workflow: Reverts a regression that caused workflow steps to disappear. (#36278)
- Push Publishing: Static Push Remove now removes fallback-rendered page artifacts in every configured language (not just the default), mirroring publish behavior. (#36274)
- Push Publishing: Bundles stuck in a failed-to-send state against an unreachable endpoint are now finalized as
FAILED_TO_PUBLISHand removed from the queue once retries are exhausted, instead of looping forever. (#36342) - Push Publishing: Clicking content on the pending-bundles tab now opens the edit-content dialog. (#36292)
- Maintenance/Starter: Starter export and import now include Experiments and their Variants, which were previously silently omitted from backups and migrations. (#36339)
- OpenSearch Migration: Unified, phase-aware OpenSearch startup connection gate so an unreachable/misconfigured OS fails fast with an actionable message instead of an opaque exception ~30s into startup. (#36248)
- dotAI: Semantic search and streaming chat no longer throw a
ClassCastExceptionwith Amazon Titan Embed Text V1 — embedding JSON values are now read viaNumber.floatValue(). (#36314) - Vanity URLs: Unpublishing now correctly unpublishes the canonical page. (#36205)
- REST API: Fixes deprecated
ESIndexResourcecreate/modify path-param endpoints that returned HTTP 500 by forwarding the capturedparamsto the 3-argauth(...)overload; missing/invalidshardsnow returns 400. (#36260) - SDKs: Stop leaking UVE edit-mode
data-dot-*attributes into live/production pages, gated by analytics activity. (#36288) - SDK Client:
client.page.get()no longer returnsundefinedoptional params insidegraphql.variables, so the response is JSON-serializable for Next.js Pages Router. (#36290) - Edit Content: Single-option Checkbox/Radio/Select/Multiselect fields now display only the label from
label|valueoptions instead of the raw string. (#36319) - Admin Portlets: Content Type Edit dialog Cancel now closes the dialog, and the Tags portlet gains a Show Global Tags toggle plus Export Selected/Export All. (#36299)
- Plugins: Typing in the Exported Packages search field keeps focus in the input instead of jumping into the editable package-list textarea. (#36300)
- Content Drive: Fixes the Upload-button flow silently dropping the selected file in Chrome by consuming files before resetting the input. (#36352)
- SDK Docs: Audited and fixed broken README links across all 8
@dotcmsnpm packages and authored the missing "How to Enable Page Editing" section. (#36272) - AI Review: Stops review models from wrapping their entire output in a fenced code block by removing the example fence from the prompt. (#36303)
Deprecations, End of Life, and Reminders
- Folder API:
POST /byPathis deprecated (forRemoval) in favor ofGET /api/v1/folder/search; existing callers continue to work unchanged. (#36308) - Feature Flags: Removed
getFeatureFlagWithDefault, standardizing ongetFeatureFlagso a missing flag consistently resolves to enabled — note theFEATURE_FLAG_NEW_BLOCK_EDITORsites now default to the new block editor when the flag is absent. (#36306)
Infrastructure & Security
- CI/CD: New Release Tracks promotion engine advances floating Docker tags (
latest/standard/trailing) across the GA stream by release age, with registry-only state and digest-based re-pointing. (#36161) - CI/CD: GA releases now default to moving the
latestDocker tag, requiring an operator to type an exact phrase to skip, replacing the easy-to-forget boolean checkbox. (#36311) - CI/CD: Auto-PR reviewer upgraded to DeepSeek R1 via a configurable
REVIEW_MODEL_IDvariable, with theai-workflowsorchestrator pinned to the floating@v3tag and a raised output-token budget. (#36289, #36296) - CI/CD: AI auto-review comment behavior moved off the
sticky_namespacehack to first-class flags, defaulting to one rolling sticky comment per PR via theAI_REVIEW_STICKY_COMMENTSvariable. (#36302, #36336) - Testing: Adds a phase-aware OpenSearch test bootstrap plus a Maven profile and
justrecipe so the indexing flow can run under a chosen ES→OS migration phase without per-test instrumentation. (#36268) - SDK Tooling: Expanded
@dotcms/experimentsREADME and Next.js usage guidance, added example env/gitignore files, and improved Docker compose compatibility. (#36281)