{"id":21841960,"url":"https://github.com/electronstudio/raylib-python-cffi","last_synced_at":"2026-04-26T04:00:53.321Z","repository":{"id":38796448,"uuid":"187810140","full_name":"electronstudio/raylib-python-cffi","owner":"electronstudio","description":"Python CFFI bindings for Raylib","archived":false,"fork":false,"pushed_at":"2026-04-25T19:44:52.000Z","size":95376,"stargazers_count":234,"open_issues_count":16,"forks_count":42,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-04-25T21:22:48.764Z","etag":null,"topics":["gamedev","python","raylib","raylib-python"],"latest_commit_sha":null,"homepage":"http://electronstudio.github.io/raylib-python-cffi","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/electronstudio.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2019-05-21T09:53:58.000Z","updated_at":"2026-04-20T23:33:49.000Z","dependencies_parsed_at":"2023-02-06T06:31:34.294Z","dependency_job_id":"b3160316-4a70-46b6-9c5d-a92dfd6e3897","html_url":"https://github.com/electronstudio/raylib-python-cffi","commit_stats":{"total_commits":328,"total_committers":20,"mean_commits":16.4,"dds":0.4359756097560976,"last_synced_commit":"7bfd7d2ea6524c4704e6ad6f127ac40df336add1"},"previous_names":[],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/electronstudio/raylib-python-cffi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electronstudio%2Fraylib-python-cffi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electronstudio%2Fraylib-python-cffi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electronstudio%2Fraylib-python-cffi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electronstudio%2Fraylib-python-cffi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/electronstudio","download_url":"https://codeload.github.com/electronstudio/raylib-python-cffi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electronstudio%2Fraylib-python-cffi/sbom","scorecard":{"id":372045,"data":{"date":"2025-08-11","repo":{"name":"github.com/electronstudio/raylib-python-cffi","commit":"240ede7bf67a36eaa2413fc602810e2c76d3d6d8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"name":"Code-Review","score":1,"reason":"Found 4/30 approved changesets -- score normalized to 1","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":"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":10,"reason":"8 commit(s) and 5 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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.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":"Binary-Artifacts","score":7,"reason":"binaries present in source code","details":["Warn: binary detected: dynamic/raylib/libraylib.dylib:1","Warn: binary detected: dynamic/raylib/libraylib.so:1","Warn: binary detected: dynamic/raylib/raylib.dll: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":"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:0","Info: FSF or OSI recognized license: Eclipse Public 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":"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":"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.yml:277: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:294: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:302: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:348: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:358: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:363: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:395: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:405: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:410: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:427: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:437: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:96: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:194: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:199: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:259: update your workflow using https://app.stepsecurity.io/secureworkflow/electronstudio/raylib-python-cffi/build.yml/master?enable=pin","Warn: pipCommand not pinned by hash: make_docs.sh:42","Warn: pipCommand not pinned by hash: make_docs.sh:62","Warn: pipCommand not pinned by hash: raylib/build_multi.sh:14","Warn: pipCommand not pinned by hash: raylib/build_multi.sh:15","Warn: pipCommand not pinned by hash: raylib/build_multi_linux.sh:14","Warn: pipCommand not pinned by hash: raylib/build_multi_linux.sh:15","Warn: pipCommand not pinned by hash: raylib/build_multi_rpi_nox.sh:14","Warn: pipCommand not pinned by hash: raylib/build_multi_rpi_nox.sh:15","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:388","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:389","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:390","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:391","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:419","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:420","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:421","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:422","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:75","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:76","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:77","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:78","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:238","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:239","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:240","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:241","Info:   0 out of  16 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   3 out of  27 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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'","Warn: branch protection not enabled for branch 'sdl'","Warn: branch protection not enabled for branch '4.0.0'"],"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 4 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-18T13:12:02.584Z","repository_id":38796448,"created_at":"2025-08-18T13:12:02.585Z","updated_at":"2025-08-18T13:12:02.585Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32285283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"online","status_checked_at":"2026-04-26T02:00:05.962Z","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":["gamedev","python","raylib","raylib-python"],"created_at":"2024-11-27T22:09:22.080Z","updated_at":"2026-04-26T04:00:53.315Z","avatar_url":"https://github.com/electronstudio.png","language":"Python","readme":"# Python Bindings for Raylib 5.6\n## Libraries: raymath, raygui, rlgl, physac and GLFW\n## Backends: Desktop, SDL, DRM, Web, Software rendering\n## Platforms: Windows, Mac, Linux, Raspberry Pi, Web\n\n![PyPI - Downloads](https://img.shields.io/pypi/dm/raylib)\n\n[![PyPI Downloads](https://static.pepy.tech/personalized-badge/raylib?period=total\u0026units=NONE\u0026left_color=BLACK\u0026right_color=GREEN\u0026left_text=downloads)](https://pepy.tech/projects/raylib)\n\nHELP WANTED: [writing examples](https://github.com/electronstudio/raylib-python-cffi/issues/155)\n\nFeatures:\n\n* CFFI API static bindings.\n* Automatically generated to be as close as possible to \noriginal Raylib.\n* Faster, fewer bugs and easier to maintain than ctypes.\n* Commercial-friendly license.\n* Docstrings and auto-completion.\n* Type checking with Mypy\n\n# Quickstart\n\n`pip3 install raylib==5.5.0.4 --break-system-packages`\n```python\nfrom pyray import *\ninit_window(800, 450, \"Hello\")\nwhile not window_should_close():\n    begin_drawing()\n    clear_background(WHITE)\n    draw_text(\"Hello world\", 190, 200, 20, VIOLET)\n    end_drawing()\nclose_window()\n```\n\n\n\nUse the [project generator](https://github.com/electronstudio/python-raylib-template) to generate a complete project.  [Example of project](https://github.com/electronstudio/raylib-example-game)\n\n# Videos\n\n\n\u003ca href=\"https://www.youtube.com/watch?v=MIgq9w0MUsM\"\u003e\u003cimg src=\"https://img.youtube.com/vi/MIgq9w0MUsM/0.jpg\" alt=\"video\"/\u003e\u003c/a\u003e\n\n\u003ca href=\"https://www.youtube.com/watch?v=UoAsDlUwjy0\"\u003e\u003cimg src=\"https://img.youtube.com/vi/UoAsDlUwjy0/0.jpg\" alt=\"video\"/\u003e\u003c/a\u003e\n\n\n\n[more videos](https://www.youtube.com/@FinFET/videos)\n\n# Links\n\n* [Full documentation](https://electronstudio.github.io/raylib-python-cffi)\n* [Imgui integration](https://github.com/Scr44gr/raylib-imgui)\n* [Raylib Python Discord](https://discord.gg/fKDwt85aX6)\n* [Raylib General Discord](https://discord.com/invite/raylib)\n* [Python video player](https://github.com/anrayliu/pyvidplayer2)\n* [A Vector2 class](https://github.com/electronstudio/raylib-python-cffi/blob/master/examples/extra/vector2_extended.py)\n* [Raylib C FAQ](https://github.com/raysan5/raylib/wiki/Frequently-Asked-Questions/)\n\n# Installation\n\nIf you are on a modern Linux you will probably want to create a venv:\n\n    python3 -m venv venv\n    source venv/bin/activate\n\nThen make sure you have the latest pip installed:\n\n    python3 -m pip install --upgrade pip\n\nThen install\n\n    python3 -m pip install setuptools\n    python3 -m pip install raylib==5.5.0.4\n\nOn most platforms it should install a binary wheel.  If yours isn't available then pip will attempt to build from\nsource, in which case you will need to have Raylib development libs installed, e.g. \nusing homebrew, apt, etc.\n\n## Windows\n\nBinaries require x64 or x86 Windows 10 or newer.\n\nUse an [official Windows Python release](https://www.python.org/downloads/windows/) rather than WSL, MSYS, etc.\n\n## MacOS\n\nBinaries require:\n * arm64 MacOS 14\n * x64 MacOS 10.13, or newer.\n\nOlder MacOS requires building from source but this is usually simple:\n\n    brew install pkg-config\n    brew install raylib\n    python3 -m pip install raylib==5.5.0.4\n\n## Linux\n\nBinaries require OS newer than Ubuntu 2016, x64/x86 or Ubuntu 2022 arm64.   Otherwise build from source.\n(Pip should attempt automatically but will need Raylib itself installed and also pkg-config.)\n\nThe arm64 binaries are built on Raspberry Pi arm64 Bullseye with OpenGL 2.0\nso may not work on other boards.\n\n## Raspberry Pi\n\n[Using on Rasperry Pi](RPI.rst)\n\n# Backends\n\n## Dynamic binding version\n\nThere is now a separate dynamic version of this binding:\n\n    python3 -m pip uninstall raylib\n    python3 -m pip install raylib_dynamic\n\nIt works on some systems where the static version doesn't, [but be sure to read these caveats before using it](https://electronstudio.github.io/raylib-python-cffi/dynamic.html)\n\nYou can't have multiple raylib packages installed at once.\n\n## SDL backend\n\nThis is not well tested but has better support for controllers:\n\n    python3 -m pip uninstall raylib\n    python3 -m pip install raylib_sdl\n\nYou can't have multiple raylib packages installed at once.\n\n## DRM backend\n\nThis uses the Linux framebuffer for devices that don't run X11/Wayland:\n\n    python3 -m pip uninstall raylib\n    python3 -m pip install raylib_drm\n\nYou can't have multiple raylib packages installed at once.\n\n## Problems?\n\nIf it doesn't work, [try to build manually.](BUILDING.rst).  If that works then [submit an issue](https://github.com/electronstudio/raylib-python-cffi/issues)\nto let us know what you did.\n\nIf you need help you can try asking on [our discord](https://discord.gg/fKDwt85aX6).  There is also a large [Raylib discord](https://discord.gg/raylib)\nfor issues that are not Python-specific.\n\nIf it still doesn't work, [submit an issue](https://github.com/electronstudio/raylib-python-cffi/issues).\n\n\n# How to use\n\nThere are *two* modules in the raylib package, `raylib` and `pyray`. (There is no separate package for\npyray.  Do *not* `pip install pyray`).  You can use either or both:\n\n### If you are familiar with C coding and the Raylib C library and you want to use an exact copy of the C API\n\nUse [the raylib module](https://electronstudio.github.io/raylib-python-cffi/raylib.html).\n\n### If you prefer a more Pythonistic API\n\nUse [the pyray module](https://electronstudio.github.io/raylib-python-cffi/pyray.html).\n\n# Running in a web browser\n\n[Pygbag](https://pypi.org/project/pygbag/) \u003e=0.8.7 supports running in a web browser.  Usually the latest git version\nis recommended.\n\nMake a folder `my_project` with a file `main.py`:\n\n```python\n# /// script\n# dependencies = [\n#     \"cffi\",\n#     \"raylib\"\n# ]\n# ///\nimport asyncio\nimport platform\nfrom pyray import *\n\nasync def main():   # You MUST have an async main function\n    init_window(500, 500, \"Hello\")\n    platform.window.window_resize()  # You MAY want to add this line\n    while not window_should_close():\n        begin_drawing()\n        clear_background(WHITE)\n        draw_text(\"Hello world\", 190, 200, 20, VIOLET)\n        end_drawing()\n        await asyncio.sleep(0) # You MUST call this in your main loop\n    close_window()\n\nasyncio.run(main())\n```\n\nThen to create the web files and launch a web server:\n\n    python3.12 -m pip install --user --upgrade pygbag\n    python3.12 -m pygbag --PYBUILD 3.12 --ume_block 0 --template noctx.tmpl --git my_project\n\nPoint your browser to http://localhost:8000\n\nSome features may not work, so you can disable them like this:\n\n```python\nif platform.system() != \"Emscripten\":  # audio may not work on current version of emscripten\n    init_audio_device()\n```\n\nThis is all done by Pygbag rather than by me, so you should probably contact them with any issues.\nCarefully read all their [documentation](https://pygame-web.github.io/).\n\nIt does work for most of [these examples](https://electronstudio.github.io/raylib-python-cffi-pygbag-examples/)\n\n# App showcase\n\n[Tempest-raylib](https://github.com/Emtyloc/tempest-raylib)\n\n[KarabinerKeyboard](https://github.com/bilbofroggins/KarabinerKeyboard)\n\n[PyTaiko](https://github.com/Yonokid/PyTaiko)\n\n[DOOM-Clone](https://github.com/StanislavPetrovV/DOOM-Clone)\n\n[Tanki](https://github.com/pkulev/tanki)\n\n[Alloy Bloxel Editor](https://pebaz.itch.io/alloy-bloxel-editor)\n\n[Eidolon](https://github.com/Miou-zora/Eidolon)\n\nAdd your app here!\n\n# RLZero\n\nA related library (that is a work in progress!):\n\n[A simplified API for Raylib for use in education and to enable beginners to create 3d games](https://github.com/electronstudio/rlzero)\n\n# Help wanted\n\n * Converting more examples from C to Python\n * Testing on more platforms\n\n# License\n\nEclipse Public License, so you are free to\nstatically link and use in non-free / proprietary / commercial projects!\n\n# Performance\n\nIf you need more performance, do in this order:\n\n1. Use Pypy rather than standard CPython.  It is much, much faster and will make more difference than any other optimisations you might do.\n\n2. Every call to C is costly, so it's slightly faster if you use Python data structures and functions when calculating\nin your update loop\nand then only convert them to C data structures when you have to call the C functions for drawing.\n\n3. The raylib.* functions are potentially *slightly* faster than the pyray.* equivalents, so if you need a tiny bit more performance\nyou can switch your inner loop functions to these.\n\n4. There is a version of Python that is faster than Pypy: GraalPy.  However it's not fully compatible with all Python\npackages.  It doesn't work with CFFI and so doesn't work with this binding.  But it *is* compatible with the\n*Java* binding, Jaylib!  There is an example of this here: https://github.com/electronstudio/megabunny/tree/master/raylib-python-jaylib\n\n## Bunnymark\n\n\n| Library                        | Implementation    | Bunnies (60 FPS) | Percentage |\n|--------------------------------|-------------------|------------------|------------|\n| Raylib 5.0                     | C                 | 180000           | 100%       |\n| Raylib Python CFFI 5.0.0.2     | Python 3.12       | 10500            | 5.8%       |\n| Raylib Python CFFI 5.0.0.2     | Pypy 3.10         | 95000            | 53%        |\n| Raylib 3.7                     | C                 | 168100           | 100%       |\n| Raylib Python CFFI 3.7         | Pypy 3.7          | 33800            | 20%        |\n| Raylib Python CFFI 3.7         | Python 3.9        | 7700             | 4.5%       |\n| Raylib Python CFFI 3.7         | Python 3.9 Nuitka | 8600             | 5.1%       |\n| Raylib Python CFFI 3.7 Dynamic | Python 3.9        | 6300             | 3.7%       |\n\nSee also https://github.com/electronstudio/megabunny/\n\n# Packaging your app\n\nYou can create a standalone binary using the Nuitka compiler.  For example, here is how to package Bunnymark:\n\n    pip3 install nuitka\n    cd examples/textures\n    python3 -m nuitka --onefile --linux-onefile-icon resources/wabbit_alpha.png textures_bunnymark.py\n\n# Advert\n\n[RetroWar: 8-bit Party Battle](https://store.steampowered.com/app/664240/RetroWar_8bit_Party_Battle/?git) is out now.  Defeat up to 15 of your friends in a tournament of 80s-inspired retro mini games.\n\n[Coding Games With Pygame Zero \u0026 Python](https://github.com/electronstudio/pygame-zero-book) is \na book for Python beginners.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectronstudio%2Fraylib-python-cffi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felectronstudio%2Fraylib-python-cffi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectronstudio%2Fraylib-python-cffi/lists"}