diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9539b66
--- /dev/null
+++ b/README.md
@@ -0,0 +1,135 @@
+# OpenRS2 Natives
+
+## Introduction
+
+OpenRS2 Natives are open-source replacements for the jaggl, jaggl\_dri and
+jagmisc native libraries.
+
+## Prerequisites
+
+Building OpenRS2 Natives requires the following pieces of software on all
+platforms:
+
+* [Java Development Kit][jdk] (version 12 or later)
+* [Apache Maven][maven] (version 3.3.9 or later)
+
+### Platform-specific dependencies
+
+Your platform's standard C compiler and [OpenGL][opengl] development headers
+must be installed.
+
+#### Windows
+
+Install the [Build Tools for Visual Studio][visualstudio] (2019 or later),
+which provide a command-line version of the Visual C++ compiler. The full GUI
+version of Visual Studio will also work, but it is not required.
+
+The Visual C++ tools must be present on your `%PATH%` when building OpenRS2
+Natives. The easiest way to achieve this is to open the command prompt with the
+'Developer Command Prompt for VS 2019' item from the start menu.
+
+The Java Development Kit and Apache Maven `bin` directories must be manually
+[added to your `%PATH%` variable][path].
+
+##### Cross-compiling
+
+To compile a 32-bit DLL on a 64-bit Windows system, open the 'x64\_x86 Cross
+Tools Command Prompt for VS 2019' instead.
+
+Maven's `nar.javaHome` variable must point to a 32-bit JDK and `nar.arch` must
+be set to `x86`:
+
+ -Dnar.javaHome="C:\Program Files (x86)\path\to\jdk" -Dnar.arch=x86
+
+#### macOS
+
+Run `xcode-select --install` from the terminal to install the [Xcode][xcode]
+command-line tools.
+
+The easiest way to install the Java Development Kit and Apache Maven is with the
+[Homebrew][homebrew] package manager. After installing Homebrew, run
+`brew cask install java` and `brew install maven`.
+
+##### Cross-compiling
+
+The last version of Java to support the 32-bit version of Mac OS X is the
+[legacy Java 6 runtime][mac-legacy-java].
+
+Pass the following flags to Maven to compile against the 32-bit version of the
+legacy runtime on a 64-bit macOS system:
+
+ -Dnar.javaHome=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home -Dnar.arch=i386
+
+#### UNIX
+
+OpenRS2 Natives requires the [GNU Compiler Collection][gcc] and the [Mesa 3D
+Graphics Library][mesa] on UNIX-like systems (e.g. Linux).
+
+The easiest way to install all the dependencies is with your system's package
+manager. For example:
+
+* Debian-based systems: `apt install openjdk-12-jdk maven gcc libgl1-mesa-dev`
+* RPM-based systems: `yum install java-12-openjdk-devel maven gcc mesa-libGL-devel`
+* ArchLinux-based systems: `pacman -S jdk-openjdk maven gcc mesa`
+
+As OpenRS2 Natives depends on a modern version of Java (at the time of writing),
+you will probably need to use a similarly modern version of your Linux
+distribution or enable its backports repository.
+
+`-headless` packages are not sufficient as the `gl-natives` module is linked
+with `libjawt`.
+
+##### Compatibility
+
+The `aol.properties` file uses the normalized `os.name` property as part of the
+architecture/operating system/linker key. It currently only contains properties
+for Linux. While the default settings will probably work for other UNIX-like
+systems, the defaults are not ideal. For example, `g++` will be used as the
+linker instead of `gcc`, introducing a redundant dependency on `libstdc++`.
+
+##### Cross-compiling
+
+To compile a 32-bit shared object on a 64-bit UNIX system, Maven's
+`nar.javaHome` variable must point to a 32-bit JDK and `nar.arch` must be set
+to `i386`:
+
+ -Dnar.javaHome=/path/to/jdk -Dnar.arch=i386
+
+## Building
+
+Run `mvn verify` to build the code and package it.
+
+## License
+
+All code and data is licensed under version 3.0 (and only version 3.0) of the
+[GNU Lesser General Public License][lgpl]. The full terms are available in the
+`COPYING.LESSER` file.
+
+
+## Copyright
+
+Copyright (c) 2019 OpenRS2 Authors
+
+OpenRS2 Natives is free software: you can redistribute it and/or modify it under
+the terms of version 3.0 of the GNU Lesser General Public License as published
+by the Free Software Foundation.
+
+OpenRS2 Natives is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with OpenRS2 Natives. If not, see .
+
+[gcc]: https://gcc.gnu.org/
+[homebrew]: https://brew.sh/
+[jdk]: https://jdk.java.net/
+[lgpl]: https://www.gnu.org/licenses/lgpl-3.0.html
+[mac-legacy-java]: https://support.apple.com/kb/DL1572
+[maven]: https://maven.apache.org/
+[mesa]: https://www.mesa3d.org/
+[opengl]: https://www.opengl.org/
+[path]: https://www.java.com/en/download/help/path.xml
+[visualstudio]: https://visualstudio.microsoft.com/downloads/
+[xcode]: https://developer.apple.com/xcode/
diff --git a/gl-dri-natives/README.md b/gl-dri-natives/README.md
deleted file mode 100644
index 5afc92f..0000000
--- a/gl-dri-natives/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# OpenRS2 GL DRI Natives
-
-## Copyright
-
-Copyright (c) 2019 OpenRS2 Authors
-
-OpenRS2 GL DRI Natives is free software: you can redistribute it and/or modify
-it under the terms of version 3.0 of the GNU Lesser General Public License as
-published by the Free Software Foundation.
-
-OpenRS2 GL DRI Natives is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
-more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with OpenRS2 GL DRI Natives. If not, see .
diff --git a/gl-natives/README.md b/gl-natives/README.md
index 5d96dee..fa61001 100644
--- a/gl-natives/README.md
+++ b/gl-natives/README.md
@@ -25,21 +25,5 @@ bindings - the same problem happens with the original jaggl bindings and build
667 of the client. I also think it is unlikely to be the client, as the same
client code works on Windows and Linux.
-## Copyright
-
-Copyright (c) 2019 OpenRS2 Authors
-
-OpenRS2 GL Natives is free software: you can redistribute it and/or modify it
-under the terms of version 3.0 of the GNU Lesser General Public License as
-published by the Free Software Foundation.
-
-OpenRS2 GL Natives is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
-more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with OpenRS2 GL Natives. If not, see .
-
[macos-perf]: https://youtrack.jetbrains.com/issue/JBR-444
[jbr]: https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime
diff --git a/misc-natives/README.md b/misc-natives/README.md
deleted file mode 100644
index dd68e95..0000000
--- a/misc-natives/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# OpenRS2 Misc Natives
-
-## Copyright
-
-Copyright (c) 2019 OpenRS2 Authors
-
-OpenRS2 Misc Natives is free software: you can redistribute it and/or modify it
-under the terms of version 3.0 of the GNU Lesser General Public License as
-published by the Free Software Foundation.
-
-OpenRS2 Misc Natives is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
-more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with OpenRS2 Misc Natives. If not, see .