Download Elements. A new build of Elements comes out every week. | RemObjects Software

Weekly Progress

Elements Channels

A new Elements build comes out every week. Pick the channel that matches how close to the edge you want to work.

Change Log

Loading change log…

Core

  • E27181: Debugger: possibility to edit value in Water debugger
  • Correct external method detection for Objective-C output signatures
  • Correct rejected exception filter handling by restarting the search through the normal rethrow path and marking the continuation unreachable.
  • Debugger: GetMembers exception if type is not resolved
  • Delphi Compatibility: $DELPHI ON mode could be missed with earlier fixed code
  • Delphi Compatibility: Accept array elements for Move() (takes address of the element; see also prior commits re Move)
  • Delphi Compatibility: Accept Pointer as a type in DCM mode without System unit being present (like other basic types; already in Echoes)
  • Delphi Compatibility: Add more Delphi hard cast support (Echoes is more limited, eg won't allow TClassType(Pointer))
  • Delphi Compatibility: Add new system intrinsics for RTTI info
  • Delphi Compatibility: Add support for Initialize and Finalize (living in the Delphi SDK)
  • Delphi Compatibility: Allow access casts (descendant used purely to view / get layout access, then cast through it)
  • Delphi Compatibility: Allow assigning record methods to a callback (procedural type) that has a Self param
  • Delphi Compatibility: Allow Currency (fixed-point type) to implicitly convert to floating point types in DCM mode (Delphi allows this, non-DCM Oxygene requires a cast)
  • Delphi Compatibility: Allow Delphi method-pointer typecasts to share TMethod Code/Data storage
  • Delphi Compatibility: Allow hard casts between unrelated types: TFoo(bar) where bar is TBar and not related
  • Delphi Compatibility: Allow named const sets as the RHS of 'in' (eg GetTypeKind(T) in MyTypes, or a literal set)
  • Delphi Compatibility: Allow passing method addresses to Pointer parameters
  • Delphi Compatibility: Allow records with Implicit(...): Pointer to convert to typed pointer targets
  • Delphi Compatibility: Allow resolution of Create as a non-constructor (static method, or free method) (followup to earlier commit re ancestor Create resolution)
  • Delphi Compatibility: Avoid showing "" in cast diagnostic
  • Delphi Compatibility: Classes with implicit TObject ancestry (but never explicitly stated) did not get the Delphi object model, when set as default
  • Delphi Compatibility: Close callable and const-borrow edge cases
  • Delphi Compatibility: DCP files can escape method names (eg &op_Equal) so unescape
  • Delphi Compatibility: DCP import: interfaced methods (eg Generics.Defaults.IComparer.Compare) had incorrect Self param. Requires re-importing FX files
  • Delphi Compatibility: Delphi allows pointers to be assigned to strongly typed object references. Also emit a warning; it is not safe.
  • Delphi Compatibility: Delphi defines: fix crash; sometimes some defines already exist
  • Delphi Compatibility: Delphi metaclasses did not expose constructors to create instances of the type
  • Delphi Compatibility: Derived overloads could hide ancestor members (eg, constructor Create, then in descendant, a Create method): these now resolve
  • Delphi Compatibility: E27625, allow TTask to be created with a block (already supported anon methods, closures, lambdas)
  • Delphi Compatibility: Expand atomic intrinsics
  • Delphi Compatibility: Extend existing support for addr-of inside a typed constant to local consts
  • Delphi Compatibility: Generic type calls identically named non-generic-type's static Create factory method (not constructor): ensure resolved correctly
  • Delphi Compatibility: Handle 'array of T' and 'TArray' as the same thing (one is aliased to the other); bare methods (no brackets) may or may not be called or assigned, match S4D expectations
  • Delphi Compatibility: Handle Delphi's array Slice(), which treats it as an open array, ptr+high (needs safe handling for Length() etc that cannot use any other array prelude or metadata)
  • Delphi Compatibility: If a property and method with the same name exist, allow the method to be called
  • Delphi Compatibility: Ignore imported FX defines with value 0 for IFDEFs
  • Delphi Compatibility: Implement all Delphi custom operator overloading
  • Delphi Compatibility: importing DCPs -> FX adds standard Delphi defines incl version-specific (CONSOLE is defined based on DCP and project settings though). VCL and FMX are defined when vcl and fmx packages are imported, etc
  • Delphi Compatibility: In DCM mode, allow Delphi raw Pointer parameters to match typed pointers
  • Delphi Compatibility: Inline declared method of object variables were not recognized as using the same code/data storage as normal event handler method pointers
  • Delphi Compatibility: Island: make TypeInfo(T).Kind match GetTypeKind(T) for local types
  • Delphi Compatibility: Island: preserve Delphi access-class hard casts
  • Delphi Compatibility: Keep DCM array of const distinct from array of Object
  • Delphi Compatibility: Keep non-DCM bare method auto-calls when another overload takes a single-method interface
  • Delphi Compatibility: Map DCM 'Create...' constructor calls to imported FX 'with...' constructor names (eg in Spring, EConvertError.CreateResFmt())
  • Delphi Compatibility: Oxygene: resolve imported constructor names such as withRes
  • Delphi Compatibility: Pass const-record fields to untyped const parameters without requiring writable owner storage
  • Delphi Compatibility: Procedures can now have a 'Result'-named parameter (previously errored that Result could not be assigned to)
  • Delphi Compatibility: Project importer adds default unit prefixes (with Delphi namespace)
  • Delphi Compatibility: Regard two identical array types as identical (also, address of an array and address of the first element can be compatible references)
  • Delphi Compatibility: Resolve Create ambiguity by constructor first, then static factory (eg TLookup.Create(comparer) vs Create(...))
  • Delphi Compatibility: Resolve identifiers for qualifier-style lookup only with DefaultUsesPrefix before symbols (System.foo is foo in System.pas, before resolving System() global)
  • Delphi Compatibility: Support Copy() inbuilt for arrays
  • Delphi Compatibility: Support casting pointers to fixed arrays (eg, pointer to array[0..5] of Type)
  • Delphi Compatibility: Support Delphi array-of-const calls to imported SDK methods, eg Exception.CreateFmt('%s', ['value'] - build TVarRec[] plus hidden High(Args) param
  • Delphi Compatibility: Support Delphi GetMem/FreeMem/ReallocMem memory built-ins
  • Delphi Compatibility: Support Delphi l-value typecasts like "PHashTable(foo) := p"
  • Delphi Compatibility: Support Delphi New/Dispose memory built-ins (eg &New(p) / Dispose(p), with TypeInfo(P^) when needed)
  • Delphi Compatibility: Support Delphi variant (union) records (union at any location in the record, managed types not supported inside a union (same as Delphi))
  • Delphi Compatibility: Support imported FX reference-to-function anonymous-method types as callable values (eg TFunc = reference to function: TResult)
  • Delphi Compatibility: Support PByte(ptr)[offset] when calling Move() (handle typed pointer (array) derefs as addresses passed to untyped, ie ^Void, params)
  • Delphi Compatibility: Support untyped const params (seen but not isolated to generic methods, used in Spring Weak)
  • Delphi Compatibility: Treat generic procedure-of-object aliases as Delphi method pointers (eg TNotifyEvent(fInvoke) := Invoke / Result := TNotifyEvent(inherited Invoke))
  • Delphi Compatibility: Write-only properties of a method type (foo.OnChanged := EventChanged) did not resolve the type so treated the method name as a method call
  • Delphi Compatibility: {ass hard-casts into var/out params (ensures the cast does not create a temporary but uses the original storage)
  • Fix Cocoa exception helper binding by separating Island wrappers, resolving the Cocoa exception type, and preserving correct temporary initialization.
  • Fix membership comparisons to honor overloaded equality for reference types & preserve single evaluation and nil handling
  • Island backend: fix IR model validation (set Void type on method-prefix inline asm (returning void) metadata)
  • Island backend: In debug mode, validate IR model before serialization
  • Island backend: Map WeakAttribute to Weak, not NoReturn
  • Island backend: When an object file write/emit task fails, wait so that the exception is seen
  • Island/Delphi: Add manual TInterfacedObject Windows probe
  • Island/Delphi: Fix Delphi TArray pointer FX handling
  • Island/Delphi: Fix hidden-result LLVM invalid record regression
  • Map compiler member access values to Island reflection metadata
  • Regression: Fix inherited Cocoa extension constructor dispatch to pass the object receiver instead of an objc_super record, with a Darwin regression test for inherited construction.
  • Toogee Global Mangling: Preserve foreign signatures for external global methods
  • Merged EUnit
  • Merged Everwood5
  • Merged IslandDelphi
  • Merged IslandRTL
  • Merged RTL2

Fire & Water

  • Add built-in documentation knowledge bases
  • Allow dotted project template names
  • Fire is now arm64-only (still supports developing for x64)
  • Guard newly created file selection
  • Guard shared project reference updates
  • Handle missing skill selections when preparing CodeBot approvals
  • Harden account persistence against incomplete loads
  • Propagate scheduled-run skill context
  • Remove Ionic.Zip dependency from knowledgebase tests and shared projects
  • Render concurrent interactive prompts
  • Retain debug canvas during stepping
  • Show API key verification errors when adding accounts
  • Water: layout tweak for busy CodeBot chat field

Earth Preview

  • Earth: Normalize C.UTF-8 sentinel locales for Mono launches
  • Implement a WSLg-safe themed in-window menu

CodeBot

  • Expose MCP tools for scheduled agent runs
  • Expose selectable runtime destinations to CodeBot
  • Forward background media progress to the workspace UI
  • GPT-6 Astra support: asynchronous tools
  • Improve CodeBot question color contrast
  • Improve CodeBot skill loading diagnostics
  • Message fix

Campfire

  • Close image workbench with Cmd-W
  • Defer application termination until workspace shutdown completes
  • Fix for NRE when generating image w/o suggested path
  • Fix welcome message
  • Improve media model matching for provider-qualified and workflow master model requests
  • Improve media model selection and discovery
  • Improved new workspace creation flow
  • Invert generated image mask luminance for OpenAI
  • Keep saved media models usable during discovery
  • More compact ArcFace comparison results
  • Route new documents through the workspace document controller and simplify document menu configuration
  • Show transparency grids only for transparent images

GitBrowser

  • Add conflict summary action to explanation sheets
  • GitBroser/Mac: Improve branch toolbar controls for macOS 27
  • GitBrowser/Linux: Launch terminal executables on the Flatpak host
  • GitBrowser/Linux: remove repository doesn't refresh Commits and Files lists
  • GitBrowser/Windows: Add magnifying glass for the Search box
  • GitBrowser/Windows: Refresh repository state after external Git updates
  • Improve merge conflict actions with explicit options and Commit Merge support
  • Open existing pull or merge requests directly
  • Optimize syntax state propagation across comparison chunks
  • Show conflicted file in suggestion explanations
  • Stabilize branch popup refreshes

Elements RTL

  • Add Dictionary.ToList to return key-value pairs from the dictionary sequence
  • Fixes for Afterhours reports: Fix invariant date parsing and formatting across platforms, standardize UTC calendar component extraction, and improve Toffee locale-aware numeric and percentage formatting.
  • Optimize broadcast subscription removal with receiver-based indexing and centralized cleanup logic
  • Use cancellable NSURLSession transport for synchronous HTTP requests, enabling cancellation and timeout handling during response header and body waits.

Island RTL

  • Darwin: use DISPATCHTIMEFOREVER for non-repeating timers
  • Expand exception filter tests to verify outer propagation, interface mismatches, and exactly-once finally execution
  • Fix EventWaitHandle timed waits and add comprehensive signal/reset behavior tests
  • Fix locale-aware date parsing and expand two-digit year token handling

Island Delphi Support

  • Restore missing Delphi intrinsics in IslandDelphi