Version 2.3.1-beta.1

May 16, 2026

The first beta for Drawpile 2.3.1 has been released. It has many new features, such as autorecovery, timelapses, animation improvements, dynamic scaling on Android and more, as well as numerous bugfixes. But like the small increase in the version number implies, it is fully compatible with version 2.3.0.

This has already been out and tested for a while as an "alpha" version for a while, so it should be stable and ready for use. Especially if you're using Drawpile for offline drawing, the autorecovery feature makes it worth using the beta. For animators, there also big enough improvements that this will be the superior version. On Android, there's also been a number of improvements and compatibility for more devices.

For a list of what changed, take a look at this guide. There's pictures and videos there describing the new stuff.

If you have questions, feedback or trouble using the new version, take a look at the help page on how to get in contact. And if you want to support continued development, you can donate to the project!

Updating

You can download this version from the Beta section of the downloads page and simply install it over the current version. This will update it. The new version is backward-compatible, so you can still join sessions hosted with the previous version.

Alternatively, you can run both versions side-by-side. See here for how to do that on different operating systems.

F-Droid on Android and Flatpak on Linux should get this version on their beta channels in the coming week or so. It always takes them a little bit longer to do so.

Server owners can update if they want, although it is not necessary. The most significant thing is that you can now restrict how long users can linger outside of a session, letting you prevent them idling in the session list for example, and some fixes for cases where clients weren't properly disconnected after their session ended. If you are using the all-in-one Docker server, see here how to update.

Changes in this Release

There's many features and fixes in this version, such as:

  • Autorecovery. If Drawpile exits unexpectedly, Windows reboots your computer for updates or Android terminates Drawpile in the background, you can recover your session, usually right up to the moment it stopped. This replaces the (not very automatic) autosave mechanism and makes offline drawing much more robust.
  • A new "project" file format, called dppr. Stores the whole history of your canvas, based on the autorecovery feature.
  • Timelapses, via File → Make Timelapse. This makes a video of your drawing or animation process, some people also (incorrectly) call this "speedpaint". You can even make a cropped timelapse by selecting an area on the canvas first.
  • Stroke previews and brush names in the brushes dock, rather than just thumbnails. You can switch back to those if you prefer of course.
  • Animation improvements, like exposure changes, timeline zooming, inverted ranges to work on the tail ends of loops, move locking tracks and more.
  • Better Android support. When Drawpile starts, it asks you how large you want the UI now. Many keyboard issues were fixed and several devices also have received special workarounds to make them work properly.
  • Velocity-adjustment for the stabilizer, speeding up as you make faster strokes.
  • Performance improvements, like better brush loading to make Drawpile start up faster or speeding up synchronized smudging.

And a lot more. The full changelog follows below.

Where available, there's links to the development blog with more information. Note that these sometimes mention that something isn't implemented yet because they weren't at the time, but usually later block posts give an update that it has been implemented in the assorted bits section at the bottom.

  • Features:
  • Fixes:
    • Force canvas view dimensions to be even on hardware renderers, since otherwise the view gets scrunched on some graphics cards.
    • Make MyPaint brushes properly handle input values exactly on the point of a stair-step curve. Thanks Blozzom for testing.
    • Don't show MyPaint curves as continuing in a straight line outside the first and last point, since they don't.
    • Work around tablets not reporting when the eraser is brought near. Thanks Lauwenmark for reporting.
    • Work around some some Android devices eating three- and four-finger taps unconditionally. Thanks Afiq for reporting.
    • Don't try to set the one-finger touch input on Android according to whether the device says it has a stylus attached because devices just lie about it. It's always set to be dynamically detected by default now.
    • Make stylus buttons on some external tablets on Android work properly. The pen buttons used to not activate until pressing the pen down and release only if the pen was continued to be held. This is a patch to Qt.
    • Clamp OKLAB colors the proper way round. Thanks Bonbli for reporting.
    • Make setting kinetic scrolling to touch drag not trigger long-presses immediately on Android.
    • Properly clear invalid selection areas when masking brush strokes (shouldn't happen in the first place though.)
    • Make stylus buttons on Xiaomi devices act as right and middle clicks instead of page up and page down. Can be toggled in the tablet preferences. This is a patch to Qt.
    • Make lines not come out all jaggy on Xiaomi devices by ignoring the (wrong) tablet position history. Can be toggled in the tablet preferences. This is a patch to Qt.
    • Default the global pressure curve on Xiaomi devices to be really steep, because their stylus has a similarly high threshold as Apple Pencils do.
    • When saving a file, ask whether to overwrite it after confirming the format to avoid overwriting files unquestioned.
    • Properly preview editable fills when switching layers.
    • Disable the annoyingly slow and sometimes even crashy animations when rearranging docks and toggling toolbar extensions. They now just occur instantly instead.
    • Properly disable color marker and blending option buttons in the layer properties dialog when you don't have permission to modify those. Thanks xxxx for reporting.
    • Make bezier curve tool work with touch drawing. Thanks Notester32 for reporting.
    • Make refreshing flipbook not reset the playback to the beginning. Thanks BulletPepper for reporting.
    • Keep flipbook range to match the canvas range when it did so before even when closing the flipbook. Thanks BulletPepper for reporting.
    • Make fonts not be a wonky size on some Android devices.
    • Properly enable clipping and alpha lock controls in layer dock when switching from a non-editable to an editable layer. Thanks xxxx for reporting.
    • Don't clamp brushes with out of range inputs from the mere act of opening the brush editor. Thanks Phoneme for reporting.
    • Render repeated animation frames into exports, since some players get confused by frames held longer.
    • Use a fixed random seed for the brush preview so that it doesn't change erratically when adjusting a parameter, which made it hard to see what was actually changing.
    • Properly update alpha inherit icon when switching between dark and light themes. Thanks xxxx for reporting.
    • Center brush dock thumbnails instead of having them left-aligned. Thanks MorrowShore for reporting.
    • Handle additional stylus buttons on Android correctly. This makes some three-button styluses no longer interpret two of the side buttons as middle mouse.
    • Show correct MyPaint outline size when switching tools. It could sometimes end up showing an unadjusted size.
    • Properly mark MyPaint brushes as having been modified when modifying inputs other than pressure.
    • Don't limit flipbook range to 99 when opening it.
    • Make color selection in annotation tool asynchronous so that it doesn't crash in the browser. Thanks Curiosity for reporting.
    • Make status bar not end up huge when reattaching chat. Thanks hpar and xxxx for reporting.
    • Slow down the update rate of the status bar, since it causes performance issues on some devices. Thanks Liz and Hyper ifg for reporting.
    • Don't focus flipbook when it's already open to allow refreshing it without it taking away the keyboard focus from the main window.
    • Make lone presses of the Alt key not focus the menu bar, since that interferes with shortcuts.
    • Don't consider the canvas eligible for long-pressing to open a (nonexistent) context menu.
    • Ignore motions right before releasing a numeric slider so that lifting the stylus doesn't annoyingly nudge the value off what you meant to pick.
    • Some text input on Android where spacebar wouldn't work, the view would turn blue on some devices, the text area would block stylus input or the text menu would cover up the text.
    • Handle F13 to F24 keys on Android and translate F21 to middle click by default. This is a workaround for OnePlus devices that inexplicably press this keyboard key when you press the button on their stylus. Thanks Clover_Yan for reporting.
    • Translate transforms with oversized selection masks to cut and paste operations instead of cancelling the transform. Thanks phanie for reporting.
    • Properly reset user id after leaving an online session and opening a file or creating a new image in the same window. Previously you would count as different users in different contexts, leading to permissions appearing wrong and your own strokes getting a user marker. Thanks grimsley for reporting.
    • Occasional crashes when using anti-overflow with a non-zero expand value at the edge of the canvas. Thanks Ausjamcian for reporting.
    • Immediately send local drawing commands from freehand strokes to the paint engine. This makes synchronized smudging way faster on some devices (and no perceptible difference on most others.)
    • Cancel strokes lingering from synchronized smudging when a new one is started. This prevents long-running strokes from just taking forever to finish and prevents the program hanging in some pathological cases.
    • Don't enable synchronized smudging on MyPaint brushes that don't have it explicitly set and only have infinitesimal smudge factor. There's several brushes where all it does is slow down the stroke with no perceptible difference.
    • Set frame ranges properly when only changing one side of the frame range in a session that doesn't have both sides set yet. Thanks dAVePAGE for reporting.
    • Properly load frame ranges from ORA files that don't have any timeline defined.
    • Default session host type to passworded instead of remembering that you had it set to public. This is a safer option than accidentally hosting something in public you didn't mean to and ending up in a panic trying to get the strangers out. Thanks Bluestrings and watt for reporting.
    • Change the wording on public and passworded session options to make it clearer what they do. Thanks Bluestrings, hyper and tiar for suggesting.
    • Close invite dialog when disconnecting.
    • Don't change current brush when using the brushes dock's search bar.
    • Allow skipping around in the playback dialog again. This was caused by the check whether the canvas size is valid or not being flippe the wrong way round. Thanks Saova for reporting.
    • Properly preview lines, curves, circles and rectangles when using a brush with smudging turned on. Thanks retarj_o_burro for reporting.
    • Don't clear save paths when reconnecting to a session. This was particularly annoying on Android, since you can't save over existing files there. Thanks tiar for reporting.
    • Make automatic switching to frame view mode work properly even when the timeline isn't a floating or tabbed widget. The lack of a tab bar caused it to get misdetected as hidden.
    • Solve an issue where on some Android devices you would get disconnected on the first attempt of joining a session and then it worked fine on reconnect. Thanks Bluestrings for reporting.
    • Allow unsetting default layers again. Previously that operation got incorrectly filtered out as attempting to set the default layer to an invalid id.
    • Select the bottom-most layer to start with if no default layer is set. Previously you'd end up on the newest layer, which was unpredictable and often enough confounding if you ended up on somebody's shading layer or similar.
    • Properly hide and lock drawing on hidden layers in frame view. Thanks hipofiz for reporting.
  • Server Features:
  • Server Fixes:
    • Only show the fact that a session was reported in the event log, but leave the details to only be visible to the server owners. Thanks Liz for reporting.
    • Log streamed resets being blocked properly. Thanks grimsley for reporting.
    • Properly disconnect notify all clients when a session is shut down. Previously it could miss some of them and leave them lingering without a session.
  • Removed Server Features:
    • Closing sessions, called "block new joins" in the client. It's just a worse variant of setting/changing the password on the session to make it invite-only. That has none of the downsides of locking yourself out, letting strangers join if they time it right and the session becoming public on its own after everyone has left.
  • Translations (only translations that are completed to a large enough degree are included in the program):
    • Arabic translation by Mohamed Elmogy and Shakhabit.
    • Brazilian Portuguese translation by Donizete J. R. Vida and Elliot S.
    • Catalan translation by Roger VC.
    • Czech translation by Pavel Borecki.
    • European Portuguese translation by ssantos and Victor Araújo.
    • German translation by askmeaboutloom.
    • Hindi translation by Chandramauli.
    • Indonesian translation by Arif Budiman and evan.
    • Japanese translation by ubanis.
    • Korean translation by Larry Choi, PIXELHIZE and Yeoleum.
    • Russian translation by Alevtina Karashokova.
    • Simplified Chinese translation by Wang Chenxzu and xxxx.
    • Spanish translation by Manuart.

Acknowledgements

Thanks to everyone that has reported bugs, requested and discussed features, contributed code or documentation and otherwise helped with the development. Also thanks to those in the support channels helping out others and of course the administrators keeping the public servers running. And of course to those that have donated to the project.

We also thank SignPath.io for providing us with code signing for Windows with a certificate by SignPath Foundation.