Portable is a sandbox framework targeted for Desktop usage and offers ease of use for distro packagers, which should work on most recent systems:
Follows the FHS (Filesystem Hierarchy Standard)
/lib /lib64 /bin /sbin should be symlinks to their respective locations under /usrDoes not have mount points under /usr/bin, and use a supported fs of OverlayFS (NOT BcacheFS)
This is the rewrite of the original Portable. For the legacy version, see legacy branch.
Portable has companion projects for packaging and sandboxing: | Project | Descripton | | ------------- | ------------- | | StashPak | Build a Portable package for Arch Linux | | Packer | Packaging utility for Portable on Arch Linux | | Netsock | Network firewall | | bawn | CLI for transient sandbox |
See Docs
Discuss Development at #portable-dev:matrix.org
Demo
See bawn for the successor of Portable Pools.
See Docs
/usr/bin and /usr/libStart portable with environment variable PORTABLE_CONF, which can be 1) the appID of the sandbox, 2) an absolute path (if exists), 3) a file name interpreted as $(pwd)/${PORTABLE_CONF}. It searches for each of them respectively.
PORTABLE_LOGGING=debugTo manually execute programs instead of following the launchTarget config, start portable with argument --actions debug-shell. This will open a bash prompt and gives you full control of the sandbox environment.
Portable and any of its social environment follows the Kraftland Code of Conduct. Please be sure not to violate such rule set.
Portable follows a major.minor.patch version scheme. We thrives to provide a stable experiences with no breaking changes, however, if said change is necessary, will land in a major release.
The patch release is exclusive for bug fixes. Whereas minor releases contain new features. If a feature or a set of features needs time to test or is important enough, we conduct a major release.
Portable has and always will be only supporting the latest release. Generally users can upgrade without manual intervention, but between major releases it's advised to run systemctl --user stop portable.slice to stop the portable framework.
$ claude mcp add portable \
-- python -m otcore.mcp_server <graph>