{"id":40723293,"url":"https://github.com/kyamagu/skia-python","last_synced_at":"2026-03-11T09:00:45.652Z","repository":{"id":37416611,"uuid":"249925709","full_name":"kyamagu/skia-python","owner":"kyamagu","description":"Python binding to Skia Graphics Library","archived":false,"fork":false,"pushed_at":"2025-06-09T14:01:15.000Z","size":30684,"stargazers_count":313,"open_issues_count":58,"forks_count":51,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-01-21T23:26:18.372Z","etag":null,"topics":["graphics","python","skia","skia-library","skia-python-binding"],"latest_commit_sha":null,"homepage":"https://kyamagu.github.io/skia-python/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kyamagu.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-03-25T08:33:51.000Z","updated_at":"2026-01-05T19:37:49.000Z","dependencies_parsed_at":"2023-09-25T18:57:00.960Z","dependency_job_id":"c6f3150e-4fd2-4979-b2f2-e6dc7e4318b3","html_url":"https://github.com/kyamagu/skia-python","commit_stats":{"total_commits":419,"total_committers":12,"mean_commits":"34.916666666666664","dds":0.06205250596658707,"last_synced_commit":"fbca09d0d55c9019dd2b864780ce000d533ca341"},"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"purl":"pkg:github/kyamagu/skia-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyamagu%2Fskia-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyamagu%2Fskia-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyamagu%2Fskia-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyamagu%2Fskia-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kyamagu","download_url":"https://codeload.github.com/kyamagu/skia-python/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyamagu%2Fskia-python/sbom","scorecard":{"id":574996,"data":{"date":"2025-08-11","repo":{"name":"github.com/kyamagu/skia-python","commit":"9ffb045811f9b5508e152302d5b81aadca6edd8d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.1,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","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/build_docs.yml:1","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":"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":"Maintained","score":10,"reason":"30 commit(s) and 13 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":"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":"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":"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":"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_docs.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/build_docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_docs.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/build_docs.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_docs.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/build_docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:172: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:105: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:115: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:117: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:137: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:153: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:158: update your workflow using https://app.stepsecurity.io/secureworkflow/kyamagu/skia-python/ci.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build_docs.yml:25","Warn: pipCommand not pinned by hash: .github/workflows/build_docs.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:179","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:132","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned","Info:   1 out of   6 pipCommand 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":"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 3-Clause \"New\" or \"Revised\" 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":"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":-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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:142"],"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"}}]},"last_synced_at":"2025-08-20T17:26:09.225Z","repository_id":37416611,"created_at":"2025-08-20T17:26:09.225Z","updated_at":"2025-08-20T17:26:09.225Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30376755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T06:09:32.197Z","status":"ssl_error","status_checked_at":"2026-03-11T06:09:17.086Z","response_time":84,"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":["graphics","python","skia","skia-library","skia-python-binding"],"created_at":"2026-01-21T13:40:01.937Z","updated_at":"2026-03-11T09:00:45.638Z","avatar_url":"https://github.com/kyamagu.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Skia python binding\n\n[![CI](https://github.com/kyamagu/skia-python/actions/workflows/ci.yml/badge.svg)](https://github.com/kyamagu/skia-python/actions/workflows/ci.yml)\n[![PyPI version](https://badge.fury.io/py/skia-python.svg)](https://badge.fury.io/py/skia-python)\n\nPython binding to [Skia Graphics Library](https://skia.org/).\n\n- Binding based on [pybind11](https://github.com/pybind/pybind11).\n\n## Install\n\nBinary package is available on PyPI:\n\n```bash\npip install skia-python\n```\n\nSupported platforms: Python 3.8-3.14 (CPython) on\n\n- Linux x86_64, aarch64\n- macOS x86_64, arm64\n- Windows x86_64, arm64 ; arm64 for the windows 11 and Python 3.11-3.14 combination only.\n\n**IMPORTANT:** Starting v87.9rc1 / v138.0rc1, `libEGL.so` (from mesa-libEGL, libglvnd, or your graphic\ncard's vendor e.g. NVidia) is required to be present on Linux hosts. This is associated\nwith the general change on Linux from X11 to Wayland, and from GTK3 to GTK4. Firefox started\nto use it in 2021 (instead of the older `libGLX.so`), so it is likely newer Linux systems\nalready have it, but please check. skia-python v87.9 / v138.0+ supports hardware acceleration\nvia both GLX (still the default under X11) and EGL (newly added).\n\nFor Linux platforms, there must be OpenGL, libEGL and fontconfig installed.\nCurrent Ubuntu needs `libegl1` (and `libegl-mesa0`); on older Ubuntu the package names are\n`libglvnd0` and `libgl1-mesa-egl`:\n\n\n\n```bash\napt-get install libfontconfig1 libgl1-mesa-glx libgl1-mesa-egl libegl1 libglvnd0 libgl1-mesa-dri\n```\n\nOr:\n\n```bash\nyum install fontconfig mesa-libGL mesa-libEGL libglvnd-egl mesa-dri-drivers\n```\n\nFor unsupported environment, check the [build instruction](https://kyamagu.github.io/skia-python/install.html).\n\n## Examples\n\n- [Showcase](https://github.com/kyamagu/skia-python/blob/main/notebooks/Showcase.ipynb)\n- [Canvas Overview](https://github.com/kyamagu/skia-python/blob/main/notebooks/Canvas-Overview.ipynb)\n- [Canvas Creation](https://github.com/kyamagu/skia-python/blob/main/notebooks/Canvas-Creation.ipynb)\n- [Path Overview](https://github.com/kyamagu/skia-python/blob/main/notebooks/Path-Overview.ipynb)\n- [Paint Overview](https://github.com/kyamagu/skia-python/blob/main/notebooks/Paint-Overview.ipynb)\n- [Python Image I/O](https://github.com/kyamagu/skia-python/blob/main/notebooks/Python-Image-IO.ipynb)\n- [Drawing Texts](https://github.com/kyamagu/skia-python/blob/main/notebooks/Drawing-Texts.ipynb)\n\n## Documentation\n\nhttps://kyamagu.github.io/skia-python\n\n- [Tutorial](https://kyamagu.github.io/skia-python/tutorial/)\n- [Reference](https://kyamagu.github.io/skia-python/reference.html)\n\n- For breaking changes and tips on migration from `m87`: See [Migration Guide](Migration_from_v8x_to_v13x.md), also\n  see the detailed changes below, especially [README.m116](relnotes/README.m116.md).\n\n- For information about changes after `m116`: [README.m116](relnotes/README.m116.md),\n  [README.m117](relnotes/README.m117.md), [README.m118](relnotes/README.m118.md), [README.m119](relnotes/README.m119.md),\n  [README.m120](relnotes/README.m120.md), [README.m121](relnotes/README.m121.md), [README.m122](relnotes/README.m122.md),\n  [README.m123](relnotes/README.m123.md), [README.m124](relnotes/README.m124.md), [README.m125](relnotes/README.m125.md),\n  [README.m126](relnotes/README.m126.md), [README.m127](relnotes/README.m127.md), [README.m128](relnotes/README.m128.md),\n  [README.m129](relnotes/README.m129.md), [README.m130](relnotes/README.m130.md), [README.m131](relnotes/README.m131.md),\n  [README.m132](relnotes/README.m132.md), [README.m133](relnotes/README.m133.md), [README.m134](relnotes/README.m134.md),\n  [README.m135](relnotes/README.m135.md), [README.m136](relnotes/README.m136.md), [README.m137](relnotes/README.m137.md),\n  [README.m138](relnotes/README.m138.md), [README.m139](relnotes/README.m139.md), [README.m140](relnotes/README.m140.md),\n  [README.m141](relnotes/README.m141.md), [README.m142](relnotes/README.m142.md), [README.m143](relnotes/README.m143.md),\n  [README.m144](relnotes/README.m144.md).\n\n## Contributing\n\nFeel free to [post an issue](https://github.com/kyamagu/skia-python/issues) or [PR](https://github.com/kyamagu/skia-python/pulls).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyamagu%2Fskia-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkyamagu%2Fskia-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyamagu%2Fskia-python/lists"}