Skeletonui
  • August 11, 2025

SkeletonUI aims to bring an elegant, declarative syntax to skeleton loading animations. Get rid of loading screens or spinners and start using skeletons to represent final content shapes.

Requirements ⚙️


  • macOS 10.15.
  • Xcode 11.0.
  • Swift 5.0.

Supported Platforms 📱


  • iOS 13.0.
  • tvOS 13.0.
  • watchOS 6.0.
  • macOS 10.15.

Installation 💻


Swift Package Manager

Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. Once you have your Swift package set up, adding SkeletonUI as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
.package(url: “https://github.com/CSolanaM/SkeletonUI.git”, .branch(“master”))
]

CocoaPods

CocoaPods is a centralized dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate SkeletonUI into your Xcode project using CocoaPods, specify it in your Podfile:

pod ‘SkeletonUI’

Features ✨


  •  SwiftUI simple, declarative syntax.
  •  Super easy and simple to set up.
  •  All Views are skeletonables.
  •  Fully customizable.
  •  Universal (iPhone, iPad, iPod, Apple TV, Apple Watch, Mac).
  •  SwiftUI ViewModifier power.
  •  Lightweight codebase.

Usage 🚀


Basic one-liner:

import SkeletonUI
import SwiftUI

struct UsersView: View {
@State var users = [String]()

var body: some View {
Text(“Finished requesting \(users.count) users!”)
.skeleton(with: users.isEmpty)
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
self.users = [“John Doe”, “Jane Doe”, “James Doe”, “Judy Doe”]
}
}
}
}

Advanced customization:

import SkeletonUI
import SwiftUI

struct User: Identifiable {
let id = UUID()
let name: String
}

struct UsersView: View {
@State var users = [User]()

var body: some View {
SkeletonList(with: users, quantity: 6) { loading, user in
Text(user?.name)
.skeleton(with: loading,
animation: .pulse(),
appearance: .solid(color: .red, background: .blue),
shape: .rectangle,
lines: 3,
scales: [1: 0.5])
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
self.users = [User(name: “John Doe”),
User(name: “Jane Doe”),
User(name: “James Doe”),
User(name: “Judy Doe”)]
}
}
}
}

GitHub


View Github

YOU MIGHT ALSO LIKE...
Sliders

Sliders is a compilation of all my stylable drag based SwiftUI components. It provides a variety of unique controls as well ...

SlidingRuler

SlidingRuler is a Swift package containing a SwiftUI control that acts like an linear infinite slider or a finite, more precise ...

BetterSheet

Provides a powerful SwiftUI sheet replacement with the following features: All the features of the built-in sheet modifiers, but more robust (tested ...

BottomSheet

Version 3 is out now!   Please look here and read the README for more information on the changes. Why There have ...

Snap

A customizable Snapping Drawer à la Apple Maps, Apple Music, Stocks, Overcast, etc.. 100% in SwiftUI This is heavily inspired ...