..
ui_boxes_parts
feat(ui): flex-shrink, text that wraps beside its siblings, calc(), order, and 0 as a size
2026-09-24 19:54:14 +03:00
ui_component_parts
feat(lang): UI components as files - component Name { ... } beside Name.xml and Name.lss
2026-09-24 16:50:12 +03:00
ui_controls_parts
feat(ui): ludic.ui is a UI framework - input, controls, render3d backend, the CSS a game needs
2026-09-24 17:26:09 +03:00
ui_emit_click_parts
ludic.ui: emit click reaches on-click, and a select's < steps back
2026-09-29 12:32:45 +03:00
ui_gamepad_parts
feat(ui): the gamepad moves the focus, presses and goes back; a held direction repeats on the clock
2026-09-24 21:42:32 +03:00
ui_inputs_parts
feat(ui): number and key fields, notes, anchored popovers, text-shadow, and pictures as painted
2026-09-24 19:55:20 +03:00
ui_look_parts
feat(ui): number and key fields, notes, anchored popovers, text-shadow, and pictures as painted
2026-09-24 19:55:20 +03:00
ui_pointer_parts
feat(ui): pointer events for natives and elements, with capture; on-down and on-up; hits in painting order
2026-09-24 21:48:02 +03:00
ui_popover_align_parts
feat(ui): a popover's align along its side, and within= for the bounds it flips against
2026-09-24 21:48:58 +03:00
ui_popover_mouse_parts
feat(ui): a scrollbar held where it was taken, a popover that keeps the mouse, easing that lands
2026-09-24 21:39:28 +03:00
ui_popover_parts
feat(ui): popovers, tooltips, progress; the render3d backend installs itself; duplicate names caught first
2026-09-24 17:41:02 +03:00
ui_remount_parts
ludic.ui: an unmounted component is mounted again rather than made again - its record renewed (a generated renew), its props and model kept; an action's call answers into a ring
2026-09-28 15:25:55 +03:00
ui_scroll_hold_parts
feat(ui): scroll-top holds a scroll box at an offset, on-scroll, and ui_scroll_set
2026-09-24 22:00:21 +03:00
ui_scrollbar_parts
feat(ui): a scrollbar held where it was taken, a popover that keeps the mouse, easing that lands
2026-09-24 21:39:28 +03:00
ui_text_parts
feat(ui): text-fit, line-height, and ems against the font size an element ends with
2026-09-24 21:51:41 +03:00
ui_theme_parts
test(ui): a component with no stylesheet reads the theme's :root variables
2026-09-24 22:07:05 +03:00
anim.ludic
feat(stdlib): add Anim.* + Tween.* — deterministic 2D animation & tweening ( #5 )
2026-08-31 13:05:06 +03:00
anim_ecs.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
anim_sugar.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
arena.ludic
chore(repo): DX cleanup — categorise examples, text-diffable golden, build/ output ( #27 #28 #30 )
2026-08-30 18:54:21 +03:00
atlas.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
audio.ludic
feat: per-voice audio, outlines for what is not an actor, and a coast
2026-09-11 15:25:46 +03:00
bignum.ludic
feat(types): BigInt + Decimal exact economy numbers ( #52 )
2026-08-31 18:45:14 +03:00
camera_zoom.ludic
feat(camera): #78 deterministic Camera.zoom (Q16.16 render-time zoom)
2026-09-02 06:55:37 +03:00
clear_color.ludic
feat(render): #86 @ClearColor — Render phase auto-clears + auto-presents
2026-09-02 07:10:44 +03:00
combat.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
combat_kit.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
component_access.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
containers.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
core_components.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
coverage.ludic
refactor(cli)!: split the contributor tool out of the ludic CLI
2026-09-05 23:15:12 +03:00
crypto.ludic
feat(stdlib): finish Crypto (CSPRNG + base64) and add Uuid.* library ( #19 #16 )
2026-08-30 21:40:51 +03:00
cursor_capture.ludic
feat(input): #89 cursor capture — Input.cursor_mode (hide/lock/confine)
2026-09-02 08:06:34 +03:00
errors.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
fs.ludic
feat(stdlib): add Fs.* / Path.* / Mime.* — filesystem, paths, content types ( #10 )
2026-08-30 22:43:50 +03:00
gameplay_foundation.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
grid.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
http.ludic
feat(http): Http.* poll-based HTTP/HTTPS client over a native NSURLConnection backend ( #6 )
2026-08-31 18:10:53 +03:00
http_save.ludic
feat(launcher): Process.*, Http.save_to/received/expected, App.window_hide/show
2026-09-17 13:32:23 +03:00
input_actions.ludic
feat(input): action maps + deterministic record/replay ( #7 )
2026-08-31 16:03:56 +03:00
input_arrows.ludic
fix(input): Key.Up/Down/Left/Right are the held set's 128-131
2026-09-13 03:00:29 +03:00
input_auto.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
input_device.ludic
feat(input): raw device layer — multi-key held state, analog, mouse, gamepad, touch, full-state replay ( #50 )
2026-08-31 17:14:24 +03:00
input_edge.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
input_key_label.ludic
fix(input): keys are physical positions on every layout; Input.key_label names them
2026-09-15 23:26:53 +03:00
input_manager.ludic
feat(input): #83 Input Manager + auto-commit the device layer in the frame loop
2026-09-02 07:04:10 +03:00
input_mouse_rebase.ludic
fix(input): mouse_dx/dy report no motion on the first frame or across a cursor-mode change
2026-09-14 15:35:26 +03:00
input_movement.ludic
feat(input,ecs): #79 Input.axis_i directional int + #84 world bounds
2026-09-02 07:44:41 +03:00
input_typeless_keys.ludic
feat: every key on the keyboard is bindable - the F-row, the six-pack, Caps Lock and the numpad
2026-09-18 00:57:02 +03:00
jobs.ludic
feat(stdlib): Jobs, Promises & opt-in Sync concurrency ( #14 )
2026-09-01 03:32:31 +03:00
light_ecs.ludic
feat(ecs): Light2D/Occluder/Ambient as auto-consumed components ( #47 )
2026-08-31 15:49:50 +03:00
light_tiers.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
lighting.ludic
feat(rendering): add Light.* — deterministic 2D light accumulation with hard shadows ( #4 )
2026-08-31 14:07:19 +03:00
logging.ludic
feat(stdlib): add Log.* — levelled, structured logging ( #15 )
2026-08-30 21:57:22 +03:00
managers.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
namespace_block.ludic
feat(lang): #76 namespace block form with export/internal visibility
2026-09-02 08:14:54 +03:00
noise.ludic
feat(stdlib): add Noise.* — deterministic fixed-point procedural noise ( #3 )
2026-08-30 21:50:50 +03:00
numeric.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
optionresult.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
os.ludic
feat(compiler): list literals, typed compound assignment, file:line diagnostics
2026-09-05 01:12:16 +03:00
physics.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
physics_tiles.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
pool.ludic
feat(ecs): #80 entity-pool stats (Pool.live/free/reserved/capacity)
2026-09-02 08:23:58 +03:00
prefabs.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
preload.ludic
feat(assets): #82 incremental asset preloading + loading-scene pattern
2026-09-02 08:19:19 +03:00
process.ludic
feat(launcher): Process.*, Http.save_to/received/expected, App.window_hide/show
2026-09-17 13:32:23 +03:00
query.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
random_plain.ludic
fix(runtime): Random.* in any program; value_* called directly brings the value tree
2026-09-25 04:59:48 +03:00
recover.ludic
feat(errors): recoverable failures as values — try/else over ok/err results ( #46 )
2026-08-31 15:04:14 +03:00
reflect.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
regex.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
render.ludic
feat(rendering): add Screen.camera/clip/blend_mode/oval + Camera.* + Screen.pixel ( #23 )
2026-08-31 13:43:01 +03:00
scene_menus.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
serialize.ludic
feat(reflect): generic value tree + Reflect.serialize/apply + JSON bridge ( #44 )
2026-08-31 15:19:21 +03:00
sprite_atlas.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
sprite_render.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
testing.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
testing_floats.ludic
fix(test): expect_eq and expect_near compare floats as floats
2026-09-25 05:06:15 +03:00
testing_generic.ludic
fix(test): a generic function called from a test block works
2026-09-25 04:46:08 +03:00
testing_random.ludic
fix(runtime): Random.* in any program; value_* called directly brings the value tree
2026-09-25 04:59:48 +03:00
testing_strings.ludic
fix(test): expect_eq on strings compares their text and prints both on a failure
2026-09-25 19:23:38 +03:00
threads.ludic
feat(compiler): a Job.parallel_for worker may read a state but not change one
2026-09-27 22:04:59 +03:00
tiled_p0.ludic
feat(lang): L7 memory is safe unless it says unsafe
2026-09-24 12:53:27 +03:00
tiled_p1.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
tiled_p2.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
tiled_p3.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
tiled_p4.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
tiled_p05.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
tiled_p5.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
tiled_p6.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00
udp.ludic
feat(lang): L7 memory is safe unless it says unsafe
2026-09-24 12:53:27 +03:00
ui_anim.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_box.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_boxes.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_calc.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_component.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_controls.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_css.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_ease.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_emit_click.ludic
ludic.ui: emit click reaches on-click, and a select's < steps back
2026-09-29 12:32:45 +03:00
ui_fill.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_flex.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_focus_tip.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_gamepad.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_hold.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_html.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_inputs.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_keycap.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_look.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_nine.ludic
feat(ui): nine-slice corners clamped to half the box in each direction, cut on whole pixels
2026-09-24 21:59:26 +03:00
ui_pointer.ludic
ludic.ui: a screen's nodes and envs are pooled and used again - two generations a screen, reset in place, their own lists emptied not replaced; a tree is good until its screen is built twice more (benchmark 256 -> 110 KB a frame)
2026-09-27 23:33:48 +03:00
ui_popover.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_popover_align.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_popover_mouse.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_react.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_reload.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_remount.ludic
ludic.ui: an unmounted component is mounted again rather than made again - its record renewed (a generated renew), its props and model kept; an action's call answers into a ring
2026-09-28 15:25:55 +03:00
ui_scroll_hold.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_scrollbar.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_select_arrows.ludic
ludic.ui: emit click reaches on-click, and a select's < steps back
2026-09-29 12:32:45 +03:00
ui_submit.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_templates.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_text.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_theme.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_translate.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
ui_zoom.ludic
wip(0.S3): packages and examples migrated again from their pre-0.S sources in one run
2026-09-25 15:31:34 +03:00
unicode.ludic
feat(stdlib): add Unicode.* — UTF-8 code points, graphemes, case mapping ( #13 )
2026-08-30 22:29:00 +03:00
uuid.ludic
feat(stdlib): finish Crypto (CSPRNG + base64) and add Uuid.* library ( #19 #16 )
2026-08-30 21:40:51 +03:00
value_direct.ludic
fix(runtime): Random.* in any program; value_* called directly brings the value tree
2026-09-25 04:59:48 +03:00
world_bounds.ludic
refactor(runtime,packages,examples): named constants, package enums, idiom sweep
2026-09-05 01:12:26 +03:00