{"id":13694042,"url":"https://github.com/jypelle/mifasol","last_synced_at":"2026-01-20T14:34:32.745Z","repository":{"id":57560727,"uuid":"212402903","full_name":"jypelle/mifasol","owner":"jypelle","description":"Self-hosted music server in Go.","archived":false,"fork":false,"pushed_at":"2025-10-26T20:00:30.000Z","size":3625,"stargazers_count":69,"open_issues_count":3,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-26T22:05:10.201Z","etag":null,"topics":["flac","go","golang","mp3","music-library","self-hosted","wasm"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jypelle.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":"2019-10-02T17:37:53.000Z","updated_at":"2025-10-26T20:00:34.000Z","dependencies_parsed_at":"2022-08-25T16:11:37.751Z","dependency_job_id":null,"html_url":"https://github.com/jypelle/mifasol","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/jypelle/mifasol","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jypelle%2Fmifasol","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jypelle%2Fmifasol/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jypelle%2Fmifasol/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jypelle%2Fmifasol/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jypelle","download_url":"https://codeload.github.com/jypelle/mifasol/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jypelle%2Fmifasol/sbom","scorecard":{"id":545828,"data":{"date":"2025-08-11","repo":{"name":"github.com/jypelle/mifasol","commit":"2cde1ab133545c7617d230e3cd5f891eb22ba4bc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"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":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/release.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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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/ci.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/jypelle/mifasol/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/jypelle/mifasol/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/jypelle/mifasol/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/jypelle/mifasol/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/jypelle/mifasol/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/jypelle/mifasol/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/jypelle/mifasol/release.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction 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":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.4.3 not signed: https://api.github.com/repos/jypelle/mifasol/releases/56662407","Warn: release artifact v0.4.2 not signed: https://api.github.com/repos/jypelle/mifasol/releases/55107405","Warn: release artifact v0.4.1 not signed: https://api.github.com/repos/jypelle/mifasol/releases/54664267","Warn: release artifact v0.4.0 not signed: https://api.github.com/repos/jypelle/mifasol/releases/54178054","Warn: release artifact v0.3.2 not signed: https://api.github.com/repos/jypelle/mifasol/releases/46084223","Warn: release artifact v0.4.3 does not have provenance: https://api.github.com/repos/jypelle/mifasol/releases/56662407","Warn: release artifact v0.4.2 does not have provenance: https://api.github.com/repos/jypelle/mifasol/releases/55107405","Warn: release artifact v0.4.1 does not have provenance: https://api.github.com/repos/jypelle/mifasol/releases/54664267","Warn: release artifact v0.4.0 does not have provenance: https://api.github.com/repos/jypelle/mifasol/releases/54178054","Warn: release artifact v0.3.2 does not have provenance: https://api.github.com/repos/jypelle/mifasol/releases/46084223"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":4,"reason":"6 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2023-1572 / GHSA-qgc7-mgm3-q253","Warn: Project is vulnerable to: GO-2023-1990 / GHSA-j3p8-6mrq-6g7h","Warn: Project is vulnerable to: GO-2023-1989 / GHSA-x92r-3vfx-4cv3","Warn: Project is vulnerable to: GO-2024-2937 / GHSA-9phm-fm57-rhg8","Warn: Project is vulnerable to: GO-2022-0493 / GHSA-p782-xgp4-8hr8","Warn: Project is vulnerable to: GO-2022-1059 / GHSA-69ch-w2m2-3vjp"],"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-20T09:28:06.113Z","repository_id":57560727,"created_at":"2025-08-20T09:28:06.113Z","updated_at":"2025-08-20T09:28:06.113Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28604964,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T12:01:53.233Z","status":"ssl_error","status_checked_at":"2026-01-20T12:01:46.545Z","response_time":117,"last_error":"SSL_read: 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":["flac","go","golang","mp3","music-library","self-hosted","wasm"],"created_at":"2024-08-02T17:01:23.105Z","updated_at":"2026-01-20T14:34:32.740Z","avatar_url":"https://github.com/jypelle.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# ![logo](docs/logo32.png) Mifasol\n\nMifasol is a self-hosted *opinionated* music server.\n\n![mifasolsrv web_client](docs/mifasolsrv-web-screenshot.png)\n\n![mifasolcli console client](docs/mifasolcli-ui-screenshot.png)\n\n## Key features\n\n1. Management of homonym artists and albums.\n2. Management of multi-artist songs.\n3. Avoiding playlists being broken updating songs, albums, or artists.\n4. Listening to songs\n   - in streaming (via web or console clients)\n   - or locally (via file synchronization and the music player of your choice).\n5. REST API for those who want to develop their own client.\n6. Easy to\n    1. Install (one executable file to copy, and you are done)\n    2. Backup (all data in one folder)\n    3. Secure (https by default)\n7. Blazing fast navigation with console \u0026 web clients.\n8. Multiplatform.\n9. You can even build your [own internet radio](https://github.com/jypelle/vekigi) to listen to your playlists !\n\nMifasol is a free and open source project distributed under the permissive Apache 2.0 License. \n\n## Table of Contents\n- [Opinionated](#opinionated)\n- [Mifasol server](#mifasol-server)\n  - [Installation](#installation)\n  - [Usage](#usage)\n  - [Where is my data stored ?](#where-is-my-data-stored-)\n  - [Auto start and stop mifasol server with systemd on linux](#auto-start-and-stop-mifasol-server-with-systemd-on-linux)\n- [Mifasol web client](#mifasol-web-client)\n- [Mifasol console client](#mifasol-console-client)\n  - [Installation](#installation-1)\n  - [Usage](#usage-1)\n\n### Opinionated\n\nThis software doesn’t try to satisfy the needs of everyone.\n\n- The number of features is voluntarily limited to facilitate its maintenance.\n- Only **flac** and **mp3** formats are supported.\n- When you import some music on mifasol server, **song filenames are ignored**, only song tags are used to link your song to an artist, an album or to know the song name.\n- Once your music is imported, **song tags are partially managed by mifasol server** and are used to generate song filename during files sync.\n- **Only one-way sync is supported**: song files and playlists are copied from mifasol server to client device.\n\n## Mifasol server\n\n### Installation\n\n#### From prebuild binaries\n\nDrop the dedicated `mifasolsrv` binary on your server and you are done.\n\n#### From sources\n\nYou need:\n\n- Linux\n- Golang \u003e= 1.25.2\n- ANDROID_NDK_HOME set (to build android console client).\n- GOROOT set\n\n```\nmake release\n```\n\n### Usage\n\n#### Run\n\n```\nmifasolsrv run\n```\n\nUse Ctrl+C to gracefully stop it (and to avoid database corruption).\n\nOn first launch, `mifasolsrv run` will:\n- Create default admin user with `mifasol`/`mifasol` as username/password\n- Create a self-signed certificate valid for localhost only\n- Listen requests on https://localhost:6620\n\n#### Configuration\n\nIf you want to access your server with those external urls: https://mypersonaldomain.org:6630 and https://77.77.77.77:6630, you should configure mifasolsrv accordingly with:\n\n```\nmifasolsrv config -hostnames mypersonaldomain.org,77.77.77.77 -n 6630 -enable-ssl\n```\n\n#### More options\n\nRun \n\n```\nmifasolsrv --help\nmifasolsrv \u003cCOMMAND\u003e --help\n```\n\nfor more information.\n\n### Where is my data stored ?\n\nConfiguration file, embedded database, song and cover files are all saved into **mifasolsrv** config folder: \n\n- `$HOME/.config/mifasolsrv` on linux\n- `%LocalAppData%\\mifasolsrv` on windows\n- `$HOME/Library/Application Support/mifasolsrv` on mac\n\n#### Backup data\n\n- Stop mifasol server\n- Backup **mifasolsrv** config folder content\n- Start mifasol server\n\n#### Restore data\n\n- Stop mifasol server\n- Replace **mifasolsrv** config folder with content from your last backup\n- Start mifasol server\n\n### Auto start and stop mifasol server with systemd on linux\n\n- Copy `mifasolsrv` to `/usr/bin`\n- Create systemd service file\n\n    ```\n    sudo touch /etc/systemd/system/mifasolsrv.service\n    sudo chmod 664 /etc/systemd/system/mifasolsrv.service\n    ```\n\n- Edit /etc/systemd/system/mifasolsrv.service\n\n    ```\n    [Unit]\n    Description=Mifasol server\n    \n    [Service]\n    Type=simple\n    Restart=on-failure\n    ExecStart=/usr/bin/mifasolsrv run\n    User=myuser\n    Group=myuser\n    \n    [Install]\n    WantedBy=multi-user.target\n    ```\n\n- Enable \u0026 start mifasol server\n\n    ```\n    sudo systemctl daemon-reload\n    sudo systemctl enable mifasolsrv.service\n    sudo systemctl start mifasolsrv.service\n    ```\n\n## Mifasol web client\n\nYou just have to connect to your mifasol server: https://localhost:6620\n\n## Mifasol console client\n\n### Installation\n\n#### From prebuild binaries\n\nMifasol server embeds clients, so you just have to download the dedicated `mifasolcli` binary from your mifasol server: https://localhost:6620\n\n#### From sources\n\nYou need golang \u003e= 1.25.2 and\n- `libasound2-dev` on linux\n- `mingw-w64` on windows\n- `AudioToolbox.framework` on mac\n\n```\ngo install ./cmd/mifasolcli\n```\n\n### Usage\n\n#### Configuration\n\nOn first launch, *mifasolcli* try to connect to mifasol server using https://localhost:6620\n(only accepting server self-signed certificate read on first connection) with `mifasol`/`mifasol` as username/password.\n\nYou can change default configuration with:\n\n```\nmifasolcli config -hostname \u003cHOSTNAME\u003e -n 6620 -u mifasol -p mifasol\n```\n\nNB: \\\u003cHOSTNAME\\\u003e should match with one of the hostnames configured on mifasol server.\n\n#### Import music folder content to mifasol server\n\n```\nmifasolcli import [Location of music folder to import]\n```\n\n*mifasolcli* will recursively loop through specified folder to import every `flac` and `mp3` files to mifasol server.\n\n#### Sync local music folder with mifasol server's user favorite content\n\nPrepare local music folder (one-time):\n```\nmifasolcli filesync init [Location of folder to synchronize]\n```\n\nLaunch synchronization:\n```\nmifasolcli filesync sync [Location of folder to synchronize]\n```\n\n#### Console user interface\n\nRun console user interface to manage and listen mifasol server content:\n\n```\nmifasolcli ui\n```\n\nPress `h` to display available shortcuts to navigate through the interface.\n\n##### Tips:\n\n- **After a fresh server installation, use the console or web client to change the default username/password**.\n- Windows users should use new *Windows Terminal* to correctly display unicode emojis.  \n\n#### More options\n\nRun \n\n```\nmifasolcli --help\nmifasolcli \u003cCOMMAND\u003e --help\nmifasolcli \u003cCOMMAND\u003e \u003cSUBCOMMAND\u003e --help\n```\n\nfor more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjypelle%2Fmifasol","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjypelle%2Fmifasol","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjypelle%2Fmifasol/lists"}