Frate

Frate

Modern C++ package manager and project management tool. Bringing Rust's Cargo-like development experience to C++ with sane defaults.

C++, CMake, Lua
Started: 10/20/2023
Updated: 9/15/2024
cpp,tools,package-manager,cli

Frate Logo

Overview

Frate is a command-line tool that modernizes the C++ development experience by providing a unified workflow similar to Rust's Cargo, npm, or yarn. It simplifies project initialization, dependency management, and build configuration, eliminating the need to manually edit CMakeLists.txt files.

Project Status: Alpha (expect breaking changes)

The Problem

C++ has traditionally lacked a good default development experience. Setting up projects requires:

  • Manual CMake configuration
  • Complex dependency management
  • Repetitive project setup tasks
  • Fragmented tooling ecosystem

Average C++ Learner The struggle is real

Frate aims to fix this with sane defaults and a unified CLI.

Features

  • Easy Project Initialization - Create new C++ projects with sensible defaults
  • Dependency Management - Add, remove, and search for packages with simple commands
  • Multi-Mode Builds - Support for debug, release, and custom build configurations
  • Cross-Compilation - Build for different platforms and architectures
  • Project Blueprints - Reusable project templates and scaffolding
  • Remote Builds - Cloud-based compilation support
  • Watch Mode - Auto-rebuild and run on file changes
  • Decentralized Packages - No central authority required
  • JSON Configuration - Extensible project configuration system
  • Shell Completions - Available for popular shells

Quick Start

Basic Commands

# Start a new project (-d for defaults)
frate new

# Build your project (-j for multi-threading)
frate build

# Run the project
frate run

# Add a package (-l for latest version)
frate add p <package-name>

# Search for packages
frate search p <query>

# Update package index
frate update index

# Clean build artifacts (-c to clear cache)
frate clean

# Auto-build and run on file changes
frate watch

Technical Implementation

Architecture

Built With:

  • C++ for core functionality
  • CMake for build system integration
  • Lua for extensibility
  • JSON for configuration

Component Structure:

  • Commands/ - CLI command implementations
  • Generators/ - Project template generators
  • Wizards/ - Interactive setup workflows
  • Utils/ - Core utilities and helpers
  • Lua/ - Lua scripting integration

Design Philosophy

  1. Sane Defaults - Projects should work out of the box
  2. Simple Commands - Complex operations made simple
  3. Extensibility - Override and customize as needed
  4. Decentralization - No single point of failure
  5. Developer Experience - Prioritize ease of use

Why Frate?

For Individual Developers:

  • Get started quickly without CMake expertise
  • Focus on code, not build configuration
  • Consistent project structure across projects

For Teams:

  • Standardized development workflows
  • Reproducible builds
  • Simplified onboarding

For the C++ Community:

  • Unified tooling ecosystem
  • Easier package sharing
  • Lower barrier to entry for new C++ developers

Popularity and Adoption

  • 119 GitHub Stars - Most popular project in my portfolio
  • Active Development - Regular commits and community engagement
  • Discord Community - Active discussion and support channel
  • Contributors - Growing open-source community

Roadmap

Current Features:

  • Project initialization
  • Build system integration
  • Package management
  • Watch mode
  • Cross-compilation

Coming Soon:

  • Legacy project conversion
  • Template override system
  • Enhanced package discovery

Installation

Installation process coming soon. Currently, build from source:

git clone https://github.com/frate-dev/frate.git
cd frate
# Build instructions in repository

Community

Impact

Frate represents a significant step toward modernizing C++ development. By providing a unified tool that handles project management, dependencies, and builds, it removes friction from the C++ development workflow and makes the language more accessible to newcomers.