swivm, the SWI-Prolog Version Manager, is a bash script to manage multiple active SWI-Prolog versions. It provides a uniform command line interface to install and execute SWI-Prolog since version 5. Being an adapted fork of the Node Version Manager nvm it has a very similar interface.
swivm does not support Windows. Make sure your system has the requirements for a manual SWI-Prolog installation from source.
Typically, the following libraries are required:
sudo apt-get install \
build-essential autoconf curl chrpath pkg-config \
ncurses-dev libreadline-dev libedit-dev \
libunwind-dev \
libgmp-dev \
libssl-dev \
unixodbc-dev \
zlib1g-dev libarchive-dev \
libossp-uuid-dev \
libxext-dev libice-dev libjpeg-dev libxinerama-dev libxft-dev \
libxpm-dev libxt-dev \
libdb-dev \
libpcre3-dev \
libyaml-dev \
openjdk-8-jdk junit \
make ninja-build \
cmakeIf you want to reduce resources, the following packages are optional:
openjdk-8-jdk junit: Without, you do not have Java connectivity (JPL).unixodbc-dev: Without, you have no ODBC database connectivity (e.g., MySQL)libssl-dev: Without, you have no SSL (and HTTPS) support.libgmp-dev: Without, you lack unbounded integer support, rational numbers, good random number generators, etc.libarchive-dev: Without, you can not unpack and install add-ons.libpcre3-dev: Without, you have no regular expression support (library(pcre)).libyaml-dev: Without, you have no YAML support (library(yaml)).
Additionally a Java compiler is required, so make sure javac -version is possible.
Building SWI-Prolog v7.7.20+ requires cmake version 3.5 or later.
To install or update swivm, you can use the install script using cURL:
curl -o- https://raw.githubusercontent.com/fnogatz/swivm/v1.3.2/install.sh | bashor Wget:
wget -qO- https://raw.githubusercontent.com/fnogatz/swivm/v1.3.2/install.sh | bashThe script clones the swivm repository to ~/.swivm/ and adds the source line to your profile (~/.bash_profile, ~/.zshrc or ~/.profile).
You can customize the install source, directory and profile using the SWIVM_SOURCE, SWIVM_DIR, and PROFILE variables.
Eg: curl ... | SWIVM_DIR=/usr/local/swivm bash for a global install.
NB. The installer can use git, curl, or wget to download swivm, whatever is available.
For manual install create a folder somewhere in your filesystem with the swivm.sh file inside it. I put mine in ~/.swivm/.
Or if you have git installed, then just clone it, and check out the latest version:
git clone https://github.com/fnogatz/swivm.git ~/.swivm && cd ~/.swivm && git checkout `git describe --abbrev=0 --tags`To activate swivm, you need to source it from your shell:
. ~/.swivm/swivm.shAdd these lines to your ~/.bashrc, ~/.profile, or ~/.zshrc file to have it automatically sourced upon login:
export SWIVM_DIR="$HOME/.swivm"
[ -s "$SWIVM_DIR/swivm.sh" ] && . "$SWIVM_DIR/swivm.sh" # This loads swivmYou can create an .swivmrc file containing version number in the project root directory (or any parent directory).
swivm use, swivm install, swivm exec, swivm run, and swivm which will all respect an .swivmrc file when a version is not supplied.
To download, compile, and install the latest v8.2.x release of SWI-Prolog, do this:
swivm install 8.2And then in any new shell just use the installed version:
swivm use 8.2Or you can just run it:
swivm run 8.2 --versionOr, you can run any arbitrary command in a subshell with the desired version of SWI-Prolog:
swivm exec 8.2 swipl --versionYou can also get the path to the executable to where it was installed:
swivm which 8.2In place of a version pointer like "6.2" or "v7.3" or "6.6.8", you can use the following special aliases with swivm install, swivm use, swivm run, swivm exec, swivm which, etc.:
stable: this alias points to the most recent SWI-Prolog version with an even minor version number.devel: this alias points to the most recent SWI-Prolog version with an odd minor version number.
If you want to use the system-installed version of SWI-Prolog, you can use the special default alias "system". The system version is this one not installed by swivm. If you have installed SWI-Prolog by, e.g., apt-get install swi-prolog or system-wide self-compiled, this will be the system version.
swivm use system
swivm run system --versionIf you want to see what versions are installed:
swivm lsIf you want to see what versions are available to install:
swivm ls-remoteTo restore your PATH, you can deactivate swivm:
swivm deactivateTo set a default SWI-Prolog version to be used in any new shell, use the alias 'default':
swivm alias default 8.2swivm provides two workflows for usage with GitHub Actions:
fnogatz/swivm/actions/install@mainjust installs the latest version of swivm into~/.swivm/, so it can be used after. ~/.swivm/swivm.sh.fnogatz/swivm/actions/load@maininstalls swivm as well as SWI-Prolog. Its version can be specified by theswi-prolog-versioninput value (default:devel). swivm and SWI-Prolog are available after. ~/.swivm/swivm.sh.
Here is a non-exhaustive list of projects that use the GitHub Actions provided by swivm:
Please open an issue if you want to have your project listed here.
If you try to install a SWI-Prolog version and the installation fails, be sure to delete the SWI-Prolog downloads from src (~/.swivm/src/) and versions (~/.swivm/versions/) or you might get an error when trying to reinstall them again.