{"id":44612811,"url":"https://github.com/geomyidia/midiserver","last_synced_at":"2026-02-28T18:00:34.274Z","repository":{"id":45326389,"uuid":"389412216","full_name":"geomyidia/midiserver","owner":"geomyidia","description":"A MIDI CLI tool and server written in Go, focused on supporting BEAM music apps via Erlang Ports","archived":false,"fork":false,"pushed_at":"2024-09-15T16:08:54.000Z","size":12657,"stargazers_count":4,"open_issues_count":9,"forks_count":0,"subscribers_count":0,"default_branch":"release/0.3.x","last_synced_at":"2026-02-14T18:47:39.264Z","etag":null,"topics":["erlang","ffi","golang","midi"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/geomyidia.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-25T18:11:11.000Z","updated_at":"2024-09-15T16:08:57.000Z","dependencies_parsed_at":"2024-09-15T17:33:45.829Z","dependency_job_id":null,"html_url":"https://github.com/geomyidia/midiserver","commit_stats":{"total_commits":168,"total_committers":1,"mean_commits":168.0,"dds":0.0,"last_synced_commit":"f16d7e1a1aa207a17f09afdb3f2f056f77ab6c41"},"previous_names":["geomyidia/midiserver","ut-proj/midiserver"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/geomyidia/midiserver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geomyidia%2Fmidiserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geomyidia%2Fmidiserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geomyidia%2Fmidiserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geomyidia%2Fmidiserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geomyidia","download_url":"https://codeload.github.com/geomyidia/midiserver/tar.gz/refs/heads/release/0.3.x","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geomyidia%2Fmidiserver/sbom","scorecard":{"id":423060,"data":{"date":"2025-08-11","repo":{"name":"github.com/geomyidia/midiserver","commit":"c80c131fbac48a642708ceb79bde8d07435a6ebc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"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":"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":"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":"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":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: bin/midiserver-darwin-arm64:1"],"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/cicd.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":"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":"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: BSD 2-Clause \"Simplified\" License: 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":"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/cicd.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/cicd.yml/release/0.3.x?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cicd.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/cicd.yml/release/0.3.x?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:88: update your workflow using https://app.stepsecurity.io/secureworkflow/geomyidia/midiserver/release.yml/release/0.3.x?enable=pin","Warn: containerImage not pinned by hash: builder/Dockerfile:1: pin your Docker image by updating golang:1.17 to golang:1.17@sha256:87262e4a4c7db56158a80a18fefdc4fee5accc41b59cde821e691d05541bbb18","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage 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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.2.0 not signed: https://api.github.com/repos/geomyidia/midiserver/releases/83800973","Warn: release artifact 0.2.0-rc1 not signed: https://api.github.com/repos/geomyidia/midiserver/releases/49248099","Warn: release artifact 0.1.0 not signed: https://api.github.com/repos/geomyidia/midiserver/releases/48945373","Warn: release artifact 0.2.0 does not have provenance: https://api.github.com/repos/geomyidia/midiserver/releases/83800973","Warn: release artifact 0.2.0-rc1 does not have provenance: https://api.github.com/repos/geomyidia/midiserver/releases/49248099","Warn: release artifact 0.1.0 does not have provenance: https://api.github.com/repos/geomyidia/midiserver/releases/48945373"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'release/0.3.x'","Warn: branch protection not enabled for branch 'release/0.2.x'","Warn: branch protection not enabled for branch 'main'"],"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":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0493 / GHSA-p782-xgp4-8hr8"],"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-19T01:42:11.268Z","repository_id":45326389,"created_at":"2025-08-19T01:42:11.268Z","updated_at":"2025-08-19T01:42:11.268Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29946463,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T17:57:52.716Z","status":"ssl_error","status_checked_at":"2026-02-28T17:57:31.974Z","response_time":90,"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":["erlang","ffi","golang","midi"],"created_at":"2026-02-14T12:06:23.544Z","updated_at":"2026-02-28T18:00:34.262Z","avatar_url":"https://github.com/geomyidia.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# midiserver\n\n[![Build Status][gh-actions-badge]][gh-actions]\n[![Go Versions][go badge]][go]\n[![LFE Versions][lfe badge]][lfe]\n[![Erlang Versions][erlang badge]][erlang]\n\n[![][logo]][logo-large]\n\n*A MIDI CLI tool and server written in Go, focused on supporting BEAM music apps via Erlang Ports*\n\n**Update:** This repo is no longer being used for the undertone and undermidi projects; those are currently being updated to use the rtmidi Erlang NIF developed by the Sonic Pi project.\n\n## About\n\nThe executable built by this project is intended to:\n\n* communicate via messages with BEAM (Erlang language family) clients\n* to do so with messages created by [midilib](https://github.com/erlsci/midilib)\n* to be controlled by a `gen_server` (e.g., see [undermidi go server](https://github.com/ut-proj/undermidi/blob/release/0.2.x/src/undermidi/supervisor.lfe))\n* to be run as part of a supervision tree (e.g., see [undermidi supervisor](https://github.com/ut-proj/undermidi))\n\n## Usage\n\nA typical execution looks like this:\n\n```shell\n./bin/midiserver -d -l warn -p exec\n```\n\nYou can use it to test your MIDI setup:\n\n```shell\n./bin/midiserver list-devices\n./bin/midiserver example 0 0\n```\n\nFull usage:\n\n```shell\n./bin/midiserver -h\n```\n\n```text\nUsage: ./bin/midiserver [flags] [commands] [args]\n\nFlags:\n\n  -d Daemonise midiserver; this disables the text parser; short-form flag\n  -daemon\n     Daemonise midiserver; this disables the text parser\n  -epmd-host string\n     Set hostname of the epmd to use (default \"localhost\")\n  -epmd-port int\n     Set port for the epmd to use (default 4369)\n  -ergo.norecover\n     disable panic catching\n  -ergo.trace\n     enable extended debug info\n  -i int\n     This needs to be a valid ID for a MIDI device capable of receiving\n     MIDI data; for a list of valid IDs be sure to run the 'list-devices'\n     command; short-form flag (default -1)\n  -l string\n     Set the logging level; short-form flag (default \"warn\")\n  -log-reportcaller\n     Indicate whether the log lines contain the report caller\n  -loglevel string\n     Set the logging level (default \"warn\")\n  -midi-in int\n     This needs to be a valid ID for a MIDI device capable of receiving\n     MIDI data; for a list of valid IDs be sure to run the 'list-devices'\n     command (default -1)\n  -n string\n     Set the Erlang node name for remote communications; short-form flag\n  -p string\n     Set the parser to user for commands and data. Legal values are:\n     [exec, port, text]. Note that setting to 'text' disables\n     daemonisation and setting any of the other parsers automatically\n     enables daemonisation; short-form flag (default \"text\")\n  -parser string\n     Set the parser to user for commands and data. Legal values are:\n     [exec, port, text]. Note that setting to 'text' disables\n     daemonisation and setting any of the other parsers automatically\n     enables daemonisation (default \"text\")\n  -r Indicate whether the log lines contain the report caller; short-form flag\n  -remote-module string\n     Set the Erlang module for remote communications\n  -remote-node string\n     Set the Erlang node name for remote communications\n  -v Display version/build info and exit; short-form flag\n  -version\n     Display version/build info and exit\n\nCommands:\n\n  example [args]\n        An example piece of music will be played on given device and channel.\n        Valid device numbers are any of the \"out\" devices in the output of\n        the 'list-devices' command; valid channel numbers are any of the 16\n        MIDI channels: 0 through 15. Default args: 0 0.\n  list-devices\n        This will list the MIDI devices currently recognised by the operating\n        system, grouped by input devices and output devices.\n  play-note [args]\n        A pitch will be played with the default values for the arguments,\n        optionally overridden. Positional args are the integer values for\n        device, channel, pitch, velocity, and duration.  Valid device numbers\n        are any of the \"out\" devices in the output of the 'list-devices'\n        command; valid channel numbers are any of the 16 MIDI channels:\n        0 through 15. Pitch and velocity are standard MIDI integer values for\n        the same. Duration is in seconds. Default args: 0 0.\n  ping\n        Provided for testing purposes by Erlang Ports implementations. If the\n        'remote-module' flag has been set, a ping will be attempted there\n        instead.\n  remote-port\n        Query epmd for the port of the remote node (set with the -remote-node\n        flag).\n  version\n        An alternate form of the version info with concise formatting.\n```\n\n## License\n\nApache Version 2 License\n\nCopyright © 2020-2022, Duncan McGreggor\n\n[//]: ---Named-Links---\n\n[logo]: assets/images/logo-v1-x250.png\n[logo-large]: assets/images/logo-v1-x1000.png\n[gh-actions-badge]: https://github.com/ut-proj/midiserver/workflows/ci%2Fcd/badge.svg\n[gh-actions]: https://github.com/ut-proj/midiserver/actions\n[go]: https://golang.org/\n[go badge]: https://img.shields.io/badge/go-1.16-blue.svg\n[lfe]: https://github.com/lfe/lfe\n[lfe badge]: https://img.shields.io/badge/lfe-2.0-blue.svg\n[erlang badge]: https://img.shields.io/badge/erlang-21%20to%2024-blue.svg\n[erlang]: https://github.com/ut-proj/midiserver/blob/master/.github/workflows/cicd.yml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeomyidia%2Fmidiserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeomyidia%2Fmidiserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeomyidia%2Fmidiserver/lists"}