Repository navigation
Releases
skipbuild 0.6.2
Highlights
Patch release for three cache-correctness defects found by an independent audit of 0.6.1. No new features; no cache-format changes.
Install
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.ps1 -OutFile install.ps1; .\install.ps1Fixed
--is now a hard boundary for launcher options. Everything after--is passed to the wrapped compiler verbatim. Previouslyskipbuild -- g++ -c a.cpp --cache-dir Xsilently removed--cache-dir Xfrom the compiler command line, because the option scanner walked the whole argv.- Read-only caches are never modified.
--clean,--clear-stats,prune(), LRU access-time updates, corrupted-entry repair and remote-hit installs all respectread_onlynow. A remote hit is decompressed into a private staging directory and restored from there instead of being written into the cache, so remote reads keep working with a read-only local cache. - Remote uploads skip zero-byte sidecars instead of advertising empty files.
Tests
- New
cli_args_testcovers the--boundary, option consumption before/after the separator, and the override mask. cli_e2e_testnow asserts that a read-only--cleanfails with an explanation and leaves the cache intact, and that a writable--cleanstill removes it.test_evictionasserts a read-only cache refusesput()and does not prune existing entries.
16/16 tests pass locally (Release and warnings-as-errors builds); CI green on Windows x64/ARM64, Linux x64/ARM64, macOS ARM64/Intel.
Full details: CHANGELOG.md
skipbuild 0.6.1
Highlights
Packaging, CI and correctness release. skipbuild is now consumable as an installed CMake package, the installers refuse unverified binaries, and a parser bug that made every macOS build bypass the cache is fixed.
Install
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.ps1 -OutFile install.ps1; .\install.ps1All binaries are verified against SHA256SUMS; the scripts fail closed if the checksum cannot be verified.
CMake package
install() now ships all public headers and exports skipbuild::core, skipbuild::skipbuild and skipbuild::libzstd_static:
find_package(skipbuild REQUIRED)
target_link_libraries(app PRIVATE skipbuild::core)
skipbuild_enable_target(app)Fixed
- macOS builds always bypassed the cache: absolute POSIX paths were parsed as MSVC
/D//U//I//Fflags, so/Users/.../a.cppwas swallowed as a/Udefine and the command ran uncached. - Installers failed open: a missing
SHA256SUMS(or an asset absent from it) skipped verification; it is now mandatory and the asset name is matched exactly. - Windows installer ignored ARM64: the asset was hardcoded to
skipbuild-windows-x64.exe. Findskipbuild.cmakemodule mode was broken: it was installed toshare/cmake/Modulesbut includedskipbuild.cmakefromlib/cmake/skipbuild; both files now ship side by side in both locations.skipbuild_enable()no longer calls an undefined macro on CMake < 3.19.skipbuild-config.cmakehad no targets: it self-assignedSKIPBUILD_EXECUTABLE; it now uses@PACKAGE_INIT@, loadsskipbuildTargets.cmake, prefers the imported launcher and callscheck_required_components().- CMake minimum version:
CMP0135requires 3.24; the project claimed 3.20. - Composite action: replaced leftover
remakebranding/placeholder URLs, installs from this repository, and setsSKIPBUILD_CACHE_DIR+CMAKE_*_COMPILER_LAUNCHER. - CI gates the release: sanitizers are blocking, the strict (warnings-as-errors) job runs
ctest, andreleaserequires all build, strict, sanitizer and launcher smoke jobs. - Tests that passed unconditionally:
test_simpleonly printed state andtest_multiprocessnever started a second process; it now spawns four real workers, and a newcli_e2e_testdrivesskipbuild -- <compiler>through miss → hit → header-edit invalidation. - Removed dead tracked files (
compile.bat,dummy_test.cpp,test.cpp,test_skipbuild.bat,verify_stats.ps1) that contained absolute paths from one developer machine.
Also included (previously unreleased): bounded HTTP responses (512 MiB), remote artifact SHA-256 verification, working --disable-incremental-msbuild, empty-sidecar skipping, atomic failed stores, orphan/temp sweeping, unambiguous length-prefixed cache keys, debug-info keys that include the absolute source/compile directory, and tellg() error handling.
Full details: CHANGELOG.md
0.6.0
skipbuild 0.6.0 — cache-integrity and remote-transport fixes.
Highlights
- File locks release correctly on Windows: unlock now targets the exact locked byte range and closes the handle, so purging corrupted entries no longer stalls and handles are not leaked.
- Sidecar metadata is accurate:
meta.jsonrecords the real sidecar filename and content hash instead of the.zststorage name/hash, so.pdb/.idb/.dwosidecars validate and restore correctly. compression_enabledactually works: disabling compression stores artifacts raw, readers accept both layouts, andmeta.jsonreports the real state.- Remote timeouts are enforced: WinHTTP resolve/connect/send/receive timeouts now come from config, so a stalled server can no longer hang a build.
- No plaintext HTTPS on POSIX: builds without TLS refuse
https://and disable the remote cache with a warning instead of sending requests in the clear to port 443.
Upgrade notes
No configuration changes required. Entries written with compression disabled are readable by 0.6.0; the compressed layout remains the default.
Full Changelog: v0.3.0...v0.6.0
0.4.0
v0.3.0
v0.2.2
v0.2.1
What's Changed
- README: fix all commands with verified output, remove hardcoded paths, match exact env/config names from code by @rayyan0x in #5
- Docs/quickstart fix by @rayyan0x in #6
- Docs/quickstart fix by @rayyan0x in #7
- README: fix install commands format for copy-paste by @rayyan0x in #8
- fix release workflow: add binary verification, fix artifact paths by @rayyan0x in #9
- docs: add remote caching guide with S3 mock server and team workflow by @rayyan0x in #10
- Docs/quickstart fix by @rayyan0x in #11
- Docs/quickstart fix by @rayyan0x in #12
- Docs/quickstart fix by @rayyan0x in #13
- Align code, CLI, and docs; restore true zero-dependency packaging by @rayyan0x in #14
Full Changelog: v0.2.0...v0.2.1
v0.2.0
skipbuild v0.2.0
Second release — focused on build-tool integration (response files, PCH), observability, and cleaner configuration naming.
⚠️ Breaking changes
- Environment variables renamed
BUILDCACHE_*→SKIPBUILD_*(e.g.SKIPBUILD_DIR,SKIPBUILD_MAX_SIZE,SKIPBUILD_REMOTE_URL). The oldBUILDCACHE_*names still work as a fallback, butSKIPBUILD_*takes precedence. - Default paths renamed: cache dir
~/.cache/skipbuild(was.../buildcache), config.skipbuild.conf(was.buildcache.conf). Existing.buildcache.conffiles are still read.
Added
- Response file (
@file.rsp) support for compile commands (quoted/escaped args, CRLF, nested files). - Precompiled header (PCH) support — MSVC (
/Yc,/Yu,/Fp,/Y-) and GCC/Clang (-x c++-header,-include,-fpch-preprocess). REMAKE_LOGenv var for log levels:debug,info,warn,error,none(legacySKIPBUILD_DEBUG=1still works).- Visual Studio / MSBuild logging —
[skipbuild]output goes viaOutputDebugString, visible in VS Output → Debug. - ARM64 CI: Ubuntu ARM64, macOS Apple Silicon, Windows ARM64.
- MSBuild incremental behavior: caching auto-disabled when the output is newer than the source.
- Remote caching guide (S3-compatible).
Changed
- Version centralized;
skipbuild --versionnow reports0.2.0(no hardcoded versions). - Response file parser hardened: strict bounds checks, max recursion depth (10), UTF-8 BOM stripping, CRLF normalization.
- Removed orphaned
cache/remote.cpp(never compiled; duplicatedcore.cpp). - Removed redundant
release.yml; releases are built bybuild.yml.
Fixed
- Fatal
0xC0000409(stack-buffer-overrun) crash parsing response files with quoted args on Windows. - Quotes in response file tokens are now stripped (previously kept as part of the argument).
- Test-suite crashes during cleanup (stats tracker destructor ordering).
- Cache-key determinism across different build directories.
Downloads
- Windows x64:
skipbuild.exe - Linux / macOS:
skipbuild
Full diff: v0.1.0...v0.2.0
v0.1.0 — First stable release
skipbuild v0.1.0 🚀
First stable release of skipbuild — a zero-setup, cross-platform C++ build cache designed to make rebuilds near-instant. Eliminate agonizing compilation bottlenecks across Windows, Linux, and macOS.
✨ Features
- Deterministic Cache Keys: Hashing infrastructure monitors source text stream, include graphs, flags, native compiler binary footprints, and runtime environment layers via SHA-256 blocks.
- Native MSVC Symbol Support: Full native preservation maps for
/ZiPDB debug streams,.idbdependency nodes,/Fooutputs,/Ipaths,/std:,/O, and/Wexecution flags. - GCC/Clang Compatibility: Built-in intercept matrices tracking
-std=,-O,-g,-I,-fPIC, and-gsplit-dwarf(.dwo) options. - High-Speed Payload Compression: Core storage architecture compresses objects utilizing integrated Zstd level 3 blocks, delivering an average ~70% reduction in disk storage space.
- Transparent Fail-Safe Resilience: Built with error isolation layers. Cache processing issues or storage failures transparently fall back to native compiler execution so your pipeline never breaks.
- Tiered Configuration Resolving: Precedence runs sequentially: CLI Options ──► Environment Variables (
BUILDCACHE_*) ──►.buildcache.conffiles. - Integrated Cache Diagnostics: Manage pipeline optimization details cleanly via
--stats,--clear-stats, and--cleanutility actions.
🖥️ Platform Support (Tested & Verified)
| Operating System | Target Compiler | Verified Toolchain Version |
|---|---|---|
| Windows | MSVC | 19.51 (Visual Studio 2022 Build Tools) |
| Linux | GCC | 13.3 (Ubuntu 24.04 LTS Runtime) |
| macOS | Apple Clang | 21 (macOS 16 Environment) |
🚀 Quick Start & Verification
Run these commands in your console terminal framework (or Developer PowerShell for VS 2022 on Windows):
# Clone and build skipbuild core
git clone https://github.com/rayyan0x/skipbuild.git
cd skipbuild
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --parallel
# Create a small dummy validation file
echo '#include <stdio.h>' > hello.cpp
echo 'int main() { printf("Hello, skipbuild!\n"); return 0; }' >> hello.cpp
# Cold run (Cache MISS)
build\Release\skipbuild.exe -- cl.exe /c hello.cpp /Fohello.obj
# Hot run (Cache HIT)
build\Release\skipbuild.exe -- cl.exe /c hello.cpp /Fohello.obj📦 Installation
Method A: Automated One-Line Install Script (Recommended)
Linux & macOS (Bash/Zsh):
curl -fsSL https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.sh | bashWindows (PowerShell 5.1+):
irm https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.ps1 | iexMethod B: Traditional Compilation From Source
git clone https://github.com/rayyan0x/skipbuild.git
cd skipbuild
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --parallel🔧 Build System Integration
| Build Toolchain | Direct Configuration Mapping |
|---|---|
| CMake (Global Launcher) | set(CMAKE_CXX_COMPILER_LAUNCHER "skipbuild") |
| CMake (Target Isolated) | set_target_properties(my_target PROPERTIES CXX_COMPILER_LAUNCHER "skipbuild") |
Ninja (build.ninja) |
rule cxx: command = skipbuild -- g++ -c $in -o $out $flags |
GNU Make (Makefile) |
CXX := skipbuild g++ |
📊 Performance Benchmarks
Evaluated on an isolation test pipeline composed of 50 source targets interacting with 10 core include header tracks, tracked under -O2 -std=c++20 parameters.
- Cold Build Time: 22.0 seconds (Baseline)
- Hot Rebuild Time: 0.2 seconds 🚀
- Net Performance Acceleration: ~110x Faster execution loops
📥 Asset Directory Fingerprints
Pre-compiled executable assets are attached below for instant zero-compilation use. Verify your downloaded binaries using the official cryptographic verification fingerprints:
skipbuild-windows-x64.exe— Standalone Windows x64 processing environment.skipbuild-linux-x64— Standalone Linux x64 executable container block.skipbuild-macos-x64— Standalone native macOS x64 architecture runner.SHA256SUMS— Secure validation signatures tracking asset bundle verification.