Repository navigation
Releases
CompixelUI 0.1.18
This release is for every supported Minecraft version: 1.20.1, 1.21.1, 26.1.2, 26.2 and 26.3. Mods built for the previous release keep working without changes.
- Fixed: when slots move under a pointer that stands still, for example when a mod scrolls its grid by moving slots, the hover moves to the slot now under the pointer, both in Ore's look and in slots you draw yourself (
hovered). It used to stay on the slot hovered before the move until the pointer moved. - Changed: when the pointer moves to another slot, only the slot it leaves and the slot it reaches are recomposed, instead of every slot on the screen. With 462 slots and the pointer reaching another slot every frame, the average frame took about 4 ms instead of about 6 ms on the test machine.
Choose the file matching your Minecraft version and loader. Install one variant only:
- Standard: requires a compatible external Kotlin provider.
with-kotlin: includes Kotlin; do not combine it with KFF or another Kotlin runtime.
Runtime compatibility
SHA-256 checksums are provided in SHA256SUMS.
CompixelUI 0.1.17
This release is for every supported Minecraft version: 1.20.1, 1.21.1, 26.1.2, 26.2 and 26.3. Mods built for the previous release keep working without changes.
- Added: screens and HUD layers can read the game with
gameStateand change it withgameThread.post, with no state or action types of their own. AgameStateproperty reads the game on the game thread when the screen opens, before its first frame, then every tick or every few ticks, and after work posted from an input event; the content redraws when the value changes. Work posted from a click runs before the click returns. See Show game data. - Deprecated:
snapshot,handleandsend, which are removed in 0.2.0 together with the screens' state and action type parameters. Until then they keep working and can be mixed withgameState. See Snapshots and actions.
Choose the file matching your Minecraft version and loader. Install one variant only:
- Standard: requires a compatible external Kotlin provider.
with-kotlin: includes Kotlin; do not combine it with KFF or another Kotlin runtime.
Runtime compatibility
SHA-256 checksums are provided in SHA256SUMS.
CompixelUI 0.1.16
This release is for Minecraft 1.20.1 and 1.21.1. Minecraft 26.1.2, 26.2 and 26.3 were not affected by this crash and stay on CompixelUI 0.1.15.
- Fixed: a CompixelUI screen no longer crashes the game when it shows an item whose model has no particle texture, as some mods' items do. Whether an item icon is animated is now decided only from the textures the game draws for it.
Choose the file matching your Minecraft version and loader. Install one variant only:
- Standard: requires a compatible external Kotlin provider.
with-kotlin: includes Kotlin; do not combine it with KFF or another Kotlin runtime.
Runtime compatibility
SHA-256 checksums are provided in SHA256SUMS.
CompixelUI 0.1.15
- Changed: the first CompixelUI screen of a game session stalls the game much less when it opens. CompixelUI now prepares Compose in the background while the game loads; the first opening of a container screen went from about 0.7 to about 0.25 seconds.
- Changed: around its OpenGL drawing, CompixelUI now saves and restores only the state each step can change, instead of every texture unit the driver offers (192 on NVIDIA). On the test machine this work takes about a quarter of its former time for each screen redraw, and about a thirtieth for each item icon copy.
- Changed: while nothing on a CompixelUI screen changes, the game no longer waits for Compose's thread on every frame, which took about 0.07 ms per frame on the test machine.
- Fixed: CompixelUI screens leave the game's OpenGL state as they found it. Program-controlled point size stayed enabled after every redraw on Minecraft 1.20.1 and 1.21.1, and with drivers that support window rectangles, NVIDIA's among them, a screen whose last drawing sat under a difference clip could keep later game drawing from reaching parts of the screen.
- Fixed: animations that start when a screen opens, such as its entrance, play from the frame in which the screen first shows. The time a screen spent composing and drawing its first frame used to count toward them, so a slow first opening could skip an entrance entirely.
Choose the file matching your Minecraft version and loader. Install one variant only:
- Standard: requires a compatible external Kotlin provider.
with-kotlin: includes Kotlin; do not combine it with KFF or another Kotlin runtime.
Runtime compatibility
SHA-256 checksums are provided in SHA256SUMS.
CompixelUI 0.1.14
- Fixed: the game starts when another mod carries its own copy of XZ for Java, such as Voxy loaded through Roxy on 1.21.1 (#1). Java does not let two modules share a package, so the game used to quit before loading any mod. CompixelUI's runtime now carries XZ for Java under its own package name.
- Changed: the release JAR is about 6 MB smaller, for example 38.7 MB instead of 44.9 MB on 1.21.1, or 40.9 MB instead of 48.2 MB with Kotlin. The JAR now compresses each embedded library bundle as a whole, the native libraries of each CPU architecture are compressed together, and the Compixel font ships xz-compressed.
- Changed: on the first start after installing or updating, systems other than Windows x64 and Apple silicon Macs take up to about a second longer to unpack their native library.
- Changed: on 1.20.1 and 1.21.1, the loader keeps embedded libraries in memory, which now takes about 22 MB more, or 27 MB more with Kotlin; on 26.x it unpacks them into its cache on disk instead. CompixelUI also unpacks its font while the game loads and keeps it in memory, about 8 MB, instead of reading it again whenever Compose reloads it.
Choose the file matching your Minecraft version and loader. Install one variant only:
- Standard: requires a compatible external Kotlin provider.
with-kotlin: includes Kotlin; do not combine it with KFF or another Kotlin runtime.
Runtime compatibility
SHA-256 checksums are provided in SHA256SUMS.
CompixelUI 0.1.13
- Changed: the release JAR is about 28 MB smaller, for example 44.9 MB instead of 73.4 MB on 1.21.1. CompixelUI now stores Skiko's native libraries xz-compressed and keeps the ICU text data, which Skia embeds in each Linux and macOS library, only once. When the game starts, CompixelUI unpacks the library for the current system into Skiko's cache,
.skikoin the user's home directory, where Skiko used to unpack it itself; a library already there is used as it is. The first start after installing or updating takes less than a second longer. - Changed:
ComposeRuntimeandKotlinRuntimemoved todev.compixel.platform.internaland left the API reference. They only serve CompixelUI's own startup checks.
Choose the file matching your Minecraft version and loader. Install one variant only:
- Standard: requires a compatible external Kotlin provider.
with-kotlin: includes Kotlin; do not combine it with KFF or another Kotlin runtime.
Runtime compatibility
SHA-256 checksums are provided in SHA256SUMS.
CompixelUI 0.1.12
- Fixed: holding a key such as Shift, Ctrl or Space in a CompixelUI screen no longer makes the game stutter. Every key press, including the repeats of a held key, used to read the system clipboard, which can take tens of milliseconds depending on what was copied. Now only the paste shortcuts read it, once per press: Ctrl+V, Command+V on macOS, and Shift+Insert.
Choose the file matching your Minecraft version and loader. Install one variant only:
- Standard: requires a compatible external Kotlin provider.
with-kotlin: includes Kotlin; do not combine it with KFF or another Kotlin runtime.
Runtime compatibility
SHA-256 checksums are provided in SHA256SUMS.
CompixelUI 0.1.11
- Fixed: CompixelUI screens open on macOS. Skiko refuses OpenGL on macOS unless it is enabled, so the first screen used to crash the game.
- Added:
CtrlOrCmd, withisCtrlOrCmdPressedfor key and pointer events, tells whether the key in Ctrl's role is held: Command on macOS, Ctrl elsewhere, the same key Compose's text fields use. Check Ctrl-style shortcuts with it. See Menus. - Changed: Ore number fields take their large step with Command on macOS. See Buttons and inputs.
- Changed: mouse and wheel events report Ctrl and Command as key events do, with Command as meta. On 1.20.1 and 1.21.1, Command used to arrive as Ctrl on macOS; check such shortcuts with
isCtrlOrCmdPressedinstead.
Choose the file matching your Minecraft version and loader. Install one variant only:
- Standard: requires a compatible external Kotlin provider.
with-kotlin: includes Kotlin; do not combine it with KFF or another Kotlin runtime.
Runtime compatibility
SHA-256 checksums are provided in SHA256SUMS.
CompixelUI 0.1.10
This release combines the changes developed in 0.1.10-alpha.1 through 0.1.10-alpha.17. Those development versions were not released separately.
0.1.10 changes
- Changed: screens and HUD layers own the game state their content shows through immutable snapshots. Screen actions sent during mouse and keyboard input run before the event returns, so the next frame shows the result. Breaking: screens and HUD layers are now abstract; replace the old content lambda with a subclass that implements
snapshot,Contentand, for screens with actions,handle. See Show game data. - Added:
ScreenTransitionanimates screens in and out, and dialogs fade with their screen throughLocalOverlayVisibility. Closing returns control to the player while the exit plays above the game. Container screens covered by recipe viewers retain their Compose state, andmenuClosed()runs when their menu closes. Every Minecraft adapter uses the sharedUiLayerfor its screens and HUD layers. See Screen transitions. - Added: mod-owned color schemes and an in-game color editor with live previews, saved player choices and resource-pack export. CompixelUI's Config button in the mod list opens the editor for its own Ore schemes. Breaking:
ColorSchemaand schemes replace the old theme API and file format. Mods can supply their ownUiDesign, colors and preview. See Color schemes. - Changed: Ore uses the bundled Compixel font, preserving Monocraft's glyphs and adding Unifont pixel glyphs for Chinese, Japanese, Korean and other supported Minecraft languages. Emoji, unsupported scripts and rare characters continue to use system fonts. Stray control characters no longer draw boxes. See Colors and text.
- Changed: menu synchronization uses one shared implementation across Minecraft versions. Large values and states arrive in batches and apply atomically; state starts immediately after the menu opens, and transfers advance as received bytes are acknowledged. Breaking: synchronization settings, size limits, rate budgets and timeouts are removed; bind with
MenuSync.bind(menu, schema). Actions still declare their maximum size, and the server accepts at most 16 new actions per tick. The wire protocol is version 6, so both sides need this version of CompixelUI. See Menu synchronization. - Added: custom slot content and overlays that retain native container gestures and tooltips. Ore slot amounts use white digits with a pixel shadow, with editable colors and the shared
OreSlotAmountcontrol. A slot has one hover state, and its tooltip stays visible while a mouse button is held. Breaking:MenuSlotState.highlightedandComposeMenuSlots.interactingare removed. See Container screens. - Changed:
NativeItemOptions.preparationsPerFrameaccepts up to 1024 preparations, allowing several atlas pages to be drawn in one frame when many icons become visible. See Item icons. - Fixed: the color editor fits short screens and keeps its preview scrollable. The color picker retains its chosen hue, saturation and brightness, avoiding pointer jitter and keyboard drift even when changes return from the host a few frames later. Ore's pencil glyph is easier to recognize at small sizes.
- Removed: the built-in configuration editor and its
ComposeConfigScreenandConfigEditorAPIs. Consumers use their loader's configuration screen or a configuration library. Unused session and design APIs, includingUiSession.setActive,SessionState.SUSPENDED,UiSession.diagnosticThread()andUiDesign.None, are also removed.
Unreleased development history
These entries describe each development version as it existed at the time. The temporary theme API introduced in alpha.4 was replaced by color schemes in alpha.10, and alpha.8's background warm-up was reverted.
0.1.10-alpha.17
- Fixed: a container slot's tooltip stays visible while a mouse button is held, as in a vanilla container. It hid on every press, so it flickered while shift-clicking stacks out of a storage.
- Breaking:
ComposeMenuSlots.interactingis removed. It only told whether a button was held over the slots.
0.1.10-alpha.16
- Breaking: menu sync has no settings anymore.
MenuSyncOptions,SyncLimits,ActionLimitsandTransferBudgetare gone, andMenuSync.bind(menu, schema)is the only way to bind a menu.SyncCodecs.string(maxBytes)is nowSyncCodecs.STRING, andMinecraftSyncCodecs.registry(bufferon Forge 1.20.1) no longer takes a size. An action still declares its largest value withMenuAction.of(id, codec, maxBytes, handler). See Menu synchronization. - Changed: values of any size synchronize. A state or a single value larger than any Minecraft packet arrives in batches and takes effect all at once, and nothing in menu sync times out.
- Changed: menu sync paces a menu's state by what the client has received: at most 512 KiB that the client has not acknowledged is on its way, with no rate budget. Large states reach fast connections much sooner, and on slow connections other game traffic keeps moving. An action sent in parts waits in the same way for the server to confirm what arrived.
- Changed: a menu's state follows its opening at once instead of after a reply from the client, so the menu has its data one round trip sooner.
- Removed: the
ActionFailurevaluesQUEUE_BYTES,PENDING_ACTIONS,QUEUE_TIMEOUT,SEND_TIMEOUT,REPLY_TIMEOUTandASSEMBLY_TIMEOUT, andActionStatus.EXPIRED. - Changed: the menu sync protocol version is now 6, so the client and the server need this version of CompixelUI.
0.1.10-alpha.15
- Fixed: dragging through the dark part of
OreColorPicker's plane no longer shakes the pointer sideways, and arrow-key steps no longer drift. The picker keeps the hue, saturation and brightness it chose instead of reading them back from the 8-bit color, including while a host returns the value a few frames later; a color it did not choose, such as a typed hex value or a restored default, still moves the pointer to that color.
0.1.10-alpha.14
- Changed:
OreGlyph.Pencilis drawn as a pencil, with an eraser, a body and a sharpened point parted by gaps, so it reads as one at small sizes instead of a slanted bar.
0.1.10-alpha.13
- Changed: slot amounts in Ore's look are white digits over a one-pixel shadow, like vanilla item counts, about two thirds of vanilla's size. They stay legible over light and dark items in every scheme, and the decimal point takes vanilla's narrow width, so amounts such as
1.2Kfit the slot. - Added: the Ore colors
slotAmountandslotAmountShadowset the digits and their shadow, and can be changed in the color editor. See Ore color names. - Added:
OreSlotAmountdraws an amount the same way in slots you draw yourself. See Draw slots yourself.
0.1.10-alpha.12
- Fixed: the color editor fits short screens, such as 1080p at Minecraft's automatic GUI scale. A design's preview keeps its size and scrolls instead of being squeezed, and the picker gets shorter so the color list keeps its rows. See Color schemes for mod developers.
- Changed: the color editor has no bottom bar. Export sits next to the scheme list, Restore all next to Restore, and the export dialog shows the result.
- Added:
OreColorPicker(planeHeight = …)sets the height of the saturation and brightness plane.
0.1.10-alpha.11
- Added: CompixelUI's Config button in the mod list opens the color editor for CompixelUI's own color schemes, which screens in plain Ore style use. Players can switch them and change any color without a mod offering its own entry. See Change colors in game.
0.1.10-alpha.10
- Added: a color editor. Players switch color schemes and change any color, including its opacity, while a preview of the mod's screens shows the result, and every screen of that mod follows at once. Their choices are saved in
config/compixel-colors.json. Screens offer it throughLocalColorEditor, which mods call from a control of their own; other code opensColorEditorScreen. See Change colors in game. - Added: the editor exports the player's colors as a resource pack that replaces a scheme or adds a new one, and can make it the default, ready to share or to include in a modpack. See Export for a resource pack or modpack.
- Changed: themes are replaced by color schemes, which belong to each mod. A scheme file at
assets/<namespace>/compixel/schemes/<name>.jsonsetscolorsand mayextendsanother scheme of the mod, andassets/<namespace>/compixel/schemes.jsonchooses the default scheme and the editor's order. Theme files undercompixel/themes/are no longer read. See [Write a scheme file](https://github.com/Frostbite-time/CompixelUI/blob/main/docs/en/themes.md#write-a-scheme-fi...
CompixelUI 0.1.9
- Add
OreTooltipMode.Immediatefor hints that open on hover and close as soon as the pointer leaves their trigger, including when moving into the hint. Immediate hints use the regular bottom frame without a lock progress line; icon button hints use this mode. - Keep
OreTooltipMode.Delayedas the default, preserving dwell locking, the progress line and interactive nested hints. See the tooltip guide.
CompixelUI 0.1.8
- Reduce the default menu width to 136 dp and the minimum menu row height to 22 dp while preserving text size, wrapping and keyboard navigation.
- Show menu scrollbars only when content can scroll, and reclaim their reserved space when hidden. Context menus and select dropdowns share this behavior.
CompixelUI 0.1.7
- Add
NativeDrawingandMinecraftNativeDrawingfor native Minecraft drawing in arbitrary rectangular Compose layouts. Content renders at the layout's physical resolution and participates in Compose clipping, transparency and transforms. - Share native image scheduling, publication and retirement between rectangular drawings and item icons; tooltips reuse the same image ownership and refresh policy while keeping native measurement and events.
- Replace
IconRefreshwithNativeRefreshindev.compixel.forge.drawing. Update imports when upgrading; no compatibility alias is retained. - Support the same rectangular drawing API on Minecraft 1.20.1, 1.21.1, 26.1.2, 26.2 and 26.3, including OpenGL and the supported Vulkan targets.
See the native drawing guide for usage and sizing.
Choose the file matching your Minecraft version and loader. Install one variant only:
- Standard: requires a compatible external Kotlin provider.
with-kotlin: includes Kotlin; do not combine it with KFF or another Kotlin runtime.
Runtime compatibility
SHA-256 checksums are provided in SHA256SUMS.