{"id":13412941,"url":"https://github.com/oakmound/oak","last_synced_at":"2025-05-14T06:12:20.359Z","repository":{"id":22791665,"uuid":"97327962","full_name":"oakmound/oak","owner":"oakmound","description":"A pure Go game engine","archived":false,"fork":false,"pushed_at":"2025-02-16T18:03:09.000Z","size":71017,"stargazers_count":1610,"open_issues_count":14,"forks_count":83,"subscribers_count":42,"default_branch":"master","last_synced_at":"2025-04-11T00:48:46.619Z","etag":null,"topics":["2d","game-development","game-engine","gamedev","go","golang","ui"],"latest_commit_sha":null,"homepage":"","language":"Go","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/oakmound.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2017-07-15T16:24:27.000Z","updated_at":"2025-04-09T19:33:04.000Z","dependencies_parsed_at":"2024-01-08T15:02:59.713Z","dependency_job_id":"deea3302-6126-45de-8344-6d9452a03efd","html_url":"https://github.com/oakmound/oak","commit_stats":{"total_commits":1773,"total_committers":13,"mean_commits":136.3846153846154,"dds":0.3637901861252115,"last_synced_commit":"3b840e64f1839eca0b42e9e3cd4b69973720e60e"},"previous_names":["oakmoundstudio/oak"],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oakmound%2Foak","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oakmound%2Foak/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oakmound%2Foak/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oakmound%2Foak/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oakmound","download_url":"https://codeload.github.com/oakmound/oak/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254080375,"owners_count":22011389,"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","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":["2d","game-development","game-engine","gamedev","go","golang","ui"],"created_at":"2024-07-30T20:01:31.401Z","updated_at":"2025-05-14T06:12:20.278Z","avatar_url":"https://github.com/oakmound.png","language":"Go","readme":"# Oak\n\n## A Pure Go game engine\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/oakmound/oak/v4.svg)](https://pkg.go.dev/github.com/oakmound/oak/v4)\n[![Code Coverage](https://codecov.io/gh/oakmound/oak/branch/master/graph/badge.svg)](https://codecov.io/gh/oakmound/oak)\n[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge-flat.svg)](https://github.com/avelino/awesome-go)\n\n## Table of Contents\n\n1. [Installation](#installation)\n\n1. [Features](#features)\n\n1. [Support](#support)\n\n1. [Quick Start](#quick-start)\n\n1. [Examples](#examples)\n\n1. [Finished Games](#finished-games)\n\n***\n\n## Installation \u003ca name=\"installation\"/\u003e\n\n`go get -u github.com/oakmound/oak/v4`\n\n## Features and Systems \u003ca name=\"features\"\u003e\u003c/a\u003e\n\n1. Window Management\n    - Windows and key events forked from [shiny](https://pkg.go.dev/golang.org/x/exp/shiny)\n    - Support for multiple windows running at the same time\n1. [Image Rendering](https://pkg.go.dev/github.com/oakmound/oak/v4/render)\n    - Manipulation\n        - `render.Modifiable` interface\n        - Integrated with optimized image manipulation via [gift](https://github.com/disintegration/gift)\n    - Built in `Renderable` types covering common use cases\n        - `Sprite`, `Sequence`, `Switch`, `Composite`\n        - Primitive builders, `ColorBox`, `Line`, `Bezier`\n        - History-tracking `Reverting`\n    - Primarily 2D\n1. [Particle System](https://pkg.go.dev/github.com/oakmound/oak/v4/render/particle)\n1. [Mouse Handling](https://pkg.go.dev/github.com/oakmound/oak/v4/mouse)\n1. [Joystick Support](https://pkg.go.dev/github.com/oakmound/oak/v4/joystick)\n1. [Audio Support](https://pkg.go.dev/github.com/oakmound/oak/v4/audio)\n1. [Collision](https://pkg.go.dev/github.com/oakmound/oak/v4/collision)\n    - Collision R-Tree forked from [rtreego](https://github.com/dhconnelly/rtreego)\n    - [2D Raycasting](https://pkg.go.dev/github.com/oakmound/oak/v4/collision/ray)\n    - Collision Spaces\n        - Attachable to Objects\n        - Auto React to collisions through events\n1. [2D Physics System](https://pkg.go.dev/github.com/oakmound/oak/v4/physics)\n1. [Event Handler](https://pkg.go.dev/github.com/oakmound/oak/v4/event)\n\n## Support \u003ca name=\"support\"\u003e\u003c/a\u003e\n\nFor discussions not significant enough to be an Issue or PR, feel free to ping us in the #oak channel on the [gophers slack](https://invite.slack.golangbridge.org/). For insight into what is happening in oak see the [blog](https://200sc.dev/).\n\n## Quick Start \u003ca name=\"quick-start\"\u003e\u003c/a\u003e\n\nThis is an example of the most basic oak program:\n\n```go\npackage main\n\nimport (\n    \"github.com/oakmound/oak/v4\"\n    \"github.com/oakmound/oak/v4/scene\"\n)\n\nfunc main() {\n    oak.AddScene(\"firstScene\", scene.Scene{\n        Start: func(*scene.Context) {\n            // ... draw entities, bind callbacks ... \n        }, \n    })\n    oak.Init(\"firstScene\")\n}\n```\n\nSee below or navigate to the [examples](examples) folder for demos. For more examples and documentation checkout  [godoc](https://pkg.go.dev/github.com/oakmound/oak/v4) for reference documentation, the [wiki](https://github.com/oakmound/oak/wiki), or our extended features in [grove](https://github.com/oakmound/grove). \n\n## Examples \u003ca name=\"examples\"\u003e\u003c/a\u003e\n\n| | | |\n|:-------------------------:|:-------------------------:|:-------------------------:|\n|\u003cimg width=\"200\"  src=\"examples/platformer/example.gif\" a=examples/platformer\u003e  [Platformer](examples/platformer) |  \u003cimg width=\"200\"  src=\"examples/top-down-shooter//example.gif\"\u003e [Top down shooter](examples/top-down-shooter)|\u003cimg width=\"200\"  src=\"examples/flappy-bird//example.gif\"\u003e [Flappy Bird](examples/flappy-bird/)\n|  \u003cimg width=\"200\"  src=\"examples/bezier/example.PNG\"\u003e [Bezier Curves](examples/bezier) |\u003cimg width=\"200\"  src=\"examples/joystick-viz/example.gif\"\u003e [Joysticks](examples/joystick-viz)|\u003cimg width=\"200\"  src=\"examples/piano/example.gif\"\u003e [Piano](examples/piano)|\n|\u003cimg width=\"200\"  src=\"examples/screenopts/example.PNG\"\u003e [Screen Options](examples/screenopts)  |  \u003cimg width=\"200\"  src=\"examples/multi-window/example.PNG\"\u003e [Multi Window](examples/multi-window) |\u003cimg width=\"200\"  src=\"examples/particle-demo/overviewExample.gif\"\u003e [Particles](examples/particle-demo)|\n\n## Games using Oak \u003ca name=\"finished-games\"\u003e\u003c/a\u003e\n\nTo kick off a larger game project you can get started with [game-template](https://github.com/oakmound/game-template).\n\n| | |\n|:-------------------------:|:-------------------------:|\n|\u003cimg width=\"200\"  src=\"https://img.itch.zone/aW1hZ2UvMTk4MjIxLzkyNzUyOC5wbmc=/original/aRusLc.png\" a=examples/platformer-tutorial\u003e  [Agent Blue](https://oakmound.itch.io/agent-blue) |  \u003cimg width=\"200\"  src=\"https://img.itch.zone/aW1hZ2UvMTY4NDk1Lzc4MDk1Mi5wbmc=/original/hIjzFm.png\"\u003e [Fantastic Doctor](https://github.com/oakmound/lowrez17)\n|\u003cimg width=\"200\"  src=\"https://img.itch.zone/aW1hZ2UvMzkwNjM5LzI2NzU0ODMucG5n/original/eaoFrd.png\"\u003e  [Hiring Now: Looters](https://oakmound.itch.io/cheststacker) |  \u003cimg width=\"200\"  src=\"https://img.itch.zone/aW1hZ2UvMTYzNjgyLzc1NDkxOS5wbmc=/original/%2BwvZ7j.png\"\u003e [Jeremy The Clam](https://github.com/200sc/jeremy)\n|\u003cimg width=\"200\"  src=\"https://img.itch.zone/aW1hZ2UvOTE0MjYzLzUxNjg3NDEucG5n/original/5btfEr.png\"\u003e  [Diamond Deck Championship](https://oakmound.itch.io/diamond-deck-championship) |  \u003cimg width=\"200\"  src=\"https://img.itch.zone/aW1nLzgzMDM5MjcucG5n/105x83%23/oA19CL.png\"\u003e  [SokoPic](https://oakmound.itch.io/sokopic) \n\n## On Pure Go \u003ca name=\"pure-go\"/\u003e\n\nOak has recently brought in dependencies that include C code, but we still describe the engine as a Pure Go engine, which at face value seems contradictory. Oak's goal is that, by default, a user can pull down the engine and create a fully functional game or GUI application on a machine with no C compiler installed, so when we say Pure Go we mean that, by default, the library is configured so no C compilation is required, and that no major features are locked behind C compliation.  \n\nWe anticipate in the immediate future needing to introduce alternate drivers that include C dependencies for performance improvements in some scasenarios, and currently we have no OSX solution that lacks objective C code.\n","funding_links":[],"categories":["Game Development","Go","游戏开发","Repositories","Relational Databases","\u003cspan id=\"游戏开发-game-development\"\u003e游戏开发 Game Development\u003c/span\u003e"],"sub_categories":["Advanced Console UIs","Search and Analytic Databases","SQL 查询语句构建库","检索及分析资料库","\u003cspan id=\"高级控制台用户界面-advanced-console-uis\"\u003e高级控制台用户界面 Advanced Console UIs\u003c/span\u003e"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foakmound%2Foak","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foakmound%2Foak","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foakmound%2Foak/lists"}