Skip to content

chore(deps): upgrade lucide-react to 1.51.0 - #14

Merged
agentHits merged 4 commits into
AgentHits-Devfrom
chore/deps-lucide-1
Oct 7, 2026
Merged

agentHits merged 4 commits into
AgentHits-Devfrom
chore/deps-lucide-1

Conversation

@agentHits

Copy link
Copy Markdown
Collaborator

What changed

  • lucide-react ^0.469.0 → ^1.51.0 in apps/dokploy (the only workspace that depends on it). 1.51.0 is the newest release older than 3 days.
  • aria-label added to six bare lucide icons that are themselves click targets (no wrapping button):
    • handle-domain.tsx: X that removes a middleware badge → Remove <name>
    • show-preview-settings.tsx: X that removes a label badge → Remove <label>
    • restore-backup.tsx, restore-volume-backups.tsx: Copy on the selected backup file → Copy backup file
    • requests-table.tsx: Copy next to RequestAddr → Copy request address
    • web-server.tsx: CopyIcon next to the server IP → Copy server IP

What the release notes say and how it affects us

From the v1 announcement and the React migration guide:

  • Brand icons removed (Chromium, Codepen, Codesandbox, Dribbble, Facebook, Figma, Framer, Github, Gitlab, Instagram, LinkedIn, Pocket, RailSymbol, Slack). None of them is imported anywhere; our GitHub/GitLab/Slack/Chrome logos are our own components.
  • aria-hidden="true" by default. Lucide drops it as soon as the icon gets any aria-*, role or title prop, or children. An untitled SVG never gave its parent button an accessible name, so icon-only buttons are unchanged by this. The only real regression is a bare icon used as a click target: it was an unnamed clickable graphic before and is now hidden entirely, hence the six labels above. Radix asChild triggers pass aria-* props to the icon, so those keep working.
  • UMD build removed. We only use the ESM/CJS entry points, and there are no deep imports (lucide-react/...).
  • Renames/aliases. All 200 names imported across the 292 files still resolve in 1.51.0, including the old aliases (Trash2, Loader2, AlertTriangle, HelpCircle, MoreHorizontal, PenBoxIcon, Building2, FileJson, Fingerprint, UploadCloud, ...). Aliases are not marked deprecated in the 1.x typings and render the same SVG as the canonical icon, so no imports were renamed. No icon was replaced (old → new: none).
  • Types. LucideIcon has the same shape (ForwardRefExoticComponent<Omit<LucideProps, "ref"> & RefAttributes<SVGSVGElement>>). LucideProps gains nonScalingStroke and deprecates absoluteStrokeWidth; IconNode is deprecated in favour of LucideIconNode. We only use LucideIcon (3 files) and none of the deprecated ones.

Icons that look different on dev

Nothing was swapped in our code, but lucide redrew some icons between 0.469 and 1.51. I rendered every imported icon with both versions and compared the SVG markup. These ones changed (the number is how many files import that name):

  • Concept changed, worth a look
    • TrashIcon (4): was the plain bin, now the same bin with two lines as Trash2, since trash and trash-2 were merged. Used in manage-custom-roles.tsx, projects/show.tsx, advanced-environment-selector.tsx, save-drag-n-drop.tsx.
    • Building2 (1): now an alias of BuildingComplex, redrawn as a wider building with a door (impersonation bar).
    • Sparkles / Stars (3): new star shape; the small plus at the bottom left is now a circle.
    • Key / KeyIcon (6): mirrored (the ring is now at the top right).
    • CheckCircle2 / CheckCircle2Icon / CircleCheckIcon (18): longer check mark.
    • Settings (7): new gear outline.
    • Play (5): rounded triangle.
    • CreditCard (4): extra short stripe.
    • Moon (1), Bookmark (1), Tags (2), Palette (3), MemoryStick (3), Cpu (6), Bug (1), Cog (1), GitBranch / GitBranchIcon (6), HardDrive (12), Hammer (2), Plug (1), Pause (1), CloudOff (2), ListTree (1), BlocksIcon (1): redrawn, same meaning.
  • Minor geometry or path cleanup only (should look the same or nearly the same)
    • File family with the new rounded corner fold: File, FileIcon, FileText, FilePlus, FilePlus2, FileInput, FileJson, FileTerminal.
    • Trash2 (53), Rocket / RocketIcon (15), Terminal (12), Ban (11), Clock (7), Download / DownloadIcon (11), Search / SearchIcon (7), Users / UsersIcon (8), Calendar / CalendarIcon (3), Mail (3), Upload (2), LogIn (4), LogOut (2), Settings2 (2), ListTodo (1), List (1), CodeIcon (1), TrendingUpIcon (1), Forward (1), House (1), Package (3).

Verification

  • bun run typecheck (all workspaces): passes.
  • bunx biome check on the changed files: clean.
  • vitest with __test__/vitest.config.ts, without *.real.test.ts: 2052 passed, 5 failed, 12 skipped. All 5 failures are timeouts in server-side tests that shell out to Docker or are slow locally (better-auth-schema-compat, db-backup-restore-injection, env-file-literals, remote-stream, cloud-queue-availability). No test imports lucide-react or renders UI.
  • next build not run locally; CI builds it.

Manual check on dev

  • Look at the icons in the "Concept changed" list above, especially the delete buttons that used TrashIcon (custom roles, projects list, environment selector, drag-and-drop upload), the impersonation bar (Building2, Key, CreditCard), the web server update dialog (Sparkles/Stars), and the key icons in API keys and servers.
  • With a screen reader or the accessibility tree: the six labelled icons now announce "Remove …" / "Copy …". Icons inside buttons and menus are hidden, as intended.

🤖 Generated with Claude Code

agentHits and others added 4 commits October 6, 2026 17:21
lucide-react 1.x sets aria-hidden on every icon unless it gets an
aria-*, role or title prop. Six bare icons act as click targets
(remove-badge X and copy icons); without a label they are now hidden
from assistive technology entirely, so they get an aria-label.

No imported icon was removed in 1.x: every name, including the old
aliases, still resolves, and none of the removed brand icons is used.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@agentHits
agentHits merged commit 3776e2b into AgentHits-Dev Oct 7, 2026
7 of 8 checks passed
@agentHits
agentHits deleted the chore/deps-lucide-1 branch October 7, 2026 04:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant