Drawpile is a drawing program that lets you share the canvas with other users in real time.
Some feature highlights:
- Runs on Linux, Windows, macOS, and Android
- Shared canvas using the built-in server or a dedicated server
- Record, play back and export drawing sessions
- Animation support
- Layers and blending modes
- Text layers
- Supports pressure sensitive Wacom tablets
- Built-in chat
- Supports OpenRaster file format
- Encrypted connections using SSL
- MyPaint brush support
We use Weblate for translations.
Precompiled releases are available from the Drawpile web site or from GitHub releases. Work-in-progress builds are available as downloadable artefacts from GitHub Actions.
The following dependencies are required:
- CMake 3.18 (3.19+ recommended)
- C++17 compiler
- Rust stable compiler
- Qt 5.12 or newer (5.11 is also supported for headless server only)
Building software on Windows is a pretty miserable experience. It usually takes at least 3 hours for the development environment to finish installing, possibly more depending on the speed of your computer and network. You should also have at least 50 GB of free disk space, otherwise the process may fail.
- Install Rust and Visual Studio Community Edition. Download the Rust installer and run it. You can leave everything on the default options to let in install everything that's needed.
- Run the Visual Studio x64 Command Line. You should be able to find it in your start menu by searching for "x64". You a black window with white in it.
- If you haven't used the Windows command line before: it's weird and all kinds of terrible.
- Do not press
Ctrl+V
, it won't paste, it will just write garbage that you have to delete or else it will mess things up. To paste something, you have to useShift+Insert
instead. - Do not click around in the window. Only click the title bar or the entry in the task bar. Else it will get stuck until you press enter - but it won't tell you that, so you'll just be waiting for it to do something while it's waiting for you to press a key for all eternity.
- Don't try to copy stuff out of the window. That will almost always get it stuck and/or kill whatever is currently running. Just take a screenshot instead if you want to show someone what it says.
- Install vcpkg:
- Run
cd /D C:\
(type it into the command line window and hit enter) to switch to the root of the C drive. - Then run
git clone https://github.com/Microsoft/vcpkg.git
to get vcpkg. - Then
.\vcpkg\bootstrap-vcpkg.bat -disableMetrics
to set up vcpkg.
- Run
- Install the dependencies:
- This step takes really long to complete. Again, make sure you have at least 50 GB of free disk space.
- Run
vcpkg --disable-metrics install --clean-after-build qt5-base:x64-windows qt5-multimedia:x64-windows qt5-svg:x64-windows qt5-tools:x64-windows qt5-translations:x64-windows kf5archive:x64-windows libmicrohttpd:x64-windows libsodium:x64-windows qtkeychain:x64-windows
to install the dependencies. - Go do something else for the next several hours while it installs everything.
- Build Drawpile:
- Run
cd /D %HOMEDRIVE%%HOMEPATH%
to switch to your home directory. It is probably underC:\Users\<YOUR NAME>
. - Then run
git clone https://github.com/drawpile/Drawpile.git
to get Drawpile's source code. - Then
cd Drawpile
to switch into that directory. - Configure the build:
cmake -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug> -DCLIENT=ON -DSERVER=ON -DSERVERGUI=ON -DTOOLS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=install -DX_VCPKG_APPLOCAL_DEPS_INSTALL=ON -B build
- Build it:
cmake --build build
- this takes a few minutes the first time around. - Install it:
cmake --install build
- this won't overwrite any existing installation of Drawpile, it will just put the stuff you built and the DLLs, icons and such together so that you can actually run it.
- Run
- Run what you built. The executable should be at
C:\Users\<YOUR NAME>\Drawpile\install\drawpile.exe
This will build in debug mode, which is meant for development and runs slowly. If you want a fully-optimized release build, you have to run the configure step above with -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
instead of -DCMAKE_BUILD_TYPE=Debug
.
After you make changes to the code, you have to run the build and install steps again. You don't have to re-run the configure step.
Using Xcode:
- Install Xcode
- Install Homebrew
- Install Rust
- Open Terminal.app and run
brew install cmake libzip qt
to install required dependencies, andbrew install libmicrohttpd libsodium qtkeychain
to install optional dependencies - Run
git clone https://github.com/drawpile/Drawpile.git
to clone Drawpile - Run
cmake -S Drawpile -B Drawpile-build -G Xcode
to generate the Xcode project - Run
open Drawpile-build/Drawpile.xcodeproj
to open the project in Xcode and use normally
- Run
sudo apt install build-essential cmake git libqt6svg6 qt6-base-dev qt6-multimedia-dev qt6-tools-dev libxkbcommon-dev libzip-dev zipcmp zipmerge ziptool
to install required dependencies, andsudo apt install libmicrohttpd-dev libsodium-dev libsystemd-dev qtkeychain-qt6-dev
to install optional dependencies - Install Rust
- Run
cmake -S Drawpile -B Drawpile-build -DCMAKE_BUILD_TYPE=RelWithDebInfo
to generate the project and follow the output instructions to build
Once CMake is installed, different versions of dependencies can be downloaded and installed from source using the CI support scripts:
cmake -DCMAKE_INSTALL_PREFIX=<installation path> -DQT_VERSION=<version> -P .github/scripts/build-qt.cmake
cmake -DCMAKE_INSTALL_PREFIX=<installation path> -P .github/scripts/build-other.cmake
After installing dependencies from source, regenerate the project with
-DCMAKE_PREFIX_PATH=<installation path>
to use the source dependencies.
The source dependency scripts can also be used to build dependencies that have
extra assertions and ASan by running them with -DBUILD_TYPE=debug
. Note that
this still generates release binaries, just with extra instrumentation to find
runtime bugs.
Note that transient dependencies are not handled by these scripts; they are intended primarily for use by the CI service and are provided as-is.
Follow the above instructions, optionally using
-DCMAKE_INSTALL_PREFIX=<installation path>
when generating the project to
install to a directory other than the system root, then run cmake --build
as usual, and finally cmake --install
.