Understanding the Odin Programming Language
Do you want to learn the Odin Programming Language and demystify low-level programming?
Then this book is for you.
Read a sample or buy now
Understanding the Odin Programming Language is a book that teaches both basic and advanced Odin concepts. You'll learn about procedures, manual memory management , parametric polymorphism, data-oriented design, and much more.
The target audience is anyone with some programming experience. Odin is a simple yet powerful language, making this book a great introduction to low-level programming , regardless of your background.
A programming language is a tool. By understanding your tools, you will become a better craftsperson . Therefore, this book does not just explain how to write Odin code. It also explains why the language works the way it does.
What people say:
I highly recommend Karl Zylinski's excellently written book on Odin—perfect for anyone who wants to learn and understand the Odin programming language. -Bill "gingerBill" Hall, creator of Odin .
Karl makes a great job at explaining Odin. 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. -Review on store.zylinski.se by Kevin D .
I never read, I get distracted easily. But the writing style here is so good, that I didn't have any issues reading through the whole thing in a couple days. -Review on store.zylinski.se by Shaka .
Version 1.10 released! Read the release notes.
Available formats:
HTML
Beautifully laid out and easy to navigate. A portable HTML file with all the fonts and images baked in. Similar to a PDF, but nicer to use.
The optimal reading experience on a computer. Can also be read on a phone or tablet.
Available on:
store.zylinski.se HTML+eBook<br>Itch HTML+eBook
Read a sample
eBook
Specially suited for e-readers and eBook apps.
Nice and simple layout. Includes all illustrations and supports color.
Available on:
store.zylinski.se HTML+eBook<br>Itch HTML+eBook<br>Amazon Kindle eBook<br>Google Books
If you are unsure of which version to get, then I recommend buying it from store.zylinski.se or Itch. On there you'll get both the HTML and eBook versions.
Overview video
Release notes
Version 1.10
Section 8.3 has been changed to teach the [dynamic; N]T type (Fixed Capacity Dynamic Array) instead of the Small_Array. The Fixed Capacity Dynamic Array deprecates the Small_Array.
Updated Appendix B to also use the Fixed Capacity Dynamic Array.
Appendix A now has some comments about the handle-based map that now exists in core.
Minor change in 10.3 where some unneeded slicing was done.
Get the latest version by just re-downloading the book from wherever you bought it.
Version 1.9
Updated usages of core:os in order to match the changes introduced by "os2". Background: The whole core:os package was replaced during February 2026. After this replacement, some code example changes were needed. A lot of code that used core:os still works, but usages of os.read_entire_file and os.write_entire_file needed some changes.
External links in the HTML version now open in a new tab.
Improve the bubble in 10.1.1 about disabling bounds checking.
Fixed around 30 grammar issues.
Fixed several minor technical errors.
Version 1.8<br>Strings chapter overhaul
This version does some major changes to the strings chapter (chapter 11). It has been heavily revised and expanded. Some changes are:
Clearer about how UTF-8 is decoded into runes.
A section on how to manually decode UTF-8.
The old "bubble" about null termination has been made into a proper section.
The section "Deallocating strings mixed with string constants" has been made clearer and more useful by considering a map instead of an array.
A section on how the phrase "string constant" can be ambiguous.
The Windows section on UTF-16 has been mostly rewritten and now uses the new cstring16 type.
Many, many more small changes and edits.
Changes to other chapters
Chapter 1.5: Typo fix.
Chapter 2.4: Note about odin run . -keep-executable (new Odin behavior).
Chapter 3.2: Typo fix abut type inference.
Chapter 5.3: Clarification about the .(Type) syntax used to check the variant of unions.
Chapter 7.4: Clarified a sentence.
Chapter 7.8: Add information about "contextless" requirement for @init and @fini.
Chapter 10.1.5: Code typo fix.
Chapter 10.3: Remove unnecessary slice operation.
Chapter 11.6: Code typo fix.
Chapter 15.2: Move bubble about bit_set initializers to a more appropriate location.
Chapter 15.2.2: Typo fix.
Chapter 15.3: Typo fix.
... and several additional small fixes!
Version 1.7
Chapter 1: Fix broken Discord link
Chapter 5.1.3: Typo fix
Chapter 9.7: rand.int_max range clarification
Chapter 14.3: Improved 'Special_Array' example
Chapter 23: Typo fix
Chapter 26.6: Fix broken WebGPU example link
Appendix D: Fix compilation error
Version 1.6
New section 17.5 called...