jakubtomsu / awesome-odin

A collection of awesome Odin libraries, bindings, software and resources 🧙‍♂️✨
348 stars 19 forks source link
awesome gamedev odin odin-lang resources webdevelopment

logo

A curated list of awesome Odin libraries, software and resources.

Odin is a general-purpose programming language built for high-performance, modern systems and data-oriented programming.

A star (⭐) means the resource is exceptionally good.

[!IMPORTANT] Many commonly used bindings are already included in the Vendor Collection which comes with the compiler

Contents

Other Lists

Getting Started

Packages

Libraries

List of libraries implemented in Odin

Gamedev

Name Description License Tags
Jamgine Self-contained realtime graphical application engine with a simplistic design philosophy MIT Gamedev, Engine, Graphics, Vulkan
LBP Serialization Easy-to-use LBP binary serialization utility MIT Gamedev, Serialization, Assets
GL Font A library for quickly setting up font rendering Missing OpenGL, Graphics, Font
jobs Job system MIT Gamedev
glcache Cached OpenGL calls None OpenGL, Graphics, Gamedev
Marshmallow engine WIP Game Engine written in pure Odin None Gamedev, Engine
Godot Toolkit Toolkit for Godot 4.0 to work with GDExtension and generating boilerplate Apache 2.0 Gamedev, Engine, Utility
glTF2 Native Odin implementation of glTF2 loading file format MIT Gamedev, Format, 3D
Aseprite loader Handler for Aseprite's .ase/.aseprite, .aseprite-extension & extended .gpl files writen in Odin BSD 3-Clause Gamedev, 2D, Format
Odin + Raylib Hotreloading Template An Odin + Raylib game template with Hot Reloading pre-setup. My game projects tend to have some things in common, so I made this template so I can get up and running quicker Custom Gamedev, Template, Raylib
Anima A 2D animation library for Odin. Inspired by the LÖVE library anim8 MIT Gamedev, 2D, Utility, Raylib
ZTME Simple Tile Editor Made For Raylib In Odin MIT Gamedev, 2D, Utility, Editor, Raylib
pathgrid A simple 2D grid-based pathfinding library for Odin BSD 3-Clause "New" or "Revised"
VEFontCache A port of Vertex Engine GPU Font Cache (VEFontCache) for the Odin programming language Custom
Dusk A small game framework / project template MIT Gamedev, Template, Framework, Engine, ECS
mikktspace A port of Morten S. Mikkelsen's tangent space algorithm for Odin zlib Gamedev, Graphics, 3D

Formats

Name Description License Tags
Vox loader Simple loader for MagicaVoxel's .vox models MIT Gamedev, Assets
LDtk utility Simple loader for LDtk files. LDtk is a moder 2D level editor from the creator of Dead Cells MIT Gamedev, Assets, Tools
Tiled loader A simple Tiled map loader. MIT Gamedev, Assets, Tools
File Formats Odin implementations of various file formats - ISO, EBML BSD-3 Format
INI Parser .INI file parser MIT Format
PDB Reader A library for reading .pdbs and dumping Windows stacktraces BSD-2-Clause Debugging, Auxiliary
Java classfile parser A parser and verifier for Java .class files MIT Format, Java classfile
RFC 3339 Date Parser Parser for the RFC 3339 date & time spec written in odin, follows the TOML spec None Format, Parser
TOML Parser A simple TOML parser MIT
BML Parser Structured binary parser based on XML schemes None

Networking

Name Description License Tags
Odin HTTP A HTTP/1.1 server & client implementation for Odin purely written in Odin (besides OpenSSL) MIT Webdev, Server, Networking
HTTP Simple Odin http(s) client BSD-3 Webdev

Webdev

Name Description License Tags
GraphQL Parser GraphQL language parser MIT Webdev
OstrichDB A document-based NoSQL, SQLite-esque database for local machine use, ideal for beginners creating and testing backends and application data Apache 2.0 Database

Templating

Name Description License Tags
Mustache Mustache logic-less templating engine MIT Template, Webdev
Temple Templating engine that compiles to Odin io calls None Template, Webdev

Data structures

Name Description License Tags
Red/Black Tree Red Black Tree Implementation None Datastructure
Piece Table Piece-Table implementation written in Odin, and comes with unlimited linear undo & redo capability MIT Datastructure
Shared Memory Queue Thread safe lock free ring buffers that seek to minimize false sharing, MPMC and SPMC None Datastructure, Multithreading

Other

Name Description License Tags
Simple History A simple undo / redo history MIT UI, Gamedev, Tools, Editor
ADS1256 driver Driver for Ti ADS1256 MIT Embedded
Mani Lua bidirectional bindings generator None Lua, Generator
odin-build Build system for Odin None Auxiliary, Tooling
Snowflake Twitter Snowflake UID generation MIT UID
App Version Generate and display application version information MIT Tools, Utility, CLI
CLI Argument Parser Using types to specify how command line arguments should be parsed None Utility, CLI, Parser
Odin-style CLI Argument Parser A command-line argument parser mimicking the Odin compiler's style MIT CLI, Utility, Parser
Terminal Color Simple, easy to use terminal colors MIT CLI, Utility
Back Cross-platform back/stack traces for assertion failures, the tracking allocator, and segfaults MIT Debugging, Auxiliary
locale An experimental Odin libray to manage locale informations. Inspired by findlocale C library FreeBSD
podin .pot generation utility from Odin sources to collect translatable messages to be managed with tools like PoEdit FreeBSD

Built-in

This is a list of notable libraries which are distributed along with the Odin compiler. For a full list head over to Official Package Documentation.

Base

Base packages are required by the compiler

Name Description
builtin Contains Odin's predeclared identifiers, like basic types, procedures like len, size_of etc and many built-in constants like ODIN_DEBUG
intrinsics Contains Odin's compiler-level intrinsics, including many low-level procs like atomics, SIMD, X86 or WASM intrinsics and compile-time type reflection
runtime This is the runtime code required by the compiler. Contains definitions of context, allocator, logger, map, dynamic array, type_info etc. and implements things like appending to a dynamic array

Core

The core packages implement most of the common features you need while working with Odin

Name Description
fmt String formatting and console printing
os Cross-platform OS interface. Read files, change CWD, etc.
strings Common string operations
math Common math procedures
math/linalg Linear algebra package for 2D and 3D math with vectors, matricies and quaternions
mem Common memory operations and allocators
encoding/json Implements a JSON reader/writer, including a way to automatically marshal (serialize) structs
log Implements a console and a file logger
sort Implements sorting algorithms
sync Synchronization primitives for multithreading
thread Create and manage OS threads
reflect Runtime type reflection
path/filepath File path string operations

Vendor

Vendor packages are commonly-used third-party libraries distributed along with the compiler

Name Description Tags
raylib Bindings for Raylib, a simple and easy-to-use library to enjoy videogames programming Gamedev, Graphics
glfw Bindings for GLFW, a multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop Gamedev, Graphics
lua Bindings for Lua, a powerful, simple and embeddable scripting language Lua
fontstash Odin implementation of Fontstash - a lightweight online font texture atlas builder Gamedev, Text, Graphics
miniaudio Bindings for Miniaudio, a lightweight audio library Audio, Gamedev
microui Odin implementation of microui, a tiny immediate-mode UI library UI, Tools, ImGui, Gamedev
directx/d3d11 D3D11 bindings Gamedev, Graphics, 3D
cgltf Bindings for a GLTF asset loader Gamedev, Graphics, Format, Assets
darwin/Metal Bindings for Metal API Gamedev, Graphics, 3D
stb Bindings for libs from STB Format, Gamedev, Assets, Utility
sdl2 Bindings for SDL2, a cross-platform development library Gamedev, Graphics, Audio, Networking

Bindings

List of Odin bindings to C/C++ libraries.

Name Description License Tags
Assimp Bindings for Assimp, Open Asset Import Library is a library to load various 3d file formats into a shared, in-memory imediate format. It supports more than 40 file formats for import and a growing selection of file formats for export MIT Assets, Gamedev, Format
bcm2835 Bindings for BCM2835 Broadcom chip/raspberry pi1/2/3/4 MIT Embedded
bgfx Bindings for bgfx, a cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library Unlicense Graphics, Gamedev
Box2C Idiomatic Odin bindings for Box2c (aka Box2D 3.0, not to be confused with older versions which were written in C++!) None Gamedev, Physics
Box2C (Odin-style) Box2D 3.0 bindings for Odin language None Gamedev, Physics
CUE SDK Bindings for the Corsair CUE SDK. Developers can use the iCUE SDK to access CORSAIR devices, enabling them to control device LEDs and create custom lighting experiences. Unlicense
Dear Imgui Generated Dear ImGui bindings using dear_bindings. About Dear ImGui is a bloat-free Graphical User interface for C++ with minimal dependencies MIT UI, ImGui, Gamedev, Tools, C++, Cross Platform
DuckDB Bindings for DuckDB, a fast in-process analytical database MIT Webdev, Database, SQL
EFSW Bindings for the [Entropia file system watcher(https://github.com/diegostamigni/efsw) Unknown Files
ffmpeg Bindings for ffmpeg, a complete, cross-platform solution to record, convert and stream audio and video None Video
FMOD Bindings for FMOD MIT Gamedev, Audio
Freetype A binding for FreeType MIT Graphics, Text, Gamedev
GameInput Bindings for Microsoft's GameInput SDK CC0-1.0 Gamedev, Windows
harfbuzz Bindings for HarfBuzz BSD 2-clause Text
ICU Bindings for ICU4C BSD 2-clause Text
Jolt Bindings for the Jolt physics engine None Gamedev, 3D, Physics
libbfd Bindings for libbfd GPLv2
LibClang Bindings for libClang for Odin None
libpcap Bindings for libpcap None Networking
librg A binding for librg, MMO networking library Missing Gamedev, Server, Networking
libui-ng Bindings for libui-ng: a portable GUI library for C. "libui for the next generation" None UI, Tools
LLVM Generated bindings for LLVM (LLVM-C 17.0.1), currently Windows-only None Compilers
Luau A fast, small, safe, gradually typed embeddable scripting language derived from Lua MIT Language, Lua
LZ4 Bindings for LZ4, an extremely fast lossless compression library BSD 2 Clause Compression, Gamedev
m3d Bindings for model3d format, a 3D model format specification and single header SDK. Supports skeletal animations, voxels and has the best data density None Gamedev, Graphics, 3D, Format
meshoptimizer Bindings for meshoptimizer, a mesh optimization library that makes meshes smaller and faster to render None Gamedev, Graphics, 3D, Tools
Mimalloc Bindings for mimalloc MIT Memory, Allocator
mpc This is a binding to the mpc for Odin programming language. Mpc is a lightweight and powerful Parser Combinator library for C None Parser, Language, Format
MySql Bindings for MySQL Client MIT Database, Webdev, SQL
Nuklear Bindings for Nuklear, s single-header ANSI C immediate mode cross-platform GUI library None UI, ImGUI, Gamedev, Cross Platform
ObjC Bindings for the objc 2.0 runtime MIT Darwin
odin-renderdoc Bindings for Renderdoc API, capture frames and open Renderdoc UI directly from your application MIT Gamedev, Graphics
ONNX Bindings for ONNX and a generator MIT ML, GPU
OpenAL Bindings for OpenAL, a cross-platform 3D audio API appropriate for use with gaming applications and many other types of audio applications None Gamedev, Audio
OpenAL A binding for OpenAL, a cross-platform 3D audio API MIT Gamedev, Audio
PostgreSQL Complete & documented bindings for libpq (PostgreSQL) MIT Database, Webdev, SQL
Raqm Bindings for Raqm BSD 2-clause Text
RGFW RGFW is a cross platform, lightweight, single header window abstraction library for creating and managing windows CC0 Gamedev, Graphics, Platform
Rift A binding for the Oculus Rift SDK for VR Unlicense Gamedev, VR
Sokol Odin bindings for Sokol, a collection of single-header C libraries for cross-platform windowing, graphics, audio, file loading, and more! zlib Gamedev, Input, Audio, Cross-Platform
Steamworks Bindings for Steamworks SDK MIT Gamedev
Termbox A binding for termbox, a text-based user interface alternative to ncurses MIT UI
Tracy Bindings for the Tracy profiler BSD-2-Clause Gamedev, Performance
ufbx A binding for ufbx, a simple FBX loader library Unlicense Gamedev, Assets, 3D
WebUI Bindings for WebUI, use your preferred language in the backend and modern web technologies in the frontend MIT UI, Cross Platform
WGPU Bindings for WGPU Apache 2.0 Gamedev, GPU, WGPU, Graphics
XInput A binding for XInput, a windows input library MIT Gamedev, Windows, Input
zeromq A binding for ZeroMQ, An open-source universal messaging library Missing Networking

Gists

Useful Github Gists in Odin.

Name Description Tags
GLFW, OpenGL Window Tutorial GLFW and OpenGL example with very verbose comments and links to documentation for learning Gamedev, Graphics, GPU, Learning, OpenGL, GLFW
Metal in Odin Example of using Metal in Odin Natively Gamedev, Graphics, GPU, Metal, Darwin, SDL, Shaders
3D Collision Simple raylib example of 3d FPS player movement with triangle collision Gamedev, Raylib, Graphics, Physics, 3D
Block Allocator Allocator based on Sebastian Aaltonen's Offset Allocator, for suballocating GPU heaps Gamedev, GPU, Memory, Allocator
Octahedral Mapping Sphere and Hemisphere Octahedral mapping visualization in Odin and Raylib Gamedev, Graphics, GPU, Raylib
MicroUI SDL Demo A demo of MicroUI + SDL2 Gamedev, UI, ImGui, SDL
MicroUI Raylib Demo A demo of MicroUI + Raylib Gamedev, UI, ImGui, Raylib
SDL OpenGL Demo Simple SDL2 + OpenGL demo Gamedev, Graphics, OpenGL, SDL, 3D
D3D11 in Odin Simple D3D11 based on d7's example Gamedev, Graphics, Windows, SDL, 3D
Vulkan Example Vulkan-tutorial example in Odin Gamedev, Graphics, Vulkan, GLFW, Shaders
Minimal Metal Window Minmal Cocoa Window with Metal API Gamedev, Darwin, Metal, Cocoa, Graphics
D3D12 Triangle Single-procedure D3D12 triangle example Gamedev, Graphics, D3D12, Shaders, SDL
UUIDV4 UUID Generator UID, Cryptography, Webdev
WASM4 Bindings WASM-4 Bindings Webdev, WASM, Graphics
Text Editor Simple text editor Graphics, Tools, Editor, UI, Font
Odin logger for Raylib Raylib logging callback to Odin logger Gamedev, Tools, Utility
GLFW and Vulkan Boilerplate Odin, GLFW & Vulkan boilerplate for Drawing a Triangle based on https://vulkan-tutorial.com Gamedev, Graphics, Vulkan, GLFW, Shaders
LLDB visualization Python script for slice, map, and string formatting in LLDB Debugger, Tools, Utility
Realtime Collision Detection Port of some 3d collision procedures from the 'Realtime Collision Detection' book Gamedev, Physics, Collision
Open window using Windows API Minimal example of how to open a window using core:sys/windows Windows, Graphics
Rect Cut Procedures for cutting up a rect, useful for IMGUI layouting UI, ImGui

Resources

List of Odin tutorials, articles, videos and other resources.

Name Description Tags
Odin Overview Official Odin language overview Example, Article
Memory Allocation Strategies Series about memory allocation by GingerBill Article
demo.odin A demo of basically all odin features Example
Introduction to the Odin programming language Video series about Odin and programming Youtube, Playlist
Space Shooter with SDL2 and Odin Video series about programming a Space Shooter game with SDL2 and Odin Youtube, Tutorial, Playlist
Odin Programming Language: An Introduction Introduction to the Odin Programming Language by Ginger Bill from 2020-11-26 Youtube, Talk
Jai vs Odin systems programming languages Comparison of Jai and Odin (Non-spicy takes!) Youtube
Why I Use Odin for Game and Engine Development Video essay explaining what makes Odin great for game and engine development Youtube, Gamedev
Make games using Odin + Raylib Series about making a 2D platformer in Odin and Raylib Youtube, Playlist, Gamedev
5 Reasons why Odinlang is great for gamedev Video about what makes odin great for gamedev Youtube, Gamedev
Odin + WASM = 💙 Example of using Odin, WASM and WebGL together. Example, WASM, Webdev
Solar Storm Renderer A deepdive into the rendering techology of the game Solar Storm Article
Hot Reload Hot reload gameplay code. What, why, limitations and examples! Gamedev, Utility, Article
Raylib + Odin + WASM Experiment with using Raylib + Odin on web Gamedev, Raylib, WASM, Example
Sokol WASM Playground Example of Sokol and Odin on web using emscripten Gamedev, Sokol, WASM, Example
Odin OpenCV Demo Odin with OpenCV image processing demo OpenCV, Demo
Playing audio files with miniaudio Play audio files from memory with Odin #load Miniaudio, Audio, Demo
Introduction to the Odin Programming Language Long article about the basics of Odin. Finishes off with some examples of useful core libraries Article
Snake game from start to finish 90 minute video of how to implement a snake game using Raylib Youtube, Gamedev
Setup Sublime Text for Odin Shows how to turn Sublime Text into a powerful Odin development environment, including code completion Youtube, Utility
Make a Breakout game from start to finish Karl Zylinski shows how to make a breakout clone in Odin+Raylib in 2 hours Youtube, Tutorial, Gamedev
Make a Snake game from start to finish Beginner tutorial about making a simple snake game in Raylib Youtube, Tutorial, Gamedev
Simple Undo/Redo An article about a grug brained approach to level editor history Article, Gamedev

Interviews

Tooling

A linter is built into the compiler, see odin help check, specifically the -vet-* and -strict-style flags.

Built with Odin

Open-source Projects

Open-source software implemented in Odin.

Name Description License Tags
Spall Web spall is a profiler library and a web-frontend for exploring your code and digging into potential performance problems MIT Performance, Webdev, WASM, WebGL
Todool A To-Do Editor with different modes, advanced movement & powerful commands. Track your development cycle with ease MIT Utility, Tools
HTMX Example TODO List App An implementation of Todo MVC using my in development Odin web stack. None Webdev, Tools
Dungeon of Quake Retro FPS game inspired by Quake MIT or Public Domain Raylib, Gamedev, 3D, Shaders
LD55 - The Last Summoner LD55 entry made with Odin and Raylib. You are the last summoner alive in an apocalypse and you have to survivor using your summons! Gamedev, Raylib
Asterboids Rogue-like space shooter. Made with Odin + Raylib MIT Gamedev, Raylib, 2D
Voxel Game A WIP voxel game engine inspired by minecraft None Gamedev, Raylib, 3D
Solitare Solitare clone using Odin and Raylib None Gamedev, 2D, Raylib, Clone
Tetris Simple tetris clone None Gamedev, 2D, Raylib, Clone
My Pong Pong clone in Odin and Raylib None Gamedev, 2D, Raylib, Clone
Simple Neural Network A little experiment with machine learning based on 3Blue1Brown's series on basic deep learning None ML
Lasers A small 2d laser simulation with SDL2 to learn Odin None Gamedev, 2D, SDL
H264 Decoding A minimal reference version of H264 video decoding with D3D11 and Windows Media Foundation API None Example
Spurtle Wordle clone but with 6 letters GPL-3.0 Raylib, Gamedev, Clone
Atlas Builder Builds an atlas for use in Odin 2D video games. Supports aseprite files MIT Gamedev, Tools

Closed-Source Projects

A list of interesting software built in Odin. It's not open-source, but it can still be useful or inspiring.

Name Description Tags
EmberGen Real-time smoke, fire and explosion simulations for film and games Gamedev, GPU, Graphics, Physics
GeoGen Real-time Landscape, terrain and planet generator app Gamedev, GPU, Graphics
Solar Storm Sci-fi artillery game with local multiplayer (NOTE: the source code is available if you buy the game on itch.io) Gamedev, GPU, Physics, 2D
CAT & ONION A whimsical adventure game about a cat (NOTE: the source code is available if you buy the game on itch.io) Gamedev, 2D
entry00 A simple 2d game made in 8 hours Gamedev, 2D

Editor Support

Name Description License
OLS Odin language server MIT
JetBrains IDEs Odin support with static code analysis for IntelliJ and others MIT
Sublime Text Odin syntax definition for Sublime Text MIT
GNU/Emacs Odin editing mode for GNU/Emacs None
Flycheck GNU/Emacs flycheck support for Odin Unlicense
4coder 4coder customization layer for odin None
Vim Odin highlighting for Vim MIT
Tree Sitter Odin Tree-sitter grammar MIT
Zed Zed Editor plugin integrating OLS and Tree-sitter MIT

Deprecated

A list of outdated/deprecated/archived libraries, included for the sake of completeness and in case someone wants to update it.

Link Reason
https://github.com/Breush/odin-binding-generator Lost interest
https://github.com/zhibog/odin-unittest check out core:testing
https://github.com/dotbmp/odin-json check out core:encoding/json
https://github.com/vassvik/odin-gl check out vendor:openGL
https://github.com/JoshuaManton/odin-sdl2 check out vendor:sdl2
https://github.com/kevinw/raylib-odin check out vendor:raylib
https://github.com/librg/odin-enet check out vendor:ENet
https://github.com/vassvik/odin-stb check out vendor:stb
https://github.com/sumofat/odin_cgltf check out vendor:cgltf
https://github.com/atkurtul/odinvk check out vendor:vulkan
https://github.com/SrMordred/odin-lua check out vendor:lua
https://github.com/mp768/odin-lua-bindings check out vendor:lua
https://github.com/laytan/odin-pattern check out core:text/match

Links

Contributions

Please submit a PR to add any interesting/useful Odin projects! Make sure to properly link license and add useful tags for easier searching.