A modern systems language that
transpiles to C99.

A systems language that compiles to C99. Errors, optionals, generics, and compile-time metaprogramming are first-class, with no runtime to carry.

#import std.io;

fn main() void {
    var name str = "Prathmesh";
    const lang = "Tinoc";

    io.println("{s} is creator of {s} Programming Language!", name, lang);
}
typing main.tnc — watch it transpile
Philosophy

Five principles guide the design.

Tinoc respects C and its ecosystem. These principles shape every design decision.

01

Meaningful

Code states its intent. Names, syntax, and structure say what they mean.

02

Accurate

Types capture the contract. Sizes, optionals, and errors are explicit and checked.

03

Robust

Compile-time checks for the cases C leaves to chance: overflow, nulls, and errors.

04

Maximum Performance

Compiles to C99 with no runtime. What you write is what the machine runs.

05

Simple

A small, composable core. One way to read a loop, one way to make a type.

Why Tinoc

C-level control with better defaults.

Each feature addresses a known weakness of C while keeping its performance and control.

Transpiles to C99

Your .tnc files compile to portable C99 with one small runtime header. It runs anywhere a C99 compiler is available.

Explicit types

i8i128, u8u128, f32/f64/f128, str, slices, optionals, error unions, and generics.

Concise syntax

if, while, switch, and for without parentheses. |i| capture bindings. orelse, catch, and ? for safe unwraps.

Compile-time metaprogramming

#import resolves modules at comptime, #run executes code during compilation, #partial tracks enum switch coverage.

Standard library

std.io, std.math (inf, nan, and other constants), and std.collections with vec:T, map:(K,V), set:T, and hstr.

Built in the open

Developed in public on GitHub. The syntax, compiler, and docs are public from day one, and early contributors are welcome.

A taste of Tinoc

Small syntax, real structure.

A struct with methods, a generic Pair:T, and a range for. Each construct is small, and all of it compiles to plain C99.

  • Methods take self ^Point. Mutation is explicit, never hidden.
  • Generics are written :T and :(K, V).
  • Loops capture with |i|, a binding rather than a closure.
Explore the language
pair.tnc
#import std.io;

struct Point {
    x f32;
    y f32;

    fn translate(self ^Point, dx f32, dy f32) void {
        self^.x += dx;
        self^.y += dy;
    }
}

struct Pair:T {
    first T;
    second T;

    fn swap(self ^Pair:T) void {
        var tmp T = self^.first;
        self^.first = self^.second;
        self^.second = tmp;
    }
}

fn main() void {
    var p Point = Point { .x = 1.0, .y = 2.0 };
    p.translate(0.5, 1.5);

    var pair Pair:i32 = Pair:i32 { .first = 10, .second = 20 };
    pair.swap();
    io.println("{any}", pair);
}
Type system

Types you can trust.

Fixed-width integers, floats, strings, slices, optionals, error unions, and heap collections. Sizes and layouts are explicit.

i8 … i128signed integers
u8 … u128unsigned integers
f32 · f64 · f128floating point
bool · charboolean · codepoint
strlength-aware string
[N]T · []Tarrays · slices
^Tpointers
?Toptionals
!T · E!Terror unions
vec:Tdynamic arrays
map:(K,V)hash maps
set:Thash sets

Dive into the full type reference →

Documentation

Start with the basics.

The language reference lives next to the compiler in the repository.

Status

Development status

Tinoc is under active development. The compiler, syntax, and tooling are built in public. There is nothing to install yet, but you can follow the work, run the tests, and contribute.

Follow development See install status
  1. Compiler core

    Lexing, parsing, semantic analysis, and C99 emission.

  2. Syntax & docs

    The language reference on this site tracks the compiler feature by feature.

  3. Tooling

    A tinoc CLI: build, run, and transpile .tnc projects.

  4. Releases

    Prebuilt binaries and package-manager installs land once the compiler stabilizes.

Join the community

Help build the language.

Follow the repository, join the Discord, and take part in design discussions. Every issue and pull request helps.