██████╗ ██╗  ██╗██╗
██╔═══██╗██║ ██╔╝██║
██║   ██║█████╔╝ ██║
██║   ██║██╔═██╗ ██║
╚██████╔╝██║  ██╗██║
 ╚═════╝ ╚═╝  ╚═╝╚═╝

Open pacKage Installer


oki(1) is a package manager for C and C++ projects, focused on configuration simplicity.

Oki can download project's dependencies and provide an integration to the build process.

You can browse the staging instance at oki-pkg.dev.

Specifications

Oki implements a dependency manager and a package repository.

The command line interface allows you to:

  • bootstrap a new project using oki init
  • search for packages to add with oki list
  • install new dependencies with oki install
  • make sure your dependencies are up-to-date using oki update
  • publish your librairies to a package repository (oki publish)
  • visualize your dependency graph (oki tree)

The package repository interface enables you to:

  • look for newly published packages
  • summarize package information
  • access the package README
  • view dependents packages

Conception (written in French)

Prerequisites

Database

A PostgreSQL server is recommended in production. For development purposes, you may instead want to use an SQLite database. On Debian: apt install postgresql / apt install sqlite3

Web

The backend is written in PHP >= 7.4. Depending on the database you have chosen, the appropriate PDO extensions are also required. On Debian (versions may vary): apt install php7.4-cli php7.4-pgsql php7.4-sqlite3

Command Line Interface

A C++ 20 compiler like GCC is needed, with the nlohmann/json, curl, toml++, boost::program_options and minizip libraries. Unit tests are using doctest. On Debian: apt install build-essential nlohmann-json3-dev libcurl4-openssl-dev libminizip-dev libboost-program-options-dev doctest-dev

Some commands also use some clang tools like clang-format and gcovr. On Debian: apt install clang-format gcovr

Quick setup

cd cli
./configure.sh -d
make BUILD=release
sudo make install BUILD=release

Development

Create a sample database and run the server

cd sql && ./create_sqlite_db.sh && cd ..
php -S localhost:8000 -t web/public

Compile the cli

At home

cd cli && make

At the IUT

cd cli && ./make-in-vdn.sh && unset http_proxy

Inspiration

  • Cargo, the Rust package manager for its manifest format and command organization
  • npm, the JavaScript package manager for its lockfile handling and website presentation
  • pub, the Dart package manager for its dependency resolution algorithm
  • semver, semantic versioning in order to know if a version is compatible with another
Description
A package manager for C and C++ applications
Readme 1.4 MiB
Languages
C++ 67.4%
PHP 25.9%
CSS 2.1%
Shell 2%
Makefile 1.4%
Other 1.1%