GitPedia

Cwerg

The best C-like language that can be implemented in 10kLOC.

From robertmuth·Updated June 11, 2026·View on GitHub·

**To try out Cwerg, please follow [quick_start_user.md](quick_start_user.md)** The project is written primarily in Python, distributed under the Apache License 2.0 license, first published in 2019. Key topics include: arm, arm64, assembler, compiler, elf.

 ██████╗██╗    ██╗███████╗██████╗  ██████╗
██╔════╝██║    ██║██╔════╝██╔══██╗██╔════╝
██║     ██║ █╗ ██║█████╗  ██████╔╝██║  ███╗
██║     ██║███╗██║██╔══╝  ██╔══██╗██║   ██║
╚██████╗╚███╔███╔╝███████╗██║  ██║╚██████╔╝
 ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝  ╚═╝ ╚═════╝

To try out Cwerg, please follow quick_start_user.md

The best C-like language that can be implemented in 10kLOC

Status
GitHub stars
Discord

Cwerg aims to be a complete, compact and fast "from-scratch" compiler for a C-like language.
It has no dependencies and consists of the following components:

  • Frontend (FE): Overview, Additional Docs, Code

    A low-level C-like language with a Python inspired concrete syntax.
    Still under active development

  • Intermediate Representation (IR): Overview, Code

    Defines an IR that serves as the interface between frontend and backend.

  • Backend (BE): Overview, Additional Docs, Code

    Muti-target (currently: X86-64, Aarch64, Arm32).

    Also suitable for other compilers and as a JIT.

To get started hacking on Cwerg please read quick_start_developer.md.

Philosophy

Most components are implemented twice (see rationale):

  1. spec/reference implementation: Python 3.10
  2. high performance implementation: C++20 (with limited STL usage)

Re-implementations in other languages are explicitly encouraged.
A lot of code is table driven to facilitate that.

Cwerg de-emphasizes quality of the generated code (the hope is to come within 50%
of state of the art compilers) in favor of a small code base that can be
understood by a single developer and very fast translation times.

Explicit line number targets are in place to prevent feature creep:

  • frontend: 10kLOC
    (current counts)
  • backend 10kLOC (target independent code) + 5kLOC(per target
    (current counts)
    (We cheat a little bit and do not include various tables in these numbers.)

The translation speed target is 1000k LOC per sec using at most 4 cores
on a 2020 era midrange desktop or high end laptop.

Inspirations

Contributors

Showing top 4 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from robertmuth/Cwerg via the GitHub API.Last fetched: 6/14/2026