This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+13 more
Affected surfaces
ReleasePort's take
Moderate signalLeantime v3.8.0 migrated all legacy .tpl.php, .sub.php, and .inc.php templates to Laravel Blade, modernizing the frontend template system.
Why it matters: The refactor (severity 70) eliminates outdated PHP‑based templating, reducing maintenance overhead for developers and SREs managing Leantime deployments.
Summary
AI summaryBroad release touches Other Changes, Bug Fixes, Highlights, and fix.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Added full multi-collaborator support for task assignment with UI updates. Added full multi-collaborator support for task assignment with UI updates. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Feature | Medium |
Added Arabic (ar-SA) language support. Added Arabic (ar-SA) language support. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Feature | Medium |
Implemented backend API changes for Leantime Mobile app (TestFlight beta). Implemented backend API changes for Leantime Mobile app (TestFlight beta). Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Feature | Low |
Updated Korean (ko-KR) translations. Updated Korean (ko-KR) translations. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
Added server‑authoritative session resolution for mobile clients (Users::getUser defaults to session user). Added server‑authoritative session resolution for mobile clients (Users::getUser defaults to session user). Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
Exposed Users::getUsersWithProjectAccess and Projects::getProjectsUserHasAccessTo resolving userId server‑side. Exposed Users::getUsersWithProjectAccess and Projects::getProjectsUserHasAccessTo resolving userId server‑side. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
Added Auth/**AccessToken**::revokeCurrentToken() for secure client‑side sign‑out. Added Auth/**AccessToken**::revokeCurrentToken() for secure client‑side sign‑out. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
Exposed Projects::getProjectsByUserActivity for recency‑sorted project lists. Exposed Projects::getProjectsByUserActivity for recency‑sorted project lists. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
Added Tickets endpoints: markTicketDone, markTicketReopen, getAllDoneUserTickets, quickAddTicket (respects per‑project default status), getAllOpenUserTickets (includes statusClass and statusType). Added Tickets endpoints: markTicketDone, markTicketReopen, getAllDoneUserTickets, quickAddTicket (respects per‑project default status), getAllOpenUserTickets (includes statusClass and statusType). Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
Made Calendar::mapEventData tolerate NULL description, colors, and dates. Made Calendar::mapEventData tolerate NULL description, colors, and dates. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
Made Comments::addComment RPC‑friendly with optional entity and default father. Made Comments::addComment RPC‑friendly with optional entity and default father. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
Enforced JSON‑RPC @api annotation – only explicitly marked service methods are callable; stopped wrapping scalar returns in single‑element arrays. Enforced JSON‑RPC @api annotation – only explicitly marked service methods are callable; stopped wrapping scalar returns in single‑element arrays. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Dependency | Low |
Bumped brace-expansion dependency. Bumped brace-expansion dependency. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Dependency | Low |
Updated yauzl from 3.2.0 to 3.2.1. Updated yauzl from 3.2.0 to 3.2.1. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Bugfix | Medium |
Fixed Commenter role submit buttons remaining disabled after form actions. Fixed Commenter role submit buttons remaining disabled after form actions. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Bugfix | Medium |
Guarded MySQL‑specific PDO constants with defined() checks to prevent fatal crashes on shared hosting. Guarded MySQL‑specific PDO constants with defined() checks to prevent fatal crashes on shared hosting. Source: llm_adapter@2026-05-28 Confidence: low |
— |
| Bugfix | Medium |
Corrected Wiki `createArticle()` to use lowercase `sortindex` column, fixing Postgres failures. Corrected Wiki `createArticle()` to use lowercase `sortindex` column, fixing Postgres failures. Source: llm_adapter@2026-05-28 Confidence: low |
— |
| Bugfix | Medium |
Added missing `error403.blade.php` template to prevent crash on permission‑gated pages. Added missing `error403.blade.php` template to prevent crash on permission‑gated pages. Source: llm_adapter@2026-05-28 Confidence: low |
— |
| Bugfix | Medium |
Fixed Wiki sidebar width, dark‑mode editor dropdowns, and emoji picker ESC propagation. Fixed Wiki sidebar width, dark‑mode editor dropdowns, and emoji picker ESC propagation. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Medium |
Fixed password reset and canvas queries on PostgreSQL, plus plugin install null‑safety. Fixed password reset and canvas queries on PostgreSQL, plus plugin install null‑safety. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Medium |
Fixed Resend Invite button silently no‑op due to isset(null) check. Fixed Resend Invite button silently no‑op due to isset(null) check. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Medium |
Made kanban boards horizontally scrollable when they have 8+ columns. Made kanban boards horizontally scrollable when they have 8+ columns. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Low |
Restored moveTicket functionality, KPI milestone linking, backlog filter on Postgres, and tiptap list rendering. Restored moveTicket functionality, KPI milestone linking, backlog filter on Postgres, and tiptap list rendering. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Low |
Fixed case sensitivity issue in the secondary color setting. Fixed case sensitivity issue in the secondary color setting. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Low |
Corrected syntax error in Referrer‑Policy header assignment. Corrected syntax error in Referrer‑Policy header assignment. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Low |
Stopped favorites star from spinning indefinitely after click on Project Hub. Stopped favorites star from spinning indefinitely after click on Project Hub. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Low |
Skipped events with MySQL zero‑date sentinel in getCalendar to avoid calendar feed crash. Skipped events with MySQL zero‑date sentinel in getCalendar to avoid calendar feed crash. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Low |
Ensured Milestones::getAllMilestones() filters to type='milestone'. Ensured Milestones::getAllMilestones() filters to type='milestone'. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Refactor | High |
Migrated all legacy .tpl.php, .sub.php, .inc.php templates to Laravel Blade. Migrated all legacy .tpl.php, .sub.php, .inc.php templates to Laravel Blade. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Refactor | Low |
Made MarketplacePlugin model properties nullable for PHP 8.x strict type compatibility. Made MarketplacePlugin model properties nullable for PHP 8.x strict type compatibility. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
Full changelog
Highlights
Complete Blade Template Migration
All remaining legacy .tpl.php, .sub.php, and .inc.php templates have been converted to Laravel Blade, completing the frontend template unification. 272 legacy files removed, 200 Blade files added (net reduction of 72 files). This covers all 16 canvas domains, shared submodules (Tickets, Comments, Files, Projects), simple domains (Auth, Install, Settings, etc.), and complex domains (Calendar, Clients, Ideas, Timesheets, Users, Wiki). (#3362)
Mobile API Surface
Backend API changes to support the Leantime Mobile app (first TestFlight beta). Includes server-authoritative session resolution so mobile clients authenticated via Bearer token can resolve "who am I" without pre-knowing their user id. (#3395)
Users::getUser()defaults to session user when no id passedUsers::getUsersWithProjectAccessandProjects::getProjectsUserHasAccessToresolve userId server-sideAuth\AccessToken::revokeCurrentToken()for secure client-side sign-outProjects::getProjectsByUserActivityfor recency-sorted project listsTickets::markTicketDone/markTicketReopen/getAllDoneUserTicketsfor quick-complete flowsTickets::getAllOpenUserTicketsnow shipsstatusClassandstatusTypefieldsTickets::quickAddTicketrespects per-project default status configurationMilestones::getAllMilestones()correctly filters totype='milestone'Calendar::mapEventDatatolerates NULL description, colors, and datesComments::addCommentis now RPC-friendly with optional entity and default father- JSON-RPC no longer wraps scalar return values into single-element arrays
- JSON-RPC enforces
@apiannotation — only explicitly marked service methods are callable
Task Collaborators
Full multi-collaborator support for task assignment. Tasks can now have multiple collaborators in addition to the primary assignee, with updated UI in both list and kanban views showing collaborator avatars. (#3337)
Bug Fixes
- PDO Constant Crash on Shared Hosting — Guarded all MySQL-specific PDO constants (
MYSQL_ATTR_SSL_VERIFY_SERVER_CERT, etc.) withdefined()checks in the database config; some cPanel/EasyApache PHP builds load pdo_mysql without these constants, causing a fatal error on all pages (#3371) - Commenter Role Cannot Comment — Fixed
enableCommenterForms()not re-enabling submit buttons inside reply comment boxes aftermakeInputReadonly()disabled all form elements; the commenter role was completely non-functional (#3194, #3186) - Wiki Article Creation Fails on Postgres — Fixed
createArticle()using camelCasesortIndexcolumn name which Postgres rejects; schema and all other repos use lowercasesortindex(#3382) - Wiki 500 on Postgres (Milestone JOIN) — Added
DatabaseHelper::castAs()to the milestoneleftJoiningetArticle(), matching the pattern used in Canvas, Ideas, and Goalcanvas repositories; also removedlimit(1)from UPDATE/DELETE queries that fail on Postgres (#3383) - Ideas Saved to canvasId 0 — POST handler in
IdeaDialognow readscanvasIdfrom the submitted form with session as fallback, preventing ideas from being invisibly saved to canvas 0 (#3181) - Kanban Board Cannot Scroll with 8+ Columns — Added
overflow-x: autoto the kanban row container and set columns toflex-shrink: 0withmin-width: 200pxso boards with many status columns are horizontally scrollable (#3394) - Calendar Zero-Date Crash —
getCalendar()now skips events with MySQL zero-date sentinels (0000-00-00) instead of crashing the entire calendar feed (#3396) - Resend Invite Button No-Op — Fixed
isset(null)check that silently prevented the resend invite action from executing (#3392) - Three Bugs: isset, limit(1), URL — Fixed isset on null parameter, removed redundant
limit(1)on DELETE (Postgres compat), and corrected a malformed URL (#3393) - 403 Permission Page Crash — Added missing
error403.blade.phptemplate so permission-gated pages render an error page instead of crashing (#3365) - Favorites Star Infinite Spinner — Fixed the star button on Project Hub spinning indefinitely after click by removing the loading class after the request completes (#3364)
- Wiki Sidebar Width & Dark Mode — Fixed wiki sidebar width, dark-mode editor dropdown rendering, and emoji picker ESC key propagation (#3361)
- moveTicket, KPI, Backlog, Tiptap — Restored moveTicket functionality, KPI milestone linking, backlog filter on Postgres, and tiptap list rendering (#3360)
- Postgres Compat & Plugin Install — Fixed password reset and canvas queries on Postgres, plus plugin install null-safety (#3359)
- MarketplacePlugin Nullable Properties — Made
MarketplacePluginmodel properties nullable for PHP 8.x strict type compatibility (#3356) - Secondary Color Case Sensitivity — Fixed case sensitivity issue in the secondary color setting (#3348)
- Referrer-Policy Header Syntax — Fixed syntax error in the Referrer-Policy header assignment (#3347)
Localization
- Added Arabic (ar-SA) language support (#3370)
- Updated Korean (ko-KR) translations (#3326)
Dependency Updates
- Bumped brace-expansion (#3340)
- Bumped yauzl from 3.2.0 to 3.2.1 (#3320)
What's Changed
Other Changes
- fix: PostgreSQL ROUND error, missing zp_canvas.color migration, and 3.7.2 changelog by @marcelfolaron in https://github.com/Leantime/leantime/pull/3318
- Fix case sensitivity in secondary color setting by @Delvar in https://github.com/Leantime/leantime/pull/3348
- Fix syntax for Referrer-Policy header assignment by @Delvar in https://github.com/Leantime/leantime/pull/3347
- build(deps): bump brace-expansion by @dependabot[bot] in https://github.com/Leantime/leantime/pull/3340
- Update ko-KR.ini — complete Korean translation by @madrobotnet in https://github.com/Leantime/leantime/pull/3326
- build(deps-dev): bump yauzl from 3.2.0 to 3.2.1 by @dependabot[bot] in https://github.com/Leantime/leantime/pull/3320
- make MarketplacePlugin model properties nullable for PHP 8.x by @shaunchokshi in https://github.com/Leantime/leantime/pull/3356
- Add collaborator support to task assignment and UI (list + kanban) by @juarezsousa-ctrl in https://github.com/Leantime/leantime/pull/3337
- fix: Postgres compat + plugin install null-safety (bundles 4 issues) by @marcelfolaron in https://github.com/Leantime/leantime/pull/3359
- fix: moveTicket, KPI linking, backlog filter on Postgres, tiptap list rendering by @marcelfolaron in https://github.com/Leantime/leantime/pull/3360
- fix: wiki sidebar width, dark-mode editor dropdowns, emoji ESC propagation by @marcelfolaron in https://github.com/Leantime/leantime/pull/3361
- Backend API surface for Leantime Mobile (TestFlight) by @gloriafolaron in https://github.com/Leantime/leantime/pull/3395
- Fix three bugs: isset on null param, redundant limit(1), malformed URL by @YoussefMansour9 in https://github.com/Leantime/leantime/pull/3393
- Implement Arabic language by @Mohd-PH in https://github.com/Leantime/leantime/pull/3370
- fix: add error403.blade.php to resolve crash on permission-gated pages by @Copilot in https://github.com/Leantime/leantime/pull/3365
- fix: Resend Invite button silently no-ops due to isset(null) check by @mojotaker in https://github.com/Leantime/leantime/pull/3392
- Fix favorites star spinning indefinitely after click on Project Hub by @Copilot in https://github.com/Leantime/leantime/pull/3364
- refactor: migrate all .tpl.php/.sub.php/.inc.php templates to Blade by @marcelfolaron in https://github.com/Leantime/leantime/pull/3362
- fix: 6 high-impact bugs — PDO crash, commenter role, Wiki Postgres, Ideas canvasId, Kanban scroll by @marcelfolaron in https://github.com/Leantime/leantime/pull/3397
- fix(calendar): tolerate MySQL zero-date sentinel in getCalendar by @gloriafolaron in https://github.com/Leantime/leantime/pull/3396
New Contributors
- @Delvar made their first contribution in https://github.com/Leantime/leantime/pull/3348
- @madrobotnet made their first contribution in https://github.com/Leantime/leantime/pull/3326
- @shaunchokshi made their first contribution in https://github.com/Leantime/leantime/pull/3356
- @juarezsousa-ctrl made their first contribution in https://github.com/Leantime/leantime/pull/3337
- @YoussefMansour9 made their first contribution in https://github.com/Leantime/leantime/pull/3393
- @Mohd-PH made their first contribution in https://github.com/Leantime/leantime/pull/3370
- @Copilot made their first contribution in https://github.com/Leantime/leantime/pull/3365
- @mojotaker made their first contribution in https://github.com/Leantime/leantime/pull/3392
Full Changelog: https://github.com/Leantime/leantime/compare/v3.7.2...v3.8.0
Breaking Changes
- All legacy .tpl.php, .sub.php, and .inc.php templates removed; migration to Laravel Blade is now mandatory.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About leantime
Leantime is a goals focused project management system for non-project managers. Building with ADHD, Autism, and dyslexia in mind.
Beta — feedback welcome: [email protected]