| .. |
|
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
|
ludic schema: a components section and a natives list (R4)
|
2026-09-29 19:36:04 +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_first_show_parts
|
ludic.ui: a new component instance's first build is declared - a first show mid-play is not a frame's keep
|
2026-09-29 15:18:22 +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_p5.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_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_first_show.ludic
|
ludic.ui: a new component instance's first build is declared - a first show mid-play is not a frame's keep
|
2026-09-29 15:18:22 +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_override.ludic
|
ludic.ui: ui_override(path, text), ui_override_clear(path | "") and ui_overridden(path) - a template's or a stylesheet's text given from outside, its component shown again with its state kept and its own text brought back when let go; lib_text answers a copy of the override, and the dev poll leaves an overridden component alone; examples/library/ui_override
|
2026-09-29 22:48:48 +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_pointer_through.ludic
|
ludic.ui: the pointer looks through a box with no size; a control's parts answer :hover
|
2026-09-29 13:26:33 +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_select_disabled.ludic
|
ludic.ui: <option disabled="{...}"> - a select steps past it, clamps off it and greys the arrow toward it
|
2026-09-29 16:01:43 +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 |