Skip to content

What Is New After WWDC25 (SwiftUI)

A SwiftUI guide for coding agents. Also covers liquid glass, tab role search, toolbarspacer, glass button style, glasseffect modifier, webview swiftui ios 26.

WWDC25, the Xcode 26 and iOS 26 cycle, brought the Liquid Glass design language plus new tab, toolbar, and glass APIs. Building with Xcode 26 adopts the new look with almost no code changes; the new APIs are for refining it.

Liquid Glass arrives by recompiling

Navigation stacks, tabs, inspectors, and toolbars become glassy, rounder, and more transparent by default. The NavigationStack API itself did not change.

Tabs: adopt the Tab API and the search role

The Tab API replaces the old TabView item style, and role: .search separates the search tab from the others, docked at the bottom of the screen.

TabView {
  Tab("feed", systemImage: "ruler") { feedTab }
  Tab("insights", systemImage: "chart.xyaxis.line") {
    NavigationStack { InsightsFeatureView() }
  }
  Tab("search", systemImage: "magnifyingglass", role: .search) {
    NavigationStack { SearchFeatureView(store: searchStore) }
  }
}

Toolbars: split groups with ToolbarSpacer

Toolbars render as glass groups. ToolbarSpacer breaks one toolbar into visually separate clusters.

ToolbarItemGroup(placement: .topBarTrailing) {
  Button("editor", systemImage: "pencil") { sheetShown = .editor }
}

ToolbarSpacer(.fixed, placement: .topBarTrailing)

ToolbarItemGroup(placement: .topBarTrailing) {
  Button("glucose", systemImage: "carrot") { sheetShown = .bloodGlucose }
    .buttonStyle(.glass)
}

Glass on your own views

buttonStyle(.glass) applies the glass button style. For any custom view, glassEffect() adds the same material.

HStack { /* views */ }
  .glassEffect()

Beyond the design language

TextEditor gains attributed string support. A native WebView ships with an observable WebPage model that can load requests and customize the user agent. Apple also reported large List and scroll performance gains on macOS and a new SwiftUI Instruments template.

import WebKit

struct BrowserView: View {
  @State var page = WebPage()

  var body: some View {
    WebView(page)
      .onAppear { page.load(URLRequest(url: URL(string: "https://google.com")!)) }
  }
}

Use this guidance in your coding agent

Install the Better Design MCP once. Your agent then loads this page with one call.

get-swiftui-guide({ topic: "swiftui-what-is-new-after-wwdc25" })
claude mcp add --scope user better-design --transport http https://better-design.com/api/mcp --header "Authorization: Bearer <YOUR_API_KEY>"
Browse related design systems