The C+ Manual
C+ compiles to native code through LLVM. It has no garbage collector, no exceptions, no closures, no overloading, no implicit conversions, and no null. Memory is managed manually and checked through ownership and borrowing rules, with C ABI compatibility in both directions.
This manual documents C+ 0.0.28. The source of truth for behavior is the tagged compiler and package tree at v0.0.28.
Start here
- Getting started installs the toolchain and builds the first program.
- A tour of C+ walks through a complete project in one sitting.
- The C+ guide covers the judgment calls that syntax alone does not answer.
- Language reference lists the complete surface compactly.
- Language specification records the normative rules.
- C+ 0.0.28 release notes record every shipped change and migration item.
- Reproducible proofs link claims to programs and commands that exercise them.
Platforms in 0.0.28
C+ programs run across seven supported platform families:
macos linux windows ios android esp32 wasm
The native cpc toolchain runs on macOS, Linux, and Windows. It self-links executables on those hosts and cross-compiles static libraries and headers for iOS, Android, and ESP32. The wasm platform is used through cpc-wasm; it is not a native cpc --target value. See Platforms and targets for target names and artifact behavior.
Facet has native backends for the supported application platforms:
| Platform | Facet backend | Status in 0.0.28 |
|---|---|---|
| macOS | facet_appkit | Supported |
| iOS | facet_uikit | Supported; simulator exercised, device build available |
| Android | facet_android | Supported |
| Linux | facet_gtk | Supported |
| Windows | facet_win32 | Supported |
Facet applications use facet_runtime: register windows with app.window(name, factory, chrome:), register routes on each window, and start the application with App::run. The pre-0.0.28 app.screen, Screen::chrome, runtime::Window, and global content-navigation APIs have been removed.
What changed in 0.0.28
- Applications use the package
entrykey;[[bin]]and[lib]were removed. C-facing library products use[library]. async fn mainand async#[test]are driven by the compiler. Synchronous callers consume futures with.wait()orfuture::wait_or_cancel;executor::block_onandexecutor::runwere removed.guard letcomplements useelse Pattern, without pipe delimiters.- Facet application/runtime and agent integration moved into the
facet_runtimeandfacet_agentpackages. sqlite/rawreplaces the separatesqlite_ffipackage,static_arenareplacesstatic-arena, andterminal/backendreplacesterminal/appkit.cpc query complete, MCPcomplete_at, and LSP completion share the same compiler implementation. LSP and MCP retain a warm project session.- The package manager supports exact tagged dependencies, a per-user package store, local overrides, and Android Maven/AAR dependency resolution.
- Native capability packages cover notifications, application links, camera, location, sensors, biometrics, secure storage, permissions, file picking, haptics, sharing, HTTP, and filesystem watching, with platform implementations or explicit unsupported outcomes.
C plus packages
The language core supplies types, ownership, control flow, compilation, and the C ABI. The standard library, UI stack, platform bindings, services, data libraries, and numerical libraries live in packages. See the package index and modules and packages.
Versioned manual
The clean /docs URLs always serve Doc::CURRENT. Frozen releases remain available under /docs/{version}. Every page also has a raw Markdown representation by appending .md; /llms.txt indexes the current manual and /llms-full.txt concatenates it.