Open Source Music Player

Hello Koders :wave:
Today I’m going to present you my first app that is build entirely in Kodular: Just Another Musicplayer


  • Languages: :de: :uk: :tr: :serbia:
  • Music stops when headphones get unplugged
  • Playlists
  • Repeat
  • Shuffle


musicplayer_opensource.aia (254,8 KB)
The project is licensed under CC-BY-SA 4.0 license


Only mp3 files are supported for now, until Kodular fixes the bugs in the metadata component
Library is not sorted correctly. Quickfix: Change the inner loop of the sort function to

Extensions in this project

Thanks to all extension developers

You can help

You have an idea for a feature or want to contribute? Awesome! Leave a comment and we will find a way

Translations are welcome

Here is a list of strings to be translated

"appName": "JAM",
"createPlaylistTitle": "New playlist",
"enterPlaylistName": "Enter playlist name",
"positiveButton": "OK",
"negativeButton": "Cancel",
"tracks": "Songs",
"albumArt": "album.png",
"trackArt": "album.jpg",
"renameOption": "Rename",
"deleteOption": "Delete",
"selectPlaylists": "Select Playlists",
"playlistNameHint": "Enter playlist name",
"libraryTab": "Library",
"playlistsTab": "Playlists",
"queueTab": "Now playing",
"settings": "Settings",
"track": "Song",
"renamePlaylistTitle": "Rename playlist",
"addToPlaylist": "Add to playlist",
"errorDeleteFromLibrary": "Cannot delete file from library",
"errorRecursivePlaylist": "Cannot add Playlist because the target already contains the source playlist",
"errorMessageTitle": "Error",
"warningDeleteFromLibrary":"The file will be removed permantently from the device. Continue?",
"warningMessageTitle": "Warning",
"selectLibraryFolders": "Choose in which folders the app searches for files",
"darkMode": "Dark Mode",
"deleteFromPlaylist": "Delete from Playlist",
"deleteFromQueue": "Delete from queue"

Can we see some screenshots if possible? :grin:


Nice waiting for that to be completed s users can learn lot from that. Good luck


IIRC, the Add Title Bar Icon method doesn’t work if you have options menu disabled. Make sure it is enabled for the above method to work.

Kodular Creator have Metadata component in the Media category, maybe you can use it instead of the Metadata extension.


Thank you for the tips, they fixed the issues :slight_smile: The title bar icon is disabled for now, until I have implemented the settings screen


I added a screenshot and the source file


I just uploaded a new version. Version 2 contains a few bugfixes and new features for the songs. You can now remove songs from a playlist or the queue


I just uploaded a new version. Version 3 contains several bugfixes for the apk. Here is the full list

  • Replaced KIO4_FileExplorer because it prevented the apk compilation
  • Fixed resume music error, the reason was an error in the ExoPlayer component
  • You are now able to delete tracks from a playlist and the queue (but not from the library)
  • Long click on a track now always shows a radio list picker

A big shoutout to @bodymindpower who helped with the permissions

1 Like

What permission have you added?

I didn’t add a permission. It was really difficult to figure out how to ask for permission. The only permission is READ_EXTERNAL_STORAGE

1 Like

If you want, I can translate it to Turkish language if you send the strings file :grin: (and also I can translate upcoming strings :slightly_smiling_face:)

That would be great. Translating is always appreciated. Do you have the strings?

1 Like

I got the translations file from app assets and added a Turkish language. Here is the latest edited translations file: (1.3 KB)


Thanks, I also added a translation request to the original post

1 Like

how to make it read all storage?

It currently reads from /Music, but you can extend that. Either add more folders to the list or design a new screen where the user can add more folders to the database

10 posts were split to a new topic: Mp3 file from external storage (duplicate thread)

sr-rs (latin)

"appName": "JAM",
"createPlaylistTitle": "Nova plejlista",
"enterPlaylistName": "Upiši ime plejliste",
"positiveButton": "Potvrdi",
"negativeButton": "Otkaži",
"tracks": "Pesme",
"albumArt": "album.png",
"trackArt": "album.jpg",
"renameOption": "Preimenuj",
"deleteOption": "Izbriši",
"selectPlaylists": "Izaberi plejliste",
"playlistNameHint": "Upiši ime plejliste",
"libraryTab": "Kolekcija",
"playlistsTab": "Plejliste",
"queueTab": "Trenutno pušta",
"settings": "Podešavanja",
"track": "Pesma",
"renamePlaylistTitle": "Preimenuj plejlistu",
"addToPlaylist": "Dodaj u plejlistu",
"errorDeleteFromLibrary": "Došlo je do greške pritom brisanja pesme iz kolekcije",
"errorRecursivePlaylist": "Nemoguće dodati plejlistu jer ona već postoji",
"errorMessageTitle": "Greška",
"warningDeleteFromLibrary":"Dadoteka će biti trajno obrisana sa uređaja. Nastaviti?",
"warningMessageTitle": "Upozorenje",
"selectLibraryFolders": "Izaberite u kom folderu da aplikacija pretražuje",
"darkMode": "Taman režim",
"deleteFromPlaylist": "Izbriši iz plejliste",
"deleteFromQueue": "Izbriši iz reda"

sr-rs (cyrillic)

"appName": "ЈАМ",
"createPlaylistTitle": "Нова плејлиста",
"enterPlaylistName": "Упиши име плејлисте",
"positiveButton": "Потврди",
"negativeButton": "Откажи",
"tracks": "Песме",
"albumArt": "album.png",
"trackArt": "album.jpg",
"renameOption": "Преименуј",
"deleteOption": "Избриши",
"selectPlaylists": "Изабери плејлисте",
"playlistNameHint": "Упиши име плејлисте",
"libraryTab": "Колекција",
"playlistsTab": "Плејлисте",
"queueTab": "Тренутно пушта",
"settings": "Подешавања",
"track": "Песма",
"renamePlaylistTitle": "Преименуј плејлисту",
"addToPlaylist": "Додај у плејлисту",
"errorDeleteFromLibrary": "Дошло је до грешке притом брисања песме из колекције.",
"errorRecursivePlaylist": "Немогуће додати плејлисту јер она већ постоји",
"errorMessageTitle": "Грешка",
"warningDeleteFromLibrary":"Дадотека ће трајно бити обрисана са уређаја. Наставити?",
"warningMessageTitle": "Упозорење",
"selectLibraryFolders": "Изаберите у ком фолдеру да апликација претражује",
"darkMode": "Таман режим",
"deleteFromPlaylist": "Избриши из плејлисте",
"deleteFromQueue": "Избриши из реда"
1 Like

i have translated it into nepali (ne)

"appName": "JAM",
"createPlaylistTitle": "नयाँ प्लेलिस्ट",
"enterPlaylistName": "प्लेलिस्टको नाम प्रविष्ट गर्नुहोस्",
"positiveButton": "ठिक छ",
"negativeButton": "रद्द गर्नुहोस्",
"tracks": "गितहरु",
"albumArt": "album.png",
"trackArt": "album.jpg",
"renameOption": "पुनःनामाकरण गर्नुहोस्",
"deleteOption": "मेटाउनुहोस",
"selectPlaylists": "प्लेलिस्ट चयन गर्नुहोस्",
"playlistNameHint": "प्लेलिस्ट नाम प्रविष्ट गर्नुहोस्",
"libraryTab": "लाइब्रेरी",
"playlistsTab": "प्लेलिस्टहरू",
"queueTab": "अहिले बज्दै",
"settings": "सेटिंग्स",
"track": "गित",
"renamePlaylistTitle": "प्लेलिस्टको नाम बदल्नुहोस्",
"addToPlaylist": "प्लेलिस्टमा थप्नुहोस",
"errorDeleteFromLibrary": "लाइब्रेरीबाट फाइल हटाउन सकिएन",
"errorRecursivePlaylist": "प्लेलिस्ट थप्न सकिएन",
"errorMessageTitle": "त्रुटि भयो",
"warningDeleteFromLibrary":"फाइल उपकरणबाट स्थायी रूपमा हटाइनेछ।  जारी राख्नु हुन्छ?",
"warningMessageTitle": "चेतावनी",
"selectLibraryFolders": "कुन फोल्डरहरूमा एपले फाइलहरूको खोजी गर्ने हो, छनौट गर्नुहोस्",
"darkMode": "अध्यारो मोड",
"deleteFromPlaylist": "प्लेलिस्टबाट हटाउनुहोस्",
"deleteFromQueue": "लाम बाट हटाउनुहोस्"

“appName”: “JAM”,
“createPlaylistTitle”: “قائمة جديدة”,
“enterPlaylistName”: “أدخل إسم القائمة”,
“positiveButton”: “نعم”,
“negativeButton”: “إلغاء”,
“tracks”: “الأغاني”,
“albumArt”: “album.png”,
“trackArt”: “album.jpg”,
“renameOption”: “تغيير الإسم”,
“deleteOption”: “حذف”,
“selectPlaylists”: “إختر قائمة اخرى”,
“playlistNameHint”: “أدخل إسم القائمة”,
“libraryTab”: “المكتبة”,
“playlistsTab”: “قوائم الأغاني”,
“queueTab”: “التشغيل الآن”,
“settings”: “إعدادات”,
“track”: “الأغنية”,
“renamePlaylistTitle”: “تغيير إسم قائمة الأغاني”,
“addToPlaylist”: “اضف إلى قائمة الأغاني”,
“errorDeleteFromLibrary”: “لا يمكن حذف الملف من المكتبة”,
“errorRecursivePlaylist”: “لا يمكن إضافة قائمة التشغيل لأن الوجهة تحتوي فعلا على قائمة التشغيل المصدر”,
“errorMessageTitle”: “خطأ”,
“warningDeleteFromLibrary”:“ستتم إزالة الملف نهائيًا من الجهاز. هل تكمل؟”,
“warningMessageTitle”: “تحذير”,
“selectLibraryFolders”: "اختر في أي مجلد سيبحث التطبيق عن الملفات ",
“darkMode”: “الوضع المظلم”,
“deleteFromPlaylist”: “إحذف من قائمة التشغيل”,
“deleteFromQueue”: “إحذف من قائمة الانتظار”

arabic traslation
taoufiq el barnoussi from morocco :morocco: