Development documentation — 0.3.0a4 / main
This is the development branch, not a published stable release. Use the source installation guide. Functional checks cover Ubuntu, Windows and macOS; interpreter, artifact and optional-feature limits still apply. Read support, release gates and known limitations before relying on results.
Installation and version boundaries
Documentation index · First solve · Current limitations
These guides describe development main. A version string in pyproject.toml
can remain unchanged while development moves ahead; it does not identify the same
code as an already published archive. Record both the package version and source
revision when reproducing a development run.
Choose your version
| Goal | Installation | Documentation to follow |
|---|---|---|
| Use the code described by this development site | Clone the repository and use its lock file | This site and the same checkout's README |
| Use an immutable published prerelease | Pin an exact package version | That release's tagged README and changelog |
On 2026-10-29, the official package metadata
identifies 0.3.0a4 as the latest published prerelease, uploaded on 2026-10-28.
Its release page lists six regular
cp314-abi3 built distributions and one source distribution. It is an alpha
release, not a stable compatibility promise.
Development main has later changes: caller-provided initial_keys, repository-root
examples, removal of the installed demo command, and removal of deprecated solver
aliases. The published 0.3.0a4 does not accept initial_keys; it still accepts
backend= and contains rko_solver.examples. Do not copy that older layout into
new development examples.
See the development changelog
and release-tagged README.
Install the development checkout
Use Python 3.14 or newer, uv and a Rust toolchain. The declared minimum is Python 3.14; functional checks currently cover CPython 3.14, not every future interpreter accepted by the metadata.
From a terminal:
git clone https://github.com/MarcosPTProenca/rko-solver.git
cd rko-solver
uv sync --locked --no-dev
uv run --locked --no-dev python -m examples.instance_pipeline
The last command loads the supplied scheduling instance, solves it and checks the returned solution. It needs no private input file or optional dependency. For your own problem, follow the first solve or the file-to-solution tutorial.
Run checkout commands from the repository root. --no-dev avoids development test
tools. Contributors instead install the development groups described in
CONTRIBUTING.
The native extension is built during source installation even when you select the
Python search engine, so this source workflow requires Rust.
Use a published package
The distribution name is rko-solver; the Python import is rko_solver.
The PyPI project named rko is a different package.
For an isolated check of the published prerelease, without installing the checkout:
uv run --isolated --no-project --python 3.14 --with "rko-solver==0.3.0a4" python -c "from importlib.metadata import version; print(version('rko-solver'))"
For your own script, replace the final -c expression with the script's path.
A matching prebuilt distribution needs no compiler. If no artifact matches your
interpreter, architecture or system library, installation builds the source
archive and needs Rust instead. Keep published-package runs separate from an
editable development environment when comparing behavior.
Optional features
NumPy is the only required Python runtime dependency. Install only the extras you use; no reporting, model frontend, service framework or agent account is required for ordinary optimization.
| Extra | Purpose | Guide |
|---|---|---|
compiled |
Numba-compiled objectives | Native problem styles |
reports |
Offline interactive reports | Reports |
pyomo, pulp, mathopt |
A selected bounded-model frontend | Model conversion |
service |
Private supervised HTTP service and scaffold | Service |
From the development checkout, select extras on the command that uses them:
uv run --locked --no-dev --extra reports python -m examples.analysis_report
uv run --locked --no-dev --extra pyomo python -m examples.model_conversion pyomo
Add repeated --extra options to combine features. uv run synchronizes its
requested environment: an earlier uv sync --extra reports is not a substitute
for selecting --extra reports on a later run. For a published package, pin the
version and select extras in its requirement, such as
rko-solver[reports]==0.3.0a4; do not assume the development examples ship with it.
Documentation tools are separate from runtime extras. Preview with
uv run --locked --only-group docs mkdocs serve; see
site maintenance for validation and publication rules.
Platforms, C++ and free threading
The regular release policy covers Linux x86_64/aarch64, Windows x86_64/ARM64 and
macOS x86_64/arm64. Its cp314-abi3 tag uses the stable application binary
interface; it is not a promise that the same artifact works on free-threaded
CPython. Other systems may need a source build and are not certified by that
platform matrix.
Linux release artifacts include the optional C++ reference engine. Source builds
require explicit RKO_BUILD_CPP=1 to include it; non-Linux release artifacts do
not include it. See build requirements and availability checks.
Selecting the Python engine does not require a separate C++ installation.
Free-threaded CPython 3.14 is checked on Linux through a source installation and the full installed-package smoke. That check rejects an enabled global interpreter lock before and after execution. It does not certify all optional extras, free-threaded artifacts on every platform, arbitrary callback thread safety or a throughput improvement. Manage your callbacks' mutable state yourself.
Optional native dependencies can enable the lock even on a free-threaded interpreter. The pinned MathOpt extension in OR-Tools 9.15.6755 does not declare free-threading safety and enables the lock by default when imported. Do not force the lock off to silence that warning or make a check pass; use a qualified interpreter/dependency combination instead.
If regular and free-threaded interpreters coexist, use an explicit interpreter path when the distinction matters. Check the actual interpreter and resulting artifact tags rather than inferring compatibility from a version-only selector. See the release policy for approved targets and artifact verification.