New features
iPhone Duo support — with your existing Ionic theme
Bring Ionic navigation and actions into iPhone Duo's vertical system rail without replacing your app's theme. The standalone vertical-bars.css stylesheet and enableVerticalControlArea() runtime work independently of the full Native UI Shell, including with Ionic MD mode and custom themes.
- Eligible tabs, back buttons, menu buttons and icon-only toolbar actions move into Vertical Bars. Supported iOS layouts use native SwiftUI controls; Web clones provide the fallback.
- Safe-area handling supports either rail edge, RTL, split panes and full-width modal surfaces.
applyFoldStateClasses()applies application-provided fold state toion-app. Opt-in split panes can adapt their width to the device's posture.- Device events come from
@erkamyaman/capacitor-foldable; your application owns subscriptions and placement.
Start with iPhone Duo with your existing theme, then see iPhone Duo support and the Vertical Bars reference.
Native UI Shell and Vertical Bars enter Preview
Native UI Shell and iPhone Duo / Vertical Bars support move from experimental to Preview in 1.2.0. Ionic markup remains the source of actions, routing, labels and state while supported controls render natively. Preview APIs and supported behavior may still change; stable status is planned after the official Xcode 27.1 release.
The real iPhone Duo system rail and hinge APIs require iOS 27.1 and Xcode 27.1 or newer. Browser previews can be used to check the layout before native deployment.
Choose native button appearance
buttonProjection: 'system' | 'source'selects SwiftUI appearance or supported Ionic fill and colors for native vertical buttons. The default issystem.- Use
data-projection="source"/"system"for individual buttons orion-buttonsgroups. Equivalentios-theme-projection-source/ios-theme-projection-systemclasses remain supported. buttonDefaultFill: 'solid' | nullcontrols omitted fill for source-projected buttons outsideion-buttons. Usesolidfor Ionic's default design; omission ornullretains this theme's glass default. Buttons insideion-buttonscorrectly default toclear.data-shell="disabled"keeps a control or subtree on the Web without changing its Web theme.ios-theme-shell-disabledremains supported.
See button appearance and fill rules.
Keep your navigation animations
withNativeUIShellTransition() coordinates native controls with Ionic's default or your custom navigation animation, including interactive back navigation. The package's own iosTransitionAnimation already includes this integration and needs no extra wrapper. See the transition migration guide.
Breaking changes and migration
For users of the 1.2.0 experimental releases
- Device-state APIs were removed from the theme. Replace
DeviceLayout,HingeStatus,getDeviceLayout(),deviceLayoutChangeand start/stop device-layout monitoring with the Foldable plugin'sgetFoldState()/foldStateChangeandgetBarPlacement()/barPlacementChange. Pass placement intosetVerticalControlAreaPlacement(). See the device-layout migration. - Native vertical buttons now default to system appearance. Set
buttonProjection: 'source'to retain source-based fill and color projection. Explicit fill takes precedence; omitted ordefaultfill insideion-buttonsresolves toclear.
Packaging and integration
- The package now explicitly declares ESM (
"type": "module") and emits resolvable ESM imports. Use the documented package entry points through ESM imports; CommonJSrequire()compatibility is not provided. - The standalone
/vertical-barsentry requires@capacitor/core, including in browser builds. CSS-only use does not require the runtime. - Keep one runtime: use either
enableVerticalControlArea()orenableNativeUIShell(). The full shell already includes Vertical Bars.
Fixes and improvements
- Searchable FABs move into the Web vertical rail as soon as Vertical Bars is enabled, above visible tabs or at the bottom when tabs are hidden. Native vertical search uses SwiftUI's searchable presentation.
- Web searchable tabs now follow the native editing and dismissal flow, retain the query when closed, and align correctly with the tab bar beside a desktop split-pane menu.
- Improved vertical tab selection and drag animations, back-button projection, and navigation cancellation handling.
- Corrected top safe-area reservation and full-width modal control placement in vertical layouts.
- Native controls refresh after foreground and viewport changes.
- Fixed package ESM resolution during compilation.
Upgrade
npm install @rdlabo/ionic-theme-ios27@1.2.0
npx cap syncRun cap sync for Capacitor projects using native projection. Install @erkamyaman/capacitor-foldable separately if your app needs device-driven fold and rail placement events.
Full changelog: ios27-v1.1.0...ios27-v1.2.0