Chordbay is an open‑source songbook mobile app built with Kotlin and Jetpack Compose for musicians who want a simple, flexible way to organize, view, and play songs with chords and lyrics. The main focus is to have free offline-first personal songbook.
Tech stack: Kotlin · Jetpack Compose · Room · Android
Key features: Offline songbook · Chord transposition · Playlists · Sharing & sync
- Local song library
- Song editor
- Store chords and lyrics together in a clean format
- Organize songs by:
- Title
- Artist
- Fast song browsing and search
- All songs are stored locally using Room (SQLite)
- Works completely offline by default
- Your library is always available – no network required
- Optional user accounts for sync and backup
- Spring Boot backend written in Kotlin
- Mark songs as:
- Private – only visible to you, used for personal sync across your devices
- Public – share songs with other Chordbay users
- Import songs from plain .txt files
- Export songs to text for:
- Backups
- Editing on desktop
- Chord transposition:
- Quickly transpose a song to any key
- Preserve chord structure while adjusting lyrics layout
- Highlighting chords in songs
- Support for English (Bb/B) and German (B,H) chord format
- Build playlists / setlists from your songs
- Useful for:
- Live gigs
- Rehearsal sets
- Practice sessions
This section assumes you are familiar with Android development and Android Studio.
- Android Studio
- Android SDK + required build tools
git clone https://github.com/sss97cz/Chordbay.git
cd Chordbay- Open Android Studio
- Select “Open an existing project”
- Choose the
Chordbayfolder - Let Gradle sync finish
- Connect a physical Android device or start an emulator (Make sure you have enabled developer mode https://developer.android.com/studio/debug/dev-options)
- Press Run ▶ in Android Studio
- The app should install and launch automatically
A small helper script (uploader.sh) can upload plain .txt song files to the backend. This section documents usage and examples.
- Input: a directory containing
.txtsong files (one file per song in format: {ArtistName - SongName}). - Authentication: the script requires an API token (access token).
Usage (uploader.sh -h output):
Usage: uploader.sh -t TOKEN [-d DIR]
Options:
-t TOKEN API token (required)
-d DIR Directory with .txt song files (default: current directory)
-h Show this help
Example:
uploader.sh -t "mytoken" -d ./songs
How to obtain a token
- Authenticate with the backend to get an access token (example uses the /api/auth/login endpoint):
-expectes you to have an verifierd account
curl https://chordbay.eu/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com", "password":"YourPassword"}'The server will respond with JSON containing at least an accessToken and refreshToken. Example (redacted):
{
"accessToken": "ACCESS_TOKEN_HERE",
"refreshToken": "REFRESH_TOKEN_HERE"
}- Use the access token with uploader.sh:
./uploader.sh -t ACCESS_TOKEN_HERE -d ./assetsExample run and expected output
Uploading: Artist1 — Song1
OK (HTTP 200)
-----
Uploading: Artist2 — Song2
OK (HTTP 200)
-----
Notes and tips
- Default directory: if
-dis not provided, the script uses the current directory. - File format: expect plain
.txtfiles containing the song text (same format as used for import/export within the app). Keep one song per file. - Security: do not commit access tokens to version control. Treat access tokens as secrets.
- Troubleshooting: if you get 401/403 responses, verify the token is valid and has not expired. Use the refresh token flow (if available) or re-login to obtain a fresh access token.
Some possible future improvements:
- Move the project to KMP (Kotlin Multiplatform) for desktop and browser.
- Improve the chord detection algorithm.
If you have suggestions or want to help with any of these, contributions are welcome.
Contributions, bug reports, and feature requests are welcome.
If you find Chordbay useful, you can support development on Ko-fi:
-Money from Ko-fi will be used to cover server hosting costs.
This project is open source. See the LICENSE file for details.

