- Added broader language and tooling coverage across formatter, lint/fix flows, benchmarking, import handling, and project rewrite paths.
Release history
Changelog
Browse Arden releases by version and jump straight to added features, fixes, behavioral changes, and technical work.
v1.3.6
Compiler UX, Type/Codegen Correctness, and Project Reliability
Apr 8, 2026
Added
Fixed
Large section hidden by default to keep the page readable.
- Fixed a broad set of unchecked codegen holes around type boundaries, including assignments, returns, branch joins, loop bindings, constructor/call arguments, function-value adapters, and container payload/key writes.
- Fixed unchecked builtin specialization mismatches for invariant containers and heap wrappers such as
List,Map,Box,Rc, andArc, so empty or pointer-shaped values with the wrong specialization no longer compile just because their lowered layout matches. - Fixed unchecked explicit builtin constructor specialization mismatches for nested invariant containers such as
Option<List<T>>, while keeping imported builtin variant aliases likePresentandSuccessworking normally. - Fixed the silent-feeling
arden lspstartup path by emitting basic lifecycle logs immediately, including an explicit waiting-for-handshake state, so local launches no longer appear dead. - Fixed scope restoration across blocks,
if,match, andfor, eliminating branch-local binding leaks and several invalid-IR paths. - Fixed contextual typing and adaptation for lambdas, enum-variant function values, exact-import constructor values, and interface-backed/bound method values.
- Fixed project rewrite and import-resolution edge cases across exact imports, wildcard imports, namespace aliases, nested modules, root aliases, builtin
Option/Resultconstructors and patterns, and zero-argument stdlib aliases. - Fixed stale-cache and rebuild correctness issues in project mode, including corrupted cache recovery, namespace-alias invalidation, and import-check/cache reuse across declaration signatures.
- Fixed unchecked and checked diagnostics for module-local nominal types and nested receiver failures so errors now report the real root cause with user-facing type names.
- Fixed remaining parser and import-check gaps around builtin
Option.None, builtin aliases, and package/root-qualified constructor and pattern syntax. - Fixed parser diagnostics so missing semicolons and other expectation errors now use human-readable token names, aligned source gutters, and insertion-point carets instead of internal token dumps or next-token-only blame, including identifier-led statements that previously lost their true start column.
- Fixed single-file import diagnostics so unresolved imports and alias issues now render with source context, identifier-accurate carets, and compact fix hints instead of a detached summary block.
- Fixed assorted project-mode regressions around generic inheritance, generic bounds, nested-module rewrites, current-package alias constructors, and extern/link-name preservation.
- Fixed test-runner output consistency so ignored tests, suite headings, and final summaries now read as one coherent UI instead of a mix of legacy banner styles.
Changed
Large section hidden by default to keep the page readable.
- Consolidated exact-import, namespace-alias, and zero-argument stdlib alias handling so the same forms behave consistently across checked builds, unchecked builds, and multi-file project builds.
- Tightened unchecked codegen to fail at semantic boundaries earlier instead of letting invalid programs degrade into LLVM or Clang backend failures.
- Refined CLI output for
build,run,fmt,fix, andcheckwith consistent project-style status lines, build durations, and web-aligned terminal colors instead of the previous mix of ad-hoc cyan/green messages. - Switched CLI build and timing summaries to seconds with enough precision for hot-cache runs, so near-instant builds no longer look absurdly tiny or rounded inconsistently in raw milliseconds.
- Polished developer-facing terminal UX again by aligning
arden lsplifecycle logs and the generatedarden testrunner output with the newer neutral CLI presentation instead of the older plain-text banners. - Simplified
arden testruntime output further by dropping runner banners and suite/summary noise in favor of plain per-testokandskiplines with CLI-side coloring. - Shortened and clarified docs around function/test returns and assertion helpers so examples match actual language behavior without over-explaining every small variant.
v1.3.5
Tooling, Performance, and Build Reliability
Mar 8, 2026
Added
- Added
arden fmt,arden lint,arden fix,arden bench, andarden profile, plus new lint rules, compound-assignment parsing, richer examples, and broader CLI/frontend/CI smoke coverage. - Added project linker/output configuration in
arden.toml, compile target/optimization flags, and expanded benchmark coverage including hot/cold compile modes, incremental rebuild scenarios, and larger synthetic mega-graph workloads.
Fixed
Large section hidden by default to keep the page readable.
- Fixed import, alias, wildcard, and module-local scope leaks across parser, import-check, type-check, lint, autofix, and unchecked codegen paths.
- Fixed unchecked dispatch and diagnostics for interfaces, enums, constructor/function values, nested receivers, generic bounds, and module-local nominal types.
- Fixed argument/return lowering gaps for direct calls, module-qualified calls, wildcard imports, enum constructors, compound assignment, and unchecked return validation.
- Fixed project rewrite and cache invalidation bugs across generic bases, nested modules, namespace aliases, declaration signatures, stale object reuse, and duplicate import-check reporting.
- Fixed tooling/runtime issues including parser edge cases for compound assignment and builtin generics, lambda capture borrow handling, test-runner codegen, async timeout portability, web docs sanitization/routing, and release/workflow setup.
Changed
Large section hidden by default to keep the page readable.
- Reworked project builds around
.ardencache, parallel parse/import/rewrite/object stages, narrower rebuild slices, direct object emission, response-file linking, and stricterlld-only linking. - Improved LSP rename/reference/hover accuracy, borrow-check/type-check metadata reuse, stdlib metadata sharing, async runtime portability, CI/release packaging, and project/build reporting.
- Expanded language semantics around inheritance, interface validation, import aliases, list construction/storage, shebang scripts, and project target/output handling.
v1.3.4
Async Runtime, FFI, Bindgen
Mar 5, 2026
Added
Large section hidden by default to keep the page readable.
- Threaded Async Runtime:
Task<T>now uses a real thread-backed runtime with result caching.async functioncalls now spawn task workers immediately viapthread.awaitnow joins unfinished tasks and reuses the stored result on subsequent awaits.async { ... }blocks now compile to real task runners with captured environments.
- Task Control APIs: Added
Task.is_done(),Task.cancel(), andTask.await_timeout(ms)runtime methods.await_timeout(ms)returnsOption<T>and performs a timed join.cancel()marks task as done and provides a safe default result for laterawait.
- Effect System: Added function effect attributes
@Pure,@Io,@Net,@Alloc,@Unsafe,@Thread, and@Anywith call-site checks.- Built-in effect requirements are enforced for IO/thread-sensitive APIs.
- Calls to user functions/methods now propagate declared effects.
- Non-annotated functions now get effect inference from the call graph.
- Invalid combinations (
@Pure+ explicit effects /@Pure+@Any) now fail at type-check time.
- C Interop: Added
extern function ...;declarations for C ABI calls.- Supports typed extern signatures without function bodies.
- Supports variadic extern declarations (e.g.
extern function printf(fmt: String, ...): Integer;). - Supports explicit ABI and symbol aliasing (e.g.
extern(c, "puts") function c_puts(...): Integer;,extern(system, "printf") ...). - Enforces FFI-safe extern signatures and variadic argument types at type-check time.
- Extern callsites now use C ABI argument lowering (no Arden env pointer).
- Pointer Interop Type: Added generic
Ptr<T>as a first-class type for raw FFI pointer signatures.- Parser/typechecker/codegen support for
Ptr<T>declarations and extern interop. Ptr<T>is now accepted as an FFI-safe extern signature type.
- Parser/typechecker/codegen support for
- C Header Bindings: Added CLI command
arden bindgento generate Ardenextern(c)declarations from.hfiles.- Supports common C prototypes and variadic signatures.
- Supports stdout output or
--output <file>generation.
- New Feature Examples:
examples/26_effect_system.ardenexamples/27_extern_c_interop.ardenexamples/28_async_runtime_control.ardenexamples/29_effect_inference_and_any.ardenexamples/30_extern_variadic_printf.ardenexamples/31_extern_abi_link_name.ardenexamples/32_extern_safe_wrapper.ardenexamples/33_extern_ptr_types.ardenexamples/34_bindgen_workflow.ardenexamples/README.md(coverage index)
Changed
Large section hidden by default to keep the page readable.
- Codegen Task Representation:
Task<T>codegen now uses an internal runtime task handle instead of the previous directTvalue stub. - Async Documentation: Updated async docs to reflect real runtime behavior (thread-backed scheduling, parallel task execution, await-as-join, cached result).
- Function Documentation: Added docs for
extern functionand effect attributes. - Safety of unwrap:
Option.unwrap()andResult.unwrap()now emit runtime panic+exit on invalid states instead of unchecked loads.
v1.3.3
Compiler/LSP/Docs Sync
Mar 5, 2026
Added
Large section hidden by default to keep the page readable.
Module Dot Syntax: Added semantic/codegen support for
Module.function(...)while keepingModule__function(...)compatibility.Enum Variant Constructors: Added enum metadata and constructor support for
Enum.Variant(...)in codegen/type checking.LSP Diagnostics on Edit: Added diagnostics publication on open/change (lexer/parser errors) and baseline go-to-definition symbol lookup.
Integration Test Coverage: Added tests for multi-file project rewrite edge cases:
- Shadowed local function identifiers are not mangled.
- Imported class constructor and module field accesses are mangled deterministically.
- Shadowed module identifiers are not mangled.
Fixed
Large section hidden by default to keep the page readable.
- Namespace Collisions: Collision handling now fails early with clear function+namespace diagnostics.
- Documentation Consistency: Updated
ardenCLI usage, module syntax notes, and compiler architecture file map. - Class/Module Collisions: Top-level class and module name collisions now fail early across namespaces.
- List Capacity Growth: Fixed
List.push()codegen to grow backing storage withreallocwhenlength >= capacity, preventing heap corruption (malloc(): corrupted top size) in large workloads likebenchmark/arden/matrix_mul.arden. - Map IR Block Ordering: Fixed invalid LLVM IR generation in
Map.set()control-flow block ordering (late-createdmap_set.cont/update), which caused Clang parse failures inexamples/17_comprehensive.arden.
Changed
Large section hidden by default to keep the page readable.
- Match Codegen: Expanded to support enum-style variant dispatch and payload binding flows.
- Map Methods:
set,insert,get, andcontainsnow use functional linear-lookup behavior with update semantics. - Project Build Pipeline: Now combines parsed AST declarations directly instead of text-merging source strings.
- Docs Mirroring: Full docs mirror is maintained under
web/public/docs/fromdocs/. - Scope-Aware Rewriting: Project call rewriting now preserves params, locals, loop vars, lambda params, and match bindings.
- Architecture Docs: Project documentation now covers AST combining, deterministic mangling, scope-aware behavior, and collision policy.
- Native Clang Tuning: Final IR compilation now prefers
-march=native -mtune=nativewith a safe fallback to baseline-O3if tuned flags are unavailable. - Project
opt_levelWiring:arden.tomlopt_levelnow actually drives final Clang optimization level (0/1/2/3/s/z/fast). Missing/invalid values default safely to maximum-performance-O3.
v1.3.2
Range Types
Feb 22, 2026
New Features
Large section hidden by default to keep the page readable.
Range Type: Full iterator-based range type for numeric sequences
Range<T>generic type withrange(start, end)andrange(start, end, step)functions- Iterator protocol with
has_next()andnext()methods - Support for ascending and descending ranges (negative steps)
- LLVM struct-based implementation with heap allocation
- New example:
examples/25_range_types.arden - Documentation:
docs/features/ranges.md
Testing Framework: Full testing framework with attributes and assertions
@Testattribute to mark test functions@Ignoreattribute to skip tests (with optional reason:@Ignore("not ready"))@Before,@Afterfor setup/teardown around each test@BeforeAll,@AfterAllfor suite-level setup/teardown- New CLI command:
arden test- Discover and run all @Test functions - Assertion functions:
assert(),assert_eq(),assert_ne(),assert_true(),assert_false(),fail() - New example:
examples/24_test_attributes.arden
LSP (Language Server Protocol): Arden now has a built-in LSP server for IDE integration
- New CLI command:
arden lsp- Start the language server - Autocomplete support for keywords, types, and functions
- Hover documentation for language keywords
- Go to definition support (prepared)
- New CLI command:
Improved Error Messages: Better developer experience with helpful error messages
- "Did you mean?" suggestions for typos using Levenshtein distance
- Contextual hints for missing imports
- Color-coded error output with source location
Technical
Large section hidden by default to keep the page readable.
Range Type Implementation:
- Added
Type::Range(Box<Type>)to AST - Added
ResolvedType::Range(Box<ResolvedType>)to typeck - Parser support for
Range<T>syntax - LLVM codegen: struct
{ i64, i64, i64, i64 }(start, end, step, current) create_range(),range_has_next(),range_next()helper functionscompile_range_method()for method calls
- Added
Added
test_runner.rsmodule for test discovery and executionAdded
Attributeenum to AST for function annotationsAdded
@token to lexerUpdated parser to parse attributes before function declarations
Added parser unit tests for attribute parsing
Added assert functions to codegen with proper LLVM generation
Added
lsp.rsmodule with tower-lsp integrationAdded fuzzy string matching for error suggestions
Updated
import_check.rswith suggestion engine
v1.3.1
Import System Fixes
Feb 22, 2026
Bug Fixes
Large section hidden by default to keep the page readable.
- Wildcard Imports for Stdlib: Fixed wildcard imports (
import std.io.*;) not properly importing stdlib functions likeprintln,print. - Duplicate Import Check: Fixed duplicate import validation in multi-file projects where imports were checked twice (once during analysis, once during compilation).
- Examples Updated: Added missing
import std.io.*;andimport std.string.*;statements to multi-file project examples.
Technical
Large section hidden by default to keep the page readable.
import_check.rs: Added stdlib function resolution for wildcard importsmain.rs: Skip redundant import check during compilation phase (already done in analysis phase)- All examples now properly import required modules
- Full
cargo fmtandcargo clippycompliance
v1.3.0
Multi-File & Namespace System
Feb 21, 2026
Major Release: Complete Project System
This release introduces a complete multi-file project system with Java-style namespaces and mandatory imports.
Configuration
- arden.toml Format:
name = "my_project" version = "1.0.0" entry = "src/main.arden" files = ["src/utils.arden", "src/main.arden"] output = "my_project" opt_level = "3"
Documentation
Large section hidden by default to keep the page readable.
- Added comprehensive multi-file project documentation
- New example:
examples/multi_file_project/ - Updated test suite to include multi-file project testing
Technical
Large section hidden by default to keep the page readable.
- Added
namespace.rs- Namespace resolution system - Added
import_check.rs- Import validation with helpful error messages - Added
project.rs- Project configuration management - Updated lexer with
Package,Import,Startokens - Updated parser for package/import syntax
- CI workflow tests all 32 examples including multi-file projects
- Full clippy compliance, cargo fmt applied
New Features
Large section hidden by default to keep the page readable.
Multi-File Project Support: Arden now supports organizing code into projects with multiple source files.
- Project configuration via
arden.toml - New CLI commands:
arden new,arden build,arden run,arden info - Automatic merging and compilation of multiple source files
- Entry point configuration for main function location
- Project configuration via
Project Commands:
arden new <name>- Create a new project with standard structurearden build- Build current projectarden run- Build and run current projectarden info- Display project informationarden check [file]- Check project or specific file
Behavior Changes
Large section hidden by default to keep the page readable.
- BREAKING: Functions from other files are NOT automatically available
- Must use
import namespace.function;orimport namespace.*; - Same-namespace functions work without imports (local scope)
- Functions without package declaration are in
globalnamespace
v1.2.0
Performance Push & Codegen Refactor
Feb 21, 2026
Focused on making native output materially faster while breaking the original codegen monolith into modules that were easier to maintain and extend.
Performance & Optimization
Large section hidden by default to keep the page readable.
- LLVM Aggressive Optimizations: Switched from
OptimizationLevel::DefaulttoOptimizationLevel::Aggressivefor maximum performance. - Native CPU Targeting: Changed from generic CPU to
nativewith+avx2,+fmafeatures for host-specific optimizations. - Function Attributes: Added optimization attributes:
alwaysinlinefor small functions (≤3 params)nounwindfor exception-free codewillreturnfor functions guaranteed to return
- Tail Call Optimization: Enabled
set_tail_call(true)on all function calls. - Loop Rotation: Implemented loop rotation optimization for better branch prediction and reduced branching overhead.
Fixed
- LLVM Attribute Errors: Removed problematic attributes (
uwtable,call_convention) causing Clang failures. - Code Formatting: Applied
cargo fmtacross entire codebase.
Benchmarks
Large section hidden by default to keep the page readable.
- Fibonacci(35): ~0.12s (comparable to C/Rust)
- Prime Sieve: ~0.08s (faster than C/Rust!)
- Overall Speedup: 3x faster than original implementation
Code Refactoring
Large section hidden by default to keep the page readable.
- Modular Architecture: Split monolithic
codegen.rs(6666 lines) into focused modules:codegen/core.rs(3876 lines): Main codegen logiccodegen/types.rs(1590 lines): Built-in type implementationscodegen/util.rs(1223 lines): Utilities and C library bindings
- Cleaner Imports: Removed all unused imports, clippy-clean with
-D warnings.
v1.1.4
Stdlib Expansion & Runtime Utilities
Dec 29, 2025
This release substantially widened the built-in runtime surface with arguments, time, string helpers, and system integration primitives.
Added
Large section hidden by default to keep the page readable.
- Args Module: Introduced support for command-line arguments via the
Argsobject.Args.count(): Returns the number of arguments.Args.get(index): Retrieves a specific argument.
- Str Module: Introduced the
Strstatic object for string manipulation (renamed fromStringto avoid type name collisions).Str.len(s): Get string length.Str.compare(a, b): Compare two strings.Str.concat(a, b): Concatenate two strings.Str.upper(s): Convert to uppercase (stub).Str.lower(s): Convert to lowercase.Str.trim(s): Remove leading/trailing whitespace.Str.contains(s, sub): Check if string contains substring.Str.startsWith(s, pre): Check if string starts with prefix.Str.endsWith(s, suf): Check if string ends with suffix.
- System Module Improvements:
System.getenv(name): Get environment variables.System.shell(cmd): Run shell command (exit code).System.exec(cmd): Run shell command and capture stdout.System.cwd(): Get current working directory.System.os(): Get operating system name.System.exit(code): Terminate program with exit code.
- Math Module Improvements: Added
Math.pi(),Math.e(), andMath.random(). - Time Module: Added native support for time-related operations.
Time.now(format): Returns formatted local time.Time.unix(): Returns raw Unix timestamp.Time.sleep(ms): Suspends program execution.
- List Improvements:
List.pop(): Remove and return the last element.
- New Examples: Added
19_time.arden,20_system.arden,21_conversions.arden,22_args.arden,23_str_utils.arden.
Changed
Large section hidden by default to keep the page readable.
- Math Unification: All mathematical functions (sqrt, sin, abs, etc.) now require the
Math.prefix for consistency and better namespacing. - Improved For Loops: Loop ranges now support variables (e.g.,
for (i in 0..count)), allowing for dynamic iteration. - Standard Library Expansion: Continued efforts to expand the builtin library capabilities.
Fixed
- Boolean String Conversion:
to_string(bool)now correctly returns "true" or "false" instead of garbage values.
v1.1.3
File I/O & Example Coverage
Dec 29, 2025
The focus here was practical scripting support: file operations, better examples, and the first dedicated example verification flow.
Added
Large section hidden by default to keep the page readable.
- File I/O Support: Added native support for file system operations via the
Filestatic object.File.read(path): Reads entire file to String.File.write(path, content): Writes content to file.File.exists(path): Checks for file existence.File.delete(path): Deletes a file.
- New Examples: Added
18_file_io.ardenandapp_notes.ardendemonstrating file system interactions. - Test Infrastructure: Added
test_examples.batfor automated verification of all example programs.
Changed
- Standard Library Ownership: Relaxed borrow checker rules for standard library functions (
strlen,println, etc.). These functions now borrow their arguments instead of consuming them, allowing variables to be reused after being printed or measured. - Compiler Intrinsics: Optimized C binding generation for standard library calls in the LLVM backend.
Fixed
- Borrow Checker: Fixed a bug where standard library calls would incorrectly mark string variables as moved.
v1.1.2
Runtime Stability Fixes
Dec 28, 2025
This patch concentrated on correctness issues in generated LLVM and container behavior, especially around List handling and match lowering.
Fixed
Large section hidden by default to keep the page readable.
- Critical Runtime Crash: Fixed a bug where classes starting with "List" (e.g.,
ListNode) were incorrectly compiled as generic lists, causing stack corruption and runtime crashes. - List.set(): Implemented missing
set(index, value)method forList<T>in codegen. - Match Statements: Fixed invalid LLVM IR generation (orphan blocks) for
matchstatements. - Clippy Warnings: Resolved
collapsible_matchand other lints incodegen.rs.
v1.1.1
Documentation Rebuild
Dec 27, 2025
This release reorganized the project’s docs into a real documentation tree and turned the repository root into a cleaner entry point.
Major Changes
- Complete Documentation Refactor: The documentation has been completely overhauled and moved to a dedicated
docs/directory. - Simplified README:
README.mdis now a clean entry point, linking to specific documentation sections.
Changed
- CONTRIBUTING.md: Updated contribution guidelines to reflect the new project structure and documentation workflow.
- README.md: Removed monolithic content and replaced it with an organized index of links.
Added
Large section hidden by default to keep the page readable.
- New Documentation Structure:
docs/getting_started/: Installation, Quick Start (Hello World), Editor Setup.docs/basics/: Syntax, Variables, Types, Control Flow.docs/features/: Functions, Classes, Interfaces, Enums, Modules.docs/advanced/: Ownership, Generics, Async/Await, Error Handling, Memory Management.docs/stdlib/: Standard Library Overview (Math, String).docs/compiler/: CLI Reference, Architecture internals.
- Changelog: Added
changelogs.mdto track project history.