{"id":13631540,"url":"https://github.com/metabrainz/listenbrainz-server","last_synced_at":"2026-03-10T19:03:18.730Z","repository":{"id":1780525,"uuid":"41960013","full_name":"metabrainz/listenbrainz-server","owner":"metabrainz","description":"Server for the ListenBrainz project, including the front-end (javascript/react) code that it serves and all of the data processing components that LB uses.","archived":false,"fork":false,"pushed_at":"2026-03-09T14:06:37.000Z","size":59721,"stargazers_count":906,"open_issues_count":55,"forks_count":329,"subscribers_count":29,"default_branch":"master","last_synced_at":"2026-03-09T18:49:42.127Z","etag":null,"topics":["big-data","database","listenbrainz-server","music","python","react","spark","typescript","web"],"latest_commit_sha":null,"homepage":"https://listenbrainz.org/","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/metabrainz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://metabrainz.org/donate"],"github":["metabrainz"]}},"created_at":"2015-09-05T12:30:49.000Z","updated_at":"2026-03-09T14:06:45.000Z","dependencies_parsed_at":"2023-09-28T17:11:05.243Z","dependency_job_id":"bd29eeb8-93e0-4209-9d98-bd1dd33689bb","html_url":"https://github.com/metabrainz/listenbrainz-server","commit_stats":{"total_commits":7585,"total_committers":100,"mean_commits":75.85,"dds":0.7497692814765986,"last_synced_commit":"f941a0591a27cddc3f3ba638ab3fab0af3a522ab"},"previous_names":[],"tags_count":507,"template":false,"template_full_name":null,"purl":"pkg:github/metabrainz/listenbrainz-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabrainz%2Flistenbrainz-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabrainz%2Flistenbrainz-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabrainz%2Flistenbrainz-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabrainz%2Flistenbrainz-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/metabrainz","download_url":"https://codeload.github.com/metabrainz/listenbrainz-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabrainz%2Flistenbrainz-server/sbom","scorecard":{"id":637578,"data":{"date":"2025-08-11","repo":{"name":"github.com/metabrainz/listenbrainz-server","commit":"a29becc4c6f4370803480393daa1acfdbfd634ce"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.9,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":7,"reason":"Found 7/9 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build-prod-image.yml:1","Warn: no topLevel permission defined: .github/workflows/deploy-image.yml:1","Warn: no topLevel permission defined: .github/workflows/frontend-tests.yml:1","Warn: no topLevel permission defined: .github/workflows/push-dev-image.yml:1","Warn: no topLevel permission defined: .github/workflows/release-drafter.yml:1","Warn: no topLevel permission defined: .github/workflows/spark-tests.yml:1","Warn: no topLevel permission defined: .github/workflows/unit-tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/metabrainz/.github/SECURITY.md:1","Info: Found linked content: github.com/metabrainz/.github/SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: github.com/metabrainz/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/deploy-image.yml:9"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-prod-image.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/build-prod-image.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-image.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/deploy-image.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-image.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/deploy-image.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-image.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/deploy-image.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/frontend-tests.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/frontend-tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/frontend-tests.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/frontend-tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/push-dev-image.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/push-dev-image.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/push-dev-image.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/push-dev-image.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-drafter.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/release-drafter.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/spark-tests.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/spark-tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-tests.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/metabrainz/listenbrainz-server/unit-tests.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:3","Warn: containerImage not pinned by hash: Dockerfile:58","Warn: containerImage not pinned by hash: Dockerfile:70","Warn: containerImage not pinned by hash: Dockerfile:92","Warn: containerImage not pinned by hash: Dockerfile:102","Warn: containerImage not pinned by hash: Dockerfile.nginx.prod:1: pin your Docker image by updating nginx:1.13.5 to nginx:1.13.5@sha256:004ac1d5e791e705f12a17c80d7bb1e8f7f01aa7dca7deee6e65a03465392072","Warn: containerImage not pinned by hash: Dockerfile.spark:1: pin your Docker image by updating metabrainz/listenbrainz-spark-base:latest to metabrainz/listenbrainz-spark-base:latest@sha256:6d94b7b4c4209d4c42aafd522baeaba48dadb8824c346c2581cc03dda6dfddaf","Warn: containerImage not pinned by hash: docker/Dockerfile.spark.base:2","Warn: containerImage not pinned by hash: mbid_mapping/Dockerfile:1","Warn: containerImage not pinned by hash: mbid_mapping/Dockerfile:18","Warn: pipCommand not pinned by hash: Dockerfile:52","Warn: pipCommand not pinned by hash: Dockerfile:60","Warn: pipCommand not pinned by hash: Dockerfile:63","Warn: npmCommand not pinned by hash: Dockerfile:84","Warn: pipCommand not pinned by hash: Dockerfile.spark:12","Warn: pipCommand not pinned by hash: Dockerfile.spark:17","Warn: pipCommand not pinned by hash: Dockerfile.spark:20","Warn: pipCommand not pinned by hash: mbid_mapping/Dockerfile:3-4","Warn: pipCommand not pinned by hash: mbid_mapping/Dockerfile:13","Warn: pipCommand not pinned by hash: mbid_mapping/Dockerfile:29","Warn: pipCommand not pinned by hash: docker/start-spark-request-consumer.sh:10","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of  10 containerImage dependencies pinned","Info:   0 out of  10 pipCommand dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T09:38:50.449Z","repository_id":1780525,"created_at":"2025-08-21T09:38:50.449Z","updated_at":"2025-08-21T09:38:50.449Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30348872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T15:55:29.454Z","status":"ssl_error","status_checked_at":"2026-03-10T15:54:58.440Z","response_time":106,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["big-data","database","listenbrainz-server","music","python","react","spark","typescript","web"],"created_at":"2024-08-01T22:02:29.348Z","updated_at":"2026-03-10T19:03:18.683Z","avatar_url":"https://github.com/metabrainz.png","language":"Python","funding_links":["https://metabrainz.org/donate","https://github.com/sponsors/metabrainz"],"categories":["Python","database","Media"],"sub_categories":["Other"],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://listenbrainz.org\"\u003e\u003cimg src=\"https://github.com/metabrainz/metabrainz-logos/blob/master/logos/ListenBrainz/SVG/ListenBrainz_logo.svg\" alt=\"ListenBrainz\"\u003e\u003c/a\u003e\n\u003c/h1\u003e\n\u003ch4 align=\"center\"\u003eServer for the ListenBrainz project\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://app.readthedocs.org/projects/listenbrainz/\"\u003e\n    \u003cimg src=\"https://readthedocs.org/projects/listenbrainz/badge/\"\n         alt=\"Readthedocs status\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/metabrainz/listenbrainz-server/commits/master\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/last-commit/metabrainz/listenbrainz-server.svg?style=flat-square\u0026logo=github\u0026logoColor=white\"\n         alt=\"GitHub last commit\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/metabrainz/listenbrainz-server/pulls\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/issues-pr-raw/metabrainz/listenbrainz-server?style=flat-square\u0026logo=github\u0026logoColor=white\"\n         alt=\"GitHub pull requests\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://listenbrainz.org\"\u003eWebsite\u003c/a\u003e •\n  \u003ca href=\"https://listenbrainz.readthedocs.io\"\u003eDocumentation\u003c/a\u003e •\n  \u003ca href=\"https://tickets.metabrainz.org/projects/LB/issues\"\u003eBug tracker\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## About\n\nListenBrainz keeps track of music you listen to and\nprovides you with insights into your listening habits. We're\ncompletely open-source and publish our data as open data.\n\nYou can use ListenBrainz to track your music listening habits and\nshare your taste with others using our visualizations. We also have an\n[API](https://listenbrainz.readthedocs.io/en/latest/users/api/index.html)\nif you want to do more with our data.\n\nListenBrainz is operated by the [MetaBrainz Foundation](https://metabrainz.org)\nwhich has a long-standing history of curating, protecting and making music data available to the\npublic.\n\nFor more information about this project and its goals, look at our\n[website](https://listenbrainz.org/), specifically the\n[about page](https://listenbrainz.org/about).\n\nChanges and other important announcements about the ListenBrainz services will be\nannounced on [our blog](https://blog.metabrainz.org/). If you start using our\nservices in any production system, we urge you to follow the blog!\n\n## Commercial use\n\nAll of our data is available for commercial use. You can find out more about our\n[commercial use support tiers](https://metabrainz.org/supporters/account-type) on \nthe MetaBrainz site.\n\n## Contributing\n\nIf you are interested in helping out, consider\n[donating](https://metabrainz.org/donate) to the MetaBrainz Foundation.\n\nIf you are interested in contributing code or documentation,\nplease have a look at the [issue tracker](https://tickets.metabrainz.org/browse/LB)\nor chat with us in [IRC/Matrix/Discord](https://musicbrainz.org/doc/Communication/ChatBrainz)\non the #metabrainz channel.\n\n## Development environment\n\nThese instructions help you get started with the development process.\nInstallation in a production environment may be different.\n\n**Read the [development environment\ndocumentation](https://listenbrainz.readthedocs.io/en/latest/developers/devel-env.html  \"Setting up a development environment - ListenBrainz documentation\")**\n\nIn order to work with Spark, you'll have to setup the Spark development environment.\nRead the [documentation](https://listenbrainz.readthedocs.io/en/latest/developers/spark-devel-env.html).\n\n## Documentation\n\nFull documentation for the ListenBrainz API is available at\n[listenbrainz.readthedocs.org](https://listenbrainz.readthedocs.org). You can\nalso build the documentation locally:\n\n    cd listenbrainz-server/docs\n    pip install -r requirements.txt\n    make clean html\n\n## License Notice\n\n```\nCopyright (C) 2017 MetaBrainz Foundation Inc.\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetabrainz%2Flistenbrainz-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetabrainz%2Flistenbrainz-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetabrainz%2Flistenbrainz-server/lists"}