Skip to content

Releases: odin-lang/Odin

dev-2026-01

05 Jan 15:48

Choose a tag to compare

New Language Features

New Compiler Improvements

  • Undetected type declaration cycles work-around
  • Fix misleading error messages for init, fini and test attributes
  • Fix automatic objc_msgSend on static methods via selector expression not resolving aliased types
  • Fix #packed #all_or_none
  • Fix auto objc_msgSend incorrectly treating certain class methods as instance methods.
  • Fix handling of #force_inline
  • Fix literal endianness

New Packages

Package Improvements

  • Fix duplicate jpeg.load on JS
  • Added more NSApplication and NSWindow bindings
  • Update kb_text_shape to v2.03
  • Fix default temp allocator underflow bug
  • SDL2: Use multi-pointer so you can pass array
  • Fix function signature for memmove in vendor:libc
  • Freebsd: Fixed 'write' syscall to cause 'ESPIPE' on the pipe fd
  • Update Box2d to 3.1.1
  • Fix core:debug/trace example
  • Make linux.IO_Vec.base a multipointer
  • Ensure libc is linked on Windows for vendor:compress/lz4
  • Change Return Type of sdl2.GetWindowFlags from u32 to Existing WindowFlags bit_set
  • Fix minor issues within curl bindings
  • core:time/timezone added additional search paths to match musl
  • More bindings for Darwin
  • Add @builtin to missing builtin procedure group procs
  • os/os2: fix stale errors on windows when reading from console
  • os/os2: better fix for the stale errors
  • Fix runtime.print_i64 using an OOB index when min(i64) is given.
  • os/os2: use ReadFile for Console reads too, at least for now
  • core:sys/linux Add timerfd syscall wrappers
  • Fix nfds_t alias for Linux
  • core:io/utils: fix buffer size in write_* procs
  • core:net docs: recv of 0 bytes with no error is a graceful close
  • core:math/rand small documentation fix
  • Address issue identifying CDATA in XML file
  • encoding/base32: Fix padding validation for malformed input
  • Fix standard json parsing / unmarshalling issue for pure arrays
  • Add user32 scroll bar related bindings, and FrameRect
  • Add missing 'caller_location' to several procedures in 'slice' package
  • Update letter.odin
  • WebGL binding additions
  • Add JSON5/SJSON Comments When Marshalling
  • Fix Unicode Output When Marshalling JSON
  • Allow Unmarshalling to rune
  • Custom json (un)marshalling, similar to core:fmt's custom formatters
  • Fix net.map_to_ip6 offset
  • [vendor/sdl3] update to sdl 3.4.0

Other

Full Changelog: dev-2025-12a...dev-2026-01

dev-2025-12a

04 Dec 14:30

Choose a tag to compare

New Language Features

New Compiler Improvements

  • Fix duplicate code emission in type assertions.

New Packages

Package Improvements

  • core:os/os2: Fix #5873
  • Replace cURL library for Windows with one built against msvcrt
  • Update cURL bindings to 8.17

Full Changelog: dev-2025-12...dev-2025-12a

dev-2025-12

02 Dec 11:15
b277d66

Choose a tag to compare

Breaking changes

  • BREAKING: Use chacha8rand as the default RNG.

The old default generator is available under core:math/rand in rand_pcg.odin in case you require a seed to return the same sequence as before.

New Language Features

  • Introduce #all_or_none for structs, which requires that struct literals have all or none of the fields set

New Compiler Improvements

  • Use SIP hash as name canonicalization hash
  • Moved checking of -vet-unused-procedures and -vet-packages flags to after all flags are parsed
  • Fixes for 32 bit with regards to typeid
  • Fix #5894
  • Remove #no_copy
  • Don't check proc signature similarity for imported Objective-C methods
  • Ubuntu arm ci and posix fixes
  • Fix allocation of anonymous globals
  • Fix #5967: Incorrect stack overflow warning for by ref switches over unions
  • Skip collision panic when package names aren't unique

New Packages

  • Add vendor:curl

Package Improvements

  • Improve docs for stable sort procedures
  • Fix: linalg.quaternion_from_forward_and_up
  • Clone unquoted strings in encoding/json
  • Add missing SetLayeredWindowAttributes
  • Add io uring API
  • Add FreeLibraryAndExitThread in kernel32. Add EnumProcessModules in psapi
  • Fix typo in NS.String_initWithCString
  • Remove the Darwin-specific paths from thread_unix
  • Fix thread_act_t size
  • Fix: make choice_bit_set respect bit_set domain
  • math/rand: Add range-based number generation procedures
  • Fix is_pointer_internally not handling Named Types
  • Faster big.itoa
  • Add Xoshiro256 RNG
  • Add LockFileEx/UnlockFileEx and related flags
  • Fix vendor:stb/image resize alpha_channel parameter type to c.int
  • Move some OS General_Error values to io.Error
  • Fix out of bounds access when parsing end_pos
  • Add WSASendTo and WSARecvFrom
  • Update d3d12 bindings for D3D12_FEATURE_D3D12_TIGHT_ALIGNMENT
  • Add NSWindow coordinate space conversion bindings
  • Don't build log allocator file on freestanding targets
  • Adjust docs links for satellite SDL libraries
  • Increase base64 decoding table size to 256, preventing out of bounds reads
  • vendor/xlib: a few more IM-related procedures and constants
  • add math.sign and math.sign_bit overloads for int types
  • Implement more Linux syscalls
  • Add SIO_UDP_CONNRESET winsock constant
  • os2.File_Stream

Other

  • Fix up macOS CI

Full Changelog: dev-2025-11...dev-2025-12

dev-2025-11

04 Nov 14:28
e5153a9

Choose a tag to compare

Licensing Changes

  • Change Odin's LICENSE to zlib from BSD 3-clause

New Language Features

  • intrinsics.concatenate
    • Concatentation of constant slices, strings, and some arrays at compile time
  • intrinsics.objc_super & @(objc_superclass=<type>)

New Compiler Improvements

  • Objective-C interface improvements
    • intrinsics.objc_super and automatically emit objc_msgSend calls where necessary for @(objc_superclass) attribute
    • Fix block symbols naming conflict across modules
  • LLVM backend fixes
    • #simd vector only uses bit cast when elements are not pointers
    • Fix bitcasting context pointer to prevent compilation errors on LLVM-14
    • Numerous constant union improvements
    • Prefer the Type * ver LLVMTypeRef when looking up struct_field_remapping due to lack of uniqueness
  • Default parameter exclusion counting improvement for procedure groups
  • Improved -target-features flag by allow the user to disable a target feature
    • -target-features:-sse,-sse2,-avx
  • -export-linked-libs-file:<string> flag to export the linked libraries to a file
  • Fix a few compiler hangs on macOS.
  • LLVM 21 support for non-Windows platforms
  • Fix: #load alignment bug
    • set minimum alignment to 16-bytes
  • Fix orca linking path
  • Add #subtype/using to name canonicalization rules
  • Numerous frontend bugs fixed

New Packages

Package Improvements

  • More documentation improvements across the core library
  • General improvements and more documentation for core:os/os2
  • Add inject_at_soa and append_nothing_soa
  • vendor:wgpu update to 27.0.2.0
  • core:unicode/utf8: Add Grapheme_Iterator
  • New slice.sort implementation to allow for better code generation and general API
  • Deprecate the C style procedures in strconv (e.g. iota, atoi, etc`)
  • WASM: Fix odin.js undefined this.mem
  • Fix sRGB <-> linear RGB conversion
  • core:encoding/json fixes
    • Fix null parsing in certain cases
  • core:encoding/cbor: Fix epoch tag with small values
  • core:container/rbtree add find_or_insert
  • Fix bindings generator for vendor:vulkan for extensions and ~0 style constants
  • Disable bounds checking where appropriate for Unicode and UTF-8 procedures
  • vendor:fontstash: Fix crash with .TTC files
  • core:simd : Fix incorrectly named calls in bit_not
  • vendor:sdl3: Add PointInRectFloat
  • vendor/egl
    • add a few more procedures and constants
    • Fix GetPlatformDisplay and CreatePlatformWindowSurface to use int instead of i32
  • vendor:box2d
    • fixes to bindings mismatches
    • Add targetAngle to RevoluteJoint struct/procs
  • core:odin/parser
    • fixes for end_pos
    • parse empty identifiers after selector as a selector expression with an empty field
  • core:hash: add CCITT CRC-16
  • Make packed conditional on EPoll_Event to match kernel
  • core:math/linalg/hlsl: support half types
  • core:math/ease: Add inverse ease procedures
  • vendor:raylib: add MAX_MATERIAL_MAPS constant
  • core:sys/darwin/Foundation: add additional AppKit bindings
  • core:text/scanner allow for octal prefix style parsing for C-style ints

Full Changelog: dev-2025-10...dev-2025-11

dev-2025-10

05 Oct 11:22
3ad7240

Choose a tag to compare

New Language Features

New Compiler Improvements

  • Improve type inferencing of literals when calling proc groups
  • Windows i386 support
  • Fix Darwin addObserver methods and add support for new Objc_Block
  • Fix segfault involving string_to_string16 on Linux
  • Improve OSX threading performance
  • Basic support for constant union literals
  • Add -build-diagnostics
  • Prevent returning a struct containing compound literal slice
  • Relax signature_parameter_similar_enough on struct params and fix various foreign signatures
  • Preempt field checking on signature_parameter_similar_enough with a type ptr equality check
  • Remove stray debug printf

New Packages

  • [core/image]: Add baseline JPEG support

Package Improvements

  • Use .Image_Dimensions_Too_Large in core:image
  • tick_now: Use f64 (was f32) as a return type of odin_env.tick_now()
  • Allow missing trailing comma with proc groups in core:odin parser
  • Fix incorrect json encoding for control characters < 32
  • Initializing big.Int constants is now "contextless"
  • Add CancelIoEx and other overlapped I/O functions.
  • Add missing caller location param to append in strings.Builder
  • Add "contextless" to small_array get_safe and get_ptr_safe
  • Zero small_array resize
  • Unify filepath.join return between Unix/Windows
  • Fix out-of-band allocations in dynamic arenas by
  • Fix for temp_file name prefix being deallocated before being used
  • Add runtime.conditional_mem_zero to improve heap_allocator performance on non-Windows systems
  • Add digit_to_int to core:strconv
  • Remove inaccurate tprint comment

Full Changelog: dev-2025-09...dev-2025-10

dev-2025-09

08 Sep 12:15
42c2cb8

Choose a tag to compare

New Language Features

  • Native support for UTF-16 strings: string16 and cstring16
    • Mostly for interfacing with Windows code, and other foreign code
  • Define Integer Division By Zero #5556

New Compiler Improvements

  • @(init) and @(fini) must be proc "contextless" ()
  • Implement intrinsics.objc_block @harold-b in #5547
    • Implements the Apple block ABI.2010.3.16 natively
  • Improve deference missing suggestion message
  • Do not check for explicit allocators when determining proc in proc group by @janga-perlind in #5564
  • Skip errors on polymorphic procs when in a proc group with other options
  • Fix compiler segfault when trying to use proc at type level or trying to use () as a type

New Packages

Package Improvements

  • Fixes to vendor:darwin/Metal
  • Numerous minor fixes to base:runtime
  • Improvements to base:runtime docs
  • Fixes to vendor:wasm/WebGL bindings
  • Cleanup in math/rand and runtime/random_generator
  • Add missing xlib functions for getting and setting text properties
  • vendor:OpenGL fix misnamed parameter by
  • Make D3D12_FEATURE_DATA_D3D12_OPTIONS.MinPrecisionSupport a bitset
  • Fix buddy allocator assert
  • Check for EOF when scanning file tags
  • Fix stride in memory_equal/compare_zero giving false positves
  • Split SDL_ttf bindings to group with and without require_results
  • Propogate #caller_location to core:container/queue procs
  • Support using allocator resize in _reserve_soa
  • Zero existing memory when using resize_soa
  • Add add/remove_document_event_listener() to core:sys/wasm/js
  • Fixed and added obj-c methods for NSWindow
  • fix typo in CLSIDFromProgIDEx signature
  • Fix broken wglUseFontBitmaps binding
  • Add LPFN_GETACCEPTEXSOCKADDRS to ws2_32.odin
  • Specify %m and %M as verbs for integer formatting in core:fmt
  • Add @(require_results) attribute to procs returning an allocator
  • Handle allocator error when appending in read_entire_file_from_file
  • vendor:box2d fix CreateMotorJoint procedure signature
  • Add build tags to posix/spawn.odin

Full Changelog: dev-2025-08...dev-2025-09

dev-2025-08

05 Aug 13:02

Choose a tag to compare

New Language Features

New Compiler Improvements

  • General compiler bug fixes
  • intrinsics.type_enum_is_contiguous
  • intrinsics.simd_runtime_swizzle
  • Add iOS and iPhoneSimulator subtargets for -target:darwin
  • Fix @(objc_implement) methods not respecting @(objc_is_class_method)
  • @(objc_name) attribute be inferrable
  • Add Did you mean? for card/len
  • #+vet explicit-allocators
  • Saner stack linker flags for WASM
  • Fix macos amd64 builds
  • amd64 ABI fixes regarding certain types of SIMD vectors

New Packages

Package Improvements

  • Update core:prof/spall to version 3
    • Adds @(no_instrumentation) to spall buffer and SCOPED operations
  • core:hash/xxhash: Static SIMD Support for XXH3
  • Minor fixes to core:mem/virtual edge cases
  • Unix build script for kb_text_shape
  • Add IUnknown UUID for win32 related code
  • crypto/hash: hash_bytes_to_buffer slice result to digest size
  • Minor fix to -default-to-nil-allocator
  • Disable filepath/match.odin and filepath/walk.odin compilation on js targets
  • Minor fixes to SDL_image save procedure that should return a boolean
  • Mach Process Control
  • Fix amd64 no-crt entry assembly
  • Add cgltf filter type and wrap mode enums
  • SDL2 - AudioAllowChangeFlags bit_set
  • core:thread - set stack size to rlimit for *nix platforms

Full Changelog: dev-2025-07...dev-2025-08

dev-2025-07

09 Jul 15:55

Choose a tag to compare

New Language Features

  • Add intrinsics.type_is_bit_field
  • Add @(no_sanitize_memory) with additions to base:sanitizer

New Compiler Improvements

  • Correct spelling in odin doc -help output
  • Let -test-all-packages work with -build-mode:test
  • Fix package docs
  • Fix swizzle in for in statement
  • Fix divti3 not being exported
  • Fix scope attribute proc grouping
  • Forbid multiple uses of -sanitize
  • -vet-style: Be strict with type switch case column alignment
  • Let compound literal array be broadcast to a struct field of arrays
  • Packages with .odin in the name no longer attempt to parse as odin files
  • Let -no-entry-point work for Windows DLLs
  • Guard against invalid proc types in parameter list
  • Push context onto stack before evaluating procedure parameters
  • Consider custom #align when determining union tag size
  • Ensure volatile status for all atomic operations
  • Fix WASM C ABI for raw unions
  • Fix invalid selector for acceleration structure
  • Fix check_shift
  • Forbid nested declaration of instrumentation procedures
  • Fix bug where compiler treated uint enums as ints
  • Fix load type panic because front-end allows a deref of a type
  • Added options to show, obfuscate, trim, and hide source code locations
  • Various fixes

New Packages

  • vendor/kb_text_shape

Package Improvements

  • Add examples/all/sdl3 for all sdl3 dependant packages
  • Rewrite Atomic_RW_Mutex
  • Add overlapped I/O bindings for Windows
  • Allow odin check examples/all for js_wasm target
  • Guard against negative index in inject_at
  • Print timings to stderr instead of stdout
  • Change os2.user_* on Windows to use SHGetKnownFolderPath
  • Add core:os/os2 user dirs helper to retrieve common paths like Downloads, Videos, et al
  • Clarify strconv.append_* to strconv.write_*
  • Remove old @(deprecated) things.
  • DXC: Fixed broken bindings of ICompiler and ICompiler2
  • Fix GMT+/- timezone handling
  • Clarify core:flags variadic behaviors
  • Move core:math/bΓ¬g tests over to core:testing instead of using Python3 as an oracle
  • Add initial tests for big rationals
  • Sync chan refactor
  • Replace core:posix usage in core:os/os2
  • compat allocator improvements
  • Fix pool_join hangs if no threads are started
  • Fix early join after start
  • Expose getpeername in core:net package as peer_endpoint
  • Let tests expect assertion failures and signals raised
  • Get env buffer
  • Allow core:net to be imported with -default-to-panic-allocator
  • Update vendor:sdl3 from 3.2.10 to 3.2.16, and vendor:sdl3/image from 3.2.0 to 3.2.4
  • More Buddy_Allocator safeguards
  • Fix RegEx docs
  • Added TIOCGWINSZ to darwin, linux and freebsd
  • Escape object file paths properly during linker_stage
  • Fix try_send and send
  • Added IS_SUPPORTED to core:sys/posix
  • Fix issue parsing vendor/stb/image with the core:odin/parser parser
  • Fix memory leak in core:math/big.internal_rat_norm
  • raylib: Refer to Odin-style enum over original C enum
  • sys/linux: Unify IPC_Flags and IPC_Mode bit_sets
  • testing: Make test state changes its own feature
  • Add slice.suffix_length
  • Various fixes

Full Changelog: dev-2025-06...dev-2025-07

dev-2025-06

02 Jun 11:18
cd1f66e

Choose a tag to compare

New Language Features

New Compiler Improvements

  • Improvements to building with Android
  • Add more asan support to the odin runtime and sanitizing for various allocators
  • Fix to compile-time and variable NaN comparisons
  • Fix to syscalls on NetBSD ARM64
  • Fix Darwin version reporting on older macOS versions
  • General compiler bug fixes
  • intrinsics.type_elem_type(simd_vector)
  • Fix Global/Static Variable Alignment
  • Fixes assigning null as a type if it's an alias but the base type is null
  • @(no_sanitize_address)
  • Support Objective-C class implementation
  • Add debug info for labels to Odin
  • intrinsics.type_integer_to_unsigned and intrinsics.type_integer_to_signed
  • Use --sysroot instead of -Wl,-syslibroot on Darwin
  • Fix global and static any usage
  • Re-enable static map calls on AMD64 SysV due to ABI fixes
  • Make odin help more precise
  • -dynamic-literals
  • Do not call disabled deferred procedures
  • Add /usr/local/lib to FreeBSD linker path
  • Add error with a suggestion when trying to extract an element from a #simd array, and prefer simd.extract
  • Only trim .odin from build filename
  • Keep shared libraries from calling main program's startup/cleanup procs on Linux
  • Add -build-only, -keep-test-executable, delete test executable after running
  • Enable all sanitizers on FreeBSD
  • RAD Debugger support through custom .raddbg section
    • Default views for slices and matrices
  • Error on unterminated multi-line comment
  • Fix output of object names (#5241)
  • Add suggestions for quaternionN or complexN conversions

New Packages

  • base:sanitizer
  • vendor:windows/XAudio2
  • vendor:sdl3/ttf
  • core:terminal
  • core:encoding/ansi -> core:terminal/ansi

Package Improvements

  • Vectorize base:runtime.memory_*
  • core:net
    • Rework errors to be cross-platform
    • Replace default_tcp_options with a constant
  • core:container/small_array: Improve documentation for
  • core:sync/chan: Improve documentation
  • core:mem/tlsf: refactor, add free_all support, add automatic new pools
  • core:fmt: Fix printing for bit_set[Enum] when min(Enum) != 0
  • vendor/glfw
    • fix SetMonitorCallback and MonitorProc type definition
    • use b32 where appropriate
  • core:text/regex: Add iterator
  • core:math: Fix math.nextafter skipping from 0 to 1
  • vendor:wgpu:
    • Update to 25.0.2.1
    • Fix function name for wgpu.js genericGetAdapterInfo
    • Correct mipmpaFilter field name in wgpu.js
  • core:time/timezone: preserve nanoseconds on calls
  • vendor:box2d:
    • Update to 3.1.0
    • Add missing field in box2d.BodyDef
    • Make build_box2d.sh more flexible
  • core:container/priority_queue
    • let it return runtime.Allocator_Error
    • Fix off-by-one error in remove
  • core:sys/darwin/Foundation : Loads of additions and related stuff
  • vendor:sdl2: correct RWwrite signature
  • vendor:sdl3:
    • Fix count output parameter of GetFullscreenDisplayModes
    • Add Semaphore API
  • core:encoding/*, fix parsing of CDATA tags
  • core:time: add tick_add
  • core:encoding/cbor, fix slice overflow
  • core:os/os2: general improvements
  • vendor:wasm/WebGL: Fix incorrect parameter types
  • core:bufio: Fix typo from b.w-b.w to b.w-b.r
  • core:simd/x86: BMI/BMI2 intrinsics
  • base:intrinsics: alternate reduce_add/reduce_mul intrinsics
  • core:strconv, add support for hex-floats (0h)
  • vendor:raylib/rlgl add some missing functions
  • vendor:directx/d3d12
    • add more FEATURE_DATA_OPTIONs
    • Fix RESOURCE_STATE_ALL_SHADER_RESOURCE flags and add new HEAP_TYPE
  • core:encoding/json: when unmarshalling, only match on struct tags if present
  • vendor/miniaudio: update to 0.11.22
  • core:math/big: fix range check in int_atoi
  • Add comments to builtin.odin, documenting ODIN_* constants
  • vendor:windows/GameInput: fixes and tweaks
  • core:encoding/csv: Fix incorrect CSV reader settings for example
  • Vectorize strings.prefix_length

Full Changelog: dev-2025-04...dev-2025-06

dev-2025-04

03 Apr 16:08

Choose a tag to compare

New Language Features

New Compiler Improvements

  • Support LLVM 20.1
  • Fix Objective-C Selector and Class linking problems caused by a race condition
  • VERY Rudimentary support for Android:
    • -subtarget:android for -target:linux_arm64
  • Numerous js_wasm32 improvements
  • Add ~{memory} clobber to syscalls intrinsics
  • Improve or_else type inference logic
  • Use Microsoft's "best practices" for using vswhere
  • General Bug Fixes which caused compiler crashes

New Packages

Package Improvements

  • Update vendor:sdl3 to 3.2.10
  • core:crypto
    • General improvements
  • core:os/os2/path.odin rewrite from scratch
    • Improved Documentation
    • Remove dependency on core:path/filepath