{"id":50712686,"url":"https://github.com/sentrygunlv3/zuil","last_synced_at":"2026-06-09T16:32:22.015Z","repository":{"id":331104096,"uuid":"1123431914","full_name":"sentrygunlv3/zuil","owner":"sentrygunlv3","description":"WIP GUI framework written in zig","archived":false,"fork":false,"pushed_at":"2026-06-05T18:07:06.000Z","size":498,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T20:06:32.549Z","etag":null,"topics":["framework","gui","gui-library","retained-mode-gui","zig","zig-package","ziglang"],"latest_commit_sha":null,"homepage":"","language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sentrygunlv3.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":"2025-12-26T21:28:55.000Z","updated_at":"2026-06-05T18:07:10.000Z","dependencies_parsed_at":"2026-01-03T16:03:46.577Z","dependency_job_id":null,"html_url":"https://github.com/sentrygunlv3/zuil","commit_stats":null,"previous_names":["sentrygunlv3/zuil"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sentrygunlv3/zuil","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sentrygunlv3%2Fzuil","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sentrygunlv3%2Fzuil/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sentrygunlv3%2Fzuil/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sentrygunlv3%2Fzuil/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sentrygunlv3","download_url":"https://codeload.github.com/sentrygunlv3/zuil/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sentrygunlv3%2Fzuil/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34116457,"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-09T02:00:06.510Z","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":["framework","gui","gui-library","retained-mode-gui","zig","zig-package","ziglang"],"created_at":"2026-06-09T16:32:18.663Z","updated_at":"2026-06-09T16:32:22.008Z","avatar_url":"https://github.com/sentrygunlv3.png","language":"Zig","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n\u003csub\u003e\n\u003cimg src=\"./icon.svg\" height=\"36\" width=\"36\"\u003e\n\u003c/sub\u003e\nZUIL\n\u003c/h1\u003e\n\n\u003e [!CAUTION]\n\u003e WIP\n\n\u003e [!IMPORTANT]\n\u003e NOT TESTED ON WINDOWS\\\n\u003e the `build.zig` links some libraries as system libraries\\\n\u003e which i assume doesnt work on windows\n\n---\n\nZUIL (Zig UI Library)\n\nretained mode gui framework written in zig\n\nusing `sdl3`, `zopengl`, `plutosvg`, `harfbuzz` and `freetype` libs\n\n---\n\n\u003cimg src=\"./screenshot.png\"\u003e\n\n### current plan\n\nrendering:\\\nreplace renderer with a painter interface system and allow casting to the actual backend if its a know type for more advanced stuff\n\n## examples\n\n### widgets\n\nwidgets are created using builder functions\n\n```zig\n// .c for common builder functions\nwidgets.container()\n.c.size(.{.dp = 1200}, .{.percentage = 1})\n.color(colors.WHITE)\n.child(\n\twidgets.list()\n\t.c.size(.fill, .fill) // fill is same as .{.percentage = 1}\n\t.direction(.vertical)\n\t.spacing(1)\n\t.children(.{\n\t\twidgets.icon()\n\t\t.c.size(.{.dp = 200}, .{.dp = 200})\n\t\t.c.keepSizeRatio(true)\n\t\t.icon(\"icon.svg\")\n\t\t.build(),\n\t\twidgets.container()\n\t\t.c.size(.{.dp = 50}, .{.dp = 30})\n\t\t.c.eventCallback(containerClick) // fn (*ZWidget, *const ZEvent) callconv(.c) c_int\n\t\t.color(colors.rgb(0, 1.0, 0.5))\n\t\t.build(),\n\t\twidgets.container()\n\t\t.c.size(.{.pixel = 50}, .{.dp = 30})\n\t\t.build(),\n\t\twidgets.container()\n\t\t.c.size(.{.mm = 50}, .{.dp = 30})\n\t\t.build(),\n\t\twidgets.container()\n\t\t.c.size(.{.percentage = 0.5}, .{.dp = 30})\n\t\t.build(),\n\t})\n\t.build()\n)\n.build();\n```\n\n### test project\n\nthere is a test/example project in the `test` directory\n\nkeybinds:\n\n- `space`: change the background color\n- `F1`: spawn a new window\n\n## project structure\n\ndirectories in `src` dir:\n\n- `core` has the base widget system\n- `app` has sdl3 specific things and can be used to create windows that use the core widget system\n- `widgets` has the default widgets\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsentrygunlv3%2Fzuil","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsentrygunlv3%2Fzuil","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsentrygunlv3%2Fzuil/lists"}