diff --git a/.gitignore b/.gitignore
index eb15d0b07a79e6314cc0142106c99ea1acfb9edd..378eac25d311703f3f2cd456d8036da525cd0366 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1 @@
-*.o
-rugby
-rugby-resources.c
+build
diff --git a/Makefile b/Makefile
deleted file mode 100644
index f70a223bcf68264c79f07d54ee9be224bdbfa64d..0000000000000000000000000000000000000000
--- a/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-CFLAGS = -Wall `pkg-config --cflags gtk+-3.0`
-CPPFLAGS = -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_36 -DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4
-CPPFLAGS += -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_36 -DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_4
-LDLIBS = `pkg-config --libs gtk+-3.0`
-
-all: rugby
-
-rugby: rugby-application.o rugby-cell-renderer-score.o rugby-resources.o rugby-score-store.o rugby-scoring.o rugby.o
-
-rugby-resources.c: rugby.gresource.xml $(shell glib-compile-resources --generate-dependencies rugby.gresource.xml)
-	glib-compile-resources --generate-source rugby.gresource.xml --target $@
-
-clean:
-	$(RM) rugby *.o rugby-resources.c
diff --git a/interface.ui b/data/interface.ui
similarity index 100%
rename from interface.ui
rename to data/interface.ui
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/rugby.css b/data/rugby.css
similarity index 100%
rename from rugby.css
rename to data/rugby.css
diff --git a/rugby.gresource.xml b/data/rugby.gresource.xml
similarity index 100%
rename from rugby.gresource.xml
rename to data/rugby.gresource.xml
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..75a31e65bcae20f54aacb8aacdf318b9adc1945f
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,15 @@
+project('rugby', 'c',
+        default_options: [
+            'buildtype=debugoptimized',
+            'c_std=gnu11',
+            'warning_level=1'
+        ])
+
+add_global_arguments(['-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38',
+                      '-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_10',
+                      '-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_38',
+                      '-DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_10'],
+                      language: 'c')
+
+subdir('src')
+subdir('data')
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..a459bbd41db13d194ca2058cea353f2629da3ce8
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,14 @@
+gnome = import('gnome')
+
+res = gnome.compile_resources('gen-resources', '../data/rugby.gresource.xml', source_dir: '../data')
+
+gtk = dependency('gtk+-3.0', version : '>= 3.10')
+
+src = ['rugby.c',
+       'rugby-application.c',
+       'rugby-cell-renderer-score.c',
+       'rugby-score-store.c',
+       'rugby-scoring.c',
+       res]
+
+executable('rugby', src, dependencies : gtk)
diff --git a/rugby-application.c b/src/rugby-application.c
similarity index 100%
rename from rugby-application.c
rename to src/rugby-application.c
diff --git a/rugby-application.h b/src/rugby-application.h
similarity index 100%
rename from rugby-application.h
rename to src/rugby-application.h
diff --git a/rugby-cell-renderer-score.c b/src/rugby-cell-renderer-score.c
similarity index 100%
rename from rugby-cell-renderer-score.c
rename to src/rugby-cell-renderer-score.c
diff --git a/rugby-cell-renderer-score.h b/src/rugby-cell-renderer-score.h
similarity index 100%
rename from rugby-cell-renderer-score.h
rename to src/rugby-cell-renderer-score.h
diff --git a/rugby-score-store.c b/src/rugby-score-store.c
similarity index 100%
rename from rugby-score-store.c
rename to src/rugby-score-store.c
diff --git a/rugby-score-store.h b/src/rugby-score-store.h
similarity index 100%
rename from rugby-score-store.h
rename to src/rugby-score-store.h
diff --git a/rugby-scoring.c b/src/rugby-scoring.c
similarity index 96%
rename from rugby-scoring.c
rename to src/rugby-scoring.c
index 014700a448d97cfd4d20327bec024510fb3946c6..920e9e2a475c3e85d24fc11dd07fcbc5b6ac2610 100644
--- a/rugby-scoring.c
+++ b/src/rugby-scoring.c
@@ -4,7 +4,7 @@
  * rugby_scoring_get_possibilities:
  * @score: the score of a team
  *
- * Gets the possibile ways of scoring @score points, as a %GVariant of the
+ * Gets the possible ways of scoring @score points, as a %GVariant of the
  * type "a(iii)", in the order "tries, utries, pens".
  *
  * Returns: (transfer-none): the possibilities, or %NULL in the case there are
diff --git a/rugby-scoring.h b/src/rugby-scoring.h
similarity index 100%
rename from rugby-scoring.h
rename to src/rugby-scoring.h
diff --git a/rugby.c b/src/rugby.c
similarity index 100%
rename from rugby.c
rename to src/rugby.c