Manifest¶
Arx projects are described by .arxproject.toml.
Build contract¶
[project]
name = "hello-arx"
version = "0.1.0"
edition = "2026"
requires-arx = ">=1.0"
[build-system]
dependencies = [
"arxlang>=1.0",
]
[build]
src_dir = "src"
out_dir = "build"
package = "hello_arx"
mode = "app"
[project] supports:
name: required project nameversion: required project versionedition: optional Arx editionrequires-arx: optional Arx compiler version specifierdependencies: optional runtime dependency strings
[build-system] supports:
dependencies: optional Python requirement strings used to prepare the build environment. If omitted,arxpminstalls the default Arx compiler package.
When project.requires-arx is set and no explicit arxlang build dependency is
listed, arxpm prepends arxlang<specifier> to the effective build-system
dependencies. An explicit arxlang entry is preserved as written.
[build] supports:
src_dir: optional, defaults to"src"out_dir: optional, defaults to"build"package: optional, defaults toproject.namemode: optional,"lib"or"app"
[build].entry was removed. arxpm rejects manifests that still declare it.
[toolchain] was removed; declare compiler/build requirements in
[build-system].dependencies.
Source layout¶
arxpm resolves the effective layout from the project root:
source_root = <project>/<src_dir>package_root = <source_root>/<package>init_file = <package_root>/__init__.xmain_file = <package_root>/main.x
__init__.x is always required.
If mode is omitted, arxpm infers it from the filesystem:
- if
main.xexists, the project is treated as an app - otherwise, the project is treated as a library
Validation rules:
source_rootmust existpackage_rootmust exist__init__.xmust exist- app projects must contain
main.x - lib projects must not contain
main.x
Package names must match ^[A-Za-z_][A-Za-z0-9_]*$. If project.name is not a
valid package identifier, set [build].package explicitly instead of relying on
normalization.
Examples¶
Library:
[project]
name = "astx"
version = "0.1.0"
[build]
mode = "lib"
App:
[project]
name = "myapp"
version = "0.1.0"
[build]
mode = "app"
Package override:
[project]
name = "my-project"
version = "0.1.0"
[build]
package = "my_project"
mode = "lib"
Runtime dependencies¶
Runtime dependencies live in the project.dependencies array and use PEP
508-style strings. arxpm supports three shapes:
- Registry:
dependencies = [
"pyyaml",
]
- Local path:
dependencies = [
"mylib @ ../mylib",
]
- Git:
dependencies = [
"utils @ git+https://example.com/utils.git",
]
Dependency groups¶
Non-runtime workflow dependencies such as test, lint, and docs tools live in the
top-level [dependency-groups] table.
[dependency-groups]
dev = [
"pytest",
"ruff",
]
Environment¶
The [environment] table controls how arxpm install obtains a Python
environment for the project. It is optional — when absent, arxpm behaves as if
kind = "venv" with path = ".venv" had been declared.