Did you know? SWI-Prolog has support for large, static tablesSearch Documentation:
SWI-Prolog owl logoDownload SWI-Prolog stable versions

linux.png Linux versions are often available as a package for your distribution. We collect information about available packages and issues for building on specific distros here. We provide a PPA for Ubuntu

windows.jpg Please check the windows release notes (also in the SWI-Prolog startup menu of your installed version) for details.

WIP.png Examine the ChangeLog.

Windows version (32-bits)11,849,467 bytesSWI-Prolog 7.2.3 for Windows XP/Vista/7/8

Self-installing executable for MS-Windows. Installs swipl-win.exe and swipl.exe. Works on Windows XP/Vista/7/8. This binary is linked against GMP 5.0.5, which implies that it is covered by the LGPL-V3 license. See below.

Windows version (64-bits)18,508,889 bytesSWI-Prolog 7.2.3 for Windows XP/Vista/7/8 64-bit edition

Self-installing executable for Microsoft's XP/Vista/7/8 64-bit editions. See the reference manual for deciding on whether to use the 32- or 64-bits version. This binary is linked against GMP 5.0.5, which implies that it is covered by the LGPL-V3 license. See below.

Snow Leopard and later18,561,463 bytesSWI-Prolog 7.2.3 for MacOSX 10.6 (Snow Leopard) and later on intel

Mac OS X disk image with relocatable application bundle. Needs xquartz (X11) installed for running the development tools. Currently, version 2.7.5 is required. You can check the version by opening an X11 application and then checking `about' in the X11 menu. The graphical application is experimental. The bundle also provides the commandline tools in Contents/MacOS. The command line tools need at least MacOS 10.6 (Snow Leopard). The graphical application needs at least MacOS 10.7 (Lion).

Source archive16,192,142 bytesSWI-Prolog source for 7.2.3

Sources in .tar.gz format, including packages and generated documentation files. See build instructions.

PDF file2,207,571 bytesSWI-Prolog 7.2.3 reference manual in PDF

SWI-Prolog reference manual as PDF file. This does not include the package documentation.

Show all files

About the 7.2.x release

SWI-Prolog 7.2.0 is based on version 7.3.1.

SWI-Prolog 7 at a glance

  • The new dict type and syntax provides both time and space efficient name-value maps with a pleasant syntax:
    tag{key1:value1, key2:value2, ...}

    Fields can be accessed using functional notation, as in

  • As a consequence, it was necessary to replace the list constructor .(H,T) by the (also in use by Mercury) '[|]'(H,T). That may seem drastic, but in practice affects only a few programs, notably doing functor(Term, F, A) on lists and then selecting further processing on F == '.', A == 2. To turn lists more into a special construct, [] is still the empty list, but no longer the same as '[]', i.e., [] is not at atom.
  • The syntax "..." is now mapped to strings. Strings are compatible with ECLiPSe (thanks to Joachim Schimpf for all the discussions). Traditional code-lists are constructed using .... The flags double_quotes and back_quotes control this behaviour.
  • Thanks to Torbjorn Lager, we have "Pengines", Prolog engines on the web. This provides a generic API to talk comfortably to a Prolog server from JavaScript and other Prolog instances. It enabled SWISH, SWI-Prolog in your browser (http://swish.swi-prolog.org) as well as http://lpn.swi-prolog.org (Learn Prolog Now! with embedded SWISH).
  • Markus Triska added clp(b), the boolean constraint solver, improved his clp(fd) and was before several enhancements to the toplevel dealing with constraints.
  • Thanks to Matt Lilley and Mike Elston, there is CQL, a DSL (Domain Specific Language) for dealing with SQL. CQL is developed in an environment where complex SQL databases are the norm and therefore supports a large subset of SQL and can deal with tables with thousands of columns and other stuff that the ocasional SQL user won't expect.
  • Matt Lilley improved networking support significantly, including much better support for SSL and general support for both HTTP and SOCKS proxy servers.
  • Many people have provided add-ons (packs) that rely on SWI-Prolog version 7. See http://www.swi-prolog.org/pack/list.

There are no big changes to the Prolog engine. Notably SWISH has proved to be a great honeypot for finding ways to crash the system. Many of these have been fixed and notably stack overflow handling is now much more robust. Paulo Moura included an extensive portable test suite in Logtalk which pointed out various small errors. Some of these are still present, none deemed urgent.

Porting to SWI-Prolog 7

Quite a lot of programs will run unmodified. Notable programs that extensively use DCGs (grammar rules, -->) may not run unmodified. See

for dealing with this. The changes are typically rather straigthforward and not hard to debug.

The modified list notation does not often lead to portability issues, but portability issues are typically harder to spot. A good step is to run the following after loading your program:

?- explain(.).

This lists clauses in the program in which '.' appears. You can of course also search the sources, but this is relatively hard because the '.' is used in many contexts (end-of-term, =.., comments, etc).

As a work-around, you might be able to start SWI-Prolog as below. This restores the traditional list standard and disables the Dict.key functional notation. It may work well for you if you merely rely on the core Prolog engine. A growing number of the libraries depends on the new features and will thus become unusable in this mode.

swipl --traditional