Portal is a SwiftUI package for seamless transitions between views β across navigation pushes, sheets, and more β built around a flexible portal metaphor.
31.07.2025 03:20 β π 5 π 0 π¬ 0 π 0@aethers.world.bsky.social
20 | design engineer | ex-apple maps intrn | building @KyoSchoolApp + whatever else feels fun
Portal is a SwiftUI package for seamless transitions between views β across navigation pushes, sheets, and more β built around a flexible portal metaphor.
31.07.2025 03:20 β π 5 π 0 π¬ 0 π 0Big update for Portal! Portal now uses modern iOS 17 APIs, with fallbacks for previous versions, as well as an improved API with more customization and smoother text animations
β github.com/Aeastr/Portal
The image showcases a collection of Apple device interfaces, all designed around a central "NotchMyProblem" logo where the 'O' in "Notch" is an elongated, pill-shaped element mirroring the iPhone's Dynamic Island. Specifically, an iPhone SE displays "Delete" and "All" buttons. An iPhone 16e features side-mounted "Cancel" and "Share" buttons. An iPhone 16 Pro is depicted with "Cancel" and "Export" buttons near its Dynamic Island, and another view shows a "Save" button. Finally, an iPad interface includes a pink "Finish" button.
new update for NotchMyProblemπ(position content around the iPhone's cutout)
improved compatibility across devices β padding, bounds, etc. now auto-adjust for the space, and added new APIs for configuring behavior + improved naming
github.com/Aeastr/Notch...
Seasonal-themed Deco app icons. From left to right: A pink spring icon with butterflies, bees, and flowers; an orange summer icon with a surfer, sun, and ice cream; an autumn icon with pumpkins, leaves, and pie on an orange background; and a blue-purple winter icon with a snowman, deer, and Christmas tree.
Seasonal Icons for Deco
03.06.2025 14:17 β π 4 π 1 π¬ 0 π 0Sticker filters in Deco 1.1, soon
02.06.2025 19:12 β π 7 π 0 π¬ 1 π 0flip flip (SwiftUI)
17.05.2025 00:00 β π 21 π 1 π¬ 3 π 0big thanks to @sebjvidal.bsky.social for writing about _UIContextMenuAccessoryView and helping develop this package sebvidal.com/blog/accesso...
12.05.2025 22:17 β π 4 π 0 π¬ 0 π 0A stylized app icon, designed to look like a device frame, displays a chat interface. A message bubble containing "shhh" is visible, and above it, a reaction picker is open, showing several emojis: wide eyes, a figure in a trench coat with a magnifying glass, a padlock, and a handbag. Other message bubbles are in the background, out of focus. The icon is set against a blue background, and below it, the text "MenuWithAView" is displayed in white.
new package β‘ MenuWithAView β a SwiftUI package that lets you add an accessory view to your context menu interactions in addition to the standard menu content, using UIKit's private _UIContextMenuAccessoryView.
github.com/Aeastr/MenuW...
Neat update for Portal π
.portalTransition now takes in item, meaning you can trigger transitions using the same declarative, data-driven pattern as SwiftUI's .sheet(item:...)
github.com/Aeastr/Portal
check the voice branch for one that literally does yap
25.04.2025 00:08 β π 1 π 0 π¬ 0 π 0let ur console yap
github.com/Aeastr/LogOu...
(this is a very minimal one, use it in my projects tho)
Updated Docs (now in Wiki) + Examples
github.com/Aeastr/Porta...
Would you prefer a more dense sticker grid in deco?
23.04.2025 21:06 β π 3 π 0 π¬ 0 π 0just updated, overlay management should be more reliable, thereβs a new .portalContainer extension, and the docs/codebase are cleaner
github.com/Aeastr/Porta...
Small thing used in Deco & Kyo
github.com/Aeastr/Glyph...
Portal (github.com/Aeastr/Portal) makes really cool interactions possible, can't wait to ship this
22.04.2025 20:18 β π 4 π 0 π¬ 0 π 0New Sticker creation screen on a smartphone, shown in portrait with a black bezel and center βpillβ notch. At the top, a white, roundedβrectangle βDiscardβ button sits at left and a beige βDoneβ button at right. Below, the header βNew Stickerβ is centered in a warm brown font. The main area displays a sticker preview: a small terracotta pot filled with soil, sprouting five bright green leaves, all outlined in white with a faint green glow. The background behind the sticker is light gray with a fine, evenly spaced dot grid. Along the bottom edge is a translucent toolbar of four evenly spaced capsules on a white background: (1) a camera symbol, (2) a photoβgallery thumbnail, (3) overlapping circles with the label βFilters,β and (4) a circle with a pencil and the label βBorder.β
22.04.2025 18:53 β π 2 π 0 π¬ 0 π 1Sticker Capturing coming soon to Deco, little sneak peak π
22.04.2025 04:03 β π 6 π 0 π¬ 1 π 0obsessed with these swift packages i've been working on lately, icons icons icons
github.com/Aeastr
Together, this creates a reusable βportalβ effect: you mark two views, flip a Bool, and watch your element fly between them.
21.04.2025 23:51 β π 1 π 0 π¬ 0 π 0Why it works
AnchorPreferences capture positions without manual geometry readers.
Separate overlay window lets us draw above sheets and navigation stacks.
AnyView layer gives you full control over whatβs flying around (images/text, custom views).
Animation + delay parameters let you tune timing.
When animate flips to true, it drives the overlay to animate from source β destination. When animate flips back to false, it reverses the animation. This overlay is only visible during the transition, the views attached to source and destination are show when the transition finishes
21.04.2025 23:51 β π 0 π 0 π¬ 1 π 0Each uses anchors to capture its viewβs bounding rect in the parent coordinate space, storing it in a shared array keyed by it's ID.
Wherever you want to trigger the move (often on the parent container of your sheet or navigation), you call portalTransition(id: "X", ..) {}
You mark exactly the two views you want to animate:
.portalSource(id: "X") on the βleavingβ view
.portalDestination(id: "X") on the βarrivingβ view
How?
You wrap your root in: PortalContainer { β¦ }
Under the hood this installs a transparent, nonβblocking Window that contains a single PortalLayerView. This overlay lives above your normal view hierarchy and will draw the floating animation layers.