⚠️ Beta Status: Active development. Breaking changes may occur until 1.0.0. Pin exact versions for stability.
Custom JSX-driven UI system for Minecraft Bedrock.
Components serialize into compact strings decoded by a render pack to render rich layouts beyond native @minecraft/server-ui limitations.
📘 Full documentation & guides: https://bedrock-core.drav.dev/
yarn add @bedrock-core/uiOr scaffold a whole project — Regolith, TypeScript, the filter chain, an example screen and the render pack:
npx @bedrock-core/cliThe one package carries the whole stack behind subpath entries — @bedrock-core/ui, /ore-styled, /navigation, /i18n, /guides, /config, /flexbox — plus /jsx-runtime for jsxImportSource.
The JSON UI decoders live in a render pack (core-ui-v*.mcpack, attached to every release) that has to ship in the world alongside your addon; take it from the same release as the library. See Installation and Render pack.
- JSX runtime with a custom component system and a TypeScript library with proper exports
- Serialization protocol with UTF-8 safety, decoded by the JSON UI render pack
- Hooks:
useState,useReducer,useRef,useEffect,useContext,useEvent,usePlayer,useExit - Event system with
Buttonclick handling - Custom native component API — register your own native JSON UI components compatible with
@bedrock-core/ui
- Base components:
Panel,Text,Image,Fragment,Button,ItemRenderer Background— a screen-level background textureScroll— up to 2 independent scroll regions per render- Modal-backed standalone primitives:
Input,Dropdown,Slider
- Flexbox layout engine — flex, margins, paddings, spacing, alignment, aspect ratio, content measurement (@bedrock-core/flexbox)
- Prebuilt Ore-UI styled components (@bedrock-core/ore-styled):
Button,Card,Toggle,Divider,Input,Dropdown,Slider,Checkbox,RadioGroup/Radio,ToggleButtonGroup/ToggleButtonItem,Header,MenuRow,ItemSlot,ItemContainer,EquipmentSlots, plus thethemedesign tokens for ad-hoc styling
- Typed keys, interpolation and plurals, resolved on the client in each player's own language (@bedrock-core/i18n) — nested TypeScript resources are the source of truth, and the
i18nregolith filter generates the.langfiles, the runtime bundle and the key types from them Texttakes a literal string, a translation key or aRawMessageinterchangeably — no prop to declare, no wiring beyond the addon's onecreateI18n(bundle)call- Bundles replicate across addons, so one realm can render another's strings
- Stack-based multi-screen navigation with screen parameters and typed route state (@bedrock-core/navigation)
NavigationContainer,createStackNavigator,stackReducer- Navigation hooks:
useNavigation(),useRoute()
<Form>— a nativeModalFormData-backed form with an atomic single-submit lifecycle (onSubmit/onCancel)- Form field primitives:
Form.Toggle,Form.Slider,Form.Dropdown,Form.InlineSelect,Form.Input,Form.Option Form.Button— in-flow submit / exit action buttons, positioned anywhere in the form- Ore-Styled form fields:
Form.Toggle,Form.Checkbox,Form.Radio,Form.ToggleButton,Form.Slider,Form.Dropdown,Form.Input,Form.Button
- In-game guides authored in MDX (@bedrock-core/guides) — the
guidesregolith filter compilespacks/data/guides/<locale>/**.mdxinto a guide manifest plus.langfiles, andcreateGuide(manifest)renders it as a self-contained guide with its own home ⇆ page navigation, prose localized per player language - Shared addon list + config + guide UI (@bedrock-core/config) —
ui(core)mounts<namespace>:config/:configat/:guide/:listunder the addon's own namespace, and whichever realm runs the newest runtime serves the config and guide screens for every registered addon
- Compound components (tabs, menus, dialogs)
- Animation support
- Resource pack builder automation
- Reactive data binding (if feasible)
- Export feature for "non-form" JSON UI
- Entity render
- Structure render
Everything below is covered in depth at https://bedrock-core.drav.dev/
- Overview & installation
- ui-runtime — components, hooks, API, render pack
- ore-styled — prebuilt Ore-UI components and the theme
- navigation · i18n · guides · config
- flexbox — the layout engine, for tool and renderer authors
- CLI — project scaffolding
- Server packages — cross-addon registry, config and transport
The resource-pack workspace is the reference addon: every component and hook has a working screen in it.
Let's talk in Discord https://bedrock-core.drav.dev/discord
ore-ui: When it releases in Number.MAX_SAFE_INTEGER years, will consider if it is worth to port for ore-ui.
DDUI: It cannot be made compatible, DDUI does not use JSON UI so we cannot use the same methods.
Common web behaviour is one web has a single or multiple theme but all controlled by the same team/person.
Here in Minecraft we may have multiple addons each with their own UI, styling...
MIT

