mainak55512/flint

Simple light-weight package manager and build system written in C for c/c++ projects

16

stars

46

commits

C

primary language

Sep 7, 2026

updated

mainak55512.github.io/flint-cherts/
build
build-system
build-tool
c-package-manager
package-manager
project-management
Browse cluster: Build systems and monorepo tooling

README

Flint Logo

Flint

Disclaimer: This project is in BETA stage and only available for Linux, use with caution.

Flint is an experimental build system and package manager for C/C++ projects. It aims to simplify the development workflow by managing dependencies directly through Git and automating the compilation process via a single JSON configuration file. Flint is compatible with GCC & Clang compilers.

NOTE:

CLI Docs available here: Flint

Compositions of the Cherts(dependencies) are/will be updated here: Flint Cherts

Installation

Prerequisits:

  • GCC/Clang compiler chain
  • GIT

Run the following command in terminal:

curl -fsSL -H "Accept: application/vnd.github.v3.raw" https://api.github.com/repos/mainak55512/flint/contents/build.sh | bash

Project Structure

Flint expects a specific directory layout to function correctly:

  • src/: All local project source files (.c, .cpp).
  • include/: Local header files (.h, .hpp).
  • deps/: External libraries (managed by Flint).
  • static/: Contains all the static library (.a) files.
  • shared/: Contains all the dynamic/shared (.so) libraries.
  • composition.json: The project manifest.

How it Works

Currently, Flint uses a "manifest-first" approach:

  1. Git Integration: When a library is added, flint clones the repository into the deps/ directory.
  2. Strict Manifest Requirement: For a dependency to be compatible, it must contain its own composition.json file. Flint reads this file to understand which directories to include and compile. EDIT: Libraries can be added through chert compositions now (check Flint Cherts).
  3. Compilation: The tool aggregates all source files and include paths from the main project and all dependencies to trigger the local compiler.

composition.json Structure

{
    "project_name": "example_project",
    "project_language": "c",
    "version": "0.1.0",
    "compiler_path": "/usr/bin/gcc",
    "executable": true,
    "flags": [],
    "lib_links": [],
    "include_paths": ["include"],
    "src": ["src"],
    "dependencies": {
        "example_lib": {
            "version": "1.0.0",
            "remote": "https://github.com/user/example_lib"
        }
    }
}

Current Limitations

As this is an early development prototype, please be aware of the following:

  • No Build Flags: Custom compiler flags (e.g., -O3, -Wall) are not yet supported.
  • Naming Conflicts: There is currently no resolution logic for dependencies that share the same directory or project names.
  • Strict Compatibility: Only repositories containing a composition.json file can be added as dependencies at this time.
  • No Incremental Builds: The system currently performs full builds.

Usage

Initialize a Project

flint init

Add a Dependency

(The remote repository must contain a composition.json file)

flint add <git_remote_url>

or Add the cherts composition in the dependencies section in composition.json and run

flint sync

N.B. compositions are/will be available in Flint Cherts

Build

flint build

or directly run with

flint run

Contributors

mainak55512

46 commits

mainak55512/flint

Simple light-weight package manager and build system written in C for c/c++ projects

16

stars

46

commits

C

primary language

Sep 7, 2026

updated

mainak55512.github.io/flint-cherts/
build
build-system
build-tool
c-package-manager
package-manager
project-management
Browse cluster: Build systems and monorepo tooling

README

Flint Logo

Flint

Disclaimer: This project is in BETA stage and only available for Linux, use with caution.

Flint is an experimental build system and package manager for C/C++ projects. It aims to simplify the development workflow by managing dependencies directly through Git and automating the compilation process via a single JSON configuration file. Flint is compatible with GCC & Clang compilers.

NOTE:

CLI Docs available here: Flint

Compositions of the Cherts(dependencies) are/will be updated here: Flint Cherts

Installation

Prerequisits:

  • GCC/Clang compiler chain
  • GIT

Run the following command in terminal:

curl -fsSL -H "Accept: application/vnd.github.v3.raw" https://api.github.com/repos/mainak55512/flint/contents/build.sh | bash

Project Structure

Flint expects a specific directory layout to function correctly:

  • src/: All local project source files (.c, .cpp).
  • include/: Local header files (.h, .hpp).
  • deps/: External libraries (managed by Flint).
  • static/: Contains all the static library (.a) files.
  • shared/: Contains all the dynamic/shared (.so) libraries.
  • composition.json: The project manifest.

How it Works

Currently, Flint uses a "manifest-first" approach:

  1. Git Integration: When a library is added, flint clones the repository into the deps/ directory.
  2. Strict Manifest Requirement: For a dependency to be compatible, it must contain its own composition.json file. Flint reads this file to understand which directories to include and compile. EDIT: Libraries can be added through chert compositions now (check Flint Cherts).
  3. Compilation: The tool aggregates all source files and include paths from the main project and all dependencies to trigger the local compiler.

composition.json Structure

{
    "project_name": "example_project",
    "project_language": "c",
    "version": "0.1.0",
    "compiler_path": "/usr/bin/gcc",
    "executable": true,
    "flags": [],
    "lib_links": [],
    "include_paths": ["include"],
    "src": ["src"],
    "dependencies": {
        "example_lib": {
            "version": "1.0.0",
            "remote": "https://github.com/user/example_lib"
        }
    }
}

Current Limitations

As this is an early development prototype, please be aware of the following:

  • No Build Flags: Custom compiler flags (e.g., -O3, -Wall) are not yet supported.
  • Naming Conflicts: There is currently no resolution logic for dependencies that share the same directory or project names.
  • Strict Compatibility: Only repositories containing a composition.json file can be added as dependencies at this time.
  • No Incremental Builds: The system currently performs full builds.

Usage

Initialize a Project

flint init

Add a Dependency

(The remote repository must contain a composition.json file)

flint add <git_remote_url>

or Add the cherts composition in the dependencies section in composition.json and run

flint sync

N.B. compositions are/will be available in Flint Cherts

Build

flint build

or directly run with

flint run

Contributors

mainak55512

46 commits

Languages

C

96.3%

Shell

3.7%