- Add
deferto the Kry language:defer STMTrunsSTMTat the enclosing block's exit (fall-through,return,break,continue), in reverse registration order across nested scopes. A compile-time transform that splices the statement into the generated C at every exit point — no runtime cost.gotoout of a deferred scope is left to explicit cleanup. - Resolve qualified type references across modules. Writing
alias.Typeafteralias :: #import "mod/path"now produces the bare C type name in every position — parameter lists, return types, struct fields, local declarations, and#globaldeclarations — instead of emittingalias.Typeverbatim (a C syntax error) or wrongly module-prefixing it. Structs and enums use their declared name across translation units, so the alias prefix is dropped. Qualified calls (alias.fn(...)) still rewrite tomodule_fn(...)as before. The first multi-module.kryprogram (state + draw + host) now compiles, links, and runs end to end. - Remove the fixed per-function body cap.
kcpreviously rejected any function whose generated body exceededKC_BODY_MAX = 512statements with "generated body is too large", which blocks large UI draw functions.KryFunction.body/body_lineare now heap arrays that grow geometrically (viagrow_body), and theapply_deferssplice pass allocates its working buffers sized to the body. A 1,500-statement function compiles cleanly. Verified clean under ASAN/UBSAN/LeakSanitizer; the previously-leakedfile->functions/routesarrays are now freed on exit. - Collect multiple parse errors instead of aborting on the first. Parsing now installs a per-statement recovery boundary: a malformed statement records a diagnostic and parsing continues with the next, so a file with several errors reports all of them (the IDE's problems pane becomes useful while editing). A file that previously reported one error and exited now reports every recoverable error in source order. Fatal conditions (out of memory, CLI misuse) still abort as before, and any diagnostics already recorded are flushed first. Examples and valid code are unaffected (byte-identical).
- Standalone
.kryapps can own their frame loop. Theapp{}block now acceptsinit,frame, andshutdownhooks naming.kryfunctions; whenframeis set,kcemits amain()that callsinit()once,frame()each iteration, andshutdown()at exit — without bracketing drawing, so the program callsBeginDrawing/BeginUIFrame/EndDrawingitself and can host nested render-texture passes and inspection overlays like a hand-written C app. This is the entry point a self-hosted IDE uses. Without hooks the existing single-screenapp{}/screendialect is unchanged (byte-identical). - Add the Kry standard platform library:
kry_process(spawn a shell command with non-blocking stdout/stderr polling, used for builds and consoles),kry_filesystem(directory iteration, stat/mtime, recursive mkdir, realpath, text read/write), andkry_dylib(dlopen/dlsym/dlclose for loading a built app host). Declared inkryon.hand implemented undersrc/kry_std/, so they are linked intolibkryon.aand callable directly from.kryvia#extern. These lift the IDE's inline POSIX surface into a reusable library so a.kry-written IDE can spawnmake kryon-host, walk the project tree, anddlopenthe resultingapp_host.so. Windows has stub implementations. - Move the self-hosted IDE rewrite in Kry into the standalone IDE repository:
app.kryowns the window loop via the newapp{}hooks;state.kry,start_page.kry,project.kry,tree.kry, andeditor.kryimplement the start page, project-open flow (file dialog +kry_fs), a file-tree sidebar (kry_fs_list_dir+DrawUICascadingTreeView), and a read-only source viewer (kry_fs_read_file+DrawUITextArea). The IDE repository transpiles those modules in onekcinvocation and links the generated C againstlibkryon.a- raylib.
- The
.kryIDE gains an editable editor with multi-tab open files, Ctrl+S save (kry_fs_write_file), dirty markers, and Ctrl+Z/Ctrl+Y undo/redo (heap-snapshot ring), plus a live-preview pane (preview.kry) that runsmake kryon-hostviakry_process,dlopens the resultingapp_host.soviakry_dylib, and renders the host into aRenderTexture— the full non-blocking build + hot-reload loop, written in Kry. - Add the IDE console and problems panels in Kry (
console.kry,problems.kry): an interactive shell that runs typed commands viakry_processand drains output each frame, and a diagnostics parser that splitspath:line:col: messagelines from build output into a problems list, shown in a bottom panel that auto-opens when a build reports errors. - Compile kryon library objects with
-fPICso they link into PIE executables anddlopen'd app hosts on distros that default to PIE.
- Remove the bundled C IDE. Kryon now builds only the library, compiler,
tooling, and
kryon-app; the Kry-written standalone IDE lives outside this repository. - Fix copy/cut/paste/select-all in the IDE source editor.
DrawUITextAreahad its own generic clipboard handler that raced the IDE'seditor_handle_source_clipboardon the same one-shot keypress, so Ctrl+C/V worked inconsistently. The generic handler is removed; the IDE now owns the source-editor clipboard (it has the byte-cap, line-copy fallback, and status messages). The stale!textarea_changedguard that silently skipped paste is dropped too. - Raise the clipboard size caps so large selections copy and paste in full.
The kryon UI buffer (
g_clipboard_text) grew from 4096 to 1 MiB, and the vendored raylib SDLGetClipboardTextbuffer (MAX_CLIPBOARD_BUFFER_LENGTH, a fixed 1024 that truncated pastes to 1019 bytes +...) is overridden to the same 1 MiB via a-Dflag passed throughRAY_RAYLIB_CONFIG— no vendored raylib source is edited. Both caps are now symmetric and above the editor's 512 KiB source buffer, which becomes the real ceiling. - Make hot-reload (and run targets) non-blocking. The IDE ran the app-host build
as a synchronous
popen+freadon the UI thread, freezing the window for the whole compile. Builds now use the samefork+pipe+waitpid(WNOHANG)pattern as the console runner (editor_build_start/editor_build_poll), drained each frame from the main loop; the app host isdlopened on the poll that observes a successful exit. The reload poll is lowered from 2.0s to 0.5s so a finished build is picked up promptly, and builds are serialized with the console. - Split the screen-header (title bar) widgets out of
modal.cinto a newsrc/ui/ui_titlebar.c, leavingmodal.cholding only modal/dialog code. Removed an orphaned empty scrollbar section marker. - Consolidate duplicated helpers: the three byte-identical
clampicopies inguide.c,modal.c, andtheme_picker.cnow use the sharedui_clampi. Add sharedui_draw_box_background,ui_caret_blink_visible, andui_open_urlhelpers, replacing inlined copies in the text widgets and links. - Correct the README preview-projects section: the IDE previews
.kryby rebuilding anddlopening an app host, not by rendering source directly. - Remove the empty leftover
src/editor/directory; the C editor lived under the command tree before the standalone IDE migration. - Add CI workflow (
.github/workflows/ci.yml) that builds and runsmake teston push and pull request for Linux and FreeBSD. Tests previously only ran at release time. - Extract the UTF-8 codec and text-buffer helpers from
ui.cinto a newsrc/ui/ui_text_edit.c, with atests/ui_text_edit_test.ccovering the insert/delete/offset logic.
- Bump version to v0.1.7
- Remove native_widget_name compiler name-rewrite hack
- Finish removing Kry sugar verbs — language is now minimal
- Remove redundant Kry verbs; widgets are now a library
- Rework Platforms grid: add Windows, macOS, FreeBSD
- Make text input focus exclusive across UITextField and UITextArea
- Bump version to v0.1.6
- Resolve tray icon from installed hicolor paths
- Fix site card cursors, release CI, and IDE recent-projects grid
- Trigger site deploy (previous run hit GitHub internal error)
- Restyle docs site with refined modern-retro theme
- Add Kryon IDE start page and fix preview inspection
- Improve Kry language and generic APIs
- Support uninitialized C locals in kc
- Allow args locals in kc functions
- Add Kryon platform thread primitives
- Support local enum blocks in kc
- Support bitwise compound assignments in kc
- Guard Kry compile-time expansion recursion
- Add runtime asset sync API
- Support Kry multidimensional arrays
- Raise Kry type block capacity
- Add Kry named enum syntax
- Add Kry switch syntax
- Update Kryon site goals
- Add Kry web intrinsics
- Add Kry anonymous block scopes
- Add top-level Kry extern declarations
- Add Jai-style Kry defines
- Add Kry top-level macro translation
- Add Kry type aliases
- Allow Kry type-only modules
- Generate project headers from Kry files
- Guard Kry text shorthand parsing
- Respect Kry locals when resolving function values
- Limit Kry function value rewriting
- Resolve Kry function values in expressions
- Add exact C exports for Kry modules
- Make Kry modules the only import path
- Support path-based Kry module use
- Fix IDE preview toolbar and text state
- Tighten leading continuation parsing
- Support leading expression continuations in Kry
- Add native Kry enum blocks
- Support break statements in Kry
- Add native Kry struct declarations
- Support multiline Kry function declarations
- Rewrite nil in Kry static initializers
- Add Jai-style Kry compile-time macros
- Support multiline Kry state initializers
- Use Jai-style typed Kry declarations
- Keep postfix operators on one Kry line
- Support multiline Kry block headers
- Support operator line continuations in Kry
- Support multiline Kry statements
- Add Kry while statements
- Allow app locals in Kry functions
- Lift Kry function limits
- Add flat Kry modules
- Add the Kryon logo as the site and IDE app icon.
- Add C-close Kry language direction docs.
- Add automatic release tagging when the checked-in Kryon version changes.
- Replace Kry
includesyntax with explicitcimportfor C headers. - Use cleaner changelog version headings without brackets.
- Allocate Kry compiler state on the heap to avoid Linux runner stack crashes.
- Add Clay as a vendored layout dependency for future Kryon UI work.
- Remove the vendored fontchop dependency and chopped bitmap font assets.
- Add public Kryon version metadata for release artifacts.
- Move font atlas generation to the vendored fontchop submodule.
- Replace the single implicit UI font with a registered font selection API.
- Improve generated icon asset formatting and desktop/embedded fallbacks.
- Add Markdown support and text area UI.
- Add pointer release helper APIs and modal layer input capture.
- Add web file dialog loading.
- Fix release CI vendor builds.
- Add Kryon release automation.