Skip to content

Repository files navigation

Timbra

Timbra is a free lightweight music player for Android inspired by Poweramp v2. It rebuilds that look and feel as original code on a modern stack.

Features

  • Folder-first browsing — a virtual folder tree built from file paths.
  • Full library — Folders, Albums, Artists, All Songs, Genres, Playlists, and the play Queue. (Genres and Playlists come from legacy MediaStore tables that Android 11+ often leaves sparse or empty — that is the OS, not a missing feature.)
  • Wide format support — FFmpeg-backed decoders play far more formats than Android's native codecs.
  • Gapless & background playback — keeps playing with lock-screen, notification, and Bluetooth controls, including gestures.
  • Gesture-based album-art navigation — swipe the album art: left/right to change song, up/down to jump to the next/previous folder.
  • 7-band equalizer — a custom DSP processor independent of the device's installed audio effects.
  • Shuffle — off · shuffle current list · shuffle all songs.
  • Repeat — off · repeat list · advance list · repeat song.
  • Search across the library.
  • Dark theme — reuses the classic matte skin visuals, with a pure-black window optimized for OLED screens.
  • No ads, no telemetry, no bullshit.

Requirements

  • Android 7.0 (API 24) or newer.
  • ABIs: arm64-v8a, armeabi-v7a (emulator-only x86/x86_64 are excluded).

Tech stack

  • Language / UI: Kotlin, Android XML Views (View Binding), AndroidX Navigation, RecyclerView + ViewPager2, Material 3.
  • Audio: AndroidX Media3 / ExoPlayer 1.5.1 with the nextlib FFmpeg extension (NextRenderersFactory).
  • Async: Kotlin coroutines; Guava ListenableFuture for the MediaController handshake.
  • Package com.timbra, single-module app.

Building (Linux only for now)

build.sh builds from scratch on a bare machine — if no toolchain is found it downloads and provisions one automatically (JDK 17, Gradle 8.13, Android cmdline-tools, platform-tools, SDK platform 35 and build-tools 35) into ./toolchain/, then builds and copies the APK to the repo root as timbra-<versionName>.apk. No NDK, Android Studio or pre-installed SDK required; the FFmpeg decoders come prebuilt inside the nextlib AAR.

./build.sh                  # assembleRelease (default)
./build.sh --no-install     # build but leave the device alone
./build.sh assembleDebug    # debug variant, written as timbra-<version>-debug.apk

# To use an existing toolchain instead, point TIMBRA_ENV at an env script to source:
TIMBRA_ENV=/path/to/toolchain/env.sh ./build.sh

The debug variant gets its own filename because it is signed with the default debug key: it cannot be installed over a release build (Android rejects the signature change), and sharing one filename would let it quietly replace the release APK at the repo root.

Unit tests need no device:

gradle testReleaseUnitTest

Toolchain resolution order: $TIMBRA_ENV./toolchain/env.sh../toolchain/env.sh (a shared sibling toolchain) → java/gradle/$ANDROID_HOME already on PATH → self- provision. Provisioning is guarded per component, so a partial toolchain heals itself and re-runs are fast no-ops. Self-provisioning downloads Linux x86_64 binaries and needs curl, unzip and tar; on other hosts supply a toolchain via TIMBRA_ENV.

The release variant is minified (R8) and signed with the bundled timbra.keystore so the APK has a stable signing identity and installs/updates smoothly.

After building, the installation is performed automatically if an Android device is connected. By default, the installation updates the app in place (adb install -r) using the most recently built APK, so app data is preserved.

It's also possible to run just the install.sh script:

./install.sh

Pass --clean for a fresh install (uninstall + install).

Roadmap

Not yet implemented: settings screen, home-screen widgets, lyrics, theme switching, SAF filesystem browsing.

License

Timbra is free software licensed under the GNU General Public License v3.0 or later (GPLv3+). See LICENSE for the full text.

It bundles third-party components under their own licenses — Apache-2.0 for the AndroidX, Media3/ExoPlayer, Material Components, Guava and kotlinx-coroutines libraries; and FFmpeg (via nextlib) under the LGPL/GPL. GPLv3 was chosen deliberately: Apache-2.0 is one-way compatible with GPLv3 but not with GPLv2.

Donate

Please consider donating to the Timbra project:

https://paypal.me/fulalas

About

Timbra is a free lightweight music player for Android

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages