An Android app to manage your self-hosted zipline V4 instance. https://zipline.stefdp.com
Find a file
Stef-00012 ce40add611
All checks were successful
Generated APK AAB / build (push) Has been skipped
add changelog for code 40
2026-05-02 21:11:28 +02:00
.forgejo/workflows [build] fix workflow 2026-05-02 20:56:49 +02:00
app [build] fix workflow 2026-05-02 20:56:49 +02:00
assets fix readme 2026-04-20 17:35:15 +02:00
fastlane/metadata/android add changelog for code 40 2026-05-02 21:11:28 +02:00
gradle [build] add support for update checking 2026-05-02 20:34:44 +02:00
.gitignore feat: finished moving to viewmodel those screens: admin settings, admin users, admin invites 2026-04-12 16:12:01 +02:00
build.gradle.kts added zipline API typedefs 2026-03-02 00:06:34 +01:00
gradle.properties added zipline API typedefs 2026-03-02 00:06:34 +01:00
gradlew added zipline API typedefs 2026-03-02 00:06:34 +01:00
gradlew.bat added zipline API typedefs 2026-03-02 00:06:34 +01:00
LICENSE add MIT license 2026-04-15 18:36:07 +03:00
README.md update readme 2026-05-01 14:05:33 +02:00
settings.gradle.kts [build] remove a plugin for f-droid build 2026-04-15 19:20:59 +02:00

Zipline Android App

Important

iOS is not supported

This is an android app made to manage your Zipline V4 (self-hosted) server and also upload files or shorten URLs. You can also share files to the app to upload them.

Features

  • Upload Files
  • Shorten URLs
  • Manage Files
  • Manage URLs
  • Manage Folders
  • View your Stats
  • Manage your own User
  • Manage Users (requires an admin account)
  • Manage Server Settings (requires a admin or superadmin account)

Note

If you add a widget but it appears empty or has null values, set the app battery usage to "Unrestricted" and re-add them.
This should fix it.

Download

The app is available on the following platforms:

Get on Google Play Get on Forgejo

Creating a development build

To create a development build just run ./gradlew assembleDebug or use the Android Studio Emulator

This will create an APK in app/build/outputs/apk/debug/app-debug.apk

Building an apk

just run ./gradlew assembleRelease

This will create an APK in app/build/outputs/apk/release/app-release(-unsigned).apk

Flavortown

If you're from flavortown and don't want to host your own Zipline V4 instance, you can use the following credentials:

Server URL: https://i.stefdp.com
Username: FT Demo
Password: FT Demo 1

Note

This user has the following limits:

  • 2GB max file size (across all uploaded files)
  • 20 shortened URLs

Are you a Flavortown reviewer?

If you are a flavortown reviewer, you can DM me on Slack and I'll give you a instance as a SUPERADMIN (highest role).
You can choose to either use a pre-made admin account on an already existing testing instance, or i can setup a temporary new instance and you create your own SUPERADMIN account (since this account can only be created on the first login).
Or well... you can just host your own instance of Zipline V4, just make sure you put it on a https URL

Optimization

This section is for the flavortown "Optimization" sidequest

  • Instead of rendering all items (such as images in the "Files" tab or "Home" tab (recent files)) or tables' contents at once, I used uses the Android's LazyColumn/LazyRow which only renders the elements on screens and un-renders them when they're out of the screen.2
  • I used R8 minimization, which removes all the unused code from the final APK and renames long functions such as runDeleteTemporaryFilesJob() to a(), thus reducing the final APK bundle. 3
  • I used XML drawables files instead of PNGs/JPGs, resulting in a smaller final APK size since XML drawables can be resized like SVGs instead of having different versions of the same PNG image for the different screen densities. 4
  • When available from the Zipline API, i used query params such as sortBy and sortorder to sort, searchField and searchQuery to search instead of filtering/sorting myself, thus saving memory, as it doesn't have to store in memory URLs or files that won't be displayed, improved performance as the filtering/searching is done on the server instead of the weaker mobile CPU. Examples:
    • getFiles uses sortBy and sortOrder to sort, searchField and searchQuery to search and favorite to filter for favorite files.
    • getUrls uses searchField and searchQuery (at the time of writing, the API endpoint doesn't seem to support sort query parameters).