SkillAgentSearch skills...

Landscapist

🌻 A pluggable, highly optimized Jetpack Compose and Kotlin Multiplatform image loading library that fetches and displays network images, compatible with Glide, Coil, and Fresco.

Install / Use

/learn @skydoves/Landscapist

README

landscapist<br><br>

<p align="center"> <a href="https://devlibrary.withgoogle.com/products/android/repos/skydoves-Landscapist"><img alt="Google" src="https://skydoves.github.io/badges/google-devlib.svg"/></a> <a href="https://youtu.be/8y65xBHDHK0?feature=shared"><img alt="Google" src="https://skydoves.github.io/badges/youtube-landscapist.svg"/></a> <a href="https://github.com/doveletter"><img alt="Profile" src="https://skydoves.github.io/badges/dove-letter.svg"/></a><br> <a href="https://opensource.org/licenses/Apache-2.0"><img alt="License" src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"/></a> <a href="https://android-arsenal.com/api?level=21"><img alt="API" src="https://img.shields.io/badge/API-21%2B-brightgreen.svg?style=flat"/></a> <a href="https://github.com/skydoves/Landscapist/actions"><img[landscapist-core.md](docs/landscapist-core.md) alt="Build Status" src="https://github.com/skydoves/landscapist/workflows/Android%20CI/badge.svg"/></a> <a href="https://androidweekly.net/issues/issue-441"><img alt="Android Weekly" src="https://skydoves.github.io/badges/android-weekly.svg"/></a> <a href="https://skydoves.medium.com/optimized-image-loading-for-compose-and-kotlin-multiplatform-a45eb2e710c0"><img alt="Medium" src="https://skydoves.github.io/badges/Story-Medium.svg"/></a> <a href="https://github.com/skydoves"><img alt="Profile" src="https://skydoves.github.io/badges/skydoves.svg"/></a> </p> <p align="center"> 🌻 <a href="https://skydoves.github.io/landscapist" target="_blank"> Landscapist</a> is a highly optimized, pluggable Jetpack Compose and Kotlin Multiplatform image loading solution that fetches and displays network images, and compatibles with <a href="https://github.com/bumptech/glide" target="_blank"> Glide</a>, <a href="https://github.com/coil-kt/coil" target="_blank"> Coil</a>, and <a href="https://github.com/facebook/fresco" target="_blank"> Fresco.</a> This library supports tracing image loading states, composing custom implementations, and some valuable animations, such as crossfades, blur transformation, and circular reveals. You can also configure and attach image-loading behaviors easily and fast with image plugins. <br><br> <a align="center" href="https://skydoves.github.io/landscapist" target="_blank">See official documentation for Landscapist</a> </p>

Who's using Landscapist?

šŸ‘‰ Check out who's using Landscapist.

Landscapist hits +1,100,000 downloads every month around the globe!

globe

Why Landscapist?

Landscapist is built with a lot of consideration to improve the performance of image loadings in Jetpack Compose. Most composable functions of Landscapist are Restartable and Skippable, which indicates fairly improved recomposition performance according to the Compose compiler metrics. Also, the library performance was improved with Baseline Profiles and it supports many pluggable features, such as ImageOptions, listening image state changes, custom composables, preview on Android Studio, ImageComponent and ImagePlugin, placeholder, animations (circular reveal, crossfade), transformation (blur), palette, and zoomable.

<details> <summary>See the Compose compiler metrics for Landscapist</summary>

metrics

</details>

Documentation

For comprehensive information about Landscapist, please refer to the official documentation.

Technical Content

For more details of the history, performance, customizability, and how to load network images and implement placeholders, animations, and transformations with Landscapist, check out Optimized Image Loading for Compose and Kotlin Multiplatform.

šŸ’ Sponsors

<a href="https://coderabbit.link/Jaewoong" target="_blank"> <img width="300" alt="coderabbit" src="https://github.com/user-attachments/assets/9823e1d3-8467-4d4d-8a53-94b3c0adc630" /></a>

<a href="https://getstream.io/chat/sdk/android/?utm_source=github&utm_medium=referral&utm_content=&utm_campaign=Jaewoong_github_2025" target="_blank"> <img width="260" alt="stream" src="https://github.com/user-attachments/assets/87a69228-4fef-4f48-ad98-1e2c606c5b7e" /></a>

Demo projects

You can see the use cases of this library in the repositories below:

  • google/modernstorage: ModernStorage is a group of libraries that provide an abstraction layer over storage on Android to simplify its interactions.
  • GetStream/WhatsApp-Clone-Compose: šŸ“± WhatsApp clone project demonstrates modern Android development built with Jetpack Compose and Stream Chat SDK for Compose.
  • android/storage-samples: Multiple samples showing the best practices in storage APIs on Android.
  • skydoves/DisneyCompose: 🧸 A demo Disney app using Jetpack Compose and Hilt based on modern Android tech-stacks and MVVM architecture.
  • skydoves/MovieCompose: šŸŽž A demo movie app using Jetpack Compose and Hilt based on modern Android tech stacks. <br>

Landscapist Core & Image

Landscapist now provides two foundational modules designed for Kotlin Multiplatform and Compose Multiplatform from the scratch, giving you full control over image loading across all platforms:

  • landscapist-core: A standalone, Kotlin Multiplatform image loading engine with built-in memory/disk caching, progressive loading, and network fetching via Ktor. Works on Android, iOS, Desktop, and Web without any UI dependencies.
  • landscapist-image: A Compose Multiplatform image component built on top of landscapist-core with full plugin support. Seamlessly works across all Compose Multiplatform targets.

These modules are perfect if you want a lightweight, customizable image loader without depending on Glide, Coil, or Fresco, with first-class support for all Kotlin Multiplatform and Compose Multiplatform targets.

<div class="header"> <h1>Landscapist Core</h1> </div>

Maven Central

The landscapist-core module is a complete, Kotlin Multiplatform image loading solution that works standalone without any UI dependencies. It provides:

  • Network image loading via Ktor HTTP client.
  • Memory caching with LRU eviction and weak references.
  • Disk caching with size limits and automatic cleanup.
  • Progressive loading for better perceived performance.
  • Priority-based scheduling for optimized resource usage.
  • Kotlin Multiplatform support (Android, iOS, Desktop, Web).
  • Image transformations and custom decoders.
  • Event listeners for monitoring load states.

Why Choose Landscapist Core?

Landscapist Core is exceptionally lightweight compared to other image loading libraries, making it the ideal choice for SDK and library developers who need to minimize their dependency footprint.

AAR Size Comparison (Android Release Build):

| Library | AAR Size | vs Landscapist Core | Impact on APK | |---------|----------|---------------------|---------------| | landscapist-core | ~312 KB | Baseline (Smallest) | Minimal | | Coil3 | ~460 KB | +47% larger | Moderate | | Glide | ~689 KB | +121% larger | Significant | | Fresco | ~1 MB | +228% larger | High |

Performance (Android Release Build):

| Library | Avg Load Time | Memory Usage | Supports KMP | |---------|---------------|--------------|--------------| | LandscapistImage | 1,245ms | 4,520KB | āœ“ | | GlideImage | 1,312ms (+5%) | 5,124KB (+13%) | āœ— | | CoilImage | 1,389ms (+12%) | 4,876KB (+8%) | āœ“ | | FrescoImage | 1,467ms (+18%) | 5,342KB (+18%) | āœ— |

For detailed performance analysis and test methodology, see the Landscapist Core documentation.

Setup

Add the dependency below to your module's build.gradle file:

dependencies {
    implementation("com.github.skydoves:landscapist-core:$version")
}

For Kotlin Multiplatform, add to your module's build.gradle.kts:

sourceSets {
    commonMain.dependencies {
        implementation("com.github.skydoves:landscapist-core:$version")
    }
}

All platform-specific Ktor engines are included automatically based on your target platforms.

Using Landscapist Core for Network Loading

You can use landscapist-core as a standalone image loader for fetching and caching network images without any UI dependencies. This is u

View on GitHub
GitHub Stars2.5k
CategoryDevelopment
Updated14h ago
Forks134

Languages

Kotlin

Security Score

100/100

Audited on Mar 28, 2026

No findings