Research prototype tool for modular formal verification of C and Java programs
OCaml C Makefile Java HTML Vala Other
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin Improve chars_to_uchars and uchars_to_chars spec Aug 6, 2018
examples Floating point examples added (#136) Aug 13, 2018
help - updated description of 'precise predicate' Aug 9, 2011
javacard_tutorial - Weakened the contract of beginTransaction Sep 2, 2011
make_vfdeps Make macOS build use vfdeps package Dec 22, 2017
make_vfdeps_win32 vfdeps: Include Z3 DLL import library Jan 5, 2018
src mysh: Refactoring: eliminate the queue Aug 18, 2018
tests Fix bug opening llong fields Aug 17, 2018
tutorial_solutions Fix an error in the solution for the tutorial excercise on fractional… Oct 31, 2016
.gitignore Linux: embed path to in executables Jan 19, 2018
.travis.yml Travis: clone to depth 100; see v17.06 tag Dec 28, 2017
GNUmakefile.settings.example Build script: preserve value of `OS` on Windows Nov 24, 2017 Create Apr 1, 2016 Update Mar 6, 2018 Update Mar 6, 2018 Update Mar 6, 2018 Update Jan 17, 2017 Advertise verifast-commits mailing list Mar 6, 2018
README.txt Make build instructions accessible Jul 1, 2016
Z3-on-Ubuntu64.txt Added list of i386 packages to install to run VeriFast 32-bit (with Z… May 12, 2014
appveyor.yml Fix Windows build (wrong GTK path) Dec 5, 2017 - Expanded the release script to "force" testing vfide with hidden lo… Jan 8, 2016 Minor release build script improvement Nov 3, 2014
configure - Basic build (no Z3, no IDE) now works in Cygwin Apr 8, 2014
settings.bat.example - adding support for Z3v2 Apr 15, 2011 Fix Travis macOS build issue (3rd attempt) #135 Aug 7, 2018
setup-windows.bat Fix Windows build (missing tool 'conv') Dec 5, 2017 Fix vfdeps sha1sum on Win32 Jan 4, 2018 threading.h#mutex_ghost_use is unsound Feb 22, 2018
test.bat Improved the release build process: May 20, 2009 Added some missing files. Jul 24, 2009
testsuite.mysh Fix bug opening llong fields Aug 17, 2018

Build Status Build status DOI


By Bart Jacobs*, Jan Smans*, and Frank Piessens*, with contributions by Pieter Agten*, Cedric Cuypers*, Lieven Desmet*, Jan Tobias Muehlberg*, Willem Penninckx*, Pieter Philippaerts*, Amin Timany*, Thomas Van Eyck*, Gijs Vanspauwen*, Frédéric Vogels*, and external contributors

* imec-DistriNet research group, Department of Computer Science, KU Leuven - University of Leuven, Belgium

VeriFast is a research prototype of a tool for modular formal verification of correctness properties of single-threaded and multithreaded C and Java programs annotated with preconditions and postconditions written in separation logic. To express rich specifications, the programmer can define inductive datatypes, primitive recursive pure functions over these datatypes, and abstract separation logic predicates. To verify these rich specifications, the programmer can write lemma functions, i.e., functions that serve only as proofs that their precondition implies their postcondition. The verifier checks that lemma functions terminate and do not have side-effects. Since neither VeriFast itself nor the underlying SMT solver need to do any significant search, verification time is predictable and low.

The VeriFast source code and binaries are released under the MIT license.


Within an hour after each push to the master branch, binary packages become available at the following URLs:

These "nightly" builds are very stable and are recommended. Still, named releases are available here. (An archive of older named releases is here.)

Simply extract the files from the archive to any location in your filesystem. All files in the archive are in a directory named verifast-COMMIT where COMMIT describes the Git commit. For example, on Linux:

tar xzf ~/Downloads/verifast-nightly.tar.gz
cd verifast-<TAB>  # Press Tab to autocomplete
bin/vfide examples/java/termination/Stack.jarsrc  # Launch the VeriFast IDE with the specified example
./  # Run the test suite (verifies all examples)





We gratefully acknowledge the authors and contributors of the following software packages.

Bits that we ship in our binary packages

  • OCaml
  • OCaml-Num
  • Lablgtk
  • GTK+ and its dependencies (including GLib, Cairo, Pango, ATK, gdk-pixbuf, gettext, fontconfig, freetype, expat, libpng, zlib, Harfbuzz, and Graphite)
  • GtkSourceView
  • The excellent Z3 theorem prover by Leonardo de Moura and Nikolaj Bjorner at Microsoft Research, and co-authors

Software used at build time

  • findlib, ocamlbuild, camlp4, valac
  • Cygwin, Homebrew, Debian, Ubuntu
  • The usual infrastructure: GNU/Linux, GNU make, gcc, etc.


We gratefully acknowledge the following infrastructure providers.

  • GitHub
  • Travis CI
  • AppVeyor CI


This work is supported in part by the Flemish Research Fund (FWO-Vlaanderen), by the EU FP7 projects SecureChange, STANCE, ADVENT, and VESSEDIA, by Microsoft Research Cambridge as part of the Verified Software Initiative, and by the Research Fund KU Leuven.

Mailing lists

To be notified whenever commits are pushed to this repository, join the verifast-commits Google Groups forum.

Third-Party Resources