Simple.
Compiled.
Powerful.

main.sere
struct Point:
    x: i32
    y: i32

    def length_sq(self) -> i32:
        return self.x * self.x + self.y * self.y

def main() -> i32:
    p = Point(3, 4)
    print(f"sere {p.length_sq()}")
    return 0

Simple to write. Native to run.

Simple

Clean syntax: defs, lists, f-strings, and indentation. Read it once and you can start writing.

Compiled

LLVM 22 backend. Sere compiles to a native binary — no interpreter and no VM between you and the machine.

Powerful

Systems control when you need it: Unique and Shared pointers, structs, enums, and macros.

What you get

Real types

i8–i64, f32/f64, list[T], dict[K, V], Unique[T], and copy-by-value structs. Types are checked, not guessed at runtime.

Macros

quote bodies and name!(...) invocation. Expand code at compile time without leaving the language.

Memory

unique, shared, alloc, and free. Plug in mark-sweep, arena, or your own collector.

Diagnostics

Errors are labeled TypeError, NameError, AttributeError — clear names that match what actually went wrong.

Tooling

LSP for Cursor and VS Code: highlighting, go-to-definition, hover, rename, and # type: ignore.

Libraries

Pack a project into a .slib and drop it in libs/. Native C in the library compiles into the same file.

Start writing Sere

Portable Pre-release v0.1.0 is up. Download the zip, or read how to install it.