Releases: odin-lang/Odin
Releases Β· odin-lang/Odin
dev-2026-01
New Language Features
New Compiler Improvements
- Undetected type declaration cycles work-around
- Fix misleading error messages for
init,finiandtestattributes - Fix automatic
objc_msgSendon static methods via selector expression not resolving aliased types - Fix
#packed #all_or_none - Fix auto
objc_msgSendincorrectly treating certain class methods as instance methods. - Fix handling of
#force_inline - Fix literal endianness
New Packages
core:container/xar, an Odin-native implementation of an Exponential Array
Package Improvements
- Fix duplicate
jpeg.loadon JS - Added more
NSApplicationandNSWindowbindings - Update
kb_text_shapeto 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
Box2dto 3.1.1 - Fix
core:debug/traceexample - Make
linux.IO_Vec.basea multipointer - Ensure libc is linked on Windows for
vendor:compress/lz4 - Change Return Type of
sdl2.GetWindowFlagsfromu32to ExistingWindowFlagsbit_set - Fix minor issues within
curlbindings core:time/timezoneadded additional search paths to match musl- More bindings for Darwin
- Add
@builtinto 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_i64using an OOB index whenmin(i64)is given. - os/os2: use ReadFile for Console reads too, at least for now
- core:sys/linux Add timerfd syscall wrappers
- Fix
nfds_talias for Linux core:io/utils: fix buffer size inwrite_*procscore:netdocs: recv of 0 bytes with no error is a graceful closecore:math/randsmall 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_ip6offset - [vendor/sdl3] update to sdl 3.4.0
Other
Full Changelog: dev-2025-12a...dev-2026-01
dev-2025-12a
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
Breaking changes
- BREAKING: Use
chacha8randas 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_nonefor 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-proceduresand-vet-packagesflags 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
FreeLibraryAndExitThreadin kernel32. AddEnumProcessModulesin psapi - Fix typo in
NS.String_initWithCString - Remove the Darwin-specific paths from
thread_unix - Fix
thread_act_tsize - Fix: make
choice_bit_setrespectbit_setdomain math/rand: Add range-based number generation procedures- Fix
is_pointer_internallynot handling Named Types - Faster
big.itoa - Add Xoshiro256 RNG
- Add
LockFileEx/UnlockFileExand related flags - Fix
vendor:stb/imageresizealpha_channelparameter type toc.int - Move some OS
General_Errorvalues toio.Error - Fix out of bounds access when parsing end_pos
- Add
WSASendToandWSARecvFrom - Update
d3d12bindings forD3D12_FEATURE_D3D12_TIGHT_ALIGNMENT - Add
NSWindowcoordinate space conversion bindings - Don't build log allocator file on freestanding targets
- Adjust docs links for satellite SDL libraries
- Increase
base64decoding table size to 256, preventing out of bounds reads vendor/xlib: a few more IM-related procedures and constants- add
math.signandmath.sign_bitoverloads for int types - Implement more Linux syscalls
- Add
SIO_UDP_CONNRESETwinsock constant os2.File_Stream
Other
- Fix up macOS CI
Full Changelog: dev-2025-11...dev-2025-12
dev-2025-11
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_superand automatically emitobjc_msgSendcalls where necessary for@(objc_superclass)attribute- Fix block symbols naming conflict across modules
- LLVM backend fixes
#simdvector only uses bit cast when elements are not pointers- Fix bitcasting
contextpointer to prevent compilation errors on LLVM-14 - Numerous constant union improvements
- Prefer the
Type *verLLVMTypeRefwhen looking upstruct_field_remappingdue to lack of uniqueness
- Default parameter exclusion counting improvement for procedure groups
- Improved
-target-featuresflag 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:
#loadalignment bug- set minimum alignment to 16-bytes
- Fix orca linking path
- Add
#subtype/usingto 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_soaandappend_nothing_soa vendor:wgpuupdate to 27.0.2.0core:unicode/utf8: AddGrapheme_Iterator- New
slice.sortimplementation 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/jsonfixes- Fix
nullparsing in certain cases
- Fix
core:encoding/cbor: Fix epoch tag with small valuescore:container/rbtreeaddfind_or_insert- Fix bindings generator for
vendor:vulkanfor extensions and~0style constants - Disable bounds checking where appropriate for Unicode and UTF-8 procedures
vendor:fontstash: Fix crash with.TTCfilescore:simd: Fix incorrectly named calls inbit_notvendor:sdl3: AddPointInRectFloatvendor/egl- add a few more procedures and constants
- Fix
GetPlatformDisplayandCreatePlatformWindowSurfaceto useintinstead ofi32
vendor:box2d- fixes to bindings mismatches
- Add
targetAngletoRevoluteJointstruct/procs
core:odin/parser- fixes for
end_pos - parse empty identifiers after selector as a selector expression with an empty field
- fixes for
core:hash: add CCITT CRC-16- Make packed conditional on
EPoll_Eventto match kernel core:math/linalg/hlsl: supporthalftypescore:math/ease: Add inverse ease proceduresvendor:raylib: addMAX_MATERIAL_MAPSconstantcore:sys/darwin/Foundation: add additional AppKit bindingscore:text/scannerallow for octal prefix style parsing for C-style ints
Full Changelog: dev-2025-10...dev-2025-11
dev-2025-10
New Language Features
New Compiler Improvements
- Improve type inferencing of literals when calling proc groups
- Windows i386 support
- Fix Darwin
addObservermethods and add support for newObjc_Block - Fix segfault involving
string_to_string16on 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_enoughon struct params and fix various foreign signatures - Preempt field checking on
signature_parameter_similar_enoughwith a type ptr equality check - Remove stray debug printf
New Packages
- [core/image]: Add baseline JPEG support
Package Improvements
- Use
.Image_Dimensions_Too_Largeincore:image tick_now: Usef64(wasf32) as a return type ofodin_env.tick_now()- Allow missing trailing comma with proc groups in
core:odinparser - Fix incorrect json encoding for control characters < 32
- Initializing
big.Intconstants is now"contextless" - Add
CancelIoExand other overlapped I/O functions. - Add missing caller location param to append in
strings.Builder - Add "contextless" to small_array
get_safeandget_ptr_safe - Zero
small_arrayresize - Unify
filepath.joinreturn between Unix/Windows - Fix out-of-band allocations in dynamic arenas by
- Fix for
temp_filename prefix being deallocated before being used - Add
runtime.conditional_mem_zeroto improveheap_allocatorperformance on non-Windows systems - Add
digit_to_inttocore:strconv - Remove inaccurate tprint comment
Full Changelog: dev-2025-09...dev-2025-10
dev-2025-09
New Language Features
- Native support for UTF-16 strings:
string16andcstring16- Mostly for interfacing with Windows code, and other foreign code
- Define Integer Division By Zero #5556
New Compiler Improvements
@(init)and@(fini)must beproc "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:runtimedocs - Fixes to
vendor:wasm/WebGLbindings - Cleanup in
math/randandruntime/random_generator - Add missing xlib functions for getting and setting text properties
vendor:OpenGLfix 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_zerogiving false positves - Split SDL_ttf bindings to group with and without require_results
- Propogate
#caller_locationto core:container/queue procs - Support using allocator resize in
_reserve_soa - Zero existing memory when using
resize_soa - Add
add/remove_document_event_listener()tocore:sys/wasm/js - Fixed and added obj-c methods for
NSWindow - fix typo in
CLSIDFromProgIDExsignature - Fix broken
wglUseFontBitmapsbinding - Add
LPFN_GETACCEPTEXSOCKADDRSto ws2_32.odin - Specify
%mand%Mas verbs for integer formatting incore:fmt - Add
@(require_results)attribute to procs returning an allocator - Handle allocator error when appending in
read_entire_file_from_file vendor:box2dfixCreateMotorJointprocedure signature- Add build tags to
posix/spawn.odin
Full Changelog: dev-2025-08...dev-2025-09
dev-2025-08
New Language Features
New Compiler Improvements
- General compiler bug fixes
intrinsics.type_enum_is_contiguousintrinsics.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?forcard/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/spallto version 3- Adds @(no_instrumentation) to spall buffer and SCOPED operations
core:hash/xxhash: Static SIMD Support for XXH3- Minor fixes to
core:mem/virtualedge cases - Unix build script for
kb_text_shape - Add
IUnknownUUID 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_imagesave 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
New Language Features
- Add
intrinsics.type_is_bit_field - Add
@(no_sanitize_memory)with additions tobase:sanitizer
New Compiler Improvements
- Correct spelling in
odin doc -helpoutput - Let
-test-all-packageswork with-build-mode:test - Fix package docs
- Fix
swizzleinfor instatement - Fix
divti3not 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
.odinin the name no longer attempt to parse as odin files - Let
-no-entry-pointwork for Windows DLLs - Guard against invalid proc types in parameter list
- Push
contextonto stack before evaluating procedure parameters - Consider custom
#alignwhen determining union tag size - Ensure
volatilestatus 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
uintenums asints - 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/allforjs_wasmtarget - Guard against negative
indexininject_at - Print timings to stderr instead of stdout
- Change
os2.user_*on Windows to useSHGetKnownFolderPath - Add
core:os/os2user dirs helper to retrieve common paths like Downloads, Videos, et al - Clarify
strconv.append_*tostrconv.write_* - Remove old @(deprecated) things.
- DXC: Fixed broken bindings of
ICompilerandICompiler2 - Fix GMT+/- timezone handling
- Clarify
core:flagsvariadic behaviors - Move
core:math/bìgtests over tocore:testinginstead of using Python3 as an oracle - Add initial tests for big rationals
- Sync chan refactor
- Replace
core:posixusage incore:os/os2 - compat allocator improvements
- Fix
pool_joinhangs if no threads are started - Fix early
joinafter start - Expose
getpeernameincore:netpackage aspeer_endpoint - Let tests expect assertion failures and signals raised
- Get env buffer
- Allow
core:netto 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_Allocatorsafeguards - Fix RegEx docs
- Added TIOCGWINSZ to darwin, linux and freebsd
- Escape object file paths properly during linker_stage
- Fix
try_sendandsend - Added
IS_SUPPORTEDtocore:sys/posix - Fix issue parsing
vendor/stb/imagewith thecore:odin/parserparser - Fix memory leak in
core:math/big.internal_rat_norm - raylib: Refer to Odin-style enum over original C enum
- sys/linux: Unify
IPC_FlagsandIPC_Modebit_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
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_unsignedandintrinsics.type_integer_to_signed- Use
--sysrootinstead of-Wl,-syslibrooton Darwin - Fix global and static
anyusage - Re-enable static map calls on AMD64 SysV due to ABI fixes
- Make
odin helpmore precise -dynamic-literals- Do not call disabled deferred procedures
- Add
/usr/local/libto FreeBSD linker path - Add error with a suggestion when trying to extract an element from a
#simdarray, and prefersimd.extract - Only trim
.odinfrom 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
.raddbgsection- Default views for slices and matrices
- Error on unterminated multi-line comment
- Fix output of object names (#5241)
- Add suggestions for
quaternionNorcomplexNconversions
New Packages
base:sanitizervendor:windows/XAudio2vendor:sdl3/ttfcore:terminalcore:encoding/ansi->core:terminal/ansi
Package Improvements
- Vectorize
base:runtime.memory_* core:net- Rework errors to be cross-platform
- Replace
default_tcp_optionswith a constant
core:container/small_array: Improve documentation forcore:sync/chan: Improve documentationcore:mem/tlsf: refactor, addfree_allsupport, add automatic new poolscore:fmt: Fix printing forbit_set[Enum]whenmin(Enum) != 0vendor/glfw- fix
SetMonitorCallbackandMonitorProctype definition - use
b32where appropriate
- fix
core:text/regex: Add iteratorcore:math: Fixmath.nextafterskipping from 0 to 1vendor:wgpu:- Update to 25.0.2.1
- Fix function name for wgpu.js
genericGetAdapterInfo - Correct
mipmpaFilterfield name in wgpu.js
core:time/timezone: preserve nanoseconds on callsvendor:box2d:- Update to 3.1.0
- Add missing field in
box2d.BodyDef - Make
build_box2d.shmore flexible
core:container/priority_queue- let it return
runtime.Allocator_Error - Fix off-by-one error in
remove
- let it return
core:sys/darwin/Foundation: Loads of additions and related stuffvendor:sdl2: correct RWwrite signaturevendor:sdl3:- Fix
countoutput parameter ofGetFullscreenDisplayModes - Add
SemaphoreAPI
- Fix
core:encoding/*, fix parsing of CDATA tagscore:time: addtick_addcore:encoding/cbor, fix slice overflowcore:os/os2: general improvementsvendor:wasm/WebGL: Fix incorrect parameter typescore:bufio: Fix typo fromb.w-b.wtob.w-b.rcore:simd/x86: BMI/BMI2 intrinsicsbase:intrinsics: alternatereduce_add/reduce_mulintrinsicscore:strconv, add support for hex-floats (0h)vendor:raylib/rlgladd some missing functionsvendor: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 presentvendor/miniaudio: update to 0.11.22core:math/big: fix range check inint_atoi- Add comments to
builtin.odin, documenting ODIN_* constants vendor:windows/GameInput: fixes and tweakscore:encoding/csv: Fix incorrect CSV reader settings for example- Vectorize
strings.prefix_length
Full Changelog: dev-2025-04...dev-2025-06
dev-2025-04
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:androidfor-target:linux_arm64
- Numerous
js_wasm32improvements - Add
~{memory}clobber to syscalls intrinsics - Improve
or_elsetype inference logic - Use Microsoft's "best practices" for using
vswhere - General Bug Fixes which caused compiler crashes
New Packages
Package Improvements
- Update
vendor:sdl3to3.2.10 core:crypto- General improvements
core:os/os2/path.odinrewrite from scratch- Improved Documentation
- Remove dependency on
core:path/filepath