All notable changes to Harding are documented in this file.
The format is based on Keep a Changelog, and this project follows Semantic Versioning.
- External Harding library management (
librarycommand) for installing and managing third-party Harding packages. - External BitBarrel library published as
bitbarrelwith registry support and package installation flow. - External NimCP library packaging for installable MCP server support, including a Harding
NimCPServerwrapper aimed at Bona-hosted MCP workflows. - Corral database design documents covering the library vision (
CORRAL.md) and a first technical RFC for SQL templates, table gateways, mapping, and schema support. - Initial Corral external library package with registry entry, table/connection wrappers, parameterized
query:with:andexecute:with:support on SQLite and MySQL connections, first-pass row mapping and table CRUD helpers, andsql{...}template support with$value/$(expression)interpolation. - Optional MummyX HTTP server integration documentation, including build tasks for both
hardingandbona. - A Harding htmx-style web component layer, DaisyUI-backed Todo app example, and Bona workflow notes for live-editable MummyX web experiments.
- Block-aware cached Html templates and buffer-backed component rendering for reusable static markup with dynamic slots.
- Granite compiler Phases 0-7: exception handling codegen, remaining node types, and direct slot access compilation.
- VM optimization for declarative primitives eliminating dispatch overhead.
- Prefix literal syntax with
json{...}for creating JSON strings directly. Pluggable design allows any class to implementparseLiteral:for custom{...}syntax. Case-insensitive prefix normalization (json, Json, JSON all work). IncludesJson parse:andJson stringify:for bidirectional conversion. String class>>withCapacity:- Create pre-allocated mutable strings for efficient building.String>><<operator - In-place string appending that returns self for chaining. Uses Nim's efficientadd()with automatic capacity doubling.- Constant literal optimization - Array and Table literals with only constant elements (literals, no variables or message sends) are evaluated at parse time and cached. Interpreter uses pre-computed values, Granite generates compile-time Nim constants. Nested collections not yet optimized.
- Triple-quoted multiline string literals (
"""...""") for raw multi-line text with embedded"characters. - Process and activation introspection APIs including
Process current,Scheduler current,Object>>activation, andObject>>thisContext. - Reactive state primitives in
lib/reactive/(TrackedValue,TrackedTable,TrackedList) plus web render caching viaRenderCache/RenderEntry. - Simplified the Todo web example to a single tracked-state cached rendering path and removed the older parallel Todo rendering variants.
- Compiled JSON object serialization with class-side configuration (
jsonExclude:,jsonOnly:,jsonRename:,jsonOmitNil:,jsonOmitEmpty:,jsonFormat:,jsonFieldOrder:,jsonReset) andObject>>toJson. - JSON serialization benchmarks for nested Table/Array payloads and ordinary Harding object graphs.
- JSON API server tutorial with complete example application demonstrating REST patterns.
- MCP (Model Context Protocol) integration documentation for AI-assisted development workflows.
- Thin HTMX response helpers on
HttpRequestfor main fragments plus out-of-band fragments (respondFragment:,oob:,oobs:). &is now available as generic concatenation, and#(...)now accepts comma-separated elements as part of the syntax migration.
- Bona workspace artifacts are no longer tracked in git (added to .gitignore).
- Class definitions in core libraries now include class-specific comments.
- BitBarrel support now ships as an external library instead of built-in Harding source and build flags.
- The Todo web example now renders through component-level
RenderCacheplus tracked-state invalidation, updates counters with HTMX out-of-band swaps, and drops the old template/benchmark routes. - Html rendering now uses direct
Html render:/Html canvas:entry points for the active web path, and the old auto-keyed Html cache helpers have been removed. - MummyX request handling now runs through scheduler-backed green worker processes instead of executing on the socket thread.
- Granite block/codegen parity now covers captured block expressions, top-level block returns, 0-based collection access, and more runtime selector coverage.
- MummyX routes can now be cleared and rebuilt, and URL-encoded form data is exposed on
HttpRequest. - Bona now pumps scheduler work from the GTK main loop, refreshes open Browsers after successful Workspace evaluations, and documents the web stack through
WebandWebTodolibrary bootstraps. - Removed Buffer class - String now has
withCapacity:and<<operator, making Buffer redundant. Use(String withCapacity: 100) << "text"instead ofBuffer withCapacity: 100+<<+contents. Json stringify:now serializes ordinary Harding objects through compiled slot plans, supports primitive-only formatters (#string,#rawJson,#symbolName,#className), and falls back tojsonRepresentationwhen a class needs custom structure.- Parser now supports binary expressions directly in table literal values with loosened precedence rules.
- Removed native collection block iteration paths in favor of interpreted implementations for consistency.
nimble testnow discovers and runs external library tests automatically.- MummyX now includes request logging for debugging HTTP handlers.
lib/web/Html.hrdnow renders directly for the active todo path instead of routing through the older template-cache segment layer.- Web-related bootstraps now use explicit initialization guards instead of
isEmpty, so setting__sourceDirno longer prevents library contents from loading. - The todo app now builds HTMX panel responses through
HttpRequestfragment helpers instead of manually stitching response bodies. - The active website content was refreshed to reflect current syntax, web/runtime capabilities, package workflows, and the newer tooling story.
- Hardened browser dialogs and class reflection in Bona IDE.
- Fixed source tracking temp file cleanup in tests.
- External library builds now resolve transitive Nimble dependency paths needed by installed packages.
- MummyX request handlers now resume correctly after blocking native receives in the stackless VM.
- Interpreter native-value dispatch now marks interpreter-aware wrappers correctly, fixing crashes in collection iteration and block benchmark examples.
- Interpreter
printandprintlnnow render arrays and tables using their actual Harding string forms. - Fixed VM eval stack underflow with nested HtmlTemplates using dynamic content blocks (
textWith:,attrWith:,fragmentWith:). Root cause was BlockNode AST mutation during non-local returns corrupting the target activation. Fixed by copying block nodes before mutation. - JSON table-key serialization now rejects unsupported key types explicitly and detects cycles in slot-based and
jsonRepresentation-based object serialization. - Fixed inherited slot access in both interpreter and Granite compiler.
- Restored external library runtime compatibility for proper loading.
- Collection species handling and non-local block return edge cases.
0.8.0 - 2026-03-09
- MummyX HTTP server support for building web applications and REST APIs.
- Application Builder tool for visual Granite compiler workflow.
- Canonical class derivation APIs:
derivePublic:,derive:read:write:, andderive:read:write:superclasses:. ::named access syntax for direct readable/writable slot access plusTable/Librarybinding access.- Multiple-inheritance conflict reflection via
conflictSelectorsandclassConflictSelectors. - Source indexing for Browser method and class-definition lookups, including
<classDefinition>pseudo-entries. startsWith:andendsWith:methods forString.
- Multiple inheritance now uses first-parent-wins lookup order instead of failing on direct-parent selector conflicts.
- System Browser shows class definitions when selecting a class and refreshes source locations before save/delete.
- Browser-generated class definitions now use canonical
derive: ... read: ... write: ... superclasses: ...form. - Library restructure: reorganized into layered directories (core, stdlib, etc).
- Improved GTK callback stability and closure capture handling.
- Source location tracking now reparses files after edits so method offsets follow line-count changes.
- GUI/browser editing paths no longer depend solely on stale cached line ranges.
- Closure capture in IfNode/WhileNode control flow blocks.
- Array sorting and collection method improvements.
- Exception handling and block unwind cleanup fixes.
- Builder heightRequest and compilation fixes.
0.7.1 - 2026-03-02
- IDE Inspector rewritten with tree view and embedded workspace support.
- System Browser context menus with method deletion capability.
- GTK widget support:
GtkListBox,GtkPaned, and separator support inContextMenu. startsWith:andendsWith:methods forString(implemented as Nim primitives).- Alert dialog integration and GTK automation hooks for IDE.
- Comprehensive compiler block parity test suite.
- Replaced button-based BrowserPane with
GtkListBoxfor improved UX. - Browser save/reload workflow improvements with keyboard shortcuts.
printItnow inserts at cursor position and selects inserted text.- Improved debug/warn templates and removed unused logging imports.
- Compiler nested block compilation with proper registry sharing and forward declarations.
- Block compilation with captures and environment structs.
- Recursive non-local return detection in blocks.
- Preserved captured variable writes in indexed assignment fast path.
- VM optimizations: indexed locals, frame pooling, and logging improvements.
0.7.0 - 2026-02-27
- Mixed-mode compilation fallback to interpreter runtime (
--mixed) and supporting runtime integration. - Native Nim class generation support in the compiler, plus Harding-side
compile:/main:workflow improvements. - Exception signal-point capture and restoration (
ExceptionContext,resume,resume:), includingNotificationresumable behavior. - Slot reflection and improved native type conversion pathways (
toValue,classRefsupport).
- Merged major development lines from
compiler-nextandfix-exceptionsintomain. - Strengthened stackless VM control flow around returns, activation cleanup, and work-queue handling.
- Tightened boolean semantics for conditional evaluation to align with Smalltalk-style true/false logic.
- Updated standard library behavior for arrays, intervals, sorted collections, symbols, and strings to match current runtime semantics.
- Exception control-flow correctness for handler actions (
pass,return:, uncaught default action, resume continuation behavior). - Closure isolation and receiver/home-activation edge cases in block evaluation.
- Release-build safety issue in
println(memory safety fix). - Parser/operator consistency issues and several method dispatch/lookup edge cases.
- Multiple stdlib and website example regressions uncovered during merge stabilization.
- Method-table lazy rebuild optimization (significant speedup in lookup-heavy paths).
- Activation/frame pooling and follow-up VM optimization phases.
- Compiler-side optimization passes and block/codegen improvements.
- Expanded and stabilized tests for exceptions, stdlib, parser precedence, dynamic dispatch, and website examples.
- Split large stdlib coverage into focused suites for faster diagnostics.