{"id":22837084,"url":"https://github.com/mineinabyss/guiy-compose","last_synced_at":"2026-01-25T01:14:35.495Z","repository":{"id":37527234,"uuid":"417169083","full_name":"MineInAbyss/guiy-compose","owner":"MineInAbyss","description":"Jetpack compose UI for Minecraft","archived":false,"fork":false,"pushed_at":"2025-09-18T02:02:44.000Z","size":268,"stargazers_count":49,"open_issues_count":4,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-18T03:37:46.172Z","etag":null,"topics":["jetpack-compose","minecraft-gui","papermc"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/MineInAbyss.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":".github/CODEOWNERS","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":"2021-10-14T14:46:26.000Z","updated_at":"2025-08-16T20:20:35.000Z","dependencies_parsed_at":"2024-03-16T23:40:01.015Z","dependency_job_id":"485a921e-0c66-4ddd-b524-2a818783b5b5","html_url":"https://github.com/MineInAbyss/guiy-compose","commit_stats":null,"previous_names":[],"tags_count":46,"template":false,"template_full_name":null,"purl":"pkg:github/MineInAbyss/guiy-compose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MineInAbyss%2Fguiy-compose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MineInAbyss%2Fguiy-compose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MineInAbyss%2Fguiy-compose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MineInAbyss%2Fguiy-compose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MineInAbyss","download_url":"https://codeload.github.com/MineInAbyss/guiy-compose/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MineInAbyss%2Fguiy-compose/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28740611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T22:12:27.248Z","status":"ssl_error","status_checked_at":"2026-01-24T22:12:10.529Z","response_time":89,"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":["jetpack-compose","minecraft-gui","papermc"],"created_at":"2024-12-12T23:15:38.703Z","updated_at":"2026-01-25T01:14:35.489Z","avatar_url":"https://github.com/MineInAbyss.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Guiy\n\n[![Maven](https://img.shields.io/maven-metadata/v?metadataUrl=https://repo.mineinabyss.com/releases/com/mineinabyss/guiy-compose/maven-metadata.xml)](https://repo.mineinabyss.com/#/releases/com/mineinabyss/guiy-compose)\n[![Contribute](https://shields.io/badge/Contribute-e57be5?logo=github%20sponsors\u0026style=flat\u0026logoColor=white)](https://mineinabyss.com/contributing)\n\u003c/div\u003e\n\nA Minecraft UI library for PaperMC, built on the Compose compiler.\n\nWhile [Jetpack Compose](https://developer.android.com/jetpack/compose) is a commonly used UI toolkit in Android development,\n*the Compose compiler is just a tool to dynamically [manage trees](https://arunkumar.dev/jetpack-compose-for-non-ui-tree-construction-and-code-generation/)*.\nGuiy implements its own layouts, modifiers, and rendering specifically for Minecraft chest UI.\nThis means you can work with state exactly as you would with Jetpack Compose, but without any overhead from Android, and with concepts native to Minecraft.\n\n\u003e [!NOTE]\n\u003e Guiy is in active development as we continue to try new use-cases in our plugins. We can't promise api stability yet,\n\u003e but try to follow semver for breaking changes.\n\n## Examples\n\nSee the `guiy-example` package for a full demonstration of project setup and different features.\n\n### Entry\n\n```kotlin\nguiy(player) {\n    ExampleMenu()\n}\n```\n\n### Chest menu\n\n```kotlin\n@Composable\nfun ExampleMenu() {\n    // Guiy will dynamically update players, title, or height if you use a state.\n    Chest(title = \"Example\", modifier = Modifier.height(4), onClose = { exit() /*back()*/ }) {\n        ToggleButton()\n    }\n}\n```\n\n### Toggle button\n\n```kotlin\nval RED = ItemStack(Material.RED_WOOL)\nval GREEN = ItemStack(Material.GREEN_WOOL)\n\n@Composable\nfun ToggleButton() {\n    var enabled by remember { mutableStateOf(false) }\n    val display = if (enabled) GREEN else RED\n    Item(display, Modifier.clickable {\n        enabled = !enabled\n    })\n}\n```\n\n### Modifiers\n\nWe use a similar modifier system to Jetpack Compose.\n\n```kotlin\n// Entry to modifiers, though you are encouraged to pass a modifier parameter into your composables.\nModifier\n    // Set the width of an element (can use min/max constraints, or .size to set width and height)\n    .width(3)\n    // Fill based on parent constraints like Jetpack\n    .fillmaxHeight()\n    // Padding in # of blocks\n    .padding(vertical = 1)\n    // Place at an offset\n    .offset(x = 1, y = 5)\n    // Do actions on click\n    .clickable { doSomething() }\n```\n\n### Alignment\n\nGuiy provides Row, Column, and Box components based on Jetpack's, these come with Arrangement and Alignment too. We also\nprovide our components like Vertical/Horizontal Grids optimized for common Minecraft uses.\n\n```kotlin\n// A horizontal row of 10 items, with 1 space between each.\nRow(horizontalArrangement = Arrangement.spacedBy(1)) {\n    repeat(4) {\n        Item(...)\n    }\n}\n\n// Same but vertical\nColumn { ... }\n\n// Two rows on top of each other\nColumn {\n    Row { ... }\n    Row { ... }\n}\n\n// Items aligned left to right, top to bottom, wrapped to be smaller than width, useful for pages of items!\nVerticalGrid(Modifier.width(3)) {\n    repeat(7) {\n        Item(...)\n    }\n}\n/* Result:\n    III\n    III\n    I--   */\n```\n\n### Coroutines\n\nLaunchedEffect support, same as in Jetpack Compose:\n\n```kotlin\nfun TimedToggle() {\n    var enabled by remember { mutableStateOf(false) }\n    val display = if (enabled) GREEN else RED\n    Item(display)\n\n    LaunchedEffect(Unit) {\n        // Button will flash 10 times, with 1 second intervals\n        repeat(10) {\n            toggled = !toggled\n            delay(1000)\n        }\n    }\n}\n```\n\n### Real world use\n\nWe are using this project internally, so you should be able to find up-to-date usage in\nour [main project](https://github.com/MineInAbyss/MineInAbyss/tree/master/mineinabyss-features/src/main/kotlin/com/mineinabyss/features/guilds/menus).\n\n## Usage\n\n### Gradle\n\n#### build.gradle.kts\n\n```kotlin\nplugins {\n    // Try to match version in guiy's build.gradle.kts\n    id(\"org.jetbrains.kotlin.plugin.compose\") version \"\u003ckotlin-version\u003e\"\n    id(\"org.jetbrains.compose\") version \"\u003ccompose-version\u003e\"\n}\n\nrepositories {\n    maven(\"https://maven.pkg.jetbrains.space/public/p/compose/dev\")\n    maven(\"https://repo.mineinabyss.com/releases\")\n}\n\ndependencies {\n    compileOnly(\"com.mineinabyss:guiy-compose:x.y.z\")\n}\n```\n\n#### settings.gradle.kts\n\n```kotlin\npluginManagement {\n    repositories {\n        google()\n        gradlePluginPortal()\n        maven(\"https://maven.pkg.jetbrains.space/public/p/compose/dev\")\n    }\n}\n```\n\n### Server setup\n\nGuiy does not package the Kotlin runtime, it depends on our helper plugin Idofront using Paper's isolated dependency\nsystem.\n\n- [Download](https://github.com/MineInAbyss/guiy-compose/releases/latest) and install Guiy into your plugin folder.\n- [Download](https://github.com/MineInAbyss/Idofront/releases/latest) Idofront, a required dependency.\n- Depend on Guiy in a [paper-plugin](https://docs.papermc.io/paper/dev/getting-started/paper-plugins), this will give you access to Guiy and any libraries in Idofront in an isolated manner.\n\n## Thanks\n\n- Google for creating Jetpack Compose.\n- JetBrains for making it easy to use the compiler plugin outside of Android.\n- A lot of the inital code to set up the Jetpack Compose environment comes from https://github.com/JakeWharton/mosaic.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmineinabyss%2Fguiy-compose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmineinabyss%2Fguiy-compose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmineinabyss%2Fguiy-compose/lists"}