pray_core
Elixir library for Prayfile: a package manager for the language placed before inference.
pray_core implements the path-package and compose subset. It parses
Prayfiles and prayspecs without evaluating source text, resolves path packages,
writes deterministic lockfiles, renders scoped compose destinations, installs
them, and verifies rendered files.
This is not yet full RFC 0100 level 2 conformance. Tarball sources and
tree/file materialization remain unsupported.
Website: pray.kisko.dev
Maintainer: Andrei Makarov (contact@kiskolabs.com)
Repository: amkisko/pray_compat (pray.ex/)
Specification and reference CLI: kiskolabs/pray
Packages: hex.pm/packages/pray_core
Community docs: CHANGELOG.md · LICENSE.md · SECURITY.md
Library usage
Add pray_core to your dependencies:
{:pray, "~> 1.25", hex: :pray_core}
Resolve a Prayfile once, then render compose destinations or produce its lockfile:
manifest_path = "Prayfile"
project = Pray.Core.resolve(manifest_path)
destinations = Pray.Core.render(project)
lockfile = Pray.Core.lock(project)
Pray.Core.install(manifest_path)
Pray.Core.verify(manifest_path)
Example
examples/compose is a complete path-package project. Run it without modifying
the example directory. The optional CLI wraps the same core library:
bin/pray install examples/compose/Prayfile
bin/pray verify examples/compose/Prayfile
The root Prayfile uses the reference Pray CLI to provision shared project
instructions, skills, and community files from amkisko/prayers. The local
subset implementation remains exercised by the self-contained example.
Development
make ci
bin/pray version
The project uses only OTP and Elixir standard libraries. Mix's Erlang cover
integration enforces 100% module line coverage. Benchmarks report median parse,
resolve, and render durations. make ci also checks formatting, compiler
warnings, maintained mutants, dependency policy, the runnable example, and the
150-line warning/300-line source limit.
Release
Set the version in mix.exs, then publish pray_core to Hex. From the
monorepo root:
make release-ex-dry-run
make release-ex
Or from this directory: make release / make release DRY_RUN=1. The release
script reads @version from mix.exs when VERSION is omitted. A dry-run
runs every local gate and builds the Hex package without publishing. Credentials
stay in the Hex helper or HEX_API_KEY.