github odin-lang/Odin dev-2026-03

5 hours ago

BREAKING Changes

  • core:os has been replaced with our newly improved and rewritten v2, previously available at core:os/os2. The old core:os implementation will remain available at core:os/old until sometime in Q3 of 2026.

  • core:sys/info previously retrieved all information before main was entered, using @(init), and exposed everything via globals. It now gathers more information on demand, and returns everything via accessors for a consistent API. Where practical - like cpu name + features - those values will be cached.

New Language Features

  • for init; x in y {} style loops

New Compiler Improvements

  • Stop silently ignoring unknown directives on an inline asm expression
  • Do not allow duplicated #partial directives on switch statements
  • Add broadcasting to strings (Fix #1837)
  • Improve LLVM version picking
  • Fix name canonicalization for typed ranges in bit_set
  • Fix bit_set parapoly specialization
  • Fix separating of diverging procedure types from block statements
  • Update Type_Info_Bit_Set to always record underlying type. Add runtime.type_info_underlying
  • Fix #6347
  • Fix #6270

New Packages

  • core:crypto/ecdsa: Add ECDSA support

Package Improvements

  • [BREAKING] core:os/os2 -> core:os integration
  • [BREAKING] core:sys/info: Change API from globals to calls. Do as little work in @(init) as practical.
  • Allow test names to be specified as a command line option for tests executable
  • vendor:x11/xlib: Fix signature of XChangeWindowAttributes
  • vendor:directx/d3d12: Added IGraphicsCommandList7 and fix access violation errors
  • Minimize some internal depencies in the core packages, e.g. don't import core:mem just for mem.Allocator_Error
  • vendor:box2d: Fix and try Git LFS
  • core:log: Add support for js/wasm
  • core:container/xar: Fixes and improvements
  • core:container/pool: Fix parapoly type inference around address sanitization when using multiple Pool types
  • core:container/handle_map: Improvement
  • demo.odin Fix cross_3d typo
  • core:encoding/hex: Add uppercase encoding
  • core:bytes: Update comment on compare; add additional caller location propagation
  • core:math/big: Clean up
  • core:os: Fix silent failure in os.replace_path_separators if the separator was multi-byte
  • Add additional tests
  • core:sys/es: Fix build errors
  • core:unicode/utf8: Fix utf-8 validation
  • Vendor Wycheproof cryptographic tests under tests/core/
  • Propagate allocator errors from certain unicode functions
  • Fix some tools and examples after core:os update and using-stmt feature
  • Fix typo in atomic.odin documentation
  • core:os: Remove process_close and add process_terminate
  • core:time: Correct 12-hour clock string
  • Update Unicode specification
  • vendor:curl: Fix what argument for url_set
  • Small optimization for dynamic arrays
  • vendor:miniaudio: Upgrade to 0.11.24
  • core:container/priority_queue: Add example and tests
  • core:text/regex: Fix \b handling in iterator
  • vendor:sdl3: Update to 3.4.2
  • Add bindings to allow custom hardware cursors
  • core:nbio: Fix op reuse
  • core:strings: Fix substring not returning end of range
  • core:sys/windows: Add more win32 API bindings
  • core:sys/windows: Fix incorrect PVOID/VOID use in some signatures
  • core:sys/windows: Tighten up MultiByteToWideChar usage in utf8_to_wstring_buf
  • vendor:stb/vorbis: Remove unnecessary core:c/libc import
  • vendor:wasm/WebGL: Add bindings, fix Tex*Image*D
  • core:os: Return .Permission_Denied for .EACCES in Posix and Linux
  • core:crypto/_blake2: Fix final blocks call with partial block
  • Kill deprecated file tags and fix assignment of package docs

Full Change Log

Full Changelog: dev-2026-02...dev-2026-03

Don't miss a new Odin release

NewReleases is sending notifications on new releases.