Show HN: Jik – a self-hosted language using region-based memory management A developer released Jik, a statically typed programming language that compiles to C and manages memory through regions rather than garbage collection or manual heap allocation, with compiler checks preventing references across regions with incompatible lifetimes. Jik ships with type inference, optional type annotations, vectors, dictionaries, options, variants, exhaustive enum/variant tables, error handling, a standard library and a package ecosystem, and its toolchain requires a C compiler, auto-detecting clang, gcc, then cc on PATH, with only gcc and clang tested and MSVC untested. The release targets developers who want concise source code and predictable generated C without a runtime garbage collector. A readable, statically typed language that compiles to C and manages memory with regions. Open a ready-to-use Jik development environment. Jik is a statically typed programming language with a straightforward source-to-C compilation model. It avoids both garbage collection and manual heap allocation. It provides type inference, optional type annotations, vectors, dictionaries, options, variants, exhaustive enum/variant tables, error handling, a standard library, and a growing package ecosystem. The result is concise source code and predictable generated C. Jik's defining idea is its memory model: composite values are allocated into regions that determine their lifetime, while compiler checks prevent references across regions with incompatible lifetimes. Hello, Regions Functions that return composite values let the caller choose the destination region: php func default actions r: Region - Vec String : return "Open", "Save", "Quit" r end func main : actions := default actions println "first action: ", actions 0 end is the current function's local region. For a longer-lived result, pass an explicit Region or the region of another composite value. Parsing a config use "jik/string" func main : text := "host = localhost\nport = 8080\nmode = dev\n" settings: Dict String for line in string::split text, "\n", : parts := string::split line, "=", if len parts = 2: continue end key := string::trim parts 0 , value := string::trim parts 1 , settings key = value end host := settings "host" port := settings "port" if host is Some and port is Some: println "connecting to ", host?, ":", port? end end Error handling throws func safe div x, y : if y == 0.0: fail "division by zero" end return x / y end func show div x, y : try value := safe div x, y : println x, " / ", y, " = ", value except: println "cannot divide ", x, " by ", y, ": ", error msg end end func main : show div 12.0, 3.0 show div 7.0, 0.0 end To start programming in Jik: - download the latest release https://github.com/jik-lang/jik/releases/latest for your platform - extract the release archive - add the extracted directory to PATH - from the extracted directory, run jik help to confirm the executable works - jik run and jik build require a C compiler. Jik automatically looks for clang , gcc , then cc on PATH . To select a specific compiler, use the --cc flag or set the JIK CC environment variable. - Windows tip: For a simple GCC setup, download from WinLibs https://winlibs.com/ , and add its bin directory to PATH - Windows tip: For a simple GCC setup, download from - run the included hello example: jik run examples/hello.jik - generate C output: jik tran examples/hello.jik - build an executable: jik build examples/hello.jik Only gcc and clang host compilers were tested. MSVC was not tested. See the examples https://github.com/jik-lang/jik/blob/main/examples directory for variants https://github.com/jik-lang/jik/blob/main/examples/variants.jik , tables https://github.com/jik-lang/jik/blob/main/examples/tables.jik , more error handling https://github.com/jik-lang/jik/blob/main/examples/error handling.jik , word count https://github.com/jik-lang/jik/blob/main/examples/word count.jik , Dijkstra https://github.com/jik-lang/jik/blob/main/examples/dijkstra.jik , Newton's method https://github.com/jik-lang/jik/blob/main/examples/newton.jik , Game of Life https://github.com/jik-lang/jik/blob/main/examples/game of life.jik , Forth https://github.com/jik-lang/jik/blob/main/examples/forth.jik , and C interop https://github.com/jik-lang/jik/blob/main/examples/ffi demo.jik . Jik packages https://github.com/jik-lang/jik-packages provide reusable libraries and C bindings for writing larger programs. - Play Missile Defence https://jik-lang.org/showcase/missile-defence/ — a Jik game built with the Raylib wrapper https://github.com/jik-lang/jik-packages/tree/main/packages/raylib . - Source code https://github.com/jik-lang/jik-packages/tree/main/packages/raylib/examples/missile defence - Note: the browser demo is a separate WebAssembly build You need Make and Clang or GCC. From the repository root: make Build jik make test Build and run the tests make help Show build commands Use make CC=gcc to build with GCC; Clang is the default. The build uses the bundled C seed, so you do not need to download a Jik compiler. See the development notes https://github.com/jik-lang/jik/blob/main/docs/development.md for bootstrap stages and release builds. Download jik-language-tools- .vsix from the latest release https://github.com/jik-lang/jik/releases/latest . In VS Code, open the Extensions view, select the ... menu, choose Install from VSIX... , and select the downloaded file. The extension provides syntax highlighting, import-aware standard-library completion, and hover documentation and signatures.