{"id":15014590,"url":"https://github.com/capsadmin/goluwa","last_synced_at":"2025-06-27T22:06:08.965Z","repository":{"id":5741630,"uuid":"6953956","full_name":"CapsAdmin/goluwa","owner":"CapsAdmin","description":"game engine and framework written in luajit","archived":false,"fork":false,"pushed_at":"2022-12-29T19:00:02.000Z","size":34492,"stargazers_count":241,"open_issues_count":2,"forks_count":17,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-05-26T12:15:38.196Z","etag":null,"topics":["engine3d","ffi","ffi-wrapper","font","game-dev","game-development","game-engine","game-framework","garrysmod","gui","linux","love2d","lua","lua-library","lua-script","luajit","luajit-ffi","luajit-ffi-bindings","source-engine"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CapsAdmin.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}},"created_at":"2012-12-01T12:35:41.000Z","updated_at":"2025-05-23T22:16:34.000Z","dependencies_parsed_at":"2023-01-13T16:23:22.610Z","dependency_job_id":null,"html_url":"https://github.com/CapsAdmin/goluwa","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/CapsAdmin/goluwa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CapsAdmin%2Fgoluwa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CapsAdmin%2Fgoluwa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CapsAdmin%2Fgoluwa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CapsAdmin%2Fgoluwa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CapsAdmin","download_url":"https://codeload.github.com/CapsAdmin/goluwa/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CapsAdmin%2Fgoluwa/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262341618,"owners_count":23296069,"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":["engine3d","ffi","ffi-wrapper","font","game-dev","game-development","game-engine","game-framework","garrysmod","gui","linux","love2d","lua","lua-library","lua-script","luajit","luajit-ffi","luajit-ffi-bindings","source-engine"],"created_at":"2024-09-24T19:45:48.760Z","updated_at":"2025-06-27T22:06:08.931Z","avatar_url":"https://github.com/CapsAdmin.png","language":"Lua","readme":"# [Goluwa](https://capsadm.in/goluwa) \u0026middot; [![GitHub license](https://img.shields.io/badge/license-GPL3-blue.svg)](https://gitlab.com/capsadmin/goluwa/blob/master/LICENSE) [![pipeline status](https://gitlab.com/CapsAdmin/goluwa/badges/develop/pipeline.svg)](https://gitlab.com/CapsAdmin/goluwa/commits/develop) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://reactjs.org/docs/how-to-contribute.html#your-first-pull-request)\n\nGoluwa is a game engine, framework, a collection of utilities and experiments written in [LuaJIT](http://luajit.org/) leveraging FFI.\n\n![ScreenShot](https://gitlab.com/CapsAdmin/goluwa-assets/raw/master/extras/screenshots/goluwa.png)\n\n# Features\n\n- [FFI build system](https://github.com/CapsAdmin/ffibuild) to automatically build LuaJIT FFI bindings.\n- [gui](engine/lua/libraries/graphics/gui) with focus on automatic layout and [GWEN](!https://github.com/garrynewman/GWEN) skin support\n- [font effects](framework/lua/libraries/graphics/fonts) to create outlined, shadowed, etc text.\n- [markup language](engine/lua/libraries/graphics/gfx)\n- [löve wrapper](game/lua/libraries/love) that lets you run Löve games in Goluwa\n- [glua wrapper](game/lua/libraries/gmod) that lets you run GarrysMod Lua in Goluwa\n- [entity editor](game/lua/autorun/graphics) similar to [PAC3's editor](http://steamcommunity.com/sharedfiles/filedetails/?id=104691717)\n- [filesystem](core/lua/libraries/filesystem) with the ability to mount and treat many archive formats as directories\n- [source engine](engine/lua/libraries/steam) formats are supported\n\n##### Prototyping\n\n- all resources can be loaded from the internet with urls\n- fonts can be loaded directly from google webfont, dafont and other places\n- many model, image and sound formats are supported\n- most code can be reloaded without the need to restart\n\n# Structure\n\nGoluwa is split into 4 directories. `core \u003e framework \u003e engine \u003e game`. Going backwards, each directory depends on the previous directory, so if you delete the engine directory the game directory wont load.\n\n##### -1. goluwa|.cmd\n\nThe shell and powershell script that will only download and launch luajit|.exe with core/lua/boot.lua\n\n##### 0. core/lua/boot.lua\n\nResponsible for downloading other binaries, updating goluwa and launching goluwa. It's mostly lua but some of its helper functions use shell and powershell.\n\n##### 1. Core\n\nContains the barebone framework that has no explicit dependencies on any external shared libraries. However to use SSL LibreSSL.\n\n##### 2. Framework\n\nThe basic framework utilizing sdl, opengl, openal, etc but does not implement anything. It has a renderer which is neither 2d or 3d, game math library, high level socket library, 2d rendering library, etc.\n\n##### 3. Engine\n\nThe engine contains a 3d renderer, source engine asset compatibility, steam integration, zerobrane integration, networking, entities, gui, markup language, etc.\n\n##### 4. Game\n\nThe game folder contains very high level scripts such as Löve2D implemented in goluwa, GarrysMod Lua implemented in goluwa, chatsounds, chatbox, scoreboard, player movement, etc.\n\n# Building\n\nWhile I write all code in LuaJIT, I use some thirdparty C libraries. My goal is to only write glue code in LuaJIT with FFI instead of C or C++.\n\n`core` is not strictly dependent on anything but LibreSSL for https requests.\n\n`framework` depends on some media centric libraries like assimp, libarchive, SDL, etc.\n\nAssuming **`docker`** installed you can run this build everything:\n\n```sh\n./goluwa build \"*\"\n```\n\nThen the binaries built will be copied into the `*/bin/linux_x64/.` folders.\n\nBut I have not yet figured out a good way to build these on Windows and Mac.. In theory you could use prebuilt binaries which has worked in the past.\n\n# Caveats\n\nWhile I want to support OSX and Windows they become low priority due to lack of windows and osx machines. I try to test goluwa in a VM and ask friends but that's about as much as I can do.\n\nWriting everything in LuaJIT also comes with some challenges. I try to write JIT compilable code, especially in areas that are intensive but this is not always easy without resorting to ugly code which I try to avoid.\n\n# Credits\n\n- [Garry Newman](https://github.com/garrynewman/) - I learned programming in garrysmod and many of the ideas and libraries in goluwa were developed in garrysmod initially.\n- [Crytek](http://www.crytek.com/) - Playing around with the Crysis Wars SDK was how I started to learn C++. I made [oohh\n  ](https://github.com/capsadmin/oohh) which was a garrysmod-like mod attempt. The C++ Lua binder I made there included a standard game oriented lua library which eventualy evolved into goluwa.\n- [Ronny](http://steamcommunity.com/id/76561197990112245/) - Helped me making the gui when it was made for [oohh](https://github.com/CapsAdmin/oohh).\n- [Malkia](https://github.com/malkia) - the source inspiration for doing this entirely in luajit was [ufo](https://github.com/malkia/ufo)\n- [Morten Erlandsen](https://github.com/mortenae) - Provided help and code with BSP (especially the displacement bit) and supporting linux early on.\n- [Leandro Fonseca](https://github.com/Shell64) - Started working on the löve wrapper early on and has helped with explaining how löve works.\n- [Somepotato](https://github.com/Someguynamedpie) - Started proper font support using a font atlas.\n- [ZeqMacaw](http://steamcommunity.com/id/zeqmacaw) - The source engine MDL decoding code was based on the [CrowbarTool](http://steamcommunity.com/groups/CrowbarTool)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcapsadmin%2Fgoluwa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcapsadmin%2Fgoluwa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcapsadmin%2Fgoluwa/lists"}