v1.19.21

9001/copypartyv1.19.21Dec 2, 2025by 9001

AI Summary

Introduces hooks system improvements and a geotagging plugin, alongside fixes for deadlocks and configuration validation.

Key Highlights

  • Improved hooks system behavior (return codes).
  • New geotagging plugin for images.
  • JSON beautifier/minifier in textfile editor.

New Features

  • Enhanced hooks system
  • Geotagging plugin
  • JSON beautifier/minifier
  • Force download option
  • Prometheus metrics access control (`stats-u`)

Full Release Notes

<img src="https://github.com/9001/copyparty/raw/hovudstraum/docs/logo.svg" width="250" align="right"/>

* read-only demo server at https://a.ocv.me/pub/demo/
* [docker image](https://github.com/9001/copyparty/tree/hovudstraum/scripts/docker) ╱ [similar software](https://github.com/9001/copyparty/blob/hovudstraum/docs/versus.md) ╱ [client testbed](https://cd.ocv.me/b/)

there is a [discord server](https://discord.gg/25J8CdTT6G) with an `@everyone` in case of future important updates, such as [vulnerabilities](https://github.com/9001/copyparty/security) (most recently 2025-09-07)

## recent important news

* [v1.19.8 (2025-09-07)](https://github.com/9001/copyparty/releases/tag/v1.19.8) fixed [CVE-2025-58753](https://github.com/9001/copyparty/security/advisories/GHSA-pxvw-4w88-6x95) (a missing permission-check inside single-file shares)
* [v1.15.0 (2024-09-08)](https://github.com/9001/copyparty/releases/tag/v1.15.0) changed upload deduplication to be default-disabled
* [v1.14.3 (2024-08-30)](https://github.com/9001/copyparty/releases/tag/v1.14.3) fixed a bug that was introduced in v1.13.8 (2024-08-13); this bug could lead to **data loss** -- see the v1.14.3 release-notes for details

## 🧪 new features

* [hooks](https://github.com/9001/copyparty/tree/hovudstraum/bin/hooks#readme) now behave more usefully/predictably; 889bd324
  * hooks returning `0` will run the next hook (if any), and let the initiating action proceed if no other hooks object
  * hooks returning `100` will stop processing successive hooks, but return success, letting the initiating action proceed
  * hooks returning anything else will stop processing successive hooks (like the documentation always said) and also fail the initiating action (if hook is checked)
  * zmq hooks can now respond with json, doing relocations and all that stuff
* new mtag plugin, [geotag.py](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/geotag.py): read image geotags with exiftool ([demo](https://a.ocv.me/pub/blog/j8/11/)) 1c15c0d5 ac085b81
* #972 markdown-links are rewritten to open in the markdown-viewer 278a0d85
* #794 add json beautifier / minifier
  * ...in the textfile-editor fd8c5bfc
  * ...in the textfile-viewer 89cab5b5
* #1058 ui-option and server-config to force download instead of showing files inline a9174e5d
* option `stats-u` to grant access to prometheus-metrics based on username, not just permissions b427d780

## 🩹 bugfixes

* #1003 u2c.py (commandline uploader) did not install correctly on archlinux and/or pypi 9385daea
* #1035 uploader could fail to initialize if: 98701b78
  * the `mt` button (webworkers) was enabled in the settings tab
  * **and** the network was severely strained during intial page load 
* possible deadlock on shutdown if thumbnailer queue was hella busy fb9f0441
* #971 windows: fix deadlock on startup if trying to use a nonexistant driveletter as a volume 945b2276
* #1022 js-panic if audio playback is set to stay-in-folder a28503e8
* links to ongoing file transfers in the controlpanel could 404 (thx @Habetdin!) 77f74ddb f4d67ff0
* video scrubbing on iOS dba7c5d4
* #1054 audio volume slider could skip one percent (thx @shermanhlc!) ca6d3a5c
* detect invalid config:
  * #959 panic if `ipu` user doesn't exist 79e10786
  * panic if share config overlaps with a volume cedfc444
* #943

## 🔧 other changes

* the "new-markdown" feature was repurposed into "new-file", accepting any file extension 7d62335c
* #1023 the option to grant delete-access when creating a share was removed due to never having been implemented in the backend 04ac7fbd
* #1012 rephrased the controlpanel login-text when logged in to avoid confusion 7a291403
* add hints that the serverlog is a good place to look in some situations c424a55d
* all thumbnail types and combinations can now be pregenerated a359b89e
* #1030 add debug if cfssl is misbehaving ec00dc18
* #871 `grid` volflag is applied during navigation if user has not set a preference a9378a8e
* cosmetic:
  * show column number in markdown editor b9aacba1
  * reduced grid margins in theme2 e469bc94
  * reduced redirect delay after logging in f7e7b03f
  * controlpanel greeting in some fail-early responses acde21d4
  * update hooks to ignore the new upload-queue-empty message 3f4b79ff
* docs:
  * #1032 fix typo in example docker idp config (thx @tuetenk0pp!) 867237d0
  * warn that using/changing `-j` is usually a bad idea cad15fbf
  * add hotlink anchors to https://copyparty.eu/cli/ 7f9c139e 
* nixos:
  * #868 option to install from git-head (thx @shelvacu!) c7345308
  * #962 support idp volumes (thx @nicomem!) 904c984b
  * #963 use configured chmod-d when creating volumes (thx @nicomem!) 3242145e
* copyparty.exe: update to python 3.13.10, pillow 12.0 cdffde78

## 🌠 fun facts

* copyparty has been observed running [on a wristwatch](https://a.ocv.me/pub/g/nerd-stuff/cpp/servers/clockyparty.jpg) and on an [android tv-box](https://a.ocv.me/pub/g/nerd-stuff/cpp/servers/aallwinner.jpg) running in big-endian mode, so copyparty is [BE-certified](https://a.ocv.me/pub/g/nerd-stuff/cpp/servers/be-ready.png)
* also... **it's december!** [you know what that means](https://a.ocv.me/pub/demo/music/.bonus/#af-55d4554d) :^)

----

## ⚠️ not the [latest version](https://github.com/9001/copyparty/releases/latest/)!