Need help with felix?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

607 Stars 45 Forks Other 8.3K Commits 36 Opened issues


The Felix Programming Language

Services available


Need anything else?

Contributors list


An advanced, statically typed, high performance scripting language with native C++ embedding.



This file:

// hello.flx
println$ "Hello World";

can be run directly:

flx hello.flx

It just works. No makefiles. No compiler switches. Automatic caching and dependency checking for Felix and C++. Uses a flx_pkgconfig database consisting of a directory of

files to specify and find libraries and header files based on in language abstract keys.

Hyperlight Performance

The aim is to run faster than C.

Underneath Felix generates highly optimised machine binaries which outperform most interpreters, bytecode compilers, virtual machines, and sometimes compiled languages including C and C++.

Felix is an aggressive inliner which performs whole program analysis and high level optimisations such as parallel assignment, self-tail call elimination.

Felix generates optimised C++ which is then compiled and optimised again by your system C++ compiler.


Ack Takfp
Felix/clang 3.71 6.23
Clang/C++ 3.95 6.29
Felix/gcc 2.34 6.60
Gcc/C++ 2.25 6.25
Ocaml 2.93 8.41

C and C++ embedding

Felix is a C++ code generator specifically designed so that all your favourite C and C++ libraries can be embedded with little or no glue logic:

// required header 
header vector_h = '#include ';

// C++11 for smart pointers header memory_h = '#include ' requires package "cplusplus_11" ;

// types type vector[T] = "::std::shared_ptr<::std::vector>>" requires vector_h, memory_h ;

type viterator[T] = "::std::vector1>::iterator" requires vector_h ;

// constructor ctor[T] vector[T] : unit = "::std::make_shared<::std::vector>>()";

// operations proc push_back[T] : vector[T] * T = "$1->push_back($2);"; proc push_back[T] (v: vector[T]) (elt:T) => push_back(v,elt);

fun stl_begin[T] : vector[T] -> viterator[T] = "$1->begin()"; fun deref[T] : viterator[T] -> T = "*$1";

// example use var v = vectorint; v.push_back 42; println$ *v.stl_begin; </::std::vector></::std::vector>

Getting Started


  • Python 3
  • Ocaml 4.06.1 (only for source build)
  • C++ compiler: g++, clang++, or msvc

Extras (can be installed later)

  • SDL2 for graphics

Build from Source


git clone
cd felix
. buildscript/
sudo make install # optional!


git clone
cd felix
. buildscript/
sudo make install # optional!

Building with Nix

On platforms supporting Nix, you can set up a build and runtime environment by running:

git clone
cd felix
nix-shell shell.nix
. buildscript/

This will do an in place "install" of the Felix binaries. Note that this should work on OS X with Nix, but needs to be tested.


Make sure git, Python3 and Ocaml are on your PATH. You can download a pre-built Ocaml 4.06.1 for Windows.

Open a cmd.exe console with Visual Studio 2015 or above environment established or run vcvarsall x86. See vcvarsall.

git clone
cd felix
. buildscript/
nmake install # optional!


Arch Linux

Use provided PKGBUILD to make an installable package. It is also available in the AUR repository

cd src/misc
sudo pacman -U felix-VERSION.pkg.tar.xz


Build Status

Appveyor, Windows build: Build Status Travis, Linux build: Build Status



Documentation Master
Felix Tutorial
Installation and Tools Guide
Felix Language Reference Manual
Felix Library Packages
Articles on Modern Computing
Felix Home Page
Felix Wiki
Git Repository
Binary Download

Mailing List

mailto:[email protected]


Felix is Free For Any Use (FFAU)/Public Domain.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.