{"id":49569561,"url":"https://github.com/spinyowl/legui","last_synced_at":"2026-05-03T13:07:47.576Z","repository":{"id":44694863,"uuid":"73430201","full_name":"SpinyOwl/legui","owner":"SpinyOwl","description":"Java OpenGL GUI library. Created for using with latest LWJGL (LWJGL 3). ","archived":false,"fork":false,"pushed_at":"2025-06-01T13:10:15.000Z","size":4502,"stargazers_count":337,"open_issues_count":20,"forks_count":35,"subscribers_count":16,"default_branch":"develop","last_synced_at":"2025-06-01T22:16:57.709Z","etag":null,"topics":["framework","gui","gui-framework","gui-library","java","legui","lwjgl","lwjgl3","opengl","ui"],"latest_commit_sha":null,"homepage":"","language":"Java","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/SpinyOwl.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/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},"funding":{"ko_fi":"SpinyOwl","custom":["paypal.me/shchalexander"]}},"created_at":"2016-11-10T23:41:02.000Z","updated_at":"2025-06-01T13:10:19.000Z","dependencies_parsed_at":"2024-05-18T12:26:55.809Z","dependency_job_id":"3fd24eeb-d390-4bee-b44d-cf6bdd53931d","html_url":"https://github.com/SpinyOwl/legui","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/SpinyOwl/legui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpinyOwl%2Flegui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpinyOwl%2Flegui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpinyOwl%2Flegui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpinyOwl%2Flegui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SpinyOwl","download_url":"https://codeload.github.com/SpinyOwl/legui/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpinyOwl%2Flegui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32569765,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: 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":["framework","gui","gui-framework","gui-library","java","legui","lwjgl","lwjgl3","opengl","ui"],"created_at":"2026-05-03T13:07:46.375Z","updated_at":"2026-05-03T13:07:47.567Z","avatar_url":"https://github.com/SpinyOwl.png","language":"Java","funding_links":["https://ko-fi.com/SpinyOwl","paypal.me/shchalexander","https://ko-fi.com/J3J4L9ASJ'"],"categories":[],"sub_categories":[],"readme":"\r\n![legui_api](images/legui_api.png)\r\n![preview](images/preview.png)\r\n\r\n# LEGUI\r\n[![Discord](https://img.shields.io/discord/245558983123927040.svg?slongCache=true\u0026label=Discord\u0026logo=discord\u0026style=for-the-badge)](https://discord.gg/6wfqXpJ)\r\n![REPO SIZE](https://img.shields.io/github/repo-size/SpinyOwl/legui.svg?style=for-the-badge)\r\n![CODE SIZE](https://img.shields.io/github/languages/code-size/SpinyOwl/legui.svg?style=for-the-badge)\r\n[![STABLE VERSION](https://img.shields.io/badge/dynamic/xml?url=https%3A%2F%2Fraw.githubusercontent.com%2FSpinyOwl%2Frepo%2Freleases%2Fcom%2Fspinyowl%2Flegui%2Fmaven-metadata.xml\u0026query=%2F%2Fmetadata%2Fversioning%2Flatest\u0026style=for-the-badge\u0026label=latest%20version\u0026color=blue)](https://github.com/SpinyOwl/repo/tree/releases/com/spinyowl/legui)  \r\n[![Sonar Quality Gate](https://img.shields.io/sonar/alert_status/SpinyOwl_legui?logo=sonarcloud\u0026server=https%3A%2F%2Fsonarcloud.io\u0026style=for-the-badge)](https://sonarcloud.io/dashboard?id=SpinyOwl_legui)\r\n[![License](https://img.shields.io/github/license/SpinyOwl/legui.svg?style=for-the-badge)](/LICENSE)\r\n![Build and publish](https://img.shields.io/github/actions/workflow/status/SpinyOwl/legui/github.yml?branch=develop\u0026style=for-the-badge\u0026label=build)\r\n\r\n## Community and Support\r\nYou can join the community in [the Discord server!](https://discord.gg/6wfqXpJ) I also encourage everyone to voice your suggestions, comments, and questions in the Discord.\r\n\r\nIf you'd like to help support and sustain this library, please consider becoming a donor!  \r\n\u003ca href='https://ko-fi.com/J3J4L9ASJ' target='_blank'\u003e\u003cimg height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi1.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /\u003e\u003c/a\u003e\r\n\r\n# TOC\r\n\r\n* [LEGUI - What is it?](#legui---what-is-it)\r\n* [Contribution to LEGUI](#contribution-to-legui)\r\n* [System requirements](#system-requirements)\r\n* [OpenGL state touched by the backend](#opengl-state-touched-by-the-backend)\r\n* [Usage](#usage)\r\n*\r\n    * [Dependencies](#dependencies)\r\n*\r\n    *\r\n        * [Add dependency repo](#add-dependency-repo)\r\n*\r\n    *\r\n        * [Add dependency (Maven)](#add-dependency-maven)\r\n*\r\n    *\r\n        * [Add dependency (Gradle)](#add-dependency-gradle)\r\n*\r\n    * [Demos](#demos)\r\n* [Projects using LEGUI](#projects-using-legui)\r\n*\r\n    * [Modeler by Cout970](#modeler-by-cout970)\r\n* [Links](#links)\r\n\r\n## LEGUI - [What is it?](https://spinyowl.github.io/legui/)\r\n\r\nGUI implementation for using with LWJGL3.\r\n\r\nThis gui library made for using with OpenGL port (LWJGL) to allow programmers fast and easy\r\nintegrate user interface to their OpenGL apps written in Java or Kotlin.  \r\nAPI is close to Swing API.\r\n\r\n### Examples\r\n\r\n\u003ctable\u003e\r\n    \u003ctr\u003e\r\n        \u003ctd\u003eRadio button and text input\u003c/td\u003e\r\n        \u003ctd\u003eWidgets\u003c/td\u003e\r\n        \u003ctd\u003eTextArea\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n        \u003ctd align=\"center\"\u003e\u003cimg src=\"https://i.imgur.com/NMP2jll.gif\" /\u003e\u003c/td\u003e\r\n        \u003ctd align=\"center\"\u003e\u003cimg src=\"https://i.imgur.com/8iL2xPd.gif\" /\u003e\u003c/td\u003e\r\n        \u003ctd align=\"center\"\u003e\u003cimg src=\"https://i.imgur.com/WQxSN6n.gif\" /\u003e\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n        \u003ctd\u003eButton, togglebutton, checkbox, selectbox\u003c/td\u003e\r\n        \u003ctd\u003eSliders\u003c/td\u003e\r\n        \u003ctd\u003eScrollPanel\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n        \u003ctd align=\"center\"\u003e\u003cimg src=\"https://i.imgur.com/kuTOdAk.gif\" /\u003e\u003c/td\u003e\r\n        \u003ctd align=\"center\"\u003e\u003cimg src=\"https://i.imgur.com/Te70Ek9.gif\" /\u003e\u003c/td\u003e\r\n        \u003ctd align=\"center\"\u003e\u003cimg src=\"https://i.imgur.com/RGuIpZ0.gif\" /\u003e\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\r\n## Contribution to LEGUI\r\n\r\nSee the [contribution guide](.github/CONTRIBUTING.md) for more information.\r\n\r\n## System requirements\r\n\r\nLEGUI requires Java 11+.\r\n\r\n## OpenGL state touched by the backend\r\n\r\nDefault renderer made on top of NanoVG which touches following states:\r\n\r\nWhen textures are uploaded or updated, the following pixel store is set to\r\ndefaults: `GL_UNPACK_ALIGNMENT`, `GL_UNPACK_ROW_LENGTH`, `GL_UNPACK_SKIP_PIXELS`\r\n, `GL_UNPACK_SKIP_ROWS`. Texture binding is also affected. Texture updates can happen when the user\r\nloads images, or when new font glyphs are added. Glyphs are added as needed start and end\r\nof `render()` method.\r\n\r\nThe data for the whole frame is buffered and flushed in end of rendering. The following code\r\nillustrates the OpenGL state touched by the rendering code:\r\n\r\n```C\r\n\tglUseProgram(prog);\r\n\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r\n\tglEnable(GL_CULL_FACE);\r\n\tglCullFace(GL_BACK);\r\n\tglFrontFace(GL_CCW);\r\n\tglEnable(GL_BLEND);\r\n\tglDisable(GL_DEPTH_TEST);\r\n\tglDisable(GL_SCISSOR_TEST);\r\n\tglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);\r\n\tglStencilMask(0xffffffff);\r\n\tglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);\r\n\tglStencilFunc(GL_ALWAYS, 0, 0xffffffff);\r\n\tglActiveTexture(GL_TEXTURE0);\r\n\tglBindBuffer(GL_UNIFORM_BUFFER, buf);\r\n\tglBindVertexArray(arr);\r\n\tglBindBuffer(GL_ARRAY_BUFFER, buf);\r\n\tglBindTexture(GL_TEXTURE_2D, tex);\r\n\tglUniformBlockBinding(... , GLNVG_FRAG_BINDING);\r\n```\r\n\r\n## Usage\r\n\r\n### Dependencies\r\n\r\n#### Add dependency repo\r\n\r\nFor using this library you should add these urls as repositories:  \r\nFor **[LWJGL](https://github.com/LWJGL/lwjgl3)** and **[JOML](https://github.com/JOML-CI/JOML)**\r\ndependencies  \r\n`https://oss.sonatype.org/content/repositories/snapshots/` - for snapshots  \r\n`https://oss.sonatype.org/content/repositories/releases/` - for releases  \r\nAlso you can add your own versions of these libraries\r\nusing [LWJGL form](https://www.lwjgl.org/download).\r\n\r\nFor **LEGUI** and **[CBCHAIN](https://github.com/SpinyOwl/cbchain)** dependency  \r\n`https://raw.github.com/SpinyOwl/repo/releases`\r\n\r\nAnd add this dependency to your build script:\r\n\r\n#### Add dependency (Maven):\r\n\r\n ```xml\r\n\u003c!-- LEGUI - https://github.com/SpinyOwl/legui --\u003e\r\n\u003cdependency\u003e\r\n    \u003cgroupId\u003ecom.spinyowl\u003c/groupId\u003e\r\n    \u003cartifactId\u003elegui\u003c/artifactId\u003e\r\n    \u003cversion\u003e${legui_version}\u003c/version\u003e\r\n\u003c/dependency\u003e\r\n ```\r\n\r\n#### Add dependency (Gradle):\r\n\r\n  ```groovy\r\n// LEGUI - https://github.com/SpinyOwl/legui\r\ncompile group: 'com.spinyowl', name: 'legui', version: \"${legui_version}\";\r\n  ```\r\n\r\n### Demos:\r\n\r\nAll examples located under [demo](/src/main/java/com/spinyowl/legui/demo/) package.\r\n\r\n## Projects using LEGUI:\r\n\r\n### Modeler by Cout970\r\n\r\n\u003e Open 3D Modeling Tool  ([Cout970/Modeler](https://github.com/cout970/Modeler))  \r\n\u003e This tool is written in Kotlin, using LWJGL3 for rendering and Legui to build user interfaces\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cimg src=\"https://i.imgur.com/BWWotpp.png\" alt=\"3d view\"/\u003e\u003c/td\u003e\r\n    \u003ctd\u003e\u003cimg src=\"https://i.imgur.com/5HfHfy4.png\" alt=\"texture editing\"/\u003e\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\r\n### FMT by Fexcraft\r\n\r\n\u003e Fex's Modelling Toolbox  ([Fexcraft/FMT](https://github.com/Fexcraft/FMT))  \r\n\u003e A Tool to create Models basing on the \"TMT\" (updated and maintained version of Fex/FCL) Library.\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cimg src=\"http://fexcraft.net/files/app_data/fmt-page/javaw_2020-05-02_17-34-09.png\"/\u003e\u003c/td\u003e\r\n    \u003ctd\u003e\u003cimg src=\"http://fexcraft.net/files/app_data/fmt-page/javaw_2020-05-02_17-35-10.png\"/\u003e\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\r\n## Links\r\n\r\n[LWJGL - Lightweight Java Game Library 3](https://github.com/LWJGL/lwjgl3)  \r\n[JOML – Java OpenGL Math Library](https://github.com/JOML-CI/JOML)  \r\n[CBCHAIN - Callback Chain for LWJGL3](https://github.com/SpinyOwl/cbchain)  \r\n[NanoVG -Small antialiased vector graphics rendering library for OpenGL.](https://github.com/memononen/nanovg)  \r\n\r\n## Statistics\r\n![Alt](https://repobeats.axiom.co/api/embed/0cbc0ac5fb5a710ac355daafa6e1a5475109bfac.svg \"Repobeats analytics image\")\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspinyowl%2Flegui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspinyowl%2Flegui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspinyowl%2Flegui/lists"}