Ionic 9 is one Web Component system with three framework bindings
Ionic v9.0.4 ships Angular, React, and Vue bindings around the same Web Component Core. The components also run in plain HTML from CDN files or as individually imported custom elements. Styling covers iOS and Material Design modes, while CSS variables expose the theme. A web team can keep its framework and browser tooling while adding mobile-shaped navigation, forms, menus, modals, and tabs.
The boundary matters. Ionic Framework owns the interface layer. Publishing it as an iOS or Android app uses Capacitor and the native toolchain, and the React guide points developers to Android Studio or Xcode for the final build. Version 9 requires Capacitor 7 or newer. If your problem is sharing UI and web skills, this split is reasonable. If native platform controls are mandatory, Ionic Core's custom elements are the wrong foundation.
What happened when we ran it
Our sandbox installed the commit a3d22da checkout in 25 seconds. npm added 512 packages and left 152 MB on disk. We measured 10,459 files, roughly 208,859 lines of source, and 111.6 MB before that install. Our measurement setup was an unprivileged Debian container with 3 CPUs, 8 GB of RAM, Node 22, and no secrets.
The root exposed no build script or target, so the build step was skipped. It also exposed no test script or target, so the test step was skipped. npm audit found 0 known vulnerabilities. Our scan counted 14 CI workflow files, found no Dockerfile or top-level tests directory, and identified a monorepo workspace structure. These facts do not prove that a generated Ionic app builds or passes device tests.
The 25-second install is only the monorepo front door
Our 25-second root install covered a private package used mainly for build tooling, and its manifest defines no scripts. Contributor work happens lower down. Core has separate preview, lint, screenshot-test, and build commands. A framework change then moves into the Angular, React, or Vue package. The guide warns that React and Vue builds can report type errors as warnings, so contributors must run separate type checks.
Using the library is simpler than changing it. Ionic Core documents a CDN path for plain HTML and imports that let a bundler include individual custom elements. Framework users start through the Ionic CLI and their chosen binding. No hosted credential is needed. Native delivery adds Capacitor, then Android Studio or Xcode. Our 152 MB install did not cover those SDKs or an app-store build.
Ionic 9 sets hard floors for every supported stack
The version 9 table is unusually clear. Angular starts at 18, React is limited to 18 or 19, and Vue starts at 3.5. Capacitor starts at 7. Browser support begins at Chrome and Edge 89, Firefox 75, and Safari 16; mobile support begins at iOS 16 and Android 5.1 with Chromium 89 or newer. These limits are immediate blockers for an older enterprise stack.
A major upgrade can touch more than Ionic components. Version 9 makes Angular standalone components the default and deprecates IonicModule. Its React packages drop React 17 and React Router 5, while Vue routing requires Vue Router 5. Core now uses an exports allowlist, so apps importing undocumented internal paths must switch. The migration material names these breaks precisely, but an existing app still has to absorb them.
Two open v8 reports make accessibility testing non-negotiable
Open issue 29806 reports that Android Switch Access could open an Ionic menu but could not select its items. The v8 report includes a reproduction app and was updated on September 16, 2026. Issue 31074, also filed against v8, reports an invalid role hierarchy when ion-select uses the modal interface. Neither proves the same behavior in v9.0.4, but both identify paths a release checklist should exercise.
A fix in Core can benefit three framework bindings, while a Core defect can reach all three. Test the exact overlays, keyboard flow, screen-reader output, and switch-control behavior on real target devices. A browser component test will not reproduce every native accessibility service. Teams without time for that pass should not treat iOS and Material styling as evidence of platform parity.
September activity shows maintenance, not a small support surface
GitHub recorded the last push on September 16, 2026, and v9.0.4 shipped that day. The release fixed duplicate click events, wide slotted content hiding field values, and a modal height collapse. The repository had 52,670 stars, 558 open issues, and 36 open pull requests when fetched. The 594 items include issues and pull requests rather than 594 confirmed bugs. Recent updates across old and new reports show an active queue.
Documentation quality varies by entry point. The version 9 breaking-change file gives concrete minimums and migrations. Core explains CDN use, lazy loading, and per-component imports. The root README is thinner, and its migration list ends with v7 to v8 even though v9.0.4 is current; the v9.0.0 release page supplies the missing guide link. Start there before upgrading.
Pick Ionic when the web codebase is the asset
Ionic v9.0.4 supplies 3 framework bindings, making it worth a trial when one team owns a Progressive Web App and mobile clients. Build one representative route before committing: include navigation, a modal, a form, and the hardest native plugin. Run it against the oldest supported iOS 16 and Android 5.1 targets you claim, including the assistive technologies users rely on.
The lab result makes that trial cheap to begin, not safe to skip. A 25-second install and 0 audit findings remove two early objections, while the missing root build and test targets leave product validation in your hands. The useful decision evidence will come from the generated app, Capacitor project, and device matrix, not from a green npm install at the monorepo root.

