{"id":13568467,"url":"https://github.com/gyrovorbis/libgimbal","last_synced_at":"2026-04-05T00:33:50.821Z","repository":{"id":65506447,"uuid":"593479887","full_name":"gyrovorbis/libgimbal","owner":"gyrovorbis","description":"C17-based extended standard library, cross-language type system, and unit testing framework targeting Dreamcast, Gamecube, PSP, PSVita, Windows, Mac, Linux, Android, iOS, and WebAssembly.","archived":false,"fork":false,"pushed_at":"2026-02-19T05:00:29.000Z","size":3889,"stargazers_count":202,"open_issues_count":8,"forks_count":19,"subscribers_count":9,"default_branch":"master","last_synced_at":"2026-02-19T11:30:04.496Z","etag":null,"topics":["algorithms","allocators","c","containers","core","dreamcast","language-interoperability","object-oriented-c","psp","psp-sdk","psvita","psvita-homebrew","standard-library","stl-c","stl-containers","type-system","unit-testing","utility-library"],"latest_commit_sha":null,"homepage":"http://libgimbal.falcogirgis.net","language":"C","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/gyrovorbis.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":"2023-01-26T04:59:27.000Z","updated_at":"2026-02-19T03:18:41.000Z","dependencies_parsed_at":"2025-06-17T15:20:57.855Z","dependency_job_id":"74b11e79-1529-4831-8fb4-2e5f0d22713f","html_url":"https://github.com/gyrovorbis/libgimbal","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gyrovorbis/libgimbal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyrovorbis%2Flibgimbal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyrovorbis%2Flibgimbal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyrovorbis%2Flibgimbal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyrovorbis%2Flibgimbal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gyrovorbis","download_url":"https://codeload.github.com/gyrovorbis/libgimbal/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyrovorbis%2Flibgimbal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31420193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T00:25:07.052Z","status":"ssl_error","status_checked_at":"2026-04-05T00:25:05.923Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["algorithms","allocators","c","containers","core","dreamcast","language-interoperability","object-oriented-c","psp","psp-sdk","psvita","psvita-homebrew","standard-library","stl-c","stl-containers","type-system","unit-testing","utility-library"],"created_at":"2024-08-01T14:00:26.296Z","updated_at":"2026-04-05T00:33:50.805Z","avatar_url":"https://github.com/gyrovorbis.png","language":"C","funding_links":[],"categories":["Frameworks"],"sub_categories":[],"readme":"\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/gyrovorbis/libgimbal\"\u003e\n    \u003cimg src=\"http://libgimbal.falcogirgis.net/libgimbal_icon.png\" alt=\"libGimbal\"\u003e\n  \u003c/a\u003e\n\n  \u003ch3 align=\"center\"\u003elibGimbal\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    C17-Based Extended Standard Library and Object-Oriented Type System\n    \u003cbr /\u003e\n    \u003ca href=\"http://libgimbal.falcogirgis.net\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    Cross-Platform\n    ·\n    Cross-Language\n    ·\n    High Performance\n  \u003c/p\u003e\n\u003c/div\u003e\n\n# Overview #\nlibGimbal aims to bring the high-level constructs and niceties of modern languages and their standard libraries to low-level C and C++, where they can be implemented with a focus on performance for embedded devices and game consoles. libGimbal includes features typically found in core application frameworks such as Foundation, QtCore, or GLib, or in languages such as C# or Java. At its core, libGimbal utilizes an object-oriented dynamic type system, which allows C to transcend its own language limitations and provides a flexible avenue for interoperability with other languages. An idiomatic modern C++20-based API built around the core is also currently under development. \n\n# Features #\nlibGimbal is split into a series of APIs, featuring:\n- Containers and Data Structures\n- Generic Algorithms \n- Custom Allocators\n- Specialized Strings \n- Standard Library Utilities\n- Preprocessor Programming\n- Dynamic Type System \n- Threading and Concurrency\n- Unit Test Framework\n\n# Platforms #\nlibGimbal is being actively tested on the following targets:\n- Windows \n- MacOS \n- Linux \n- Sega Dreamcast\n- Nintendo Gamecube\n- Sony PSP\n- Sony PSVita\n- WebAssembly\n- iOS\n- Android\n\n# Compilers #\nlibGimbal is being built in CI with the following compilers:\n- Microsoft Visual C++\n- GCC\n- Clang\n- MinGW-w64\n- Emscripten\n\n# Building #\nBuilding is done with standard CMake, and all generators and mainstream compilers should be supported. You should be able to open CMakeLists.txt directly as a project file in most IDEs such as Visual Studio, XCode, Qt Creator, CLion, etc if you wish to build from a UI.\n\nFirst, ensure submodules are installed with:\n```\ngit submodule update --init --recursive\n```\n\nTo build the project and its unit tests from the command-line, you can do the following:\n```\nmkdir build\ncd build\ncmake -DGBL_ENABLE_TESTS=ON ..\ncmake --build . \n```\n\nTo build for Emscripten:\n```\nmkdir build\ncd build\nemcmake cmake -DGBL_ENABLE_TESTS=ON ..\ncmake --build . \n```\n\n# Bindings #\nLibGimbal was specifically written with language interoperability in mind. As such, we will be happy to support and feature bindings to your favorite language. The following is a list of libraries which offer bindings between libGimbal and other languages:\n\n|Library                                                                                    | Language  |                           Status                     |\n|-------------------------------------------------------------------------------------------|-----------|------------------------------------------------------|\n|\u003ca href=\"https://github.com/AaronGlazer/jimbal\"\u003e\u003cstrong\u003eJimbal\u003c/strong\u003e\u003c/a\u003e                |Jai        |Complete support for the C API|\n|\u003ca href=\"https://github.com/andrewapperley/gimbalsaurus\"\u003e\u003cstrong\u003eGimbalsaurus\u003c/strong\u003e\u003c/a\u003e |Objective-C|Just getting off the ground                           |\n|\u003ca href=\"http://libgimbal.falcogirgis.net\"\u003e\u003cstrong\u003elibGimbal\u003c/strong\u003e\u003c/a\u003e                  |C++        |First-party within source-tree. Just starting, WIP.   |\n\n# APIs #\nThe following is a closer look at the contents of each API:\n## Core Framework ##\n- platform-specific macros and utilities\n- error and exception handling\n- debug and verification utilities\n- structured logging with filtering\n- object-oriented threading and concurrency model\n\n## Strings ##\n- specialized, optimized custom string types\n- interned strings\n- reference-counted strings\n- string builders\n- implicitly shared string lists\n- pattern matching, regular expressions\n\n## Containers ##\n- STL-style abstract data types with both C and C++ APIs\n- dynamic arrays, lists, ring buffers\n- sets, trees, hash tables, byte arrays\n- support for custom allocators\n\n## Algorithms ##\n- hashing algorithms (Murmur, Sip, Fnv1, SuperFast, Jenkins, etc)\n- sorting algorithms, searching algorithms\n- random data generators and utilities\n- CRC, parity, LCM, GCD, prime numbers\n- SHA1 and MD5 (semi)cryptographic hashing\n\n## Allocators ##\n- allocation trackers with leak detection\n- paged arena allocators with state rewinding\n- stack-based scope allocator with destructor chains\n- efficient pool-based, arena-backed allocator\n\n## Preprocessor ##\n- function overloading support for C\n- macro compositon, variadic argument handling\n- cross-language C/C++ generic selection\n- meta macro programming constructs\n\n## Meta Type System ##\n- cross-language, extensible object-oriented type system\n- generic, polymorphic variant types with type conversions\n- virtual functions, inheritance, private members for C\n- mixins, interfaces, abstract classes\n- generic FFI with cross-language closures and marshals\n- property system\n- Qt/GTk style signal system\n- object hierarchy management, parenting, traversals\n- event handling, filtering, propagation\n- plugin and module system\n\n## Utilities ##\n- generic reference-counted types\n- command-line option and argument parsing\n- version, UUID, date-time utilities\n- user-settings management\n\n## Unit Testing Framework ##\n- cross-platform object-oriented C-based unit test framework\n- test scenarios, suites, cases\n- generic verification macros with source context capture\n- automatic timing and performance measurements\n- memory utilization and leak detection\n- dynamic/run-time test-plan construction and management\n\n# Credits #\n## Author ##\n- [Falco Girgis](https://github.com/gyrovorbis) (gyrovorbis@gmail.com)\n## Collaborators ##\n- [Agustín Bellagamba](https://github.com/Haikuno)\n- [Mike Santiago](https://github.com/suicvne) (axiom@ignoresolutions.xyz)\n## Dependencies ##\n- GblHashSet and GblTreeSet original back-ends: Josh Baker (tidwall) \n  - https://github.com/tidwall/hashmap.c\n  - https://github.com/tidwall/btree.c\n- GblThread TinyCThreads back-end: Marcus Geelnard, Evan Nemerson\n  - https://tinycthread.github.io/\n- gblHashSip(..): Jean-Philippe Amasson, Daniel J. Bernstein \n  - http://creativecommons.org/publicdomain/zero/1.0/\n- gblHashMurmur(..): Austin Appleby\n  - https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp\n- GblDateTime_parse(..) strptime back-end: Based on musl C stdlib Implementation\n  - https://git.musl-libc.org/cgit/musl/tree/src/time/strptime.c\n- GblPattern matching engine back-end: tiny-regex-c \n  - https://github.com/kokke/tiny-regex-c\n- GblSha1 SHA1 hashing back-end: Steve Reid (Public Domain)\n  - https://github.com/clibs/sha1/blob/master/sha1.h\n- GblMd5 MD5 hashing back-end: RSA Data Security, Inc.\n  - https://opensource.apple.com/source/ppp/ppp-37/ppp/pppd/md5.c.auto.html\n- gblRandom LRG generator and statistical distributions: Steve Park, Keith Miller\n  - https://www.cs.wm.edu/~va/software/park/park.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgyrovorbis%2Flibgimbal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgyrovorbis%2Flibgimbal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgyrovorbis%2Flibgimbal/lists"}