sexc
A package manager and build system for C, written in C.
Every package has a sexc.json. A workspace holds many of them, and they depend on each other with "workspace:*", the way npm and pnpm do. sexc works out the order, compiles everything in parallel, rebuilds only what a change touched, links, and runs your tests. A registry where anyone can sign up, publish and install is at packages/.
Early. The build system works, and it builds this website. The registry is open: sign up, publish, install. Everything here is C, this site, its design system and the registry server included: no JavaScript, no Makefiles, no shell scripts.
Quickstart
You need a C compiler and nothing else. In a checkout:
$ cc -o bootstrap bootstrap.c && ./bootstrap
$ ./sexc build
$ ./sexc test
$ ./sexc run sexc-web -- servebootstrap compiles a first sexc in one compiler call, has it build the real one, and links that to ./sexc. From then on sexc builds itself.
A package
{
"name": "@sexc/http",
"version": "0.1.0",
"description": "A small HTTP/1.1 server",
"kind": "library",
"dependencies": { "@sexc/core": "workspace:*" }
}Sources default to src/*.c, public headers to include/, tests to tests/*.c. See manifest.txt for every field.
Why
- One language, top to bottom. The tool, the MCP server, the registry, this website and its design system are all C.
- Strict dependencies. A package sees the headers of the packages it declares and nothing else, like pnpm's strict
node_modules. - Fast. Parallel, incremental builds that follow every header a file includes.
- Made for agents.
llms.txt, an MCP server,--jsonon every command, andsexc help --jsondescribing them all. - Plain text all the way down. These pages are text files with links in them.
curl sexc.dev/docs/cli.txtgets you the text without any markup.
Files
- total 4
- drwxr-xr-x856Oct 26 12:00docs/# how to use sexc
- drwxr-xr-x-Oct 27 12:00packages/# everything published
- drwxr-xr-x3.0KOct 27 12:00registry/# sign up, install and publish packages
- -rw-r--r--0Oct 26 12:00llms.txt# sexc, for language models
Keys: alt+shift (or ctrl+option on a Mac) with h for this README, d docs, p packages, r registry, l llms.txt, u your account.