{"id":33936572,"url":"https://github.com/libcala/cala","last_synced_at":"2025-12-12T14:22:24.128Z","repository":{"id":35045529,"uuid":"74300167","full_name":"libcala/cala","owner":"libcala","description":"Cross-platform system interface for hardware IO","archived":false,"fork":false,"pushed_at":"2023-02-21T10:58:39.000Z","size":921,"stargazers_count":56,"open_issues_count":21,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-28T06:37:51.537Z","etag":null,"topics":["android","app-engine","audio","bluetooth","cala","cross-platform","game-library","graphics-library","gui","gui-library","hardware","hardware-io","library","microphone","platform-agnostic","rust","rust-library","sound","speaker","video"],"latest_commit_sha":null,"homepage":"https://libcala.github.io/cala/","language":"Rust","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/libcala.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE_APACHE_2_0.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-11-20T20:21:01.000Z","updated_at":"2025-07-03T07:59:07.000Z","dependencies_parsed_at":"2023-07-13T23:17:13.925Z","dependency_job_id":null,"html_url":"https://github.com/libcala/cala","commit_stats":{"total_commits":112,"total_committers":3,"mean_commits":"37.333333333333336","dds":0.1517857142857143,"last_synced_commit":"442baeafdc462deca73b778c525061d8a3213b99"},"previous_names":["diveos/dive","plopgrizzly/siyo","plopgrizzly/adi"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/libcala/cala","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libcala%2Fcala","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libcala%2Fcala/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libcala%2Fcala/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libcala%2Fcala/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/libcala","download_url":"https://codeload.github.com/libcala/cala/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libcala%2Fcala/sbom","scorecard":{"id":345199,"data":{"date":"2025-08-11","repo":{"name":"github.com/libcala/cala","commit":"442baeafdc462deca73b778c525061d8a3213b99"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.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":"Code-Review","score":0,"reason":"Found 0/19 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":"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":"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:39: update your workflow using https://app.stepsecurity.io/secureworkflow/libcala/cala/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/libcala/cala/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/libcala/cala/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/libcala/cala/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/libcala/cala/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/libcala/cala/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/libcala/cala/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/libcala/cala/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/libcala/cala/ci.yml/main?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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_APACHE_2_0.txt:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE_APACHE_2_0.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 12 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"}}]},"last_synced_at":"2025-08-18T06:53:27.517Z","repository_id":35045529,"created_at":"2025-08-18T06:53:27.517Z","updated_at":"2025-08-18T06:53:27.517Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27684617,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-12T02:00:06.775Z","response_time":129,"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":["android","app-engine","audio","bluetooth","cala","cross-platform","game-library","graphics-library","gui","gui-library","hardware","hardware-io","library","microphone","platform-agnostic","rust","rust-library","sound","speaker","video"],"created_at":"2025-12-12T14:22:23.434Z","updated_at":"2025-12-12T14:22:24.122Z","avatar_url":"https://github.com/libcala.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Cala][0]\n\n#### Make portable apps and video games in Rust!\n[![docs.rs][1]][10] [![crates.io][2]][11] [![Zulip Chat][3]][12]\n\n[About][13] | [Source][14] | [Changelog][15] | [Tutorials][16] | [Blog][17]\n\nAre you sad that the standard library's only system interface is the filesystem?\nThis crate is for you!  This crate provides a safe abstraction over windowing,\naudio, accessibility, input, and video.  This crate, however, is not intended to\nsupport multimedia format parsing - that's developed as a separate crate:\n[Caved][20].\n\nCala is intended to be an \"oxidized re-implementation\" of both\n[Flutter][21]/[GTK][22] and [SDL][23]/[other SDL projects][24]\nin one library!  Flutter is mostly intended for mobile applications, and GTK is\njust for desktop applications, but what if you want to develop the same app for\nboth?  Then you use this crate (a lot of features are still WIP)!  Cala\nadditionally targets the web and bare metal systems.  Note also that even if\nyou're not trying to make your application / video game extremely portable, you\ncan still use this crate!\n\nYou might ask, \"Shouldn't apps and video games use separate libararies; Why are\nthey combined?\".  They usually need do the same thing, and some desktop\napplication depend on SDL, like [VLC][25], and some\nvideo games depend on GTK, like [Veloren][26] (at least when\nbuilt on Linux).  There's clearly a shared interest; so they *should* be\ncombined.  That said, Cala is extremely modular, and doesn't include any modules\nat all unless you enable some features.  The modules are named exactly the same\nas the features, so you enable the `camera` feature to be able to use the\n`camera` module.\n\n### Naming\nThe name cala is derived from the fungus known as [calafate rust][30].\n\n### Feature Support\nEach system interface can be enabled with a feature.  Names of features match\nthe module names where the API is located.  Just add it to your Cargo.toml:\n\n```toml\n[dependencies.cala]\nversion = \"0.9\"\nfeatures = [\"log\", \"speaker\"]\n```\n\nHere's a list of all of the targeted platforms and what they support.\n - ✓: supported\n - —: not planned / possible\n - ?: untested\n\n| Feature           | Linux | MacOS  | Windows | Web | Android |\n|-------------------|-------|--------|---------|-----|---------|\n| [bluetooth][101]  |       |        |         |     |         |\n| [camera][102]     |       |        |         |     |         |\n| [client][100]     |       |        |         |     |         |\n| [database][105]   | ✓     | ✓      | ✓       |     |         |\n| [graphics][103]   | ✓     |[9][52] | [8][55] |     |         |\n| [haptic]          |       |        |         |     |         |\n| [info][114]       | ✓     | ✓      | ✓       | ✓   |         |\n| [input][107]      | ✓     |[7][51] | [6][54] | ✓   |         |\n| [log][108]        | ✓     | ✓      | ✓       | ✓   |         |\n| [microphone][109] | ✓     |[5][50] | [4][53] | ✓   | ?       |\n| [port][106]       |       | —      | —       | —   |         |\n| [random]          | ✓     | ✓      | ✓       | ?   | ✓       |\n| [server][110]     |       |        |         |     |         |\n| [speaker][112]    | ✓     |        | [4][53] | ✓   | ?       |\n| [task][104]       | ✓     | ✓      | ✓       | ✓   |         |\n| [timer]           |       |        |         |     |         |\n| [usb]             |       |        |         |     |         |\n| [when][113]       | ✓     | ✓      | ✓       | ✓   |         |\n| [window][111]     | ✓     |[9][52] |         |     |         |\n\nModule documentation may include simple tutorials.  More in depth tutorials may\nbe found [here][16].\n\n#### Not Yet Attempted Support, But Planned\n- iOS\n- Fuchsia\n- Redox\n- Nintendo Switch\n- XBox\n- PlayStation\n- BSD variants\n- Others not on this list that you will make a pull request for adding them\n\n## License\nLicensed under any of\n - Apache License, Version 2.0, ([LICENSE_APACHE_2_0.txt][4]\n   or [https://www.apache.org/licenses/LICENSE-2.0][5])\n - MIT License, ([LICENSE_MIT.txt][6] or [https://mit-license.org/][7])\n - Boost Software License, Version 1.0, ([LICENSE_BOOST_1_0.txt][8]\n   or [https://www.boost.org/LICENSE_1_0.txt][9])\n\nat your option.\n\n### Contribution\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n\nContributors are always welcome (thank you for being interested!), whether it\nbe a bug report, bug fix, feature request, feature implementation or whatever.\nDon't be shy about getting involved.  I always make time to fix bugs, so usually\na patched version of the library will be out a few days after a report.\nFeatures requests will not complete as fast.  If you have any questions, design\ncritques, or want me to find you something to work on based on your skill level,\nyou can email me at [jeronlau@plopgrizzly.com][99].  Otherwise,\n[here's a link to the issues on GitHub][44].  Before contributing, check out the\n[contribution guidelines][45], and, as always, make sure to follow the\n[code of conduct][46].\n\n[0]: https://libcala.github.io/logo.svg\n[1]: https://docs.rs/cala/badge.svg\n[2]: https://img.shields.io/crates/v/cala.svg\n[3]: https://img.shields.io/badge/zulip-join_chat-darkgreen.svg\n\n[4]: https://github.com/libcala/cala/blob/main/LICENSE_APACHE_2_0.txt\n[5]: https://www.apache.org/licenses/LICENSE-2.0\n[6]: https://github.com/libcala/cala/blob/main/LICENSE_MIT.txt\n[7]: https://mit-license.org/\n[8]: https://github.com/libcala/cala/blob/main/LICENSE_BOOST_1_0.txt\n[9]: https://www.boost.org/LICENSE_1_0.txt\n\n[10]: https://docs.rs/cala\n[11]: https://crates.io/crates/cala\n[12]: https://cala.zulipchat.com/join/wkdkw53xb5htnchg8kqz0du0\n[13]: https://libcala.github.io/cala\n[14]: https://github.com/libcala/cala\n[15]: https://libcala.github.io/cala/changelog\n[16]: https://libcala.github.io/tutorials\n[17]: https://libcala.github.io\n\n[20]: https://crates.io/crates/caved\n[21]: https://flutter.dev\n[22]: https://www.gtk.org\n[23]: https://www.libsdl.org\n[24]: https://www.libsdl.org/projects\n[25]: https://www.videolan.org/vlc\n[26]: https://veloren.net\n\n[30]: https://en.wikipedia.org/wiki/Aecidium_magellanicum\n\n[40]: https://github.com/libcala/cala/blob/master/LICENSE-APACHE\n[41]: https://www.apache.org/licenses/LICENSE-2.0\n[42]: https://github.com/libcala/cala/blob/master/LICENSE-ZLIB\n[43]: https://opensource.org/licenses/Zlib\n[44]: https://github.com/libcala/cala/issues\n[45]: https://github.com/libcala/cala/blob/master/CONTRIBUTING.md\n[46]: https://github.com/libcala/cala/blob/master/CODE_OF_CONDUCT.md\n\n[50]: https://github.com/libcala/cala/issues/5\n[51]: https://github.com/libcala/cala/issues/7\n[52]: https://github.com/libcala/cala/issues/9\n[53]: https://github.com/libcala/cala/issues/4\n[54]: https://github.com/libcala/cala/issues/6\n[55]: https://github.com/libcala/cala/issues/8\n\n[99]: mailto:jeronlau@plopgrizzly.com\n\n[100]: https://docs.rs/cala/latest/cala/client\n[101]: https://docs.rs/cala/latest/cala/bluetooth\n[102]: https://docs.rs/cala/latest/cala/camera\n[103]: https://docs.rs/cala/latest/cala/graphics\n[104]: https://docs.rs/cala/latest/cala/exec\n[105]: https://docs.rs/cala/latest/cala/database\n[106]: https://docs.rs/cala/latest/cala/port\n[107]: https://docs.rs/cala/latest/cala/input\n[108]: https://docs.rs/cala/latest/cala/log\n[109]: https://docs.rs/cala/latest/cala/microphone\n[110]: https://docs.rs/cala/latest/cala/server\n[111]: https://docs.rs/cala/latest/cala/window\n[112]: https://docs.rs/cala/latest/cala/speaker\n[113]: https://docs.rs/cala/latest/cala/when\n[114]: https://docs.rs/cala/latest/cala/info\n\n[random]: https://docs.rs/cala/latest/cala/random\n[timer]: https://docs.rs/cala/latest/cala/timer\n[haptic]: https://docs.rs/cala/latest/cala/haptic\n[usb]: https://docs.rs/cala/latest/cala/usb\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibcala%2Fcala","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flibcala%2Fcala","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibcala%2Fcala/lists"}