Most accurate simple customizable SwiftUI components for the Apple Intelligence look — an animated glow ring and a shimmering text fill, both backed by Metal shaders.
dependencies: [
.package(url: "https://github.com/tornikegomareli/Aurora.git", from: "0.4.0")
]Or via Xcode: File → Add Package Dependencies
Glow around a single screen — the most common case:
import SwiftUI
import Aurora
struct HeroScreen: View {
var body: some View {
ZStack {
// your page content
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.overlay {
AuroraGlow(.standard).ignoresSafeArea()
}
}
}The overlay extends past the safe-area insets so the glow covers the full visible area. If you will remove .frame(maxWidth: .infinity, maxHeight: .infinity) ZStack size will be dependent on its content and glow will be also missplaced.
Or glow around the whole app, apply the overlay once at the scene level:
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.overlay {
AuroraGlow(.standard).ignoresSafeArea()
}
}
}
}Or wrap a single view:
Card()
.padding()
.glow(.standard, cornerRadius: 24)The glow plays its intro on appear, settles into a steady state, and never intercepts taps.
Three presets pick the overall feel:
| Style | Feel |
|---|---|
.subtle |
gentle steady-state, soft intro |
.standard |
recommended default; moderate burst |
.dramatic |
energetic intro, big flames; closest to Apple's |
AuroraGlow(.dramatic).ignoresSafeArea()Six built-in palettes:
AuroraGlow(.standard).palette(.appleIntelligence) // default
AuroraGlow(.standard).palette(.sunset)
AuroraGlow(.standard).palette(.ocean)
AuroraGlow(.standard).palette(.forest)
AuroraGlow(.standard).palette(.monochrome)
AuroraGlow(.standard).palette(.cyberpunk)Or roll your own:
let brand = AuroraGlow.Palette(
base: SIMD3(0.1, 0.2, 0.4),
anchors: [
SIMD3(1.0, 0.5, 0.0),
SIMD3(0.5, 0.8, 0.3),
SIMD3(0.2, 0.4, 0.9),
SIMD3(1.0, 0.2, 0.7),
]
)
AuroraGlow(.standard).palette(brand)Three intro styles for how the glow appears:
| Style | What you see |
|---|---|
.thicknessGrow |
Band scales from invisible to full thickness |
.borderFill |
Band draws itself around the perimeter from one edge |
.heartbeat |
Thickness pulses 2–3× before settling |
AuroraGlow(.standard)
.introStyle(.borderFill)
.introDuration(0.5)
.direction(.topToBottom)Four direction cases: .leftToRight, .rightToLeft, .topToBottom, .bottomToTop.
Semantic presets that bundle a palette and a speed:
AuroraGlow(.standard).mood(.listening) // appleIntelligence palette, faster pace
AuroraGlow(.standard).mood(.thinking) // ocean palette, slower
AuroraGlow(.standard).mood(.error) // red palette
AuroraGlow(.standard).mood(.success) // green paletteFor streaming and async work:
@State private var isLoading = false
ChatView()
.glowWhileLoading(isLoading)
.task {
isLoading = true
await streamFromAI()
isLoading = false
}Intro plays on start, holds while loading, outro plays when done.
For manual triggers — button taps, TCA effects, anywhere outside the View:
@State private var burster = AuroraGlow.Burster()
Card().glow(AuroraGlow(.standard).burster(burster))
Button("Ask again") { burster.fire() }Chain modifiers for full control:
AuroraGlow(.standard)
.palette(.sunset)
.direction(.rightToLeft)
.introStyle(.heartbeat)
.introDuration(0.7)
.outroStyle(.dissolve)
.cornerRadius(24)
.borderWidth(6)
.glowSize(28)
.speed(0.12)Every modifier returns a new AuroraGlow, just like SwiftUI built-ins.
Fill SwiftUI Text glyphs with the same animated metaball colour field — the iconic Apple-Intelligence shimmering text look:
import SwiftUI
import Aurora
AuroraText("Apple Intelligence")
.palette(.appleIntelligence)
.speed(0.4)
.font(.system(size: 56, weight: .heavy, design: .rounded))AuroraText is a drop-in for Text — .font, .fontWeight, .kerning, .multilineTextAlignment and every other text-style environment value all work via the underlying Text. Chain .palette, .speed, or .mood first (those return AuroraText), then any SwiftUI modifier you want.
It pairs naturally with AuroraGlow for matching palettes:
ZStack {
Color.black.ignoresSafeArea()
AuroraText("Aurora\nIntelligence")
.palette(.sunset)
.font(.system(size: 56, weight: .heavy, design: .rounded))
.multilineTextAlignment(.center)
}
.overlay {
AuroraGlow(.standard).palette(.sunset).ignoresSafeArea()
}Mood presets bundle palette + pace for state-aware UI in one line — same vocabulary as AuroraGlow.mood:
AuroraText("Thinking…").mood(.thinking) // ocean palette, slower
AuroraText("Listening").mood(.listening) // appleIntelligence, fasterAuroraExamples (Xcode project under Examples/AuroraExamples) ships eight demo screens — hero, AuroraText, live tuning, custom profile, wash tuning, palette gallery, moods, and a glowWhileLoading sandbox. Open the project to play with them.
- iOS 17+
- Swift 5.9+
- The shader uses
ShaderLibrary/colorEffect, which are iOS 17 only.
The visual feel is reverse-engineered from Apple's IntelligentLightFrag shader in SiriUICore.framework. None of Apple's binary code is included, only the algorithm (anchored metaballs + noise-warped SDF + damped-cosine burst envelope) is reproduced.
MIT.





