Releases: odin-lang/Odin
Releases · odin-lang/Odin
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 -help
output - Let
-test-all-packages
work with-build-mode:test
- Fix package docs
- Fix
swizzle
infor 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 asint
s - 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
forjs_wasm
target - Guard against negative
index
ininject_at
- Print timings to stderr instead of stdout
- Change
os2.user_*
on Windows to useSHGetKnownFolderPath
- Add
core:os/os2
user 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
ICompiler
andICompiler2
- Fix GMT+/- timezone handling
- Clarify
core:flags
variadic behaviors - Move
core:math/bìg
tests over tocore:testing
instead of using Python3 as an oracle - Add initial tests for big rationals
- Sync chan refactor
- Replace
core:posix
usage incore:os/os2
- compat allocator improvements
- Fix
pool_join
hangs if no threads are started - Fix early
join
after start - Expose
getpeername
incore:net
package aspeer_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
andsend
- Added
IS_SUPPORTED
tocore:sys/posix
- Fix issue parsing
vendor/stb/image
with thecore: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
andIPC_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
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
andintrinsics.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 prefersimd.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
orcomplexN
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 forcore:sync/chan
: Improve documentationcore:mem/tlsf
: refactor, addfree_all
support, add automatic new poolscore:fmt
: Fix printing forbit_set[Enum]
whenmin(Enum) != 0
vendor/glfw
- fix
SetMonitorCallback
andMonitorProc
type definition - use
b32
where appropriate
- fix
core:text/regex
: Add iteratorcore:math
: Fixmath.nextafter
skipping from 0 to 1vendor: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 callsvendor: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
- let it return
core:sys/darwin/Foundation
: Loads of additions and related stuffvendor:sdl2
: correct RWwrite signaturevendor:sdl3
:- Fix
count
output parameter ofGetFullscreenDisplayModes
- Add
Semaphore
API
- Fix
core:encoding/*
, fix parsing of CDATA tagscore:time
: addtick_add
core:encoding/cbor
, fix slice overflowcore:os/os2
: general improvementsvendor:wasm/WebGL
: Fix incorrect parameter typescore:bufio
: Fix typo fromb.w-b.w
tob.w-b.r
core:simd/x86
: BMI/BMI2 intrinsicsbase:intrinsics
: alternatereduce_add
/reduce_mul
intrinsicscore:strconv
, add support for hex-floats (0h
)vendor:raylib/rlgl
add 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: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
to3.2.10
core:crypto
- General improvements
core:os/os2/path.odin
rewrite from scratch- Improved Documentation
- Remove dependency on
core:path/filepath
dev-2025-03
New Language Features
New Compiler Improvements
- Name Canonicalization
- Deterministic Name Mangling Rules for Symbols (Procedures, Variables, Debug Types, etc)
typeid
layout change- Always 8-bytes in size
- Represents a hash of the canonical name for the type
- Improved generation times for
odin doc
- Allow
-show-timings
forodin doc
- Very minor parser improvements to catch weird edges cases
intrinsics.simd_extract_msbs
intrinsics.simd_extract_lsbs
for x in bit_set
will use a count leading zeros intrinsics internally rather than checking each bit manually- General bug fixes for LLVM backend
New Packages
vendor:sdl3/image
Package Improvements
- Update
vendor:wgpu
tov24
- Improved documentation for
core:simd
- Minor fixes to SDL3 bindings
- Support use of
*
in format strings without an index NS.SavePanel_URL
fix- Support
%b
forrune
os2
fixes- Recursive directory walker
- Fix race conditions on Linux
os2.random_string
to usecontext.random_generator
dev-2025-02
New Language Features
- Support
#unroll(N) for
with arrays
Compiler Improvements
- Enable
-use-separate-module
as default for all platforms (except wasm based ones) - General Bug Fixes
- Remove erroneous warnings regarding stack overflow in range loops "by reference"
- Allow broadcasting of untyped values to
#simd
arrays - Improvements to
-obfuscate-source-code-locations
- Remove duplicates of .framework/.dynlib/.so in linker
- Darwin: Sort frameworks to link first
New Packages
vendor:sdl3
(3.2.2)vendor:windows/GameInput
Package Improvements
- Improvements to D3D12 package
- Improvements for Haiku
- Add missing procedures to GLFW
runtime.map_entry
- XInput bindings for
core:sys/windows
- More work on
core:os/os2
development - More Objective-C bindings
- Additional bindings and constants for
core:sys/windows
mem.Tracking_Allocator
defaults to panicking on bad frees
dev-2025-01
New Language Features
#+feature dynamic-literals
- All dynamic literals (maps and dynamic arrays) are disallowed by default to remove implicit allocations from Odin
- If the user wants to allow this, it can be enabled on a per-file basis by adding the above "build tag"
- Dynamic literals like the following:
[dynamic]int{1, 4, 9, 16}
map[string]int{"Apple" = 759, "Pear" = 128, "Gorilla" = 533}
Compiler Improvements
ensure
/ensure_contextless
- Identical to
assert
/assert_contextless
but is not removed with-disable-assert
- Identical to
- Remove viral
#force_inline
and#force_no_inline
- Declaring a procedure with these tags would previously virally apply them to procedures called inside the subject procedure too, it now just affects the procedure it is applied to
- Fix bug with comparisons with big endian types
- Improve zeroing rules for
resize_dynamic_array
- Add implicit broadcasting for
#simd
arrays map_entry
(Docs)
New Packages
N/A
Package Improvements
- Fixes to
vendor:raylib
- Fixes to foreign imports after update to 5.5
- Allow for custom WASM link libraries
- Allow custom WASM link libraries for
vendor:box2d
- Add
trunc
tocore:math/linalg/glsl
- Improvements to
core:encoding/base32
- Update
vendor:cgltf
to 1.14 - Add xinput bindings to
core:sys/windows
- Fix to matrix adjugate procedure
dev-2024-12
New Language Features
N/A
Compiler Improvements
- Fix windows args parser problem from issue #4393.
- Suggestion when assigning
enum
tobit_set
. - Suggest
-microarch:native
ifpopcnt
instruction is missing. - List the supported targets using
odin build . -targets:?
. - Fix:
build_odin.sh
always runs demo regardless of argument. - Report error when builtin
min
/max
has only one numeric parameter. - Add which to
shell.nix
to build with--pure
. - Only error with
-vet-cast
when it is actually castable. - Fix #4508 for
abs
,min
,max
. - Rework macos version retrieval for
odin report
. - Updated NetBSD CI to pkgsrc Q3 release.
- Check
type_expr
incheck_procedure_param_polymorphic_type
. - Add support for LLVM v19
- Fix PowerShell version incompatibility in
build.bat
by addingmisc\get-date.c
utility.
New Packages
N/A
Package Improvements
- Update
vendor:raylib
to v5.5. - Add
vendor:raylib
aliases forIs*Ready
->Is*Valid
. - Add new test, better fail-check, and non-transitioning tz fix.
- Fix random sequence bindings in
vendor:raylib
. - Added Unlinking Section to Posix Socket Binding Documentation.
- Update
scanner.odin
. - Fix relative links in
examples/README.md
. - Correct
zlib
usage in doc. - Add
core:slice.size
. - reflect: add
enum_value_has_name
proc. - Increased the size of Javascript keyboard event key/code buffer size.
- Add NSApplication bindings for
mainWindow
andkeyWindow
. - Add
STICKYKEYS
,TOGGLEKEYS
, andFILTERKEYS
tocore:sys/windows
. - Implemented inotify in
core:sys/linux
. - Fix integer type in
UXTheme
bindings. os2
: fix leak indir_windows
, fix netbsd, and add a test for dir reading.- [runtime]
make(map[K]V)
should not allocate any capacity. - Fix typo in the Quaternion dot product implementation.
- Fix
#config
typo in Lua bindings. - Parsing fix for timezones that have an uneven number of utc / st tags.
- Fix #4509
- Fix unhandled
unmarshal
error. - Rework macos version retrieval for
core:sys/info
. core:net
: FixDNS_RECORD.Data
alignment error on Windows i386.- Fix math binomial proc giving wrong result.
- Make
O_RDONLY
default foros.open
on all platforms. core:dynlib
: Unload library before loading again & addLIBRARY_FILE_EXTENSION
constant.- Correct handling newlines between build tags in
core:odin
. - Pass allocator to implicitly (de)allocating procs in
core:log
. - Use a proper
Queue
incore:thread.Pool
- Fix
core:text/regex
'smatch_with_preallocated_capture
returningnum_groups
. - Add
linalg.clamp_length(vector, max_length) -> clamped_vector
. - Improve
strings.index_multi
. - Add regression test for #4553.
core:encoding/json
: Move struct field zipping outside of loop.
dev-2024-11
New Language Features
Compiler Improvements
- General bug fixes
- Fix 128-bit ABI issues caused by LLVM changes
- Fix
#load_directory
containing directories - Add warning for
unsigned >= 0
like conditions in afor
loop
New Packages
core:time/timezone
Package Improvements
- Numerous bug fixes
core:sys/posix
Linux Support- Improvements to
core:sys/darwin
- Add missing bindings to
rlgl
rand.choice_bit_set
slice.to_type
- Improvements to
js
target APIs
dev-2024-10
New Language Features
- Replace
//+
syntax with#+
- Used in cases like
#+build windows
- Used in cases like
#min_field_align
and#max_field_align
- deprecate
#field_align
in favour of#min_field_align
#max_field_align
used in places where#pragma pack
was used in some C compilers
- deprecate
#caller_expression
Compiler Improvements
- ABI BREAKING CHANGE: How SysV handles multiple return values
- Matches the same behaviour as other platforms to pass multiple return values separately
- Fix ABI for 128-bit integers since the breaking changes in LLVM 18 for WASM and AMD64
-vet-packages:<command-separated-string_array>
-vet-unused-procedures
- Add
-no-rpath
- Simplify
#row_major
andmatrix_flatten
behaviour - Allow
transmute(Bit_Set)~T(0)
- Move many of the
vendor:wasm/js
package tocore:sys/wasm/js
- Rename
runtime.js
toodin.js
to be consistent
- Rename
New Packages
Package Improvements
- General improvement to documentation across the
core
library core:sys/info
: more CPU feature detection for RISC-Vcore:time
time.time_to_datetime
- Add
#any_int
directive to built-in procedures that were missing it, to be consistent - More Objective-C Runtime Bindings
- Improvements to
core:container/bit_array
- Improvements to C vararg behaviour and definitions and
va_list
- Improvements to atomic/sync/thread related operations
- Improvements to
core:sync/chan
dev-2024-09
New Language Features
- Add support for linux_riscv64 and freestanding_riscv64
Compiler Improvements
- Support RISC-V for the compiler itself
- Fix crash if referencing import "aliased" in other file
- Added a hint at end of
build.bat
about release mode when building in debug mode - Allow symlink test to work irrespective of git settings
- Use another BSD URL for pkgsrc on CI
- Fix type switching over internal pointer union
- Fix c_vararg bit_set
- Add table-driven (in)definite article to some errors.
- Fix alias handling of procedures
- riscv: add an error when atomics are used without the atomics extension
- Remove extra format item at end of
context
error message - Fix inline transmutation of
[16]i8
toi128
- Fix 'odin [run|test] --' giving a compiler out of bounds
- UL_COMPARE_AND_WAIT_SHARED is macOS 10.15+
- query brew for llvm-config location if possible
New Packages
- Add
vendor:box2d
- Add
core:text/regex
Package Improvements
- Add
sdl2glue
tovendor:wgpu
package - Fix os.read_dir with symlinks
os.Error
to replaceos.Errno
core:image/common.odin
Fixes- Prevent
SIGPIPE
on Darwin when writing to a closedcore:net
socket - Add
reflect.struct_field_count
that returns the number of fields in a struct type - Fix missing closing brace for Bit_Field in
core:odin/parser
- Fix SIMD intrinsics wording
- Core sys windows rawinput code
- Port
core:net
to FreeBSD - Allow testing for intentional leaks in test runner
- Various
core:encoding/cbor
fixes - Various
core:crypto
improvements - Vectorize
index_byte
- Use
intrinsics.reverse_bits
incore:compress/zlib
- Fix
type_info_union_is_pure_maybe
only working with regular pointers - Add support for field tags on bit_field fields to
core:odin
- Loop
os.write_entire_file
to write more than MAX_RW - [fmt] Add bit fields to the pointer printing logic
- Fix
os.read_dir
closing the given file descriptor - Fix type hint propagation for shift
- Let memory failures be errors in the test runner
- Check if procedure parameter type declares polymorphic args
vendor:x11
: Added a few procedures for xrandr, xinput, and xFixesvendor:egl
: Added a few more egl procedures and constantscore:time
WASI implementationcore:sys/linux
: Add binding to ioctl syscall + standard fd constants.- Update mem doc example formatting
- Error if assigning to
rodata
variable with index - Report error when a variadic procedure parameter has a default value
core:sys/posix
andcore:os/os2
based on it (for darwin, netbsd, freebsd and openbsd)- Fix error handling in os2.read_entire_file_from_file()
- add shm_open and shm_unlink syscalls for darwin
- More Foundation bindings.
- Add autogenerated orca bindings and macros from laytan
- os2 process linux implementation
- Improve benchmarks.
- Check if file open-mode is
O_CREATE
on Darwin before forcing chmod - Fix
open
bindings - Fix log unnecessary allocations
- (raygui) Restores vertical text alignment broken after 4.0 migration
- Implement
lshrti3
on wasm - Add
core:math.count_digits_of_base
- Remove deprecated
log
procs fromcore:testing
- Fix SIMD var typo
- Fix wiki link in the
README.md
- Add support for Linux on os/sys/posix termios.
- A couple of foundation binding. Vet tabs.
- core:sys/linux - implement clock_settime, clock_getres and clock_nanosleep
- os2: process API for Darwin and most of it for BSDs
- orca: implement
core:time
andcore:log
- Fix ambiguous generic type names
- Added missing slice advancing.
- Fix binding: Make
rl.LoadImageAnim
take a pointer instead of a multi-pointer. - Fix
core:reflect/iterator.odin
- Fix binding to cmark_node_get_fence_info
- Fix win32 dwmapi DWMWINDOWATTRIBUTE enum.
- os2: propagate errors from execv
- Free the arenas allocated in
test_core_runtime
- Fix use-after-free in
thread.Pool
- Fix error for uuid to require 36 bytes instead 32 (4 bytes for dashes)
- Fix
-vet
and-strict-style
failures in tests - [os2/process]: Don't free process info fields in partial success scenarios
- Add API for freeing
thread_local
state - wgpu: update to v22.1.0.1
- Delay lexical checking for foreign blocks that are in file scope
- -vet -strict-style -disallow-do in tests
- Win32 clipboard procedures
- os2: disable custom heap allocator
- mem/virtual: use
sysconf
for retrieving page size and actually use these init procs - mem/virtual: make sure the given size is used for subsequent blocks
- Add missing lexer checking delay for foreign blocks
- Add
core:io
test suite - Add a file tag parser to core:odin/parser
- Fix some issues with the "bad import name" errors
- Add math.remap_clamped, which clamps the result in range [new_min, new_max]