Platform support¶
| Platform | Prebuilt archive | Implemented commands |
|---|---|---|
| Linux x86_64 | yes | all |
| Linux aarch64 | yes | all |
| macOS arm64 | yes | all |
| macOS x86_64 | yes | all |
| Windows x86_64 | yes | all |
Continuous integration runs the implemented workflows on Linux, macOS and
Windows, including init --apply with its rollback and cancellation
guarantees. The macOS x86_64 archive is cross-compiled and is not executed
during the release.
init --apply before 0.6.0
Releases up to 0.5.0-beta.1 apply init on Linux only; on macOS and
Windows they preview the plan and stop at --apply. From 0.6.0-beta.1
every platform applies it. See pyfaro init.
Process handling¶
Pyfaro runs tools without a shell and cleans up their process tree on
cancellation, which is how init --apply can restore your files when you press
Ctrl+C. The mechanism depends on the platform:
- Linux uses process groups and a child subreaper.
- macOS uses a process group and sends SIGINT before forcing cleanup.
- Windows places the child in a Job Object that is closed with the process.
On Linux and macOS, pyfaro dev gives the process tree about five seconds to
shut down after Ctrl+C. On Windows, the console delivers Ctrl+C to every
attached process, which Uvicorn's reloader also relies on; pyfaro dev waits
about five seconds for the tree to end by itself and keeps running if it does
not, so a reload does not stop it. A second Ctrl+C terminates the job at once.
Every other command terminates the job immediately.
On Windows, Pyfaro refuses to start .bat and .cmd wrappers, since they
would invoke a shell. Run the underlying executable instead.
The runtime requirements are the same everywhere: uv 0.9.26 or newer and a Python interpreter.