diff --git a/docs/contributor-docs/adding-icons.md b/docs/contributor-docs/adding-icons.md
index a0ec2a0791..7c5c85b4d6 100644
--- a/docs/contributor-docs/adding-icons.md
+++ b/docs/contributor-docs/adding-icons.md
@@ -4,92 +4,52 @@ category: Contributor Guides
order: 9
---
-## Adding and Modifying Icons
+## Lucide Icons
-- Use dashes in the name of the .svg files (e.g `calendar-month`).
-- Use the same name for the "Line" and "Solid" variants, and save them in the respective folder, e.g. `instructure-ui/packages/ui-icons/svg/Line/calendar-month.svg` and `instructure-ui/packages/ui-icons/svg/Solid/calendar-month.svg`.
-- Double-check that the SVG size is 1920x1920.
+The bulk of the icon set comes from [Lucide](https://lucide.dev). These are not manually maintained
+— they are automatically picked up from the `lucide-react` npm package at build time.
-```js
----
-type: code
----
-
-```
-
-- The files cannot contain [clipping paths](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/clipPath)! Sadly, when the Designers export icons from Figma, most of the time they have a clipping path around the whole canvas. When an SVG includes clipping paths, the `Icon Font` variant may not render correctly. Specifically, the use of `` and `` elements can cause rendering issues. If the source code has them, manually refactor the code, e.g:
-
-```js
----
-type: code
----
+**To get a new or updated Lucide icon**, bump the `lucide-react` version in
+`packages/ui-icons/package.json`. The index is regenerated automatically as part of
+`pnpm run bootstrap` (via `build-icons`), so no manual step is needed.
+
+Every icon exported by `lucide-react` becomes `InstUIIcon` in `@instructure/ui-icons`,
+**except** for icons that are shadowed by a custom icon of the same name (see below).
+
+If a Lucide icon is missing or looks wrong, check whether it exists in the installed version of
+`lucide-react` first — if not, the only path is to add it as a custom icon.
-// Before:
-
+## Adding Custom Icons
-// After:
-
-```
+Custom icons live in `packages/ui-icons/svg/Custom/` and are consumed directly by the build script (`ui-scripts/lib/generate-custom-index.ts`).
-- If the icon has to be bidirectional (being mirrored in RTL mode, typically arrow icons), add the icon name to the bidirectional list in `packages/ui-icons/icons.config.js`. Deprecated icons are handled here as well.
+- Use kebab-case filenames ending in `.svg`. The filename becomes the React export name: `ai-info.svg` → `AiInfoInstUIIcon`, `canvas-logo.svg` → `CanvasLogoInstUIIcon`.
-- Run `pnpm run bootstrap`.
+- For solid/filled icons, the filename must end in `-solid.svg` (e.g. `bell-solid.svg`).
-- Finally, run `pnpm run dev` and verify that the icons are displayed correctly under [Icons](/#icons). Check all 3 versions (React, SVG and icon font).
+- If a custom icon has the same name as a Lucide icon (e.g. `message-square-check.svg`), the custom version takes precedence and the Lucide one is hidden from the package.
-(Note: The fonts are sometimes not rendered correctly, but we decided not to fix them, because they are not really used anywhere, and we might stop supporting icon fonts in the future in general.)
+- After dropping the file into `svg/Custom/`, the index is regenerated automatically as part of
+ `pnpm run bootstrap` (via `build-icons`).
-### Guidelines for Drawing Icons
+- Run `pnpm run dev` and verify the icon looks correct in the Icons gallery.
-- Draw your icons on the 1920 x 1920 art-boards.
+### Drawing Guidelines
-- Before you flatten shapes or vectorize strokes as described below, make a hidden copy of the original paths off
- to the side so that you can more easily come back and make changes later.
+- Uncheck "Clip content" on the frame before exporting. Otherwise Figma wraps every layer in `` and adds a `…` block, which can cause rendering issues
-- Flatten your shapes.
+- Use `currentColor` for all path fills and strokes. The build script reads the SVG as-is — no color replacement happens. If you exported with a hardcoded hex value, replace it manually before regenerating the index
-- Export strokes to vector.
+- Stroke icons: set `fill="none"` on every path, not just on the root `