# ReFra: a Jetpack Compose gallery for Android that you can build without network permissions

> ReFra is a FOSS Android media gallery written in Kotlin with Jetpack Compose, distributed on F-Droid, Google Play and GitHub. Its distinguishing choice is an offline build variant that strips maps and cloud providers entirely.

**IacobIonut01/ReFra** — Media Gallery app for Android made with Jetpack Compose

- Repository: https://github.com/IacobIonut01/ReFra
- Stars: 2,820 · Forks: 165
- Language: Kotlin
- License: Apache-2.0
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/iacobionut01-refra

## The problem ReFra targets: a gallery that does not phone home

Android ships a gallery, and most third-party replacements either bundle ads, require an account, or ask for network and location permissions so they can show a map preview of where a photo was taken. ReFra is positioned against that. The README describes it as a FOSS gallery built with Jetpack Compose, and the repository topics list android-gallery, gallery, jetpack-compose and kotlin. The name is explained in the project's own FAQ: Refra is short for refraction, which the README calls the bending of light when it passes through different mediums, and the stated aim is to refract perception of media files so they are easier to manage.

The audience is narrower than a Play Store listing suggests. This is for people who install APKs from GitHub or F-Droid, care which permissions an app declares, and are willing to accept a higher minimum Android version in exchange for features built on newer media APIs. The README is explicit that Android 11 is the floor because the Trash feature and most APIs used in the app require it, and it says support for lower versions is not a priority, though the maintainer has it in mind at the cost of reduced features.

## What the offline variant actually removes

The most concrete design decision in the README is the offline variant. It is described as a version with all online features removed: maps, cloud provider support (Immich, ownCloud and similar), and any functionality that requires an internet connection, including on a local network. The stated purpose is a fully self-contained gallery with no network permissions.

That is a real architectural split, not a settings toggle, because it means two build outputs with different permission sets. It also answers a question the README anticipates directly: why certain permissions, such as internet connectivity and location, exist at all. The README says those are for showing a map preview of your current photo location data, and points users who do not need that to the offline release on the Releases page.

The trade-off is that the offline build is not simply ReFra with a switch flipped off. If you want to browse an Immich server from your phone, the offline variant is the wrong download. Conversely, if you want a gallery with no network permission in its manifest, the standard build is the wrong one. The README does not document how the two variants are produced in the Gradle build, so anyone wanting to build the offline variant themselves should read the build files rather than the README.

## Installing ReFra and verifying the APK

The README lists four distribution channels: F-Droid, Google Play, GitHub releases, and Obtainium. The F-Droid package is com.dot.gallery; the Google Play package is com.dot.gallery.gplay, which the README says is a paid listing and describes as a way to support the project while getting automatic updates through Play. The GitHub link points at the latest release, and the Obtainium link is an obtainium://add/ redirect for the repository, which means Obtainium can track new releases for you.

If you sideload, the README tells you how to check what you downloaded. Checksums of APKs are provided in the release notes, and the signing certificate fingerprint is published in the README itself. Compare the fingerprint of your downloaded file against these values before installing.

```bash
# SHA-256 of the signing certificate, as published in the README
78:46:05:DD:50:75:BE:05:82:78:A5:42:5C:BD:E5:21:31:62:CB:B4:59:1B:44:28:F4:4E:75:E0:8C:C6:43:8A
```

The README also publishes SHA-1 and MD5 fingerprints. MD5 and SHA-1 are weak by modern standards, so treat the SHA-256 value as the one worth checking. The README does not document a command for extracting the certificate from an APK, so you will need your own tooling for that step.

The release history shows a fast cadence: 5.1.5 on 2026-09-14, 5.2.0 on 2026-09-19, and 5.2.1 on 2026-09-23. The last push to the repository was on 2026-09-24, so the project is being worked on now. Expect to update often if you track GitHub releases, which is exactly the case for letting Obtainium handle it.

## Translations, donations and where the project asks for help

ReFra has a Crowdin project, linked from the README as gallery-compose, and the README's Support section lists translating the project as the first way to contribute, ahead of donations. Donation links sit on the right side of the repository, and the README notes more options are available in-app under Settings, then Donate. The Google Play listing being paid is framed in the FAQ as another support route rather than a different product.

There is also a Telegram community linked from the README. For a project at this release cadence, the practical question for a contributor is whether a fix or translation lands in the next build, and the nightly CI badge in the README, pointing at a workflow on the main branch, suggests builds are produced continuously rather than only at release time.

## Where ReFra is the wrong tool

The Android 11 minimum is the first hard boundary. If your device is stuck on Android 10 or earlier, the README says support for lower versions is not a priority and would come at the cost of reduced features, so ReFra is not a candidate today. That is a deliberate trade: the Trash feature and the media APIs the app is built on need Android 11.

The second boundary is the offline variant. Choosing it means giving up cloud provider support entirely, including over a local network. If your photo library lives on an Immich or ownCloud instance and you want the gallery to read from it, the offline build cannot do that, and the README does not describe any middle ground between the two variants.

The third is documentation depth. The README is a download page plus an FAQ. It does not document the module layout, how the offline variant is assembled, or how to build from source, even though the repository contains a Gradle wrapper, a settings.gradle.kts, a commonMain directory, a plugins directory, an ml-models directory and several planning documents at the top level. If you want to modify the app rather than use it, you are reading the code, not the README.

## How ReFra differs from Simple Gallery and Aves

The obvious comparison is Simple Gallery, the long-standing FOSS Android gallery. Simple Gallery is built on older Android view tooling and targets a much wider range of Android versions, which is the opposite trade from ReFra's Android 11 floor. If you need a gallery on an older phone, that wider range matters more than a Compose UI.

Aves is the closer comparison on the modern side: a Kotlin gallery app that also targets recent Android versions and supports cloud sources. The difference in approach is that Aves treats cloud and network sources as part of the main product, while ReFra ships a separate offline variant with those features removed and no network permissions. If your priority is that the app cannot reach the network at all, ReFra's split is the more direct answer. If your priority is one build that handles both local and remote libraries, ReFra's split works against you.

Neither comparison is settled by the README, which does not benchmark anything or compare itself to other galleries. What it does state plainly is the permission rationale and the Android 11 requirement, and those two facts are enough to decide whether the project fits your device and your threat model.

## Licence and the cost of keeping up

ReFra is licensed under Apache-2.0, and the LICENSE file sits at the top level of the repository. Apache-2.0 permits use, modification and redistribution, including in closed-source products, provided the licence terms are met; it also includes an explicit patent grant. This is a description of the licence text, not legal advice, and anyone redistributing a modified build should read the licence and the NOTICE requirements themselves.

The maintenance cost is on the user's side and it is real. Three releases landed in the nine days before 2026-09-23, and the last push was on 2026-09-24. If you install from GitHub releases, you are signing up for frequent manual updates unless you use Obtainium, which the README links as a supported channel. F-Droid users get updates through the F-Droid client, and Google Play users get them automatically, which the README gives as the reason the Play version is paid.

There is no published release cadence or support window. The README does not say how long a given release will be supported, and there is no documented upgrade path between major versions. For a personal gallery app that is usually fine; for anyone deploying ReFra across a fleet of devices, the absence of that policy is a gap worth knowing about before you commit.

## Conclusion

Adopt ReFra if you want a Compose-based Android gallery you can sideload from GitHub or F-Droid, and especially if you want the offline variant with cloud providers and maps removed. Do not adopt it if you are on Android 10 or older, since the README states Android 11 is the minimum because the Trash feature and most APIs used in the app require it. Before installing, verify the APK against the checksums in the release notes and confirm the signing certificate fingerprint matches the SHA-256 value published in the README.

## FAQ

### What is the ReFra offline variant?

The README describes it as a version of the app with all online features removed: maps, cloud provider support such as Immich and ownCloud, and any functionality that requires an internet connection even on a local network. It exists for users who want a fully self-contained gallery with no network permissions.

### Why does ReFra require Android 11 as the minimum version?

The README states that some media features and APIs require Android 11, naming the Trash feature and most APIs used in the app. It also says support for lower Android versions is not a priority right now.

### Where can I download the ReFra APK?

The README lists F-Droid, Google Play, GitHub releases and Obtainium. The F-Droid package is com.dot.gallery and the Google Play package is com.dot.gallery.gplay; the Obtainium link is an obtainium://add/ redirect for the repository.

### How can I verify the ReFra APK I downloaded?

The README says checksums of APKs are provided in the release notes, and it publishes the signing certificate fingerprint, including the SHA-256 value, in the README itself. Compare your downloaded file against those values before installing.

## Sources

- [IacobIonut01/ReFra on GitHub](https://github.com/IacobIonut01/ReFra)
- [Issues](https://github.com/IacobIonut01/ReFra/issues)
- [License: Apache-2.0](https://github.com/IacobIonut01/ReFra/blob/main/LICENSE)
- [README](https://github.com/IacobIonut01/ReFra/blob/main/README.md)
- [Releases](https://github.com/IacobIonut01/ReFra/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/iacobionut01-refra
