{"id":51237398,"url":"https://github.com/shukriadams/tuna-server","last_synced_at":"2026-06-28T21:32:11.240Z","repository":{"id":52414089,"uuid":"262531522","full_name":"shukriadams/tuna-server","owner":"shukriadams","description":"Stream music from cloud storage systems like Dropbox.","archived":false,"fork":false,"pushed_at":"2021-07-17T11:39:22.000Z","size":1045,"stargazers_count":17,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-09T06:47:18.666Z","etag":null,"topics":["dropbox","music","music-streaming","music-streaming-server","nextcloud","s3-storage"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shukriadams.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-05-09T09:05:17.000Z","updated_at":"2025-08-17T19:08:19.000Z","dependencies_parsed_at":"2022-09-08T23:31:54.245Z","dependency_job_id":null,"html_url":"https://github.com/shukriadams/tuna-server","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/shukriadams/tuna-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shukriadams%2Ftuna-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shukriadams%2Ftuna-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shukriadams%2Ftuna-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shukriadams%2Ftuna-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shukriadams","download_url":"https://codeload.github.com/shukriadams/tuna-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shukriadams%2Ftuna-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34905180,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dropbox","music","music-streaming","music-streaming-server","nextcloud","s3-storage"],"created_at":"2026-06-28T21:32:10.496Z","updated_at":"2026-06-28T21:32:11.234Z","avatar_url":"https://github.com/shukriadams.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tuna\n\nTuna lets you stream your music to any modern browser. It is open source and self-hosted, and uses popular web-based storage platforms like Dropbox, NextCloud, S3 and similar to host music files. It also tries to focus on the player and the music library.\n\nYou can try out a [Tuna demo](https://tuna-demo.shukriadams.com/) - the username/password are `demo/demo`. Note that the server is running in readonly-mode so you will not be able to create playlists or change any config. It also plays random placeholder public domain music, and not the listed songs.\n\nTuna has no social media or sharing capabilities of any kind, though it does let you post play stats to [Last.fm](http://last.fm). It works in browsers only. A standalone Electron desktop player is planned, but not a mobile (Android/iOS) version.\n\n## Requirements\n\n- A modern HTML5 browser like FireFox, Chrome etc.\n- An x64 Linux server with Docker (if you want to roll your own configuration you need NodeJS 10+ and MongoDB 3.x or higher)\n- MP3, MP4 or Ogg Vorbis music files with valid ID3 tags for at least song, album and artist.\n- A Dropbox/NextCloud account with enough space for your music files.  \n\n## Setup\n\n### App ID + secret\n\nTuna mainly uses Oauth to access your music. For sites like Dropbox and Nextcloud, this requires some administration work, as you'll need to set things up there before you can grant access to Tuna. Fortunately the process is relatively straightforward. \n\n#### Dropbox \n\nVisit the [Dropbox developers page](https://www.dropbox.com/developers/apps/create) to create an API application. \n\nUse the Oauth callback url `https://[yourtunaurl.com]/v1/oauth/dropbox` \n\n#### NextCloud\n\nIf you're using Nextcloud you'll need admin access to your Nextcloud server to manage your API. It's beyond the scope of this document to explain all this. \n\nUse the Oauth callback url `https://[yourtunaurl.com]/v1/oauth/nextcloud`\n\n### Server install\n\nTuna is currently distributed via [Docker](https://hub.docker.com/repository/docker/shukriadams/tuna-server). Tuna does not build `latest` tags, so you'll need to visit this page to find a tag to use.\n\nUse the following docker-compose script to quickly set up your Tuna instance.\n\n    version: \"2\"\n    services:\n        mongo:\n            image: mongo:[INSERT-TAG-HERE] \n            container_name: tuna-mongo\n            restart: unless-stopped\n            environment:\n                MONGO_INITDB_ROOT_USERNAME: admin\n                MONGO_INITDB_ROOT_PASSWORD: mysqlpassword\n            volumes:\n                - ./mongo/data:/data/db:rw        \n                - ./mongo/logs:/var/logs:rw        \n        tuna:\n            image: shukriadams/tuna-server:[INSERT-TAG-HERE] \n            container_name: tuna-server\n            restart: unless-stopped\n            depends_on:\n                - mongo\n            volumes:\n                - ./tuna:/usr/tuna/data/:rw\n            environment:\n\n                # username + password for Tuna website\n                masterUsername : .........\n                masterDefaultPassword : .........\n\n                mongoConnectionString: \"mongodb://admin:yourPasswordHere@mongo:27017\"\n                siteUrl: \"https://yourtunaurl.com\"\n\n                # Allowed values are : nextcloud|dropbox\n                musicSource : nextcloud \n\n                # if using dropbox, add your dropbox app id \u0026 secret here\n                dropboxAppId: .........\n                dropboxAppSecret: .........\n\n                # if using nexcloud, add your nextcloud app host, id \u0026 secret here\n                nextCloudHost: ........\n                nextCloudClientId : .........\n                nextCloudSecret: .........\n\n            ports:\n            - \"48004:48004\"\n\n\nChange \"yourPasswordHere\" to something better. Before starting you should create the local tuna volume folder and set its permission\n\n    mkdir tuna\n    chown 1000 -R ./tuna\n\n### Index your music\n\nTuna needs to know what music you've got in your Dropbox or NextCloud drive. To do this, you run a local program that scans your Dropbox/NextCloud folder for music and writes a local index file. [Download the Tuna Indexer](https://github.com/shukriadams/tuna-indexer/releases), install it, point it to your Dropbox or NextCloud folder and let it do its thing. If you're uncomfortable running the app and want to implement your own, check the [developer docs](https://github.com/shukriadams/tuna-server/tree/master/docs).\n\n### Passwords\n\nTuna is a single-user system. It will automatically create a user for you. Once you log in, it is strongly recommended that you change your password. If you lose your password you can reset it from the command line with \n\n    docker exec -it tuna-server bash -c \"cd /usr/tuna/scripts \u0026\u0026 node set --password YOURNEWPASSWORD\"\n\n## Advanced \n\n### Nginx and Socket.io\n\nTuna makes entensive use of websockets, if you're hosting it behind Nginx, you might have problems with this. Try adding the following to your Nginx config\n\n    location / {\n        proxy_pass http://localhost:YOUR-PORT-HERE; # add your own app port hehre\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n    }\n\n## License\n\nTuna is available under the GNU General Public License v3.0. See LICENSE for more \n\n## Developement\n\nPlease see /docs/development.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshukriadams%2Ftuna-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshukriadams%2Ftuna-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshukriadams%2Ftuna-server/lists"}