---
render-subpages: false
...

# The Meson Build system

## Overview

Meson is an open source build system meant to be both extremely fast,
and, even more importantly, as user friendly as possible.

The main design point of Meson is that every moment a developer spends
writing or debugging build definitions is a second wasted. So is every
second spent waiting for the build system to actually start compiling
code.

## Features

*   multiplatform support for Linux, macOS, Windows, GCC, Clang, Visual Studio and others
*   supported languages include C, C++, C#, D, Fortran, Java, Rust
*   build definitions in a very readable and user friendly non-Turing complete DSL
*   cross compilation for many operating systems as well as bare metal
*   optimized for extremely fast full and incremental builds without sacrificing correctness
*   built-in multiplatform dependency provider that works together with distro packages
*   fun!

## Quickstart for beginners

Are you an absolute beginner when it comes to programming? No worries,
read [this beginner guide](SimpleStart.md) to get started.

## Tutorials

- [Get it](Getting-meson.md)
- [Build a Gtk app from scratch](Tutorial.md)
- [Build a SDL app from scratch](GuiTutorial.md)
- [How do I do X in Meson?](howtox.md)

## Manual

- [Usage manual](Manual.md)
- [API reference manual](Reference-manual.md)
- [Modules documentation](Modules.md)
- [Frequently Asked Questions](FAQ.md)
- [Release Notes](Release-notes.md)

## Community

The easiest way for most people to connect to other Meson developers is
a web chat. The channel to use is `#mesonbuild` either via Matrix ([web
interface](https://app.element.io/#/room/#mesonbuild:matrix.org)) or
[OFTC IRC](https://www.oftc.net/).

For general discussion, please use the
[Discussions](https://github.com/mesonbuild/meson/discussions) section
of the Meson GitHub repository.

### Development

All development on Meson is done on the [GitHub
project](https://github.com/mesonbuild/meson). Instructions for
contributing can be found on the [contribution page](Contributing.md).

You do not need to sign a CLA to contribute to Meson.

The release process is separately covered at [Releasing](Releasing.md).

### [Projects using Meson](Users.md)

Many projects are using Meson and they're
a great resource for learning what to (and what not to!) do when
converting existing projects to Meson.

[A short list of Meson users can be found here](Users.md)
but there are many more. We would love to hear about your success
stories too and how things could be improved too!
