logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·02.11.26
← Back to news

Understanding the Odin Programming Language

Original article
odinbook.com|110 points|48 comments|by AlexeyBrin|Jul 12, 2026

Mastering the Odin Programming Language

Do you have a desire to dive into the Odin Programming Language and pull back the curtain on low-level systems programming?

Odin Book Cover

Understanding the Odin Programming Language is a comprehensive guide designed to take you from the fundamental basics to the most sophisticated concepts of the language.

🎯 What You Will Master

This book is tailored for individuals who already possess some foundational programming knowledge. It focuses on turning you into a better craftsperson by ensuring you truly understand the tools you are using.

  • Procedures and logic flow
  • Manual Memory Management (Taking control of the heap)
  • Parametric Polymorphism
  • Data-Oriented Design (DOD)
  • Low-level systems architecture

"I highly recommend Karl Zylinski's excellently written book on Odin—perfect for anyone who wants to learn and understand the Odin programming language. I had a good experience with garbage collected language like Golang and the book really helped me to transition to a non garbage collected language like Odin. But the writing style here is so good, that I didn't have any issues reading through the whole thing in a couple days." — Satisfied Reader


📚 Acquisition & Formats

Whether you prefer a browser-based experience or a dedicated e-reader, there is a version for you.

FormatFeaturesWhere to Buy
HTMLBeautiful layout, high navigabilitystore.zylinski.se, Itch.io
eBookOptimized for e-readers and appsstore.zylinski.se, Itch.io, Amazon Kindle, Google Books

Pro Tip: If you are undecided, the author suggests purchasing via Itch.io or store.zylinski.se.


🛠 Version Evolution

The book is constantly evolving to keep pace with the language. Below is a visualization of the update trajectory:

📝 Detailed Changelog

Version 1.10

  • Major Change: Section 8.3 now focuses on the [dynamic; N]T type (Fixed Capacity Dynamic Array).
  • Small_Array →\rightarrow→ Now deprecated in favor of the Fixed Capacity Dynamic Array.
  • Updated Appendix B for consistency with the new array type.
  • Added notes to Appendix A regarding the new handle-based map in the core library.

Version 1.9

  • Core Library Update: Adjusted core:os usage to align with the "os2" changes implemented in February 2026.
  • Specific updates were required for os.read_entire_file and os.write_entire_file.
  • Refined the instructional "bubble" in section 10.1.1 regarding the disabling of bounds checking.

Version 1.8 (The Strings Overhaul)

  • Chapter 11 Rewrite:
    • Improved explanation of UTF-8 →\rightarrow→ rune decoding.
    • Converted the null termination "bubble" into a full section.
    • Clarified the ambiguity of the term "string constant."
    • Updated the Windows UTF-16 section to utilize the cstring16 type.
    • Enhanced the "Deallocating strings mixed with string constants" section by using a map instead of an array.
  • Other Fixes:
    • 5.3: Clarified the .(Type) syntax for union variant checking.
    • 7.8: Added the "contextless" requirement for @init and @fini.
    • 15.2: Relocated the bit_set initializer bubble.

Version 1.7

  • Fixed broken links (Discord, WebGPU).
  • Corrected typos in 5.1.3 and 23.
  • Clarified the range for rand.int_max (9.7).
  • Improved the Special_Array example (14.3) and fixed Appendix D compilation.

Version 1.6

  • New Content:
    • Section 17.5: "Breaking cyclic dependencies using callbacks" (covers rudimentary interfaces).
    • Section 26.10: "Code generation" introduction and examples.
  • Refinements:
    • Updated tracking allocator examples (13.1.2) to reflect new "bad free" handling.
    • Cleaned up the Raylib + Box2D sample in Appendix D.
    • Added a favicon to the HTML version for easier tab identification.
    • Clarified that dynamic literals allocate memory (23.3).
    • Fixed vector direction in 8.1.3 and standardized draw_image naming in 8.1.4.

Version 1.5 (The Great Edit)

  • Performed a full-book editing pass for maximum clarity.
  • Key Adjustments:
    • Refined terminology: now using "member" and "value" for enums.
    • Renamed Chapter 26 to "A few more things..."
    • Added discussions on #load, @rodata, and creating clean-compiling libraries.
    • Introduced section 7.8 (@init/@fini) and improved Loop logic (4.3).
    • Moved dynamic literals to Chapter 23 ("Things in Odin to avoid") as they are disabled by default.
    • Added nuance to the "build system" discussion in Chapter 18.
    • Included links to CAT & ONION on Itch.io.
    • Mentioned #reverse in Chapter 4.

Version 1.4

  • Updated the rule for automatic immutable reference passing.
  • The threshold was changed from "sufficiently large" to a specific mathematical limit: Size>16 bytes\text{Size} > 16 \text{ bytes}Size>16 bytes

💻 Code Example: The Odin Way

To give you a taste of the language's clarity, consider how Odin handles basic structures:

package main

import "core:fmt"

// A simple data-oriented structure
Person :: struct {
    name: string,
    age:  int,
}

main :: proc() {
    p := Person{"Karl", 30}
    fmt.println("Hello, %s!", p.name)
}

Get the most current version of the book by simply re-downloading it from your original point of purchase!