Free for Mac · Works with Claude Code and Codex

Write SwiftUI.Run it live.Ship it.

A native SwiftUI playground for one component. Write it yourself, or let Claude Code or Codex build it over MCP while you watch it run live. Fork anything from the community, and copy source that compiles in Xcode.

macOS 14+, Apple silicon and Intel. On iPhone? Browse and play the community.

Swoop for Mac: the For You feed of live SwiftUI creations, with Feed, Saved and Projects in the sidebar
  • TimelineView
  • PhaseAnimator
  • DragGesture
  • symbolEffect
  • withAnimation
  • GeometryReader
  • sensoryFeedback
  • MagnifyGesture
  • Path
  • transition
  • @State
  • sin · cos · .pi
  1. 01It runs.Springs, timelines and trig are computed live in native SwiftUI. Nothing is a canned preview.
  2. 02It pastes.What you copy is what you typed. No package. Nothing to import beyond SwiftUI.
  3. 03It refuses.If it can’t play something the way Xcode would, it stops and names the line.

Press play.

Recorded in the app, not mocked. The ball is the component, running live.

The stageFull screen. Share it, copy the source, or go back to the file.
Swoop’s AI sheet on ChatGPT, with a request to leave only the ball, and the open file beside it.
Your AI, over MCP FreeSwoop for Mac has a built-in MCP server. Claude Code and Codex create the project, validate it against the real player and open a live preview, on your own subscription.

What plays

One component, postcard size. Not a screen, and not an app.

TwinOrbitLoader.swift
import SwiftUI

struct TwinOrbitLoader: View {
    var size: Double = 54
    var period: Double = 0.85
    var colorA: Color = .mint
    var colorB: Color = .cyan

    var body: some View {
        TimelineView(.animation) { context in
            let t = context.date.timeIntervalSinceReferenceDate
            let a = t * .pi * 2 / period

            ZStack {
                ball(angle: a, color: colorA)
                ball(angle: a + .pi, color: colorB)
            }
        }
        .frame(width: size, height: size)
    }

    func ball(angle: Double, color: Color) -> some View {
        let depth = sin(angle)
        Circle()
            .fill(color.gradient)
            .frame(width: size * 0.36, height: size * 0.36)
            .scaleEffect(0.78 + 0.22 * ((depth + 1) / 2))
            .offset(x: cos(angle) * size * 0.28, y: sin(angle) * size * 0.1)
            .zIndex(depth)
    }
}

That file plays in Swoop as written, and pastes into Xcode unchanged.

Views
Text, Image, Button, Toggle, Slider, TextField, ProgressView, stacks, ForEach, TimelineView, PhaseAnimator, GeometryReader, Path, Shape, gradients, and the basic shapes.
Motion and input
animation, transition, onAppear, onTapGesture, DragGesture, MagnifyGesture, symbolEffect, sensoryFeedback.
Swift
@State, let, var, helpers, if / else, loops, ranges, and sin, cos, sqrt, min, max, .pi.
Not here
No ScrollView, List, NavigationStack, TabView, sheets, or matchedGeometryEffect. Swoop is one component, not a screen.

Open a shared file

Every component shared out of the app gets a page like these, and opens back in Swoop if you have it.

Read a file

One component each. The source on the page is the source that plays, and it pastes into Xcode unchanged.

Pay once. Keep it forever.

No subscription. Lifetime Pro starts at $5 for the first 10 people, then doubles every 10 sales until it settles at $69.99. Pro hides your source, shows your creator stats, adds the badge next to your name, and gets every Pro feature we ship.

See today's price

Get it on
your Mac.

Free. macOS 14 and later. Also on iPhone for browsing the community.

Download for Mac