Odin References & Tooling
Every entry below is free except the book, which is a paid digital edition, and every one was checked against the official Odin site or the project's own repository. The shortest path remains your own machine: install the compiler from the official guide, and everything in this track — including all seventeen lab examples — runs with one command.
Official Documentation
One rule about Odin's documentation is worth adopting now: when a claim on a blog, a video, or a forum post disagrees with these pages, these pages win. They are written by the language's author and kept in step with the compiler, so the version that matches your installed toolchain is the version that matters.
The Truth Sources
| Source | What it is | Use it for |
|---|---|---|
| Language Overview | The complete language described in prose, section by section | The first place to check any syntax question |
| Getting Started | Downloading and installing the compiler, with per-platform requirements | Any machine, any platform, from scratch |
| Specification | The grammar and formal specification of the language | Settling a question about what the language is |
| Demo File | The original one-file demonstration of Odin, source included | Seeing almost every feature in one place |
| FAQ | Design questions answered by the author | Understanding why Odin is the way it is |
| Running Tests | Odin's test runner explained end to end | Everything the testing lesson summarised, in full |
| Package Documentation | Every official package in the core and vendor collections | Finding the procedure you suspect already exists |
| Nightly Builds | The latest builds, alongside tagged releases | Trying a fix or a feature before the next release |
Two of those deserve a habit attached. Read the FAQ once, from beginning to end: it explains the absence of a garbage collector, the decision to have no classes, and the other choices that new arrivals trip over. And keep the Package Documentation open while you write code — the quickest way to learn Odin's standard library is to look for the procedure you were about to write yourself.
Tools Worth Installing
The compiler is the only tool you strictly need. The others remove work you would otherwise do by hand, and the first one — the language server — pays for itself on the first afternoon.
Editor Support and Everyday Tools
| Tool | What it is | Why you want it |
|---|---|---|
| OLS — Odin Language Server | Completion, hover, and go-to-definition, wired into your editor | Every editor you are likely to use is covered: VS Code, Sublime, Vim, Neovim, Emacs, Helix, Micro, Kate |
odinfmt | The formatter, installed from the OLS project | Formatting stops being a topic of discussion |
| odin-lang/Odin | The compiler, the core library, and the examples | The core folder is documentation you can read as code |
| Spall | A profiler that runs in the browser and natively | When a cycle counter is no longer enough detail |
The OLS project also answers the question the setup lesson raised, and it turns out the answer is more interesting than "there is one style, take it or leave it". The formatter is installed with the language server, on Windows with ./odinfmt.bat and elsewhere with ./odinfmt.sh, and it reads a small odinfmt.json at the root of your project. Quoted from the project's own file, the whole configuration is three settings:
{
"character_width": 120,
"tabs": true,
"tabs_width": 4
}
Those defaults are the style the standard library and the official examples are written in — which is exactly why arguing about them is pointless. If you use OLS, formatting is on by default: its enable_format option, quoted from the project's list, "Turns on formatting with odinfmt" and is enabled unless you turn it off.
One more thing OLS offers that is worth knowing before you need it: the language server is configured by an ols.json in the workspace, and among its settings are checker_path and defines. The defines entry is where you tell the server about the same compile-time constants you pass to odin build — so your editor's diagnostics match the build you are actually making.
Learning Beyond This Track
One book carries the Odin name, and it is written by somebody who ships programs in the language. It is the natural next step when a chapter here felt too short.
The Book and the Blog
| Source | What it is | Best for |
|---|---|---|
| Understanding the Odin Programming Language | A digital book by Karl Zylinski, described on the official site as "a digital book for beginners and intermediate Odin programmers" | Procedures, manual memory management, parametric polymorphism, and data-oriented design in depth |
| Karl Zylinski's blog | Articles that explain one Odin idea at a time — arenas and the temporary allocator, handle-based maps, UTF-8, game programming | Understanding a single mechanism thoroughly |
The blog is worth a specific recommendation, because two of its posts cover ground this track only summarises: one on the temporary allocator and arenas, and one on the mistakes people make when combining arena allocators with dynamic arrays. Both are the sort of article that makes Phase 4's allocator rules feel obvious in hindsight — and the second one is a warning about the exact combination this track told you to think carefully about.
Practice
Reading builds recognition; writing builds fluency. The best practice material for Odin is the language's own example collection, because the examples are required to pass a strict style gate before they are accepted.
Exercises That Teach
| Source | What it is | How to use it |
|---|---|---|
| examples/absolute_beginners | The first folder of the official examples repository: small, self-contained programs | Run each one, then change it until it breaks and fix it again |
| odin-lang/examples | Idiomatic Odin, from strings and maps to threads, SIMD, and vendor libraries | Work through it folder by folder after finishing this track |
| Advent of Code | Language-agnostic puzzles released every December, in two parts each | Solve a few in Odin; parsing and data modelling are the real exercise |
| This track's lab examples | Seventeen single-file programs covering every phase | Type them out rather than downloading them |
One detail from the examples repository tells you what the community expects of code, and it is a good target to aim at. Quoted from the contribution guide, an example must compile with these flags before it is accepted:
-vet -strict-style -vet-tabs -disallow-do -warnings-as-errors
That is the whole of Odin's style argument in one line: extra diagnostics on, a strict style check, tabs enforced, a banned construct, and warnings treated as errors. Turn the same set on for your own project and your code will be welcome anywhere — including in a pull request to the language itself.
Reading Shipped Code
Every language has a moment when reading other people's code becomes more instructive than reading a tutorial. Odin makes that moment easy to reach, because the standard library is ordinary Odin source sitting in your installation.
Repositories and Real Programs
| Source | What it is | Start with |
|---|---|---|
odin-lang/Odin — the core folder | The standard library, written in Odin and shipped with the compiler | core:slice, core:strings, core:thread — the packages this track used |
| odin-lang/examples | Around thirty folders of idiomatic code, one topic each | text_edit for a real program, json for parsing, thread for concurrency |
| The Showcase | Programs and tools built with Odin, including commercial ones | Proof of what the language handles in production |
The showcase is worth a look for a different reason than the source code: it answers "is this language for real?" with a list. Among the entries are EmberGen, LiquiGen, IlluGen and GeoGen — real-time simulation and procedural asset tools by JangaFX — along with Blick, a native video editor, Vigil, a source navigation workspace, Todool, an editor, and the two tools from the previous section, OLS and Spall. These are not demonstrations; they are products that people use.
Community and Help
Asking a good question is a skill, and Odin's community makes it easy to practise, because the channels are clearly divided by purpose.
Where to Ask
| Channel | What it is | Use it for |
|---|---|---|
| Community page | The official list of every channel, kept current | Finding the Discord invite — start here rather than from a search |
| Discord | Live support and chat with other Odin programmers | Being stuck right now, mid-problem |
| Official forum | Self-hosted, categorized, long-form discussion | A question whose answer deserves to be found later by others |
| IRC | The unofficial #odin channel on hackint.org | A lighter, older style of chat |
| Subreddit | An unofficial place to post about Odin | Sharing what you built |
| Issue tracker | Where bugs and feature requests are tracked | Report a compiler problem, or help with one labelled help wanted |
odin version, and say which platform you are on. The FAQ is worth searching first — the design questions in it are exactly the ones that produce confused bug reports.
A Practical Ladder
A track ends, but learning does not, and the gap between "I finished the tutorial" and "I can build something" is crossed by doing things in the right order. This ladder is short on purpose.
The Six Steps After This Page
- Run all seventeen lab examples on your own machine, one per sitting. Type the harder ones instead of downloading them.
- Build the three study projects and then change them: make the linked list generic, give the stack a test that fails, make the word counter read from somewhere else.
- Work through absolute_beginners, then the folders whose topics you have not touched —
json,simd,arena_allocator,command_line_arguments. These are folders I confirmed exist in the official repository, and each is a single concept done well. - Read
corein your installation, starting with the packages this track used. Standard-library code is where you see the style and the idioms applied without compromise. - Write a program you actually want. A tool, a game, a converter — anything with a reason to be finished. This is the step that turns knowledge into skill, and the only one with no shortcut.
- Give something back. Fix a documentation mistake, answer a question in Discord or on the forum, or pick up an issue labelled
help wanted.
Notice what is not on the ladder: rushing to a framework, or collecting a list of libraries. Odin rewards understanding the machine underneath — memory layout, allocators, the cost of a copy — and every step above builds that understanding rather than borrowing it.
Closing Words
You began this track with a program that printed a line of text and an unfamiliar idea: that a language could be simple and honest at the same time. Twenty-one lessons later you have written structs that copy, slices that view, dynamic arrays that own; you have named allocators, deferred releases, propagated errors without exceptions, and made one body work for many types. You have run work on several threads and asked the compiler to decide things while building instead of while running.
None of that was learned by reading. It was learned by typing, breaking, and fixing — which is why the ladder above starts with running the examples rather than with another book. The language is now yours to use, and the sources on this page will keep it honest.
Welcome to Odin. Fall in love with programming all over again.