F* (pronounced F star) is an ML-like functional programming language aimed at program verification. Its type system includes polymorphism, dependent types, monadic effects, refinement types, and a weakest precondition calculus. Together, these features allow expressing precise and compact specifications for programs, including functional correctness and security properties. The F* type-checker aims to prove that programs meet their specifications using a combination of SMT solving and manual proofs. Programs written in F* can be translated to OCaml, F#, or C for execution.

The latest version of F* is written entirely in F*, and bootstraps in OCaml and F#. It is open source and under active development on GitHub. A detailed description of this new F* version is available in a POPL 2016 paper and a POPL 2017 one. You can learn more about F* by following the online tutorial. Materials from recent talks are available below. Read our blog to keep up to date with the latest news on F*.

The main ongoing use case of F* is building a verified, drop-in replacement for the whole HTTPS stack in Project Everest. This includes verified implementations of TLS 1.2 and 1.3 including the underlying cryptographic primitives. Moreover, while F* is extracted to OCaml by default, we are devising a subset of F* that can be compiled to C for efficiency.

Previous versions of F* could also be translated to JavaScript. We have used these previous versions in a number of projects, ranging from verifying implementations of cryptographic constructions and protocols, implementations of web browser extensions, formalizing the semantics of other languages (including JavaScript and a compiler from a subset of F* to JavaScript, and TS*, a secure subset of TypeScript), and even certifying the correctness of the core of F* type-checker itself.


The sources of F* are hosted on GitHub. Binary packages are available for multiple platforms.


F* is distributed under the Apache 2.0 license.

F* Tutorial

Click the image below to start the F* tutorial.

F* Tutorial


F* is a state-of-the-art research project under active development; as such, it contains a number of known bugs.

For documentation please refer to the tutorial and the GitHub wiki.

If you encounter a problem with F*, we encourage you to report it to the GitHub issue tracker. Please understand that we may not have the necessary manpower to address new feature requests - as an open source project, we welcome your contributions to help improve F*.

The fstar-club mailing list is dedicated to F* users. Here is where all F* announcements are made to the general public (e.g. for releases, new papers, etc) and where users can ask questions, ask for help, discuss, provide feedback, announce jobs requiring at least 10 years of F* experience, etc. List archives are public, but only members can post. Join here!


F* is a joint project between Microsoft Research, INRIA, and the community at large.

Current team

Past contributors


13 results
[13] Everest: Towards a Verified, Drop-in Replacement of HTTPS (, , , , , , , , , , , , , , , , , , , , , ), In 2nd Summit on Advances in Programming Languages, . [bibtex] [pdf]
[12] Verified Low-Level Programming Embedded in F* (, , , , , , , , , , ), arXiv:1703.00053, . [bibtex] [pdf]
[11] A Monadic Framework for Relational Verification (Functional Pearl) (, , , , , , , , ), arXiv:1703.00055, . [bibtex] [pdf]
[10] Dijkstra Monads for Free (, , , , , , , ), In 44th ACM SIGPLAN Symposium on Principles of Programming Languages (POPL), . (To appear) [bibtex] [pdf]
[9] Dependent Types and Multi-Monadic Effects in F* (, , , , , , , , , , , ), In 43nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL), ACM, . [bibtex] [pdf]
[8] Wys*: A Verified Language Extension for Secure Multi-party Computations (, , ), . [bibtex] [pdf]
[7] Gradual typing embedded securely in JavaScript (, , , , , , ), In The 41st Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (Suresh Jagannathan, Peter Sewell, eds.), ACM, . [bibtex] [pdf] [doi]
[6] Probabilistic relational verification for cryptographic implementations (, , , , , ), In The 41st Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (Suresh Jagannathan, Peter Sewell, eds.), ACM, . [bibtex] [pdf] [doi]
[5] Fully Abstract Compilation to JavaScript (, , , , , ), In 40th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, . [bibtex] [pdf]
[4] Verifying Higher-order Programs with the Dijkstra Monad (, , , , ), In Proceedings of the 34th annual ACM SIGPLAN conference on Programming Language Design and Implementation, . [bibtex] [pdf]
[3] Secure distributed programming with value-dependent types (, , , , , ), In J. Funct. Program., volume 23, . [bibtex] [pdf]
[2] Self-Certification: Bootstrapping Certified Typecheckers in F* with Coq (, , , ), In Proceedings of the 39th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, . [bibtex] [pdf]
[1] Secure distributed programming with value-dependent types (, , , , , ), In Proceeding of the 16th ACM SIGPLAN international conference on Functional Programming (Manuel M. T. Chakravarty, Zhenjiang Hu, Olivier Danvy, eds.), ACM, . [bibtex] [pdf] [doi]