[READ-ONLY] Mirror of https://github.com/olamaelcu/livtet-mobile. Android and iOS reference client applications and libraries for the Livtet platform olamaelcu.net/projects/livtet
android ios ios-swift kotlin kotlin-android swift

Files
README.md

Livtet — Mobile #

Native Android and iOS clients for Livtet, a personal library manager. The mobile apps are graphical shells over a shared Rust core that also powers the Tauri desktop application with additional support for interacting with the hosted Bibliograph AppView for ATProto support.

This repository hosts only the mobile clients and the build glue that ties them to the shared core - vendored here as the core/ git submodule.

What is here #

Path Contents
android/ Native Android app (Kotlin + Jetpack Compose, package net.olamaelcu.livtet)
ios/ Native iOS app (SwiftUI + UniFFI, bundle net.olamaelcu.livtet)
core/ Git submodule — Rust workspace with the shared domain, search, sync, FFI, and plugin crates
fastlane/ Store metadata, screenshots, and Fastlane lanes for both platforms
scripts/ Standalone shell helpers invoked by the mise.toml task graph
.mise.toml Cross-platform toolchain declaration (Rust, Java/Kotlin/Gradle, Xcode, SOPS, …)

The Android and iOS clients are separate products that share the Livtet brand name. They are not Tauri targets. Tauri configuration (.browserslistrc, tauri.conf.json, web bundler output) is not present in this repository and is irrelevant to the mobile builds.

Architecture #

+-----------------------+   +-----------------------+
| Android (Kotlin /     |   | iOS (SwiftUI /        |
| Jetpack Compose)      |   | Swift)                |
+----------+------------+   +-----------+-----------+
           | UniFFI-generated Kotlin          | UniFFI-generated Swift
           | bindings (Bridge.kt)             | bindings (LivtetKit)
           v                                  v
+----------------------+----------------------+
| core/livtet-ffi      |   UniFFI surface (Android, iOS)
+----------------------+----------------------+
| core/livtet-core     |   Unison crate (data + covers + search + types)
+----------------------+----------------------+
| core/livtet-data     |   SeaORM entities, services, SQLite access
+----------------------+----------------------+
| core/livtet-{types,search,sync,covers,plugins,plugins-lua,backup,cli,…}
+----------------------------------+----------------------------------+
                        | shared SQLite (livtet.dat / livtet.db)

Both clients compile a curated subset of livtet-core into a static library or xcframework through core/livtet-ffi, then call into it through UniFFI bindings generated by uniffi-bindgen. The bindings are build artifacts — see GETTING_STARTED.md for the regeneration flow and the platform-specific AGENTS.md for the rules around them.

Status #

Early development. Current published versions:

  • Android: versionName 0.1.1, versionCode 2, applicationId net.olamaelcu.livtet. Three product flavors — playstore, fdroid, generic.
  • iOS: targets iOS 17+, bundle identifier net.olamaelcu.livtet. The product name and every path component that contains it is the 6-letter form Livtet (see ios/AGENTS.md).

Both apps share a common end-user surface today (Dashboard, Library, Add Book wizard on Android; Add Book wizard is "ships in a follow-up" on iOS). See the per-platform READMEs for what is and is not wired up.

Quick start #

git clone <repo-url> livtet-mobile
cd livtet-mobile
git submodule update --init --recursive
direnv allow                  # or: mise trust && mise install

direnv allow (or mise install) provisions the full toolchain declared in .mise.toml — Rust, Java + Gradle + Android SDK + NDK, XcodeGen + CocoaPods + SwiftLint, SOPS, and the helpers used by the Mise task graph.

From there, pick your platform:

  • Android — see android/README.md and mise run android-dev-init, then mise run android-build / apk (alias for the emulator + build + install union task).
  • iOS (macOS only) — see ios/README.md and mise run ios-dev-init, then mise run ios-build / ios-run-simulator.
  • Rust core — cd core && cargo test. The mobile clients do not call into the core directly; they consume it through livtet-ffi.

A longer walk-through lives in GETTING_STARTED.md.

Contributing #

Bug reports, patches, and design proposals are welcome. Read CONTRIBUTING.md before opening a pull request — it covers the worktree workflow, the DCO signoff convention, the per-platform rules of engagement, and how FFI changes are expected to flow through core/ and the regenerated bindings.

Each platform has its own agent / contributor notes:

License #

Source code in this repository is licensed under the Mozilla Public License, v. 2.0. Copyright (c) 2026 Jacky Alcine yo@jacky.wtf.