Skip to content

About

Android app client for Shiori

Resources

Stars

230 stars

Watchers

3 watching

Forks

Repository files navigation

Shiori
Shiori

GitHub Actions License Release Issues Commit Activity

Description

An Android client for Shiori, the self-hosted bookmark manager. It talks to a server you run yourself: there is no account to sign up for and no service behind the app, only your own.

The whole library is kept on the device, so the list, the tags and any article you have already saved are there with no connection at all. What you change while offline — adding, editing, deleting, asking the server for a fresh copy of a page — is queued and sent when the server can be reached again.

Screenshots

Phone

The bookmark list The bookmark list in compact view Tag management Editing a bookmark
Bookmarks Compact Tags Editor
The bookmark list in dark mode Compact view in dark mode Settings Settings in dark mode
Bookmarks, dark Compact, dark Settings Settings, dark

Tablet and foldable

The list is a staggered grid that takes as many columns as the window can hold: one on a phone, two on an unfolded foldable, three on a tablet.

Tablet Tablet in dark mode
Tablet Tablet, dark mode
Unfolded foldable Unfolded foldable in dark mode
Unfolded foldable Unfolded foldable, dark mode

Features

  • Save from any app. Shiori registers as a share target, so a page reaches your library from the browser's Share menu without opening the app.
  • Read offline. Articles are stored as readable text, stripped of the site around them, and stay available with no connection.
  • Works offline, syncs later. Changes made without a connection are queued and replayed against the server once it answers again.
  • Search titles, excerpts and URLs, on the device, so it also answers offline.
  • Tags. Filter the list by tag, rename or delete tags, or hide one tag from the list entirely.
  • Batch actions. Select several bookmarks to tag, re-cache or delete them in one go.
  • EPUB. Download the ebook the server made of a page, and pass it on to a reader app.
  • Adaptive layout. The list is a staggered grid that takes as many columns as the window can hold, and on a large screen it can put the article beside the list instead of over it.
  • Material 3 with dynamic colour, light and dark.

Requirements

  • A Shiori server you can reach, 1.7 or newer. Sign-in uses its /api/v1/auth API, and logout falls back to the pre-1.8 route when the newer one is not there.
  • Android 8.0 (API 26) or newer.

The app asks for the server's address on first launch. Anything the server cannot do, it cannot do either: it is a client, not a second copy of Shiori.

Built With

  • Jetpack Compose and Material 3 for the whole UI — there are no XML layouts
  • Room and Paging 3 for the local copy of the library, which is what the list is actually read from
  • WorkManager to replay offline changes once the server answers again
  • Retrofit and OkHttp for the API
  • Koin for dependency injection
  • Coil for thumbnails
  • DataStore for settings and the session
  • Coroutines and Flow throughout

Laid out in six Gradle modules — presentation, domain, data, network, model, common — so the UI cannot reach the network without going through a use case first.

Building

./gradlew :presentation:assembleProductionDebug

Debug builds need nothing beyond a JDK 21 toolchain. Release builds are signed, and read the keystore from KEYSTORE_PATH, RELEASE_STORE_PASSWORD, RELEASE_KEY_ALIAS and RELEASE_KEY_PASSWORD.

Tests:

./gradlew test

Download

Shiori is available for download on various platforms:

Get it on GitHub Get Shiori on Google Play Get Shiori on IzzyOnDroid Get it on F-Droid

License

This project is licensed under the Apache License - see the LICENSE file for details.

About

Android app client for Shiori

Resources

Stars

230 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages