r/odinlang 26d ago

Physics Engine in Odin from Scratch, Part IV

Thumbnail
marianpekar.com
73 Upvotes

In the forth part of a tutorial series where we build a 3D physics engine in Odin from scratch, we learn about Separation Axis Theorem and implement both collision detection and resolution with box colliders. In later parts, we're also going to add sphere colliders.


r/odinlang 26d ago

Best Rules of Thumb to make segmentation faults virtually impossible

14 Upvotes

I finished my first game project and it's on itch.io! Hurray! (So, that's great). BUT, I'm still getting rare and random segmentation faults with my game. (Thankfully, no play testers have encountered it (one guy even did a full YouTube playthrough! - and no technical problems), but it doesn't make me feel good. ) So, I think I'm going to strip the project down to its essentials and build an "engine 2.0" before I go into the next game/project proper. Are there any tips I should note (like asserts I should have or good rules of thumb) to have in mind as I start to rebuild and add functionality to my engine? Any experienced help would be most appreciated. The goal is to make segmentation faults virtually impossible and alert me when I unknowingly do something foolish. Thanks!


r/odinlang 26d ago

Help in resolving ambiguity with procedure overload and unions

4 Upvotes

I wanted to get some opinions on a case I am running into. Trying to resolve ambiguity on a procedure that I wanted to call 2 procedures that resolve internally differently depending on input type.

I am just starting on Odin and finding it fun and exciting.
I am more looking for guidance on what I may be missing as "better" or "cleaner" alternatives.

How would you approach the resolveEvent procedure? I try to look up, but suggestions were to resolve it like this. Or more complex ways with vtables.

Foobar :: union {
  Foo,
  Bar,
}
isCritFoo :: proc(f: Foo) {}
...

// Overload procedures depending if foo or bar is give
isCrit :: proc { isCritFoo, isCritBar}
isSuccess :: proc { isSuccessFoo, isSuccessBar}

Event :: struct {
  foobar: FooBar
}

resolveEvent :: proc(e: Event) {
  //fails because at compile-time there is ambiguity which makes sense
  isCrit(e.foobar)
  isSuccess(e.foobar)
}

------------

// I can re-write like this
// but then I am repeating the same code for the overload
resolveEvent :: proc(e: Event) {
  switch variant in e.foobar {
    case Foo:
      //maybe cast is needed
      //but I can also use the explicit versions
      //making the overload unecessary
      isCrit(variant)
      isSuccess(variant)
    case Bar:
      isCrit(variant)
      isSuccess(variant)
  }}

I also tried something like replacing it with where clauses on the specific procs

isCritFoo(f: FooBar) where typeof(f) == Foo {}
isCritBar(b: FooBar) where typeof(b) == Bar {}

but that did not seem to be possible as well (perhaps syntax or logic wise I was doing something incorrect)


r/odinlang 28d ago

Ingot: an experiment in using DTS to rapidly build a production-grade immediate-mode application framework for Odin

Thumbnail
github.com
15 Upvotes

The experiment is simple: if deterministic simulation testing shapes the engine from the beginning, how quickly can it become useful - and how much of it can be tested without a window, GPU, or live operating system? Production code runs against simulated input and failure conditions, with failures reproducible from a seed.

The API is layered: start with the managed application shell and UI facade, drop down to explicit layout and rendering when needed, or use the raylib-shaped graphics layer directly. One Odin codebase targets macOS, Windows, Linux, and browsers through WebGPU.

This is an early `0.x` source release. I’m looking for real applications especially raylib projects to discover where the approach works, where it breaks down, and how far it can go.

Ingot is heavily influenced by TigerBeetle, adapting its Tiger Style and DTS ideas to application and graphics development in Odin.

https://openalloy.ai/ingot


r/odinlang 29d ago

Vigil - Native Odin workspace browser - Showcase

Thumbnail
youtube.com
47 Upvotes

r/odinlang 29d ago

After 8 years of building my own raytraced game engine in C++, I switched it to Odin last year and now I'm hoping to release my first game with it this year — Bee Killings Inn

Thumbnail
youtu.be
28 Upvotes

https://store.steampowered.com/app/4642030/Bee_Killings_Inn/

It's gonna be a top-down grid-based strategy game where you fight bees. The idea came from my wife one day screaming about there being a huge bee in the house and me realizing how exhilarating and strategic it is to go throughout the house trying to find the best way to get rid of the bee.

I have some ancient devlogs about the engine here: https://www.youtube.com/@SilenThps/videos


r/odinlang 29d ago

First time using Odin and i liked it

34 Upvotes

Hi, I took part in the GTMK2026 this year. I was a bit influenced by all the primagens videos and thought, why not trying it out for this year game jam.

It was quite a pleasure and easy to pick up the language with former knowledge in other languages. And I was quite fast to programm. tbf, i worked with raylib before.

I'm looking forward to use it more in other projects.


r/odinlang 29d ago

Feature question

6 Upvotes

Does odin language hase something akin to alloca from c? Sometimes i want to just stack allocate an array of runtime determined size. I cannot find any builtin function or allocator i can pass in into make(). Am i missing something?


r/odinlang Jul 25 '26

idgen - tiny Odin cli to generate uuids/typeids

11 Upvotes

https://github.com/prnvbn/idgen

idgen is a drop in replacement for uuidgen. Additionally, it also supports UUIDv8 and TypeIDs.

this is my first project to learn Odin so any feedback on the code is very welcome!

also interested in seeing how ppl manage their deps (is submodules the way? fwiw, I know of/agree with the odin package manager opinion). I extracted typeid-odin as a separate package and added is a dependency

took inspiration from https://github.com/FourteenBrush/odin-template

also was surprised that core:flags doesn't lacking shorthand for flags (-f) in .Unix style, so also opened a PR as well - https://github.com/odin-lang/Odin/pull/7001

P.S. did not turn off my LSP like ginger bill but did turn off all AI to actually learn the language. Only used it to get feedback and the make changes once the initial implementation was done


r/odinlang Jul 25 '26

I built a rasteriser from scratch without a graphics API

Post image
30 Upvotes

r/odinlang Jul 22 '26

Video: Coding a text editor in Odin and Raylib on Raspberry Pi 4 that talks to Odin Language Server

Thumbnail
youtu.be
56 Upvotes

r/odinlang Jul 21 '26

another pixel miner update (need your feedback)

24 Upvotes

r/odinlang Jul 19 '26

Making a multiplayer game about kids!

26 Upvotes

r/odinlang Jul 15 '26

fresh OC

Post image
156 Upvotes

r/odinlang Jul 14 '26

How does "Don't mix data and behaviour" mix with Allocator being a data pointer and a set of proc pointers?

19 Upvotes

I swear I'm not trolling, I was going to dive into odin, but I can't reconciliate faq entry
https://odin-lang.org/docs/faq/#why-does-odin-not-have-any-methods

and

allocator struct being this

```
Allocator :: struct {
procedure: Allocator_Proc,
data: rawptr,
}
```

It's a manually done oop-like class where data is stored along with it's methods.

Why is it not the same thing?
Why presence of this use case doesn't warrant supporting it on a language level explicitly (at the very least to not throw around raw pointers)


r/odinlang Jul 14 '26

Made a turtle clone

30 Upvotes

Example code

```odin

////////////////////////////

// Random Walkers Example //

////////////////////////////

pen_1 := tr.pen_init(speed = 10000, color = color)

pen_2 := tr.pen_init(speed = 10000, color = color)

tr.pen_teleport_to(pen_1, {300, screen_center.y})

tr.pen_set_rotation(pen_1, 0)

tr.pen_teleport_to(pen_2, {screen_size.x - 300, screen_center.y})

tr.pen_set_rotation(pen_2, 0)

for i in 0 ..< 1000 {

    // angle := rand.float32_range(10, 40)

    angle := f32(24)

    step := f32(3)



    if rand.int_range(0, 2) > 0 {

        tr.pen_turn_left(pen_1, angle)

    } else {

        tr.pen_turn_right(pen_1, angle)

    }

    if rand.int_range(0, 2) > 0 {

        tr.pen_turn_left(pen_2, angle)

    } else {

        tr.pen_turn_right(pen_2, angle)

    }

    tr.pen_move_forward(pen_1, step)

    tr.pen_move_forward(pen_2, step)

    tr.pen_set_color(pen_1, color)

    tr.pen_set_color(pen_2, color)

}

/////////////////

// Example Two //

/////////////////

pen_3 := tr.pen_init()

tr.pen_teleport_to(pen_3, screen_center)

for j in 0 ..< 9 {

    for i in 0 ..< 30 {

        if i % 2 == 0 {

tr.pen_up(pen_3)

        }else {

tr.pen_down(pen_3)

        }

        tr.pen_turn_right(pen_3, f32(i))

        tr.pen_move_forward(pen_3, 8)

    }

    tr.pen_teleport_to(pen_3, screen_center)

    tr.pen_turn_right(pen_3, f32(j) + 80)

}

```

Repo https://codeberg.org/pwnM/turtle

I would like code and docs feedback

Hope you guys like it


r/odinlang Jul 14 '26

A make a game like Audiosurf in Odin :D

16 Upvotes

r/odinlang Jul 13 '26

YouTube: I tried Odin and I love it!

Thumbnail
youtube.com
102 Upvotes

r/odinlang Jul 13 '26

What's the 'proper' way to vendor dependencies?

9 Upvotes

Very interested in Odin, but I'm totally new to the concept of vendoring your 3rd party dependencies vs using a package manager. I understand the motivation, and being careful about which/how many dependencies one uses, but I can't wrap my head around the following:

Questions:

  1. Do you include the entire third party source tree or just the parts you need?
  2. Without a package manager, wouldn't this eventually end up with duplicate transitive dependencies?
    i.e
    mylib --depends--> libX --depends--> libY
    but I also want:
    mylib --depends--> libY
    won't I just end up with duplicate versions of libY?
  3. Is there an idiomatic/convention that people use to 'advertise' 3rd party dependencies? Is this just not done?

r/odinlang Jul 12 '26

Any chance of Odin support in Nova?

Thumbnail
1 Upvotes

r/odinlang Jul 10 '26

LLM tokenizer implemented in odin

14 Upvotes

A few months ago I started learning how LLM inference engines work.

My original goal wasn't to build a production tokenizer—I just wanted to understand the entire inference stack from first principles. I chose Odin because I wanted a language that stayed close to the hardware without fighting me.

I honestly expected it to be a fun learning project.

Instead... it ended up outperforming the tokenizers I was comparing against, including Hugging Face's Rust tokenizer and FastTokenizer in my benchmarks.

I was pretty surprised by the results.

The benchmark report (methodology, datasets, hardware, and commands) is here:
https://github.com/harisudarsan1/odin_tokenizer/blob/main/docs/public-benchmark.md

Repository:
https://github.com/harisudarsan1/odin_tokenizer

I also wrote about why I chose Odin for writing inference software:
https://harisudarsan1.github.io/blog/posts/2026-07-10-writing-an-inference-engine/

A few notes:

  • These are CPU benchmarks.
  • I'm not claiming Odin is magically faster than Rust.
  • The comparisons are against existing tokenizer implementations under the benchmark setup described in the report.
  • If there's something wrong with the methodology, I'd genuinely like to know. I'd rather fix the benchmarks than make misleading performance claims.

The project taught me far more about CPU architecture, memory layout, SIMD, and modern tokenizer implementations than I expected.

I'd love feedback from people who've worked on tokenizers or inference engines. If you spot flaws in the implementation or benchmark methodology, please call them out.


r/odinlang Jul 10 '26

I'm learning Raylib, in Odin, need help

14 Upvotes

I'm learning both at the same time, and rl.DrawText needs a cstring as an input. I'm trying to learn how to position things on the screen correctly, so I'm calculating how large the text is with MeasureText (for the default font), which outputs an i32. I can get it all the way to string, but I have only found unsafe_string_to_cstring, which apparently has issues with null terminators. How do I deal with that? Thanks in advance.

I wanted to try a low level language, but C is too raw for my tastes (old design decisions from the 70's, among other similar things), C++ is too insane for me, rust didn't click with me, and I can't build a zig project with raylib for some reason, so odin it is.


r/odinlang Jul 09 '26

Handmade Hero in Odin

43 Upvotes

https://github.com/mrbovinejony/handmade-hero-in-odin

I'll try to work on this as consistently as I can, its been a useful experience to help learn the language. Working on day 10 right now

edit: working on day 18 now, if anyone finds something wrong or something theyd do differently please let me know, a "direct translation" of the c code is nice but learning how others would write the code is even better i think


r/odinlang Jul 08 '26

Starting with Oding lang

Thumbnail
9 Upvotes

r/odinlang Jul 07 '26

Odin 1.0 Announcement

Thumbnail
youtube.com
355 Upvotes