brainstate

kean/Nuke · source

Snapshot 0 · 2026-11-04T12:47:23Z · Swift · MIT

Content fingerprint0ecacad1a520f3fe645ac7b7994a25238da1b55198fead501dc4290b1fbe142a

GitHub description at capture

Image loading system

README at capture

<br/>
<img src="https://user-images.githubusercontent.com/1567433/114792417-57c1d080-9d56-11eb-8035-dc07cfd7557f.png" height="170px">

# Image Loading System

<p align="left">
<img src="https://img.shields.io/badge/platforms-iOS%2C%20macOS%2C%20watchOS%2C%20tvOS%2C%20visionOS-lightgrey.svg">
<img src="https://img.shields.io/badge/Licence-MIT-green">
</p>

> *Serving Images Since 2015*

Load images from different sources and display them in your app using simple and flexible APIs. Take advantage of the powerful image processing capabilities and a robust caching system.

The framework is lean and has an automated test suite 2x the codebase size, ensuring excellent reliability. Nuke is optimized for [performance](https://kean-docs.github.io/nuke/documentation/nuke/performance-guide), and its advanced architecture enables virtually unlimited possibilities for customization.

> **Memory and Disk Cache** · **Image Processing & Decompression** · **Request Coalescing & Priority** · **Prefetching** · **Resumable Downloads** · **Progressive JPEG** · **HEIF, WebP, GIF** · **Animated Images** · **SwiftUI** · **Async/Await**

## Sponsors

<table>
  <tr>
    <td valign="center" align="center">
        <a href="https://proxyman.io">
          <img src="https://kean.blog/images/logos/proxyman.png" height="50px" alt="Proxyman Logo">
          <p>Proxyman</p>
        </a>
    </td>
  </tr>
</table>

## Usage

Load images using `ImagePipeline` from the lean core [**Nuke**](https://kean-docs.github.io/nuke/documentation/nuke) module:

```swift
func loadImage() async throws {
    let imageTask = ImagePipeline.shared.imageTask(with: url)
    for await progress in imageTask.progress {
        // Update progress
    }
    imageView.image = try await imageTask.image
}
```

Or use the built-in UI components from [**NukeUI**](https://kean-docs.github.io/nukeui/documentation/nukeui/):

```swift
struct ContentView: View {
    var body: some View {
        LazyImage(url: URL(string: "https://example.com/image.jpeg"))
    }
}
```

The [**Getting Started**](https://kean-docs.github.io/nuke/documentation/nuke/getting-started/) guide is the best place to start. The [**demo app**](Demo) in this repo covers the rest: open `Nuke.xcodeproj` and run the `NukeDemo` scheme.

<a href="https://kean-docs.github.io/nuke/documentation/nuke/getting-started">
<img width="747" alt="Nuke Docs and Demo" src="https://github.com/user-attachments/assets/c6bbac09-55f2-4824-a0ec-a3a467d9e9be" />
</a>

## Installation

Nuke supports [Swift Package Manager](https://www.swift.org/package-manager/).

The package ships with four modules that you can install depending on your needs:

|Module|Description|
|--|--|
|[**Nuke**](https://kean-docs.github.io/nuke/documentation/nuke)|The lean core framework with `ImagePipeline`, `ImageRequest`, and more|
|[**NukeUI**](https://kean-docs.github.io/nukeui/documentation/nukeui/)|The UI components: `LazyImage` (SwiftUI), `LazyImageView` and `ImageLoader` (UIKit, AppKit)|
|[**NukeExtensions**](https://kean-docs.github.io/nukeextensions/documentation/nukeextensions/)|The extensions for `UIImageView` (UIKit, AppKit). Soft-deprecated: use `ImageLoader` from NukeUI|
|[**NukeVideo**](https://kean-docs.github.io/nukevideo/documentation/nukevideo/)|The components for decoding and playing short videos|

## AI Agents

Nuke ships with what a coding agent needs to use its current API, and not the one it remembers.

- **Skills**: [`nuke-optimize`](skills/nuke-optimize) measures and fixes slow images, and [`nuke-migrate`](skills/nuke-migrate) upgrades an app to Nuke 14, including what the compiler can't report. In Claude Code, run the commands below. For other agents, copy the folders to `.agents/skills/` in your project.

  ```
  /plugin marketplace add kean/Nuke
  /plugin install nuke@nuke
  ```

- **Docs**: [`llms.txt`](llms.txt), [`llms-full.txt`](llms-full.txt), and [`llms-api.txt`](llms-api.txt). They're also in your project's checkout of the package, at the version you resolved.
- **Debugging**: launch with `NUKE_DIAGNOSTICS_LOG=1` to get a line in the console for every task, or run `po ImagePipeline.shared.diagnostics` in the debugger. See [Troubleshooting](Documentation/Nuke.docc/Essentials/troubleshooting.md).
- **Contributing**: [`AGENTS.md`](AGENTS.md) has the commands and the conventions for working on Nuke itself.

## Extensions

The image pipeline is easy to customize and extend. Check out the following first-class extensions and packages built by the community. None of them resolves against Nuke 14 yet: the Status column has the versions each one supports.

|Name|Description|Status|
|--|--|--|
|[**Alamofire Plugin**](https://github.com/kean/Nuke-Alamofire-Plugin)|Replace networking layer with [Alamofire](https://github.com/Alamofire/Alamofire)|Nuke 12. Updated for Nuke 14 at its release|
|[**RxNuke**](https://github.com/kean/RxNuke)|[RxSwift](https://github.com/ReactiveX/RxSwift) extensions for Nuke with examples|Nuke 12. Updated for Nuke 14 at its release|
|[**AVIF Plugin**](https://github.com/delneg/Nuke-AVIF-Plugin)| **Community**. [AVIF](https://caniuse.com/avif) support, built by [Denis](https://github.com/delneg)|Nuke 11 and 12|

> Looking for a way to log your network requests, including image requests? Check out [**Pulse**](https://github.com/kean/Pulse).

## Minimum Requirements

> Upgrading from the previous version? Use a [**Migration Guide**](https://github.com/kean/Nuke/tree/main/Documentation/Migrations).

> **Nuke 14 is in development** on `main` and its requirements aren't final. The latest release is [Nuke 13](https://github.com/kean/Nuke/releases/latest).

| Nuke            | Swift     | Xcode      | Platforms                                                   |
|-----------------|-----------|------------|-------------------------------------------------------------|
| Nuke 14.0 (WIP) | Swift 6.2 | Xcode 26.0 | iOS 16.0, watchOS 9.0, macOS 13.0, tvOS 16.0, visionOS 1.0  |
| Nuke 13.0       | Swift 6.2 | Xcode 26.0 | iOS 15.0, watchOS 8.0, macOS 12.0, tvOS 15.0, visionOS 1.0  |
| Nuke 12.0       | Swift 5.7 | Xcode 14.1 | iOS 13.0, watchOS 6.0, macOS 10.15, tvOS 13.0               |

## License

Nuke is available under the MIT license. See the LICENSE file for more info.