Pimp My IDE / native parts
Back to garage
October 4, 2026 | web platform / dependencies / interface craft

Check the browser shelf first.

"Use the platform" is weak advice until it names the part, the behavior, and the support target. Turn the slogan into an inspection.

Before adding a UI package, write down the job. Find the closest native part. Test its real behavior. Wrap it if your product needs more. Replace it only when you can name the missing contract.

The slogan skips the hard part.

Nolan Lawson asks why developers still avoid browser features that can replace custom JavaScript. His answer is not contempt. He points to old compatibility gaps, familiar framework habits, better package documentation, and the simple pleasure of building a thing yourself.[1]

That diagnosis matters for coding agents. An agent can produce a polished custom overlay before anyone asks whether <dialog> already handles the job. It can also reach for a native element without checking your browser target or product behavior. Both shortcuts turn "use the platform" into guesswork.

Native-first is a test order. It is not a purity rule.

Start with the job, not the tag.

A modal dialog blocks interaction with the rest of the page. A non-modal dialog does not. MDN says showModal() makes the other page content inert. It also documents Escape as a close route for modal dialogs.[2]

A disclosure has a different job. The <details> element reveals information when its summary is toggled. Its native interaction includes pointer activation and Space when the summary has focus. MDN also documents the name attribute for groups where one disclosure stays open at a time.[3]

Those parts are not interchangeable. A package comparison that begins with screenshots will miss the behavior contract. Write one sentence first: "This control must block the page until the user confirms" or "This section hides optional setup notes." Now there is a job to match.

Support belongs in the decision.

A native feature can fit the job and still miss your supported browsers. Baseline gives web features two broad availability stages and checks them against a core browser set. The project also points to tooling in Lighthouse, Browserslist, ESLint, and Visual Studio Code.[4]

Use that data as one input. Your own browser policy and audience still decide the target. Test the exact feature you plan to ship. A broad label for an element does not prove every related attribute or command is ready for your users.

Wrapping is often the honest answer.

A thin component can keep framework ergonomics while leaving focus, keyboard behavior, and page blocking to the browser. It can add product copy, telemetry, styling, and a stable application API. That is different from rebuilding the browser behavior inside a generic <div>.

Sometimes the native part does not fit. Say why. You may need an interaction the part does not support, a browser outside your target, or a product constraint that changes the job. Keep the exception beside the code so the next maintainer can retest it.

Make the agent show its receipt.

Ask for four lines before accepting a new interface dependency: the user job, the native candidate, the support target, and the behavior test. Add the package only after the gap is visible. This gives review something firmer than "the agent chose it" or "native is always better."

The counter below prepares that review card. It does not inspect your application, browser analytics, dependency tree, or test output. The checked state means the fields were selected for review. Real evidence still belongs in the blanks.

Native behavior still needs a witness. The live dialog check records how focus enters, how the dialog closes, and whether focus returns to the opener. web.dev documents all three behaviors and warns that non-modal dialogs do not close with Escape by default.[6]

Interactive makeover / platform parts counter

Quote the job before the package.

This replaces a blind package search with a job selector, a native candidate, four review gates, and a copyable card. Select a job. Mark the checks you intend to run. Then take the card to the real codebase.

Parts shelf

Choose one job

The selector changes the candidate and test plan. It does not claim that the candidate fits your product.

Interface job
Old route: search a registry, pick a familiar package, and discover the behavior contract during review. The counter moves the job and browser part ahead of the shopping step.

Inspection rail

Selection only
DIALOG

Modal dialog

Candidate: <dialog> opened with showModal(). The rest of the document becomes inert.

Review gates
0 review gates selected

Start with the user job. No implementation evidence has been recorded.

This tool prepares a review structure. It does not test browser support, accessibility, your application, or a package. A completed rail means four review requirements were selected. It does not mean the implementation passed.
Native parts / live comparison

Use the behavior you are reviewing.

The disclosure below is a real <details> element. The inspector button opens a real modal <dialog>. Use Tab, Space, Enter, and Escape. The component shows the native behavior instead of drawing a fake control beside an explanation.

Open the disclosure part

The browser owns the open state. This page supplies the label, content, border, and spacing.

Modal witness test

Open the dialog. Close it with Escape or either button. The witness panel records focus entry, the close route, and focus return.

Focus entryNot run
Close routeNot run
Focus returnNot run

No modal check has run.

Native modal on the lift

The browser placed this dialog in the top layer and made the rest of the document inert. The page still owns the copy, controls, and styling.

Sources read

Source log and evidence boundary
  1. Nolan Lawson, "Why don't more developers use the platform?", published October 3 and read October 4, 2026. The essay supplies the historical, ergonomic, documentation, craft, and AI-code arguments. It does not prescribe the review card on this page.
  2. MDN, "<dialog>: The Dialog element", read October 4, 2026. The reference documents modal and non-modal behavior, showModal(), inert page content, Escape dismissal, and related commands.
  3. MDN, "<details>: The Details disclosure element", read October 4, 2026. The reference documents disclosure behavior, summary labels, keyboard opening, open state, grouped disclosures, and the toggle event.
  4. web.dev, "Baseline", read October 4, 2026. The page explains the Baseline availability stages, core browser set, and links to current tool integrations.
  5. Hacker News discussion 49950554, read October 4, 2026. The exact item ID was resolved through the Hacker News API. The discussion was used for discovery, not as proof of browser behavior.
  6. web.dev Learn HTML, "Dialog", read October 4, 2026. The guide documents modal and non-modal focus, inert content, Escape behavior, close buttons, and focus return.

Evidence boundary. Pimp My IDE tested the controls on this page in a browser. It did not test your browser matrix, framework, analytics, dependency tree, or product requirements. The four-gate review order and generated card are editorial work.