Getting StartedThe Linux and Windows release packages are built to include the compiler andthe toolchain pieces needed by normal users, including LLVM tools where thepackage format supports bundling them. After installation, verify the compileris on your PATH:

Getting Started

Install a Release

The Linux and Windows release packages are built to include the compiler and the toolchain pieces needed by normal users, including LLVM tools where the package format supports bundling them. After installation, verify the compiler is on your PATH:

seen --version

The shipped binary also prints command usage when no command is supplied:

seen

Build from Source

Source builds still need local build tools because they rebuild the compiler and runtime:

  • LLVM 18+ with clang, opt, llc, llvm-as, and lld
  • GCC or a compatible C compiler for runtime objects
  • Git

On Ubuntu/Debian:

sudo apt install llvm-18 clang-18 lld-18 gcc git

On Arch Linux:

sudo pacman -S llvm clang lld gcc git

On macOS:

brew install llvm gcc git

Build the self-hosted compiler:

git clone https://github.com/codeyousef/SeenLang.git
cd SeenLang
./scripts/safe_rebuild.sh

The production compiler lands at compiler_seen/target/seen. Follow the repository rebuild rules when running this script: derive and set explicit memory limits rather than running an uncapped rebuild.

Hello World

Create hello.seen:

fun main() {
    println("Hello, Seen!")
}

Compile and run:

seen compile hello.seen hello
./hello

Or compile and execute in one step:

seen run hello.seen

Your First Project

A Seen project uses Seen.toml for configuration:

my_project/
├── Seen.toml
├── src/
│   └── main.seen
└── tests/
    └── test_main.seen

Minimal Seen.toml:

[project]
name = "my_project"
version = "0.1.0"
language = "en"

[registries]
default = "https://seen.yousef.codes/packages"

[dependencies]

[native.dependencies]

The language field sets the keyword language. Supported languages are en, ar, es, ru, zh, and ja.

Example program:

class Counter {
    var count: Int

    static fun new() r: Counter {
        return Counter { count: 0 }
    }

    fun increment() {
        this.count = this.count + 1
    }

    fun value() r: Int {
        return this.count
    }
}

fun main() {
    let counter = Counter.new()
    var i = 0
    while i < 10 {
        counter.increment()
        i = i + 1
    }
    println("Count: {counter.value()}")
}

Compile:

seen compile src/main.seen my_project
./my_project

Editor Setup

VS Code

cd vscode-seen
npm install
npm run package
code --install-extension seen-*.vsix

The extension provides syntax highlighting, snippets, tasks, and LSP-backed diagnostics/completions through the shipped seen lsp server.

Any Editor With LSP

seen lsp

Neovim:

require'lspconfig'.seen.setup{
  cmd = {"seen", "lsp"},
  filetypes = {"seen"},
  root_dir = require'lspconfig.util'.root_pattern("Seen.toml", ".git"),
}

Emacs:

(lsp-register-client
 (make-lsp-client :new-connection (lsp-stdio-connection '("seen" "lsp"))
                  :major-modes '(seen-mode)
                  :server-id 'seen-lsp))

Writing in Other Languages

Arabic hello world:

دالة main() {
    println("!مرحبا، سين")
}

Compile with the language flag:

seen compile hello_ar.seen hello --language ar

See Multi-Language Support for translation tables.

Next Steps

Architected in Kotlin. Rendered with Materia. Powered by Aether.
© 2026 Yousef.