MCPcopy Index your code
hub / github.com/celer-pkg/celer

github.com/celer-pkg/celer @v0.3.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.3.2 ↗ · + Follow
1,574 symbols 7,799 edges 162 files 304 documented · 19%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Celer

A lightweight, non-intrusive, delivery-oriented C/C++ package management tool for projects centered on CMake

License: MIT Go Report Card GitHub release

English | 🌍 中文


✨ Why Celer?

Celer is designed to lower the barrier to hosting, handoff, and reuse in C/C++ projects by handling the complexity of build, compile, and install steps. At the same time, it separates dependency management and build environments from business code. This separation of concerns makes project boundaries clearer and engineering workflows easier to manage.

In real C/C++ projects, the common pain points usually look like these:

  • 🎯 High integration cost: existing projects often depend on specific build conventions, so taking over a project means touching code and build scripts.
  • 🚀 Complex cross-compilation environments: compilers, sysroots, ABIs, environment variables, and dependency sources are scattered, so switching platforms and reproducing environments is expensive.
  • 📦 Built artifacts are hard to reuse: repeated builds are common, outputs vary across machines and stages, and environment drift is easy to introduce.
  • 🔧 Third-party libraries use many build tools: CMake, Makefiles, Meson, B2, and QMake all need different handling.
  • 🏢 Projects contaminate each other: dependency versions, macros, and environment variables leak globally and create conflicts.
  • 🔗 Team collaboration and delivery are difficult: environments are tightly bound to individual machines, making handoff, collaboration, and CI rollout expensive.

🚀 Quick Start

# 1. Install Celer (or download a prebuilt package from releases)
git clone https://github.com/celer-pkg/celer.git
cd celer && go build

# 2. Initialize with a configuration repository
celer init --url=https://github.com/celer-pkg/test-conf.git

# 3. Configure your platform and project
celer configure --platform=x86_64-linux-ubuntu-22.04-gcc-11.5.0
celer configure --project=project_test_01

# 4. Test clone, build and install a library.
celer install glog@0.6.0

📖 Full Quick Start Guide

💡 How It Works

workflow

Celer generates a toolchain_file.cmake based on your platform and project configuration. That file connects your project to predefined toolchains, dependencies, environment variables, and build settings.

That means:

  • your project can keep its existing CMake structure;
  • dependencies and platform configuration are managed externally in a unified way;
  • once generated, the toolchain file can be reused independently for team collaboration, CI/CD, and issue reproduction.

🌟 Core Capabilities

Capability Value
Cross Compilation Use TOML to describe toolchains and build environments for ARM, x86, QNX, Windows, Linux, and more in one place.
Project Isolation Each project owns its own dependency versions, environment variables, macros, and CMake variables, reducing conflict risk in parallel development.
Build Systems Works natively with CMake, Makefiles, Meson, B2, QMake, and GYP, reducing the cost of hosting third-party libraries.
CMake Config Automatically fills in CMake configuration for prebuilt binaries, lowering the integration barrier.
Artifact Cache Uses hash-based caching of build artifacts, suitable for private libraries, binary distribution, and large-scale repeated builds.
Repo Cache Reuses source code by caching source repositories, reducing integration cost when external networks or GitHub/GitLab access are unavailable.
Embedded Supports MCU and bare-metal environments through embedded_system, without depending on a traditional OS runtime.
Development Mode After celer deploy, continue development directly in any IDE using the generated toolchain file.
CI/CD Integration Platform and project configuration can flow directly into pipelines, reducing drift between developer and CI environments.
Snapshots Export reproducible workspace snapshots for debugging, traceability, and handoff.

🆚 Where Celer Differs from Other C++ Package Managers

If your only need is “how do I fetch an open-source library”, Conan, vcpkg, and XMake already provide mature solutions.

Celer is stronger where delivery efficiency and consistency in complex engineering environments matter more:

Dimension Conan / vcpkg / XMake common approach ✅ Where Celer is stronger
Intrusion Often requires adapting recipes, ports, or ecosystem-specific integration Integrates existing CMake projects through toolchain_file.cmake without intrusion
Cross-compile Toolchains, profiles, and triplets are often assembled separately Platforms, toolchains, environment variables, and dependencies are described in one unified configuration
Project isolation Shared configuration often causes version conflicts Dependencies, variables, and build settings are maintained at project scope, with clearer boundaries
Multi project coordination Frequently wired manually one project at a time One configuration can coordinate multiple subprojects
Private binaries Usually needs extra packaging conventions and workflow glue Better suited for internal artifact repositories, prebuilt packages, and custom delivery flows
Caching and rebuilds Less focused on team-wide artifact reuse Hash-based artifact caching emphasizes team-wide reuse and build stability
Sharing and reproduction Users often need to understand the full local toolchain stack Generated toolchain files and workspace snapshots are easier to share, reproduce, and hand off

In one sentence:

Celer focuses on delivery efficiency, cross-compilation, and team collaboration—not on generic ecosystem size.

📖 Learn more about the problems Celer is built to solve

📚 Documentation

Getting Started: - Quick Start Guide - Get started in 5 minutes - Create a New Platform - Define custom cross-compilation environments - Create a New Project - Configure project-level settings - Add a New Port - Host and manage your own libraries

Advanced Topics: - Generate CMake Configs - Auto-generate configuration for prebuilt binaries - PkgCache Shared Cache and NFS Permissions - Share package caches across teams with NFS and append-only directory protection - Cache Build Artifacts - Reuse built artifacts to reduce repeated integration cost - Cache Source Repositories - Reuse source trees through repo cache when upstream access is unstable - Cache Build Tools - Speed up and stabilize the compilation environment by caching compilation tools - Support CCache - Speed up repeated compilation by reusing compiler outputs - Expression Variables - Review the dynamic variables available in TOML configuration - Detect Version Conflicts and Circular Dependencies - Catch invalid dependency relationships before builds start - CUDA Auto Detection - Integrate CUDA toolchains for GPU-oriented projects - Export Snapshots - Export a reproducible workspace snapshot after deployment

📋 Commands

Command Description
autoremove Clean the install directory and remove libraries no longer required by the current project
clean Clean build cache for selected targets, or use --all to clean everything
configure Update global configuration for the current workspace
create Create a platform, project, or port
deploy Deploy using the selected platform and project
init Initialize Celer with a configuration repository
install Install a library
integrate Enable shell tab completion integration
remove Remove installed libraries
reverse Query which projects or libraries depend on a given library
search Search available ports
tree Show the dependency tree of a library or project
update Repo mode takes no port arguments; port mode requires at least one name@version
version Show Celer version information

🤝 Contributing

Celer is an open-source project built for community collaboration. Contributions are welcome in:

  • celer - the core package manager implementation
  • ports - port definitions and build configurations

If you want to add features, improve documentation, or contribute new port definitions, we would be glad to have your help.

📄 License

This project is released under the MIT License. See LICENSE for details.

Third-party libraries in the ports repository remain under their original licenses.


Built for complex C/C++ engineering delivery

⭐ Star us on GitHub | 📖 Documentation | 🐛 Report Issues

Extension points exported contracts — how you extend this code

Command (Interface)
Interface for command. [15 implementers]
cmds/cmds.go
Context (Interface)
========================== context ========================== // Context exposes the workspace's global config (platform [4 …
context/context.go
Python (Interface)
Python interface defines methods for Python tools, including system Python and conda Python. [2 implementers]
buildtools/python/python.go
Completion (Interface)
(no doc) [3 implementers]
completion/completion.go
Project (Interface)
(no doc) [2 implementers]
context/project.go
Platform (Interface)
(no doc) [2 implementers]
context/platform.go
SetupArgs (Interface)
(no doc) [1 implementers]
configs/setup_args.go
Callbacks (Interface)
(no doc) [1 implementers]
pkgcache/metadata.go

Core symbols most depended-on inside this repo

PathExists
called by 264
pkgs/fileio/file.go
Sprintf
called by 242
pkgs/color/style.go
If
called by 168
pkgs/expr/expr.go
MkdirAll
called by 139
pkgs/fileio/chattr_fs.go
NewExecutor
called by 127
pkgs/cmd/exec.go
NewCeler
called by 120
configs/celer.go
GetName
called by 119
context/project.go
Error
called by 112
pkgs/color/format.go

Shape

Method 901
Function 540
Struct 106
Interface 23
TypeAlias 4

Languages

Go100%
C++1%

Modules by API surface

context/platform.go52 symbols
pkgcache/cache_repo_test.go48 symbols
context/context.go48 symbols
cmds/cmd_configure_test.go46 symbols
pkgs/color/style.go45 symbols
buildsystems/buildconfig.go44 symbols
configs/toolchain.go42 symbols
configs/pkgcache_artifact_test.go37 symbols
pkgcache/cache_setup.go34 symbols
pkgs/fileio/file.go28 symbols
buildsystems/native_toolchain.go28 symbols
cmds/cmd_test.go25 symbols

For agents

$ claude mcp add celer \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact