{"id":19220434,"url":"https://github.com/louisbrunner/godot-go-plus","last_synced_at":"2026-06-15T04:33:02.057Z","repository":{"id":228222637,"uuid":"771649878","full_name":"LouisBrunner/godot-go-plus","owner":"LouisBrunner","description":"Easily wrap Go code into Godot classes","archived":false,"fork":false,"pushed_at":"2024-03-17T15:33:11.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-09T21:48:44.612Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LouisBrunner.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}},"created_at":"2024-03-13T17:31:52.000Z","updated_at":"2024-03-17T16:05:02.000Z","dependencies_parsed_at":"2024-03-17T18:31:08.060Z","dependency_job_id":"d1fdd306-ae91-49f6-844c-7ae6daf25fe1","html_url":"https://github.com/LouisBrunner/godot-go-plus","commit_stats":null,"previous_names":["louisbrunner/godot-go-plus"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LouisBrunner/godot-go-plus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LouisBrunner%2Fgodot-go-plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LouisBrunner%2Fgodot-go-plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LouisBrunner%2Fgodot-go-plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LouisBrunner%2Fgodot-go-plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LouisBrunner","download_url":"https://codeload.github.com/LouisBrunner/godot-go-plus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LouisBrunner%2Fgodot-go-plus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34348291,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"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":[],"created_at":"2024-11-09T14:35:11.939Z","updated_at":"2026-06-15T04:33:02.042Z","avatar_url":"https://github.com/LouisBrunner.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# godot-go-plus\n\n**WARNING: this project is still in early development and not currently functional.**\n\nThis project allows you to easily wrap Go code into Godot classes and use them in your Godot project.\n\nThe API is heavily inspired by https://github.com/ShadowApex/godot-go and uses https://github.com/godot-go/godot-go under the hood.\n\n## Usage\n\nIn order to use Go in your Godot project, you need to compile the Go code into a shared library and load it in Godot.\nThis is done by using the Go `-buildmode=c-shared` flag on a `main` package with a `main` function.\n\n### Boilerplate code\n\nCreate a go file containing the following:\n\n```go\npackage main\n\nfunc init() {\n}\n\nfunc main() {\n}\n```\n\nWe will be using the `init` function to register our custom Godot classes, implemented in Go.\n\n## Create a custom Godot class\n\nA basic Godot class is defined as a struct with an embbeded `gdapi` struct. For example, to inherit from `Node2D`:\n\n```go\nimport (\n\t. \"github.com/godot-go/godot-go/pkg/gdclassimpl\"\n)\n\ntype MyNode2D struct {\n  Node2DImpl\n}\n```\n\nAny public method receiver defined on `MyNode2D` will be available as a method on the Godot class and any public field will be available as a property.\n\n```go\nimport (\n\t. \"github.com/godot-go/godot-go/pkg/builtin\"\n\t. \"github.com/godot-go/godot-go/pkg/gdclassimpl\"\n)\n\ntype MyNode2D struct {\n  Node2DImpl\n\n  Speed int\n}\n\nfunc (n *MyNode2D) Move(vec builtin.Vector2) {\n  n.Node2DImpl.SetPosition(vec.Multiply_int(int64(n.Speed)))\n}\n```\n\n## Register the custom Godot class\n\nIn the `init` function, register the custom Godot class:\n\n```go\npackage main\n\nimport (\n  ggp \"github.com/LouisBrunner/godot-go-plus\"\n)\n\nfunc NewMyNode2D() ggp.Class {\n  return \u0026MyNode2D{}\n}\n\nfunc init() {\n  ggp.Register(NewMyNode2D)\n}\n\nfunc main() {\n}\n```\n\n### Compiling the shared library\n\nYour package is now ready to be built as a shared library.\n\n```bash\n# Linux\ngo build -buildmode=c-shared -o libmyextension.so pkg_folder\n# macOS\ngo build -buildmode=c-shared -o libmyextension.dylib pkg_folder\n# Windows\ngo build -buildmode=c-shared -o libmyextension.dll pkg_folder\n```\n\nYou can name the shared library whatever you want, the example above uses `libmyextension`.\n\n### Including the shared library in Godot\n\nYou will need to create a file with the extension `.gdextension` and place it in your project for Godot to be able to load the shared library.\n\n```gdscript\n[configuration]\nentry_symbol = \"godot_go_plus_entry\"\ncompatibility_minimum = \"4.2\"\n\n[libraries]\nmacos.debug.arm64 = \"res://your_folder/libmyextension-darwin-arm64.dylib\"\nmacos.release.arm64 = \"res://your_folder/libmyextension-darwin-arm64.dylib\"\nmacos.debug.amd64 = \"res://your_folder/libmyextension-darwin-amd64.dylib\"\nmacos.release.amd64 = \"res://your_folder/libmyextension-darwin-amd64.dylib\"\nwindows.debug.amd64 = \"res://your_folder/libmyextension-windows-amd64.dll\"\nwindows.release.amd64 = \"res://your_folder/libmyextension-windows-amd64.dll\"\nlinux.debug.amd64 = \"res://your_folder/libmyextension-linux-amd64.so\"\nlinux.release.amd64 = \"res://your_folder/libmyextension-linux-amd64.so\"\n```\n\nYou will need to replace `your_folder` with the path to the folder containing the shared library and `libmyextension` with the name of the shared library.\n\n### Caveats\n\n- Due to the way `godot-go` works, you will need to set the environment variable `GODEBUG=cgocheck=0` anytime you use the library as Go will panic otherwise.\n\n### Examples\n\nYou can find examples in the `examples` folder.\n\n- `simple`: a simple example of a custom Godot class, which basically reproduces the above usage\n- `complete`: a more complete example showcasing custom getter/setter names, signals, GDScript usage, etc\n\n## Acknowledgements\n\n- https://github.com/ShadowApex/godot-go: for their great work and straight-forward API which inspired this project\n- https://github.com/godot-go/godot-go: for creating Go bindings for Godot without which this project would not be possible\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flouisbrunner%2Fgodot-go-plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flouisbrunner%2Fgodot-go-plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flouisbrunner%2Fgodot-go-plus/lists"}