No description
Find a file
2025-12-21 14:57:53 -03:00
.github/workflows bump ubuntu version 2025-12-17 17:27:24 +01:00
pkgtests tests and cleanup 2020-04-05 00:37:42 +02:00
src add support to fetch git repos directly 2025-12-21 14:57:53 -03:00
.gitignore embed program version in executable 2020-04-05 11:59:47 +02:00
default.nix Add a Nix derivation for the lucky few. 2020-04-07 20:09:18 +02:00
LICENSE Initial commit 2020-03-08 13:44:48 +01:00
Makefile support 'make install' in binary distributions 2021-01-15 10:56:59 +01:00
README.md add support to fetch git repos directly 2025-12-21 14:57:53 -03:00
version.txt version bump 2025-11-24 11:09:42 +01:00

smlpkg CI

This program constitutes a generic package manager for Standard ML libraries and programs. The package manager assumes nothing and knows nothing about the Standard ML compilers used and is thus quite generic.

The package manager is centered around the notion of semantic versioning and uses Git directly to fetch packages. This means it works with any Git hosting platform (GitHub, GitLab, Bitbucket, self-hosted, etc.) and supports private repositories via SSH.

The package manager takes care of downloading and upgrading dependent packages and works well with the use of MLB files supported by Standard ML compilers such as MLton, MLKit, and SMLtoJs.

Requirements

  • git (used for fetching packages)
  • tar (used for extracting package files)

Usage

Adding a package

$ smlpkg add github.com/diku-dk/sml-random

This command modifies only sml.pkg and creates it if it does not already exist.

Downloading required packages

$ smlpkg sync

This command populates the lib directory based on the packages listed in sml.pkg.

Creating a new package

$ smlpkg init github.com/foo/bar

This command creates a file sml.pkg and initiates it with the given package name (foo should be a github user name or an organisation name and bar should be a repository name). You can now add code in the directory lib/github.com/foo/bar/.

Releasing a package

$ git tag vX.Y.Z
$ git push --tags

Remember to follow semantic versioning. Once a package has been released, other packages can safely add the package to their own source code tree using smlpkg add (see above).

Using private repositories

Since smlpkg uses Git directly, private repositories work automatically if you have SSH access configured. To use SSH URLs instead of HTTPS, configure Git's URL rewriting:

$ git config --global url."git@github.com:".insteadOf "https://github.com/"

This makes all GitHub fetches use SSH, allowing access to private repositories you have permissions for.

Probably incomplete list of available packages

Design details

See this blog post on the design of the Futhark package manager.

Compilation

To compile the package manager, you need a Standard ML compiler such as MLton or MLKit.

Compilation using MLKit on macOS

$ brew install mlkit
$ make all

Compilation using MLton

$ MLCOMP=mlton make clean all

License

This software is distributed under the MIT LICENSE.

The package manager is almost a complete port of the Futhark package manager, designed, and implemented in Haskell by Troels Henriksen.