Skip to main content

Grimoire - Releases

← App details

Nextcloud 35

Grimoire 0.7.11
Release Details
UpdatedOct. 29, 2026, 4 a.m.
Changelog

Community feature request: manage placed 3D models.

Added

  • Selected-token controls in 3D rooms. Click a token with the Grab tool and a bar appears above the tool options: rotate ±45°, resize (−/+ 0.25 steps, 0.4×–4×), delete (with a confirmation), and deselect. A ring highlights the selected token and follows it as it moves.
  • Changes apply instantly and broadcast as token:upsert; deletes remove the token for everyone (token:remove) and clear the selection. Clicking empty space deselects. Remote deletion of the selected token clears the bar.

Changed

  • Upserts of existing tokens now check the update permission (create before, when the token was new). Rotate/resize are edits, not creations — this matches the UI gating, which also honours ownerOnly.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureEAgcR+NCTLBB9/+XQR0QsusPkTQ56Cu00kbP79OUcIkugLDZqR4oP7hHA/qpR7RBA4ig5oOFdsOsF93LA3WxmcABnr3GEG/yDpryIQCgWWza/8JtI19Py+SgvzYPVDM0FhpQpeIr1tsdZZ1P4FuBqcYCI6YSaTmP3NSgT28PxVOEcHCyo7KQg+TqsmkwYkxYG7bYpbzMOQMYmB4+YS7FIJv5CqYW1QVOkMliGYq8dlCSPoHcBBtLASKZwtOdCeDnjH7gHs7iyv5TRkUECpBgeeqs3TFat87Dg/yoUPSK83Sp4MbHu5TEDnGDELUILG7OOz1SfQ57SDSxCVb/lwBbFZFdyG/4HZhq1Rx743UBt+TWlB7p9Cb3kSmAOn2Jag3bGhaTaTeJy/WVELHtqF5bJpLdIubcuTcmNUo5tHVOZgvmEX9+yE912oT9s60fThkD6cIUEFwOogoVCMwoHI3pYsQNbnyN6J96zHUmvi5uKnzgbQ+vNylJPz3zVoj6NxNq8AWuArHcz5mo1inj0IpLpOqlXhgDCO/lnGfnFVa0ZaWkqqEu34mr0wb0JEdmCH91jgARD3rcV9mXr5uweyYNOXvRsTzgCyuDCjkhGCzqk1RkKrKgMr8xYwyvs/Ts3IFOKCO6sR+X9OFfb0iUXd4LkTNkw0mHufcXX/wnNp/BZQs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.10
Release Details
UpdatedOct. 27, 2026, 3:22 p.m.
Changelog

Security patches from an external source-code audit (five findings — all addressed).

Fixed — security

  • Rich text XSS (critical). Notes on the canvas were rendered with v-html unsanitized: any invited player could send/persist markup and run it in every viewer's Nextcloud-origin page. Rich text is now sanitized with DOMPurify (default safe profile — scripts, event handlers and javascript:/data: URLs stripped; heading/colour/list/link formatting preserved) at every entry point AND at render, so even previously-persisted malicious notes render inert.
  • Scene-save takeover (high). The scene-save endpoint accepted a full document replacement from ANY invited player, including renaming the scene and wiping the map/fog/config. Player saves are now a server-side scoped merge: only keys whose permission layer allows updates pass through (tokens/blocks/maps/drawings/measurements), while name, gridConfig, mode and unknown keys remain GM-only and can no longer be overwritten or cleared. Also gained the standard raw-body fallback.
  • ownerOnly token enforcement bypass (high). The token-ownership lookup queried a SCENE ROW by the token id (always missing), then fell back to the attacker-supplied owner field, and treated null (= unknown) as allowed — so ownerOnly token protection was effectively decorative and players could move or delete tokens of others. Ownership now resolves from the persisted scene document only, with no client fallback, and unknown ownership DENIES the action (deny by default).
  • Third-party addon proxy / store endpoints removed (two highs). The iframe addon system was removed from the app in 0.7.1, but its server-side same-origin fetch proxy and store endpoints remained — serving attacker-controlled remote HTML from the Nextcloud origin and fetching attacker URLs with redirects left intact (SSRF class). Rather than hardening dead endpoints, they (and their DB entities, routes, and capability bridge references) are deleted outright.

Removed

  • AddonProxyController, AddonController, Addon/AddonMapper entities and the /addon-proxy + /api/addons(-store) routes (dead since 0.7.1's addon consolidation; kept previously only for compatibility).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureQOd35W5gxwQUfySa9xZZtiS4LJFRiM2sdFx3bDlpAy4GZ9mmJ7M9SL5459nt5nGg
/YQ0FB3Uh0AzGT9ZjcjTiiVlsasXly9cI/7iqzMmg5wBbV0CE8BHnHbm8ptz2Qdf
brn9vhAlyYzo5s31VKWs2Ubobmil6Eo7xOsRmCBi9VZEkIokRboUtoBq7v1xwpek
aaJtAb3EantEXYxwn7Bs4QtkCmzWneyRrU6Ved+xOESjynlh9uyNHRhoq6xiR1LD
gn27UaUlZh5iN98AYF+Yb4kN4VyW6/nt0dsI7JRcRzzmCEInGKEVaSlfNHOVgUgj
2ua1SGyKjxRISun8V3/qqTLee7luMq2dlfSJMLMDYBfShOUSigFx0As/ti38Fa1U
AlkcgTs5xWTKKRHTE62sy9SvYTmHub70pdPjaBqwg5HylpZSrJYdDp6nfyFquu+i
EyqCu3GsWQFylocvt9wVQgYkYfQADBKIc/+Oill0zxqWiSG1Qg0nwi3DlE/C+FHd
ppESpC8UT4zLBXkFbCOnJtEBgSMdiR9n5pksgtadKg2yLRFaQ5wTWhWg6jUP8z4M
WoAiCa1Qgs7WhZhjYkGxdgpkEbxo+dV2WL1yuS5oDHbJJv86skhShnZA4L86Ypdc
qiq9PPfd/SK3UclWBpbC8sYzQ0oWId8gQ/iIIfAJtgM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.9
Release Details
UpdatedOct. 26, 2026, 5:50 p.m.
Changelog

Dice physics/render fixes found by testing 0.7.8 in the field. (Repackaged in place after field-testing caught the d4's rest pose — see below.)

Fixed

  • The d4 roll crashed at spawn and froze the table. Field-testing the first 0.7.9 packaging showed the d4 "spawning in the plane and doing nothing" (a half-buried wedge) in 3D and a frozen dice panel + stuck camera in 2D. Root cause, found by running the real module: _spawnDie never destructured labelValues — every d4 roll threw a ReferenceError AFTER the mesh was created but BEFORE the physics body existed, leaving a bodyless tetra at the scene origin (half of it below the floor — the wedge); the per-frame mesh sync then threw on d.body.position every frame, killing the render loop (room frozen at that frame; "does nothing"). Fixes: the destructure is complete; physics bodies are now created BEFORE cosmetic labels so a label failure can only log, never break the die or the loop; the per-frame sync skips body-less entries defensively; and the settle-snap block's stray CANNON reference (a second loop-killer at settle) now reads the stored this.CANNON. Verified by running the real module: dice tumble, settle at exact inradii (flush, apex up), sleep, and report values — d4, d8, d10, d20 in one batch.
  • Settled dice now rest like real dice. The physics solver can stop a die mid-tilt (a tetra balancing on an edge/vertex contact) which read as "not a d4 at all" — and it leaves a small allowed penetration at rest (the d4 sank ~4% of its size — the "clips into the floor" look). On settle each die's most-downward face is rotated to exactly flat (apex straight up for the d4, crisp kites for the d10), residual sink is lifted out, and the pose is locked by sleeping the body. The result read runs on the snapped pose, so what you see and what is reported always agree.
  • The d10's "wedge"/"no faces" and leaning rest. The trapezohedron's winding fix flipped only the FIRST triangle of each quad, leaving the other half of the kite faces wound inward. Consequences: cannon-es rejected those faces as pointing into the shape (the die could only rest on half of them, leaned/jittered and never went to sleep so rolls idled to the ~6s timeout), and the renderer BACKFACE-CULLED the inverted faces — the die looked like a half-missing "boat" wedge. The flip now reverses the entire quad cycle; verified numerically: no cannon warnings, the die sleeps after settling, and all faces render.
  • Dice result view jumps back after ~half a second. The camera goal was dropped the moment it was reached, so the zoom snapped back to the overview immediately. The zoom now HOLDS until the next roll.
  • Only one die showed when several rolled. The result camera now cycles through every resting die (~2.5s each, wrapping around) until the next roll.
  • d4 numbers bigger and edge-adjacent to read like a physical d4.
  • Striped/shadow-acne faces. The main light self-shadowed dice at ~0.04 units/texel, rendering dark diagonal stripes across faces ("texture issues"). Shadow bias + normalBias added.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturePhL1ZJe/lTJjNgB02CdcG98mXydMcgpG2WybZuPzMqzZe2uDb9fZieIgBGyo0wsw
rvVMZ0geqkk2X6QcBqzYLVWKVnde81TqxFCmWfJ/cdU5Nwl6hrpqSSI0M01szWAk
cq4OPDQUU3QgCzpZGpNd9GV9PXeGHG4KDoxARedHxFpdrqWBAMJFAE3gnijZWRWI
T63o/4VV/uhzgimniygv2MNURHEj2iJEp1pHqKN6wuT20vwQaYBvvQHAQL7UVkf1
r3dbaUNqfBOWC/zdzK5JNdviCYd1hyqiN/PIgL3rQMz8A+eRPnHYAQh3RsKJUkod
zLzNdaJ7oBaHPiSR02HFvxNJGI1wRTTRdmazJyk3nvkSGkjMfPuAAhW3zC5vApBv
2KBlRht+rEIeAeEfXqk0PXto6M5f99SUq8IGJCLvpKNTAVWpmXOQWoaW6fZLDD/Y
IBSSTQbreos6KLtNjBpVg6amJMrT0sm92HgEhKbhl+shvyEXQwzN2wL/Zf5zqRCb
5tel81xYpcQ8IdXX88HQYg2wWkPUtnq/0bLe7lpS2hfpquzDMZTgIO1+zuyOTCCD
6RocQTFduaPpzZebTc2htoZuideLUM45aUdX9NNAv28OH2xxO8EdWINbVWzPs+QY
D+jeY3Rn5wCgqo3HkrauGm1RYgL95HIkWPRLPFWbvwc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.8
Release Details
UpdatedOct. 26, 2026, 1:12 p.m.
Changelog

Dice render fixes completing the 0.7.7 batch (kept 0.7.7's published tag intact; deploy 0.7.8 to get the whole batch).

Fixed

  • d4 is a real, vertex-numbered d4. It rests on a face and the result is read at the TOP vertex (its direction points straight up when settled — verified numerically for all four settle states). Each face now prints THREE numbers near its edges — the value of each of its corners — exactly like a physical d4, so the result is legible from any viewing angle (the old face-centre labels were invisible when the upright face was seen edge-on, which is why numbers appeared only "from afar").
  • d8 face map had duplicated values. The calibration call passed the FULL canonical list ([1,8,2,7,3,6,4,5]) where the pairing helper expects only the first half: pairs were built as (1→8), then (8→1), (2→7), then (7→2) — every value used twice, and 3/4/5/6 never appeared. Fixed to [1,2,3,4]; opposites now correctly sum to 9 with all eight values present.
  • Face labels no longer land at arbitrary, upside-down twists. Label orientation is now canonical per face (the die's local up projected into the face plane, with a degeneracy fallback), shared by every die type — mirrored in the field as numbers reading "9" for a flipped "6", and the d10/d8 screenshots showing upside-down digits.
  • Label textures skip mipmap generation (minor spawn-cost win).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturebkDeJUFvyrSo9zV0/aDTsda7jDfUoutfXQ+fzMGblGx61A01/VGsQ8CDOB+xkCl3
pffrvNx7GVvWLHCnVAcHe+N9tch5NdRlDud6++TeArglx6HxJ0nFmUG8Wm1KAvVN
kavJo0iHiTVIQjdbfoBl+WGljPzMQAQ0zqILWXvoFjl/lLMuYZIqeNTavkVWgesW
lf8evfRiZdrw44rBGvMiOhAtQ8xGvHppfYCtvEIMAv5xcF3O67Mdz8bmwGkwUm8Q
wFsvgaKqNScmXe7HvmQk00pi2cB30KCBE6mkCCS7vo4TWvFbzPj9sA42PlJZvbtW
TUwdP/ZoMQmegMNhj0jVpvUlnbx76htTKhG6+te4cCo4Us1GkHui3HZ728chLz9t
zC5Qzsd+4uEtfIhKvW/clXxgZLJnriShXvHtSAbeldnVQCr2oHxUGqTJ7DwZ2CIH
ZSFUroerJMJG5+MU8dviCGNonkN3pWKCWz1iWxBMAKHhVwVUM7Zl/AIcZwauEtQ3
b5fODgfhv82P3KjdHNc0wbsTfDbNUu818/yrZj0PibGVmGRYl+exrG0dmV5UPwTx
L2NPeauXIXjU4CzpU9YVgXJUf8qvzunT6bqhXP3eeG07CsQPhnvT3ZT12AiYBNjs
mBZ/cR1VZ+qJxiw1e8rrkVJ5hspgNbhR68Mc+creI7Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.6
Release Details
UpdatedOct. 25, 2026, 1:43 p.m.
Changelog

The d10 die was geometrically wrong, 3D fog only appeared on mouse release and stuttered, and the draw tool was inert in 3D rooms.

Fixed — dice

  • d10 rebuilt as a true pentagonal trapezohedron. The old construction was built with n=10 (a twenty-faced decagonal solid whose 0–9 values cycled across 20 faces, several doubled and mislabelled) and placed labels far off the faces. The new builder is exact: two apices, a 2n ring staggered between heights ±e, and the kite faces are provably planar for the exact stagger e = h(1−cos(π/n))/(1+cos(π/n)) — verified numerically (10 faces, each with an exact antipodal face, opposite values pairing to 0+9…4+5, labels sitting on the surface).

Fixed — 3D drawing & fog feel

  • Strokes preview live in 3D. Fog brushes and the pencil now draw while you drag onto a live overlay canvas, instead of appearing only after the left button released.
  • Laggy fog gone. Overlay textures upload at most once per frame via a dirty flag (a live stroke used to trigger a full 1024² texture re-upload per mouse-move); committed strokes redraw the canvas incrementally.
  • The draw tool works in 3D rooms. Scene3D gained a drawings layer (pen/marker freehand, line/rect/ellipse/triangle/hexagon, polygon, and plain text notes) over the ground, in the same shared pixel stroke space and message formats as 2D — saves and live sync carry both room kinds' drawings.
  • Rich text notes anchor and project correctly in 3D rooms (camera projection instead of the 2D stage transform).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturepFiOO0M61kVrvkCFsustb+HsBKY7cG3PUtznTophB5jIOM42tyD5VLYJ9+Z58ihW
ISM8dcpL8PyLyu9F/IhrNuERJlSzhkZn1pEeIxyFLI670uDMemm15bFzJaqTga5e
ztkfOVHIV+akQraVtumEqTgEYd5zrLL3a2Nw3i/DG1d549oAXRErOZIXPdWZVmc4
of2wkrR585DYYgrZ+96pDARa0Bn4KxL6m+rJmQDsm6HjsQBgwr8r0NCdjn5sdbX+
HLeqfmNRhn4u0AFRi8iiUGkQGN7xLSD4UkrizAOOrTqWaVSwqjOQuEMuN73QebUj
Pbzc83ySKbjr/GQDLCvtIm7gVeifn5GG/OsJge/5wrPw0opTQ7Y3yrOVismrzXyH
OmvEFcAKft/oIgB3bAxioQDYg/gpRAMPyzRbTgk5a8HAa/4hJZZ4S9QhDhJlg8NI
9DnKA5mSnEq4xMHMVPvXo52tWVxXDVa13+mFtPBtnCvdVxcn+S83tjvK/SZNFY62
SmhM5rCUIH2xcm4cHRixV+M5pLxEeJ9UkryD9FKtXx8+yiPD/8Mf/zusKbE073Tb
JYcHzi6wAxef4uDWTqqvnlpVN0k7sshmRsIR15GjmZYvmcDzqClqkEOI8j+kSDsW
U9Hyh5wAUOymjISEPHT1z2k4AZg0m5I+bj7PqX3X2yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32

Nextcloud 34

Grimoire 0.7.11
Release Details
UpdatedOct. 29, 2026, 4 a.m.
Changelog

Community feature request: manage placed 3D models.

Added

  • Selected-token controls in 3D rooms. Click a token with the Grab tool and a bar appears above the tool options: rotate ±45°, resize (−/+ 0.25 steps, 0.4×–4×), delete (with a confirmation), and deselect. A ring highlights the selected token and follows it as it moves.
  • Changes apply instantly and broadcast as token:upsert; deletes remove the token for everyone (token:remove) and clear the selection. Clicking empty space deselects. Remote deletion of the selected token clears the bar.

Changed

  • Upserts of existing tokens now check the update permission (create before, when the token was new). Rotate/resize are edits, not creations — this matches the UI gating, which also honours ownerOnly.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureEAgcR+NCTLBB9/+XQR0QsusPkTQ56Cu00kbP79OUcIkugLDZqR4oP7hHA/qpR7RBA4ig5oOFdsOsF93LA3WxmcABnr3GEG/yDpryIQCgWWza/8JtI19Py+SgvzYPVDM0FhpQpeIr1tsdZZ1P4FuBqcYCI6YSaTmP3NSgT28PxVOEcHCyo7KQg+TqsmkwYkxYG7bYpbzMOQMYmB4+YS7FIJv5CqYW1QVOkMliGYq8dlCSPoHcBBtLASKZwtOdCeDnjH7gHs7iyv5TRkUECpBgeeqs3TFat87Dg/yoUPSK83Sp4MbHu5TEDnGDELUILG7OOz1SfQ57SDSxCVb/lwBbFZFdyG/4HZhq1Rx743UBt+TWlB7p9Cb3kSmAOn2Jag3bGhaTaTeJy/WVELHtqF5bJpLdIubcuTcmNUo5tHVOZgvmEX9+yE912oT9s60fThkD6cIUEFwOogoVCMwoHI3pYsQNbnyN6J96zHUmvi5uKnzgbQ+vNylJPz3zVoj6NxNq8AWuArHcz5mo1inj0IpLpOqlXhgDCO/lnGfnFVa0ZaWkqqEu34mr0wb0JEdmCH91jgARD3rcV9mXr5uweyYNOXvRsTzgCyuDCjkhGCzqk1RkKrKgMr8xYwyvs/Ts3IFOKCO6sR+X9OFfb0iUXd4LkTNkw0mHufcXX/wnNp/BZQs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.10
Release Details
UpdatedOct. 27, 2026, 3:22 p.m.
Changelog

Security patches from an external source-code audit (five findings — all addressed).

Fixed — security

  • Rich text XSS (critical). Notes on the canvas were rendered with v-html unsanitized: any invited player could send/persist markup and run it in every viewer's Nextcloud-origin page. Rich text is now sanitized with DOMPurify (default safe profile — scripts, event handlers and javascript:/data: URLs stripped; heading/colour/list/link formatting preserved) at every entry point AND at render, so even previously-persisted malicious notes render inert.
  • Scene-save takeover (high). The scene-save endpoint accepted a full document replacement from ANY invited player, including renaming the scene and wiping the map/fog/config. Player saves are now a server-side scoped merge: only keys whose permission layer allows updates pass through (tokens/blocks/maps/drawings/measurements), while name, gridConfig, mode and unknown keys remain GM-only and can no longer be overwritten or cleared. Also gained the standard raw-body fallback.
  • ownerOnly token enforcement bypass (high). The token-ownership lookup queried a SCENE ROW by the token id (always missing), then fell back to the attacker-supplied owner field, and treated null (= unknown) as allowed — so ownerOnly token protection was effectively decorative and players could move or delete tokens of others. Ownership now resolves from the persisted scene document only, with no client fallback, and unknown ownership DENIES the action (deny by default).
  • Third-party addon proxy / store endpoints removed (two highs). The iframe addon system was removed from the app in 0.7.1, but its server-side same-origin fetch proxy and store endpoints remained — serving attacker-controlled remote HTML from the Nextcloud origin and fetching attacker URLs with redirects left intact (SSRF class). Rather than hardening dead endpoints, they (and their DB entities, routes, and capability bridge references) are deleted outright.

Removed

  • AddonProxyController, AddonController, Addon/AddonMapper entities and the /addon-proxy + /api/addons(-store) routes (dead since 0.7.1's addon consolidation; kept previously only for compatibility).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureQOd35W5gxwQUfySa9xZZtiS4LJFRiM2sdFx3bDlpAy4GZ9mmJ7M9SL5459nt5nGg
/YQ0FB3Uh0AzGT9ZjcjTiiVlsasXly9cI/7iqzMmg5wBbV0CE8BHnHbm8ptz2Qdf
brn9vhAlyYzo5s31VKWs2Ubobmil6Eo7xOsRmCBi9VZEkIokRboUtoBq7v1xwpek
aaJtAb3EantEXYxwn7Bs4QtkCmzWneyRrU6Ved+xOESjynlh9uyNHRhoq6xiR1LD
gn27UaUlZh5iN98AYF+Yb4kN4VyW6/nt0dsI7JRcRzzmCEInGKEVaSlfNHOVgUgj
2ua1SGyKjxRISun8V3/qqTLee7luMq2dlfSJMLMDYBfShOUSigFx0As/ti38Fa1U
AlkcgTs5xWTKKRHTE62sy9SvYTmHub70pdPjaBqwg5HylpZSrJYdDp6nfyFquu+i
EyqCu3GsWQFylocvt9wVQgYkYfQADBKIc/+Oill0zxqWiSG1Qg0nwi3DlE/C+FHd
ppESpC8UT4zLBXkFbCOnJtEBgSMdiR9n5pksgtadKg2yLRFaQ5wTWhWg6jUP8z4M
WoAiCa1Qgs7WhZhjYkGxdgpkEbxo+dV2WL1yuS5oDHbJJv86skhShnZA4L86Ypdc
qiq9PPfd/SK3UclWBpbC8sYzQ0oWId8gQ/iIIfAJtgM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.9
Release Details
UpdatedOct. 26, 2026, 5:50 p.m.
Changelog

Dice physics/render fixes found by testing 0.7.8 in the field. (Repackaged in place after field-testing caught the d4's rest pose — see below.)

Fixed

  • The d4 roll crashed at spawn and froze the table. Field-testing the first 0.7.9 packaging showed the d4 "spawning in the plane and doing nothing" (a half-buried wedge) in 3D and a frozen dice panel + stuck camera in 2D. Root cause, found by running the real module: _spawnDie never destructured labelValues — every d4 roll threw a ReferenceError AFTER the mesh was created but BEFORE the physics body existed, leaving a bodyless tetra at the scene origin (half of it below the floor — the wedge); the per-frame mesh sync then threw on d.body.position every frame, killing the render loop (room frozen at that frame; "does nothing"). Fixes: the destructure is complete; physics bodies are now created BEFORE cosmetic labels so a label failure can only log, never break the die or the loop; the per-frame sync skips body-less entries defensively; and the settle-snap block's stray CANNON reference (a second loop-killer at settle) now reads the stored this.CANNON. Verified by running the real module: dice tumble, settle at exact inradii (flush, apex up), sleep, and report values — d4, d8, d10, d20 in one batch.
  • Settled dice now rest like real dice. The physics solver can stop a die mid-tilt (a tetra balancing on an edge/vertex contact) which read as "not a d4 at all" — and it leaves a small allowed penetration at rest (the d4 sank ~4% of its size — the "clips into the floor" look). On settle each die's most-downward face is rotated to exactly flat (apex straight up for the d4, crisp kites for the d10), residual sink is lifted out, and the pose is locked by sleeping the body. The result read runs on the snapped pose, so what you see and what is reported always agree.
  • The d10's "wedge"/"no faces" and leaning rest. The trapezohedron's winding fix flipped only the FIRST triangle of each quad, leaving the other half of the kite faces wound inward. Consequences: cannon-es rejected those faces as pointing into the shape (the die could only rest on half of them, leaned/jittered and never went to sleep so rolls idled to the ~6s timeout), and the renderer BACKFACE-CULLED the inverted faces — the die looked like a half-missing "boat" wedge. The flip now reverses the entire quad cycle; verified numerically: no cannon warnings, the die sleeps after settling, and all faces render.
  • Dice result view jumps back after ~half a second. The camera goal was dropped the moment it was reached, so the zoom snapped back to the overview immediately. The zoom now HOLDS until the next roll.
  • Only one die showed when several rolled. The result camera now cycles through every resting die (~2.5s each, wrapping around) until the next roll.
  • d4 numbers bigger and edge-adjacent to read like a physical d4.
  • Striped/shadow-acne faces. The main light self-shadowed dice at ~0.04 units/texel, rendering dark diagonal stripes across faces ("texture issues"). Shadow bias + normalBias added.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturePhL1ZJe/lTJjNgB02CdcG98mXydMcgpG2WybZuPzMqzZe2uDb9fZieIgBGyo0wsw
rvVMZ0geqkk2X6QcBqzYLVWKVnde81TqxFCmWfJ/cdU5Nwl6hrpqSSI0M01szWAk
cq4OPDQUU3QgCzpZGpNd9GV9PXeGHG4KDoxARedHxFpdrqWBAMJFAE3gnijZWRWI
T63o/4VV/uhzgimniygv2MNURHEj2iJEp1pHqKN6wuT20vwQaYBvvQHAQL7UVkf1
r3dbaUNqfBOWC/zdzK5JNdviCYd1hyqiN/PIgL3rQMz8A+eRPnHYAQh3RsKJUkod
zLzNdaJ7oBaHPiSR02HFvxNJGI1wRTTRdmazJyk3nvkSGkjMfPuAAhW3zC5vApBv
2KBlRht+rEIeAeEfXqk0PXto6M5f99SUq8IGJCLvpKNTAVWpmXOQWoaW6fZLDD/Y
IBSSTQbreos6KLtNjBpVg6amJMrT0sm92HgEhKbhl+shvyEXQwzN2wL/Zf5zqRCb
5tel81xYpcQ8IdXX88HQYg2wWkPUtnq/0bLe7lpS2hfpquzDMZTgIO1+zuyOTCCD
6RocQTFduaPpzZebTc2htoZuideLUM45aUdX9NNAv28OH2xxO8EdWINbVWzPs+QY
D+jeY3Rn5wCgqo3HkrauGm1RYgL95HIkWPRLPFWbvwc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.8
Release Details
UpdatedOct. 26, 2026, 1:12 p.m.
Changelog

Dice render fixes completing the 0.7.7 batch (kept 0.7.7's published tag intact; deploy 0.7.8 to get the whole batch).

Fixed

  • d4 is a real, vertex-numbered d4. It rests on a face and the result is read at the TOP vertex (its direction points straight up when settled — verified numerically for all four settle states). Each face now prints THREE numbers near its edges — the value of each of its corners — exactly like a physical d4, so the result is legible from any viewing angle (the old face-centre labels were invisible when the upright face was seen edge-on, which is why numbers appeared only "from afar").
  • d8 face map had duplicated values. The calibration call passed the FULL canonical list ([1,8,2,7,3,6,4,5]) where the pairing helper expects only the first half: pairs were built as (1→8), then (8→1), (2→7), then (7→2) — every value used twice, and 3/4/5/6 never appeared. Fixed to [1,2,3,4]; opposites now correctly sum to 9 with all eight values present.
  • Face labels no longer land at arbitrary, upside-down twists. Label orientation is now canonical per face (the die's local up projected into the face plane, with a degeneracy fallback), shared by every die type — mirrored in the field as numbers reading "9" for a flipped "6", and the d10/d8 screenshots showing upside-down digits.
  • Label textures skip mipmap generation (minor spawn-cost win).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturebkDeJUFvyrSo9zV0/aDTsda7jDfUoutfXQ+fzMGblGx61A01/VGsQ8CDOB+xkCl3
pffrvNx7GVvWLHCnVAcHe+N9tch5NdRlDud6++TeArglx6HxJ0nFmUG8Wm1KAvVN
kavJo0iHiTVIQjdbfoBl+WGljPzMQAQ0zqILWXvoFjl/lLMuYZIqeNTavkVWgesW
lf8evfRiZdrw44rBGvMiOhAtQ8xGvHppfYCtvEIMAv5xcF3O67Mdz8bmwGkwUm8Q
wFsvgaKqNScmXe7HvmQk00pi2cB30KCBE6mkCCS7vo4TWvFbzPj9sA42PlJZvbtW
TUwdP/ZoMQmegMNhj0jVpvUlnbx76htTKhG6+te4cCo4Us1GkHui3HZ728chLz9t
zC5Qzsd+4uEtfIhKvW/clXxgZLJnriShXvHtSAbeldnVQCr2oHxUGqTJ7DwZ2CIH
ZSFUroerJMJG5+MU8dviCGNonkN3pWKCWz1iWxBMAKHhVwVUM7Zl/AIcZwauEtQ3
b5fODgfhv82P3KjdHNc0wbsTfDbNUu818/yrZj0PibGVmGRYl+exrG0dmV5UPwTx
L2NPeauXIXjU4CzpU9YVgXJUf8qvzunT6bqhXP3eeG07CsQPhnvT3ZT12AiYBNjs
mBZ/cR1VZ+qJxiw1e8rrkVJ5hspgNbhR68Mc+creI7Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.6
Release Details
UpdatedOct. 25, 2026, 1:43 p.m.
Changelog

The d10 die was geometrically wrong, 3D fog only appeared on mouse release and stuttered, and the draw tool was inert in 3D rooms.

Fixed — dice

  • d10 rebuilt as a true pentagonal trapezohedron. The old construction was built with n=10 (a twenty-faced decagonal solid whose 0–9 values cycled across 20 faces, several doubled and mislabelled) and placed labels far off the faces. The new builder is exact: two apices, a 2n ring staggered between heights ±e, and the kite faces are provably planar for the exact stagger e = h(1−cos(π/n))/(1+cos(π/n)) — verified numerically (10 faces, each with an exact antipodal face, opposite values pairing to 0+9…4+5, labels sitting on the surface).

Fixed — 3D drawing & fog feel

  • Strokes preview live in 3D. Fog brushes and the pencil now draw while you drag onto a live overlay canvas, instead of appearing only after the left button released.
  • Laggy fog gone. Overlay textures upload at most once per frame via a dirty flag (a live stroke used to trigger a full 1024² texture re-upload per mouse-move); committed strokes redraw the canvas incrementally.
  • The draw tool works in 3D rooms. Scene3D gained a drawings layer (pen/marker freehand, line/rect/ellipse/triangle/hexagon, polygon, and plain text notes) over the ground, in the same shared pixel stroke space and message formats as 2D — saves and live sync carry both room kinds' drawings.
  • Rich text notes anchor and project correctly in 3D rooms (camera projection instead of the 2D stage transform).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturepFiOO0M61kVrvkCFsustb+HsBKY7cG3PUtznTophB5jIOM42tyD5VLYJ9+Z58ihW
ISM8dcpL8PyLyu9F/IhrNuERJlSzhkZn1pEeIxyFLI670uDMemm15bFzJaqTga5e
ztkfOVHIV+akQraVtumEqTgEYd5zrLL3a2Nw3i/DG1d549oAXRErOZIXPdWZVmc4
of2wkrR585DYYgrZ+96pDARa0Bn4KxL6m+rJmQDsm6HjsQBgwr8r0NCdjn5sdbX+
HLeqfmNRhn4u0AFRi8iiUGkQGN7xLSD4UkrizAOOrTqWaVSwqjOQuEMuN73QebUj
Pbzc83ySKbjr/GQDLCvtIm7gVeifn5GG/OsJge/5wrPw0opTQ7Y3yrOVismrzXyH
OmvEFcAKft/oIgB3bAxioQDYg/gpRAMPyzRbTgk5a8HAa/4hJZZ4S9QhDhJlg8NI
9DnKA5mSnEq4xMHMVPvXo52tWVxXDVa13+mFtPBtnCvdVxcn+S83tjvK/SZNFY62
SmhM5rCUIH2xcm4cHRixV+M5pLxEeJ9UkryD9FKtXx8+yiPD/8Mf/zusKbE073Tb
JYcHzi6wAxef4uDWTqqvnlpVN0k7sshmRsIR15GjmZYvmcDzqClqkEOI8j+kSDsW
U9Hyh5wAUOymjISEPHT1z2k4AZg0m5I+bj7PqX3X2yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.2
Release Details
UpdatedJune 26, 2026, 9:45 a.m.
Changelog

Fixed

  • File picker now works. Fixed OC.dialogs.filepicker call to use the correct 7-arg signature for Nextcloud 28+ — the picker shows a "Choose" button and the callback fires with the selected path.
  • Permanent rulers no longer snap horizontal. In 3D the ruler stored y=0 (ground height) instead of z (depth), so all rulers appeared as flat horizontal lines. Now stores both y and z so the ruler renders at the correct depth in 3D mode.
  • Render loop no longer steps dice in 2D mode. The 3D DiceRoller was stepping even in 2D mode; now only steps when mode is 3D (the DicePanel manages its own world in 2D).

Added

  • DM Control Panel. A comprehensive left-side sidebar (🛠 in the toolbar, GM only) consolidating all DM controls:
  • Scene: rename, grid type/size/line-width/opacity/style/colour, scale
  • Layers: toggle visibility for grid, drawings, fog, fog preview
  • Player permissions: per-layer create/update/delete/owner-only table
  • Players: search Nextcloud users, invite, remove
  • Session: send reminders, reveal all fog, delete scene Replaces the separate GridSettings and PermissionsPanel popovers.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureimsxWHI6Z92dMsB779WbE2Ak195OEfqZqyU3jwsa2PdmdGyXnS7mfRcHNfHyyITDPGDyR6cSxiiACW+/r+2H9rs9YhgB4ipaByzJszvb3VFc6jf9aZONWmKp1zSlPPbz6XTkaSG9rbmWmMWBaW7bzdsReis8e1ikQOF/e4dNSucGC1nJT/DL6EjS+UZI500GMuelkR8Xc8yC6kGUoOpWfH4AXaGQBQyQkDHA5NjGz/wquMdXRtBdHxHvVknYCkKdJm0ehtwydziIC1YsPeLWXly2W732RGm2fP1GphVjL6DMY5NMDvlbxndXyWkOKckvbeRe/liVKkvq182/FNREXGQujeTCKrGrc2Dzn2NAPmHDQ8zDyV3lsPCLej6LPXwDXkCDKdeJ8IGnSeoVKiCxgsdnBR4kOHFQIGcn1CjiEy94xVkRTjA4WZgFSbtrZQtPcFb5csT+B5rVlQA98rwUiHppqvRQssv8UV0hwlRJC5IOW2I4vR+MLllei4r55OoGJ/V1lhjlrWSMDo5aw9fbDOrRppyswI3ojxg8gUuwt0qfogYcoC6cFgAbp8ewiR4Wv7ficpjTD2NtJGH0BfajzBB63AauGn7McawRvR183x5WQwppdDogSy9IaNi3nT6DSokpkA2i4CdMNzaYJQn67fRTEp7/kjwSOgtCNXKjWC0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.1
Release Details
UpdatedJune 25, 2026, 6:48 a.m.
Changelog

Changed

  • Consolidated dice UI. Replaced the separate floating DiceTray and DiceViewport with a single DicePanel sidebar. In 2D mode it shows a mini 3D canvas with the physics dice; in 3D mode it drives the main scene's DiceRoller. One panel, mode-appropriate behavior.
  • Asset picker fixed. Rewrote AssetPicker to use Nextcloud's native OC.dialogs.filepicker and proper WebDAV URLs via generateRemoteUrl('dav'), so maps/tokens/models load with session auth. Removed the broken custom BrowseList.
  • Addons inlined. Removed the iframe-based addon system. The initiative tracker is now a built-in Vue component toggled from the topbar (⚔).
  • Nextcloud theming. All colors now use Nextcloud CSS variables (--color-primary-element, --color-main-background, --color-main-text, --color-border, etc.) so the app follows the user's light/dark theme and the admin's accent color automatically. No more hardcoded gold/blue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturejeIzLqOzQoGxqSExMXeqdfX+bfTgrpGEYUZ9zKauEMrhqOJe18bGHuG+FuO7Q0ot
igY1d5b8AH+gapepjK5WBi4QzMd+fGhbXpB7F9kaVDTS6VlBn/BW1bUFFZwV2cYb
n0//YdE1+mA/jYczltbqnVCzj+qXICtHeGGjhRiPBG8osJ4aMVbxQzGEFyfxijJI
v8fi24m0Ja+OMSsBHpEZ9z68j+QqimKnZ9huKWmlyB3b6KSTyp3ICMnAOf6PU9Ij
KId+xEcd3A5i1oxmnxd4+xgnc+NDgzGRrkGDEXD2FJgvux7CRZomgZIGS1CnQk90
tT6bIV1HfRzlD2AHF/3h/wZKYZT5z/wsRabSnB4TvCyVZ4And3WJm/Jy7UhUmnun
kTXueO8aWkH4zI3d4OAS9AEFGoa8uq4yiY9xsYDY/RfH3CFZvQx90L2vBeSS8sp0
KPgnEpDBDN/pOogorgHdy3B+jNiAKuuQMkl/XV8RFd3mqX73b5QpxkV4NzrkPOl6
ooJ9rWtohYSCjG020QZ2y1HCbvirfxh/tY4vdqcBeYvxGginEuQHssCkgTySw/Dq
0le5Pj142rv9FIva0EPbfn8QphNV0g5n/DnwAeUwD85JvEggeOBAQ84kH7fGh7sV
ViSn4EQq6RzM5vrM6wRuN05gcZi3axYkVLWMcy7NTnQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0
Release Details
UpdatedJune 25, 2026, 5:17 a.m.
Changelog

Added

  • Token health system. DM-controlled HP bars on every token (2D bar + 3D billboard). GM double-clicks a token to edit HP; quick ±1/±5 buttons. Synced + persisted; GM-only server-side.
  • Measure modes. Transient ruler, permanent rulers (synced/persisted, right-click to delete), and movement mode (drag a token with a live ruler). Four measurement types: euclidean, chessboard, alternating-diagonal, manhattan. Per-scene ft/square scale.
  • Grid controls. Square / hex-pointy / hex-flat grids, line style (solid/dashed/dotted), colour, opacity, width, per-scene scale. Grid settings popover (⊞ in the toolbar, GM only).
  • Player permissions. Per-layer create/update/delete toggles for maps/tokens/drawings/fog, plus owner-only tokens. Enforced server-side on the room relay; GM bypasses. Permissions panel (🔒, GM only).
  • Fog shapes & preview. Rect/circle/polygon fog modes (plus brush/eraser), cut/uncut toggle, fog preview (GM sees player view), configurable fog colour.
  • Drawing modes. Pen, marker (closed freehand), line, rect, ellipse, triangle, hexagon, polygon (click-to-add, double-click to close), text. Separate stroke + fill colour pickers and width slider. Synced + persisted.
  • Rich text on canvas. In-place contentEditable editor (bold/italic/ lists/headings/emoji) replacing the prompt() dialog; HTML overlay that tracks pan/zoom.
  • Multiple maps per scene. Add maps without replacing (multi-floor / side-by-side), lock/unlock + scale each map for grid alignment. Synced + persisted.
  • 2D dice viewport. A self-contained 3D physics dice tray in a corner canvas in 2D mode, so players roll and see the result without leaving the battlemap. Rolls broadcast to the room.
  • Signed room tokens. HMAC-signed short-lived tokens; the relay verifies signature + expiry against a shared secret. Live multiplayer no longer needs DEV_TRUST.
  • Nextcloud 34 support. Dependency max-version bumped to 34.
  • Asset library. AssetController browses Nextcloud Files (folders, thumbnails, direct file serving) with a BrowseList picker.
  • Addon store verification. Catalog entries validated server-side; verified badge in the UI; warns on non-catalog installs.
  • Dice calibration. d8/d12/d20 canonical face maps (opposites sum to max+1); d10 rebuilt as a true pentagonal trapezohedron.
  • App Store-ready metadata. info.xml now includes website, repository, documentation links, and uses the SPDX licence identifier (AGPL-3.0-or-later).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0 (nightly)
Release Details
UpdatedJune 24, 2026, 4:40 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 33

Grimoire 0.7.11
Release Details
UpdatedOct. 29, 2026, 4 a.m.
Changelog

Community feature request: manage placed 3D models.

Added

  • Selected-token controls in 3D rooms. Click a token with the Grab tool and a bar appears above the tool options: rotate ±45°, resize (−/+ 0.25 steps, 0.4×–4×), delete (with a confirmation), and deselect. A ring highlights the selected token and follows it as it moves.
  • Changes apply instantly and broadcast as token:upsert; deletes remove the token for everyone (token:remove) and clear the selection. Clicking empty space deselects. Remote deletion of the selected token clears the bar.

Changed

  • Upserts of existing tokens now check the update permission (create before, when the token was new). Rotate/resize are edits, not creations — this matches the UI gating, which also honours ownerOnly.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureEAgcR+NCTLBB9/+XQR0QsusPkTQ56Cu00kbP79OUcIkugLDZqR4oP7hHA/qpR7RBA4ig5oOFdsOsF93LA3WxmcABnr3GEG/yDpryIQCgWWza/8JtI19Py+SgvzYPVDM0FhpQpeIr1tsdZZ1P4FuBqcYCI6YSaTmP3NSgT28PxVOEcHCyo7KQg+TqsmkwYkxYG7bYpbzMOQMYmB4+YS7FIJv5CqYW1QVOkMliGYq8dlCSPoHcBBtLASKZwtOdCeDnjH7gHs7iyv5TRkUECpBgeeqs3TFat87Dg/yoUPSK83Sp4MbHu5TEDnGDELUILG7OOz1SfQ57SDSxCVb/lwBbFZFdyG/4HZhq1Rx743UBt+TWlB7p9Cb3kSmAOn2Jag3bGhaTaTeJy/WVELHtqF5bJpLdIubcuTcmNUo5tHVOZgvmEX9+yE912oT9s60fThkD6cIUEFwOogoVCMwoHI3pYsQNbnyN6J96zHUmvi5uKnzgbQ+vNylJPz3zVoj6NxNq8AWuArHcz5mo1inj0IpLpOqlXhgDCO/lnGfnFVa0ZaWkqqEu34mr0wb0JEdmCH91jgARD3rcV9mXr5uweyYNOXvRsTzgCyuDCjkhGCzqk1RkKrKgMr8xYwyvs/Ts3IFOKCO6sR+X9OFfb0iUXd4LkTNkw0mHufcXX/wnNp/BZQs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.10
Release Details
UpdatedOct. 27, 2026, 3:22 p.m.
Changelog

Security patches from an external source-code audit (five findings — all addressed).

Fixed — security

  • Rich text XSS (critical). Notes on the canvas were rendered with v-html unsanitized: any invited player could send/persist markup and run it in every viewer's Nextcloud-origin page. Rich text is now sanitized with DOMPurify (default safe profile — scripts, event handlers and javascript:/data: URLs stripped; heading/colour/list/link formatting preserved) at every entry point AND at render, so even previously-persisted malicious notes render inert.
  • Scene-save takeover (high). The scene-save endpoint accepted a full document replacement from ANY invited player, including renaming the scene and wiping the map/fog/config. Player saves are now a server-side scoped merge: only keys whose permission layer allows updates pass through (tokens/blocks/maps/drawings/measurements), while name, gridConfig, mode and unknown keys remain GM-only and can no longer be overwritten or cleared. Also gained the standard raw-body fallback.
  • ownerOnly token enforcement bypass (high). The token-ownership lookup queried a SCENE ROW by the token id (always missing), then fell back to the attacker-supplied owner field, and treated null (= unknown) as allowed — so ownerOnly token protection was effectively decorative and players could move or delete tokens of others. Ownership now resolves from the persisted scene document only, with no client fallback, and unknown ownership DENIES the action (deny by default).
  • Third-party addon proxy / store endpoints removed (two highs). The iframe addon system was removed from the app in 0.7.1, but its server-side same-origin fetch proxy and store endpoints remained — serving attacker-controlled remote HTML from the Nextcloud origin and fetching attacker URLs with redirects left intact (SSRF class). Rather than hardening dead endpoints, they (and their DB entities, routes, and capability bridge references) are deleted outright.

Removed

  • AddonProxyController, AddonController, Addon/AddonMapper entities and the /addon-proxy + /api/addons(-store) routes (dead since 0.7.1's addon consolidation; kept previously only for compatibility).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureQOd35W5gxwQUfySa9xZZtiS4LJFRiM2sdFx3bDlpAy4GZ9mmJ7M9SL5459nt5nGg
/YQ0FB3Uh0AzGT9ZjcjTiiVlsasXly9cI/7iqzMmg5wBbV0CE8BHnHbm8ptz2Qdf
brn9vhAlyYzo5s31VKWs2Ubobmil6Eo7xOsRmCBi9VZEkIokRboUtoBq7v1xwpek
aaJtAb3EantEXYxwn7Bs4QtkCmzWneyRrU6Ved+xOESjynlh9uyNHRhoq6xiR1LD
gn27UaUlZh5iN98AYF+Yb4kN4VyW6/nt0dsI7JRcRzzmCEInGKEVaSlfNHOVgUgj
2ua1SGyKjxRISun8V3/qqTLee7luMq2dlfSJMLMDYBfShOUSigFx0As/ti38Fa1U
AlkcgTs5xWTKKRHTE62sy9SvYTmHub70pdPjaBqwg5HylpZSrJYdDp6nfyFquu+i
EyqCu3GsWQFylocvt9wVQgYkYfQADBKIc/+Oill0zxqWiSG1Qg0nwi3DlE/C+FHd
ppESpC8UT4zLBXkFbCOnJtEBgSMdiR9n5pksgtadKg2yLRFaQ5wTWhWg6jUP8z4M
WoAiCa1Qgs7WhZhjYkGxdgpkEbxo+dV2WL1yuS5oDHbJJv86skhShnZA4L86Ypdc
qiq9PPfd/SK3UclWBpbC8sYzQ0oWId8gQ/iIIfAJtgM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.9
Release Details
UpdatedOct. 26, 2026, 5:50 p.m.
Changelog

Dice physics/render fixes found by testing 0.7.8 in the field. (Repackaged in place after field-testing caught the d4's rest pose — see below.)

Fixed

  • The d4 roll crashed at spawn and froze the table. Field-testing the first 0.7.9 packaging showed the d4 "spawning in the plane and doing nothing" (a half-buried wedge) in 3D and a frozen dice panel + stuck camera in 2D. Root cause, found by running the real module: _spawnDie never destructured labelValues — every d4 roll threw a ReferenceError AFTER the mesh was created but BEFORE the physics body existed, leaving a bodyless tetra at the scene origin (half of it below the floor — the wedge); the per-frame mesh sync then threw on d.body.position every frame, killing the render loop (room frozen at that frame; "does nothing"). Fixes: the destructure is complete; physics bodies are now created BEFORE cosmetic labels so a label failure can only log, never break the die or the loop; the per-frame sync skips body-less entries defensively; and the settle-snap block's stray CANNON reference (a second loop-killer at settle) now reads the stored this.CANNON. Verified by running the real module: dice tumble, settle at exact inradii (flush, apex up), sleep, and report values — d4, d8, d10, d20 in one batch.
  • Settled dice now rest like real dice. The physics solver can stop a die mid-tilt (a tetra balancing on an edge/vertex contact) which read as "not a d4 at all" — and it leaves a small allowed penetration at rest (the d4 sank ~4% of its size — the "clips into the floor" look). On settle each die's most-downward face is rotated to exactly flat (apex straight up for the d4, crisp kites for the d10), residual sink is lifted out, and the pose is locked by sleeping the body. The result read runs on the snapped pose, so what you see and what is reported always agree.
  • The d10's "wedge"/"no faces" and leaning rest. The trapezohedron's winding fix flipped only the FIRST triangle of each quad, leaving the other half of the kite faces wound inward. Consequences: cannon-es rejected those faces as pointing into the shape (the die could only rest on half of them, leaned/jittered and never went to sleep so rolls idled to the ~6s timeout), and the renderer BACKFACE-CULLED the inverted faces — the die looked like a half-missing "boat" wedge. The flip now reverses the entire quad cycle; verified numerically: no cannon warnings, the die sleeps after settling, and all faces render.
  • Dice result view jumps back after ~half a second. The camera goal was dropped the moment it was reached, so the zoom snapped back to the overview immediately. The zoom now HOLDS until the next roll.
  • Only one die showed when several rolled. The result camera now cycles through every resting die (~2.5s each, wrapping around) until the next roll.
  • d4 numbers bigger and edge-adjacent to read like a physical d4.
  • Striped/shadow-acne faces. The main light self-shadowed dice at ~0.04 units/texel, rendering dark diagonal stripes across faces ("texture issues"). Shadow bias + normalBias added.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturePhL1ZJe/lTJjNgB02CdcG98mXydMcgpG2WybZuPzMqzZe2uDb9fZieIgBGyo0wsw
rvVMZ0geqkk2X6QcBqzYLVWKVnde81TqxFCmWfJ/cdU5Nwl6hrpqSSI0M01szWAk
cq4OPDQUU3QgCzpZGpNd9GV9PXeGHG4KDoxARedHxFpdrqWBAMJFAE3gnijZWRWI
T63o/4VV/uhzgimniygv2MNURHEj2iJEp1pHqKN6wuT20vwQaYBvvQHAQL7UVkf1
r3dbaUNqfBOWC/zdzK5JNdviCYd1hyqiN/PIgL3rQMz8A+eRPnHYAQh3RsKJUkod
zLzNdaJ7oBaHPiSR02HFvxNJGI1wRTTRdmazJyk3nvkSGkjMfPuAAhW3zC5vApBv
2KBlRht+rEIeAeEfXqk0PXto6M5f99SUq8IGJCLvpKNTAVWpmXOQWoaW6fZLDD/Y
IBSSTQbreos6KLtNjBpVg6amJMrT0sm92HgEhKbhl+shvyEXQwzN2wL/Zf5zqRCb
5tel81xYpcQ8IdXX88HQYg2wWkPUtnq/0bLe7lpS2hfpquzDMZTgIO1+zuyOTCCD
6RocQTFduaPpzZebTc2htoZuideLUM45aUdX9NNAv28OH2xxO8EdWINbVWzPs+QY
D+jeY3Rn5wCgqo3HkrauGm1RYgL95HIkWPRLPFWbvwc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.8
Release Details
UpdatedOct. 26, 2026, 1:12 p.m.
Changelog

Dice render fixes completing the 0.7.7 batch (kept 0.7.7's published tag intact; deploy 0.7.8 to get the whole batch).

Fixed

  • d4 is a real, vertex-numbered d4. It rests on a face and the result is read at the TOP vertex (its direction points straight up when settled — verified numerically for all four settle states). Each face now prints THREE numbers near its edges — the value of each of its corners — exactly like a physical d4, so the result is legible from any viewing angle (the old face-centre labels were invisible when the upright face was seen edge-on, which is why numbers appeared only "from afar").
  • d8 face map had duplicated values. The calibration call passed the FULL canonical list ([1,8,2,7,3,6,4,5]) where the pairing helper expects only the first half: pairs were built as (1→8), then (8→1), (2→7), then (7→2) — every value used twice, and 3/4/5/6 never appeared. Fixed to [1,2,3,4]; opposites now correctly sum to 9 with all eight values present.
  • Face labels no longer land at arbitrary, upside-down twists. Label orientation is now canonical per face (the die's local up projected into the face plane, with a degeneracy fallback), shared by every die type — mirrored in the field as numbers reading "9" for a flipped "6", and the d10/d8 screenshots showing upside-down digits.
  • Label textures skip mipmap generation (minor spawn-cost win).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturebkDeJUFvyrSo9zV0/aDTsda7jDfUoutfXQ+fzMGblGx61A01/VGsQ8CDOB+xkCl3
pffrvNx7GVvWLHCnVAcHe+N9tch5NdRlDud6++TeArglx6HxJ0nFmUG8Wm1KAvVN
kavJo0iHiTVIQjdbfoBl+WGljPzMQAQ0zqILWXvoFjl/lLMuYZIqeNTavkVWgesW
lf8evfRiZdrw44rBGvMiOhAtQ8xGvHppfYCtvEIMAv5xcF3O67Mdz8bmwGkwUm8Q
wFsvgaKqNScmXe7HvmQk00pi2cB30KCBE6mkCCS7vo4TWvFbzPj9sA42PlJZvbtW
TUwdP/ZoMQmegMNhj0jVpvUlnbx76htTKhG6+te4cCo4Us1GkHui3HZ728chLz9t
zC5Qzsd+4uEtfIhKvW/clXxgZLJnriShXvHtSAbeldnVQCr2oHxUGqTJ7DwZ2CIH
ZSFUroerJMJG5+MU8dviCGNonkN3pWKCWz1iWxBMAKHhVwVUM7Zl/AIcZwauEtQ3
b5fODgfhv82P3KjdHNc0wbsTfDbNUu818/yrZj0PibGVmGRYl+exrG0dmV5UPwTx
L2NPeauXIXjU4CzpU9YVgXJUf8qvzunT6bqhXP3eeG07CsQPhnvT3ZT12AiYBNjs
mBZ/cR1VZ+qJxiw1e8rrkVJ5hspgNbhR68Mc+creI7Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.6
Release Details
UpdatedOct. 25, 2026, 1:43 p.m.
Changelog

The d10 die was geometrically wrong, 3D fog only appeared on mouse release and stuttered, and the draw tool was inert in 3D rooms.

Fixed — dice

  • d10 rebuilt as a true pentagonal trapezohedron. The old construction was built with n=10 (a twenty-faced decagonal solid whose 0–9 values cycled across 20 faces, several doubled and mislabelled) and placed labels far off the faces. The new builder is exact: two apices, a 2n ring staggered between heights ±e, and the kite faces are provably planar for the exact stagger e = h(1−cos(π/n))/(1+cos(π/n)) — verified numerically (10 faces, each with an exact antipodal face, opposite values pairing to 0+9…4+5, labels sitting on the surface).

Fixed — 3D drawing & fog feel

  • Strokes preview live in 3D. Fog brushes and the pencil now draw while you drag onto a live overlay canvas, instead of appearing only after the left button released.
  • Laggy fog gone. Overlay textures upload at most once per frame via a dirty flag (a live stroke used to trigger a full 1024² texture re-upload per mouse-move); committed strokes redraw the canvas incrementally.
  • The draw tool works in 3D rooms. Scene3D gained a drawings layer (pen/marker freehand, line/rect/ellipse/triangle/hexagon, polygon, and plain text notes) over the ground, in the same shared pixel stroke space and message formats as 2D — saves and live sync carry both room kinds' drawings.
  • Rich text notes anchor and project correctly in 3D rooms (camera projection instead of the 2D stage transform).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturepFiOO0M61kVrvkCFsustb+HsBKY7cG3PUtznTophB5jIOM42tyD5VLYJ9+Z58ihW
ISM8dcpL8PyLyu9F/IhrNuERJlSzhkZn1pEeIxyFLI670uDMemm15bFzJaqTga5e
ztkfOVHIV+akQraVtumEqTgEYd5zrLL3a2Nw3i/DG1d549oAXRErOZIXPdWZVmc4
of2wkrR585DYYgrZ+96pDARa0Bn4KxL6m+rJmQDsm6HjsQBgwr8r0NCdjn5sdbX+
HLeqfmNRhn4u0AFRi8iiUGkQGN7xLSD4UkrizAOOrTqWaVSwqjOQuEMuN73QebUj
Pbzc83ySKbjr/GQDLCvtIm7gVeifn5GG/OsJge/5wrPw0opTQ7Y3yrOVismrzXyH
OmvEFcAKft/oIgB3bAxioQDYg/gpRAMPyzRbTgk5a8HAa/4hJZZ4S9QhDhJlg8NI
9DnKA5mSnEq4xMHMVPvXo52tWVxXDVa13+mFtPBtnCvdVxcn+S83tjvK/SZNFY62
SmhM5rCUIH2xcm4cHRixV+M5pLxEeJ9UkryD9FKtXx8+yiPD/8Mf/zusKbE073Tb
JYcHzi6wAxef4uDWTqqvnlpVN0k7sshmRsIR15GjmZYvmcDzqClqkEOI8j+kSDsW
U9Hyh5wAUOymjISEPHT1z2k4AZg0m5I+bj7PqX3X2yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.2
Release Details
UpdatedJune 26, 2026, 9:45 a.m.
Changelog

Fixed

  • File picker now works. Fixed OC.dialogs.filepicker call to use the correct 7-arg signature for Nextcloud 28+ — the picker shows a "Choose" button and the callback fires with the selected path.
  • Permanent rulers no longer snap horizontal. In 3D the ruler stored y=0 (ground height) instead of z (depth), so all rulers appeared as flat horizontal lines. Now stores both y and z so the ruler renders at the correct depth in 3D mode.
  • Render loop no longer steps dice in 2D mode. The 3D DiceRoller was stepping even in 2D mode; now only steps when mode is 3D (the DicePanel manages its own world in 2D).

Added

  • DM Control Panel. A comprehensive left-side sidebar (🛠 in the toolbar, GM only) consolidating all DM controls:
  • Scene: rename, grid type/size/line-width/opacity/style/colour, scale
  • Layers: toggle visibility for grid, drawings, fog, fog preview
  • Player permissions: per-layer create/update/delete/owner-only table
  • Players: search Nextcloud users, invite, remove
  • Session: send reminders, reveal all fog, delete scene Replaces the separate GridSettings and PermissionsPanel popovers.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureimsxWHI6Z92dMsB779WbE2Ak195OEfqZqyU3jwsa2PdmdGyXnS7mfRcHNfHyyITDPGDyR6cSxiiACW+/r+2H9rs9YhgB4ipaByzJszvb3VFc6jf9aZONWmKp1zSlPPbz6XTkaSG9rbmWmMWBaW7bzdsReis8e1ikQOF/e4dNSucGC1nJT/DL6EjS+UZI500GMuelkR8Xc8yC6kGUoOpWfH4AXaGQBQyQkDHA5NjGz/wquMdXRtBdHxHvVknYCkKdJm0ehtwydziIC1YsPeLWXly2W732RGm2fP1GphVjL6DMY5NMDvlbxndXyWkOKckvbeRe/liVKkvq182/FNREXGQujeTCKrGrc2Dzn2NAPmHDQ8zDyV3lsPCLej6LPXwDXkCDKdeJ8IGnSeoVKiCxgsdnBR4kOHFQIGcn1CjiEy94xVkRTjA4WZgFSbtrZQtPcFb5csT+B5rVlQA98rwUiHppqvRQssv8UV0hwlRJC5IOW2I4vR+MLllei4r55OoGJ/V1lhjlrWSMDo5aw9fbDOrRppyswI3ojxg8gUuwt0qfogYcoC6cFgAbp8ewiR4Wv7ficpjTD2NtJGH0BfajzBB63AauGn7McawRvR183x5WQwppdDogSy9IaNi3nT6DSokpkA2i4CdMNzaYJQn67fRTEp7/kjwSOgtCNXKjWC0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.1
Release Details
UpdatedJune 25, 2026, 6:48 a.m.
Changelog

Changed

  • Consolidated dice UI. Replaced the separate floating DiceTray and DiceViewport with a single DicePanel sidebar. In 2D mode it shows a mini 3D canvas with the physics dice; in 3D mode it drives the main scene's DiceRoller. One panel, mode-appropriate behavior.
  • Asset picker fixed. Rewrote AssetPicker to use Nextcloud's native OC.dialogs.filepicker and proper WebDAV URLs via generateRemoteUrl('dav'), so maps/tokens/models load with session auth. Removed the broken custom BrowseList.
  • Addons inlined. Removed the iframe-based addon system. The initiative tracker is now a built-in Vue component toggled from the topbar (⚔).
  • Nextcloud theming. All colors now use Nextcloud CSS variables (--color-primary-element, --color-main-background, --color-main-text, --color-border, etc.) so the app follows the user's light/dark theme and the admin's accent color automatically. No more hardcoded gold/blue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturejeIzLqOzQoGxqSExMXeqdfX+bfTgrpGEYUZ9zKauEMrhqOJe18bGHuG+FuO7Q0ot
igY1d5b8AH+gapepjK5WBi4QzMd+fGhbXpB7F9kaVDTS6VlBn/BW1bUFFZwV2cYb
n0//YdE1+mA/jYczltbqnVCzj+qXICtHeGGjhRiPBG8osJ4aMVbxQzGEFyfxijJI
v8fi24m0Ja+OMSsBHpEZ9z68j+QqimKnZ9huKWmlyB3b6KSTyp3ICMnAOf6PU9Ij
KId+xEcd3A5i1oxmnxd4+xgnc+NDgzGRrkGDEXD2FJgvux7CRZomgZIGS1CnQk90
tT6bIV1HfRzlD2AHF/3h/wZKYZT5z/wsRabSnB4TvCyVZ4And3WJm/Jy7UhUmnun
kTXueO8aWkH4zI3d4OAS9AEFGoa8uq4yiY9xsYDY/RfH3CFZvQx90L2vBeSS8sp0
KPgnEpDBDN/pOogorgHdy3B+jNiAKuuQMkl/XV8RFd3mqX73b5QpxkV4NzrkPOl6
ooJ9rWtohYSCjG020QZ2y1HCbvirfxh/tY4vdqcBeYvxGginEuQHssCkgTySw/Dq
0le5Pj142rv9FIva0EPbfn8QphNV0g5n/DnwAeUwD85JvEggeOBAQ84kH7fGh7sV
ViSn4EQq6RzM5vrM6wRuN05gcZi3axYkVLWMcy7NTnQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0
Release Details
UpdatedJune 25, 2026, 5:17 a.m.
Changelog

Added

  • Token health system. DM-controlled HP bars on every token (2D bar + 3D billboard). GM double-clicks a token to edit HP; quick ±1/±5 buttons. Synced + persisted; GM-only server-side.
  • Measure modes. Transient ruler, permanent rulers (synced/persisted, right-click to delete), and movement mode (drag a token with a live ruler). Four measurement types: euclidean, chessboard, alternating-diagonal, manhattan. Per-scene ft/square scale.
  • Grid controls. Square / hex-pointy / hex-flat grids, line style (solid/dashed/dotted), colour, opacity, width, per-scene scale. Grid settings popover (⊞ in the toolbar, GM only).
  • Player permissions. Per-layer create/update/delete toggles for maps/tokens/drawings/fog, plus owner-only tokens. Enforced server-side on the room relay; GM bypasses. Permissions panel (🔒, GM only).
  • Fog shapes & preview. Rect/circle/polygon fog modes (plus brush/eraser), cut/uncut toggle, fog preview (GM sees player view), configurable fog colour.
  • Drawing modes. Pen, marker (closed freehand), line, rect, ellipse, triangle, hexagon, polygon (click-to-add, double-click to close), text. Separate stroke + fill colour pickers and width slider. Synced + persisted.
  • Rich text on canvas. In-place contentEditable editor (bold/italic/ lists/headings/emoji) replacing the prompt() dialog; HTML overlay that tracks pan/zoom.
  • Multiple maps per scene. Add maps without replacing (multi-floor / side-by-side), lock/unlock + scale each map for grid alignment. Synced + persisted.
  • 2D dice viewport. A self-contained 3D physics dice tray in a corner canvas in 2D mode, so players roll and see the result without leaving the battlemap. Rolls broadcast to the room.
  • Signed room tokens. HMAC-signed short-lived tokens; the relay verifies signature + expiry against a shared secret. Live multiplayer no longer needs DEV_TRUST.
  • Nextcloud 34 support. Dependency max-version bumped to 34.
  • Asset library. AssetController browses Nextcloud Files (folders, thumbnails, direct file serving) with a BrowseList picker.
  • Addon store verification. Catalog entries validated server-side; verified badge in the UI; warns on non-catalog installs.
  • Dice calibration. d8/d12/d20 canonical face maps (opposites sum to max+1); d10 rebuilt as a true pentagonal trapezohedron.
  • App Store-ready metadata. info.xml now includes website, repository, documentation links, and uses the SPDX licence identifier (AGPL-3.0-or-later).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0 (nightly)
Release Details
UpdatedJune 24, 2026, 4:40 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 32

Grimoire 0.7.11
Release Details
UpdatedOct. 29, 2026, 4 a.m.
Changelog

Community feature request: manage placed 3D models.

Added

  • Selected-token controls in 3D rooms. Click a token with the Grab tool and a bar appears above the tool options: rotate ±45°, resize (−/+ 0.25 steps, 0.4×–4×), delete (with a confirmation), and deselect. A ring highlights the selected token and follows it as it moves.
  • Changes apply instantly and broadcast as token:upsert; deletes remove the token for everyone (token:remove) and clear the selection. Clicking empty space deselects. Remote deletion of the selected token clears the bar.

Changed

  • Upserts of existing tokens now check the update permission (create before, when the token was new). Rotate/resize are edits, not creations — this matches the UI gating, which also honours ownerOnly.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureEAgcR+NCTLBB9/+XQR0QsusPkTQ56Cu00kbP79OUcIkugLDZqR4oP7hHA/qpR7RBA4ig5oOFdsOsF93LA3WxmcABnr3GEG/yDpryIQCgWWza/8JtI19Py+SgvzYPVDM0FhpQpeIr1tsdZZ1P4FuBqcYCI6YSaTmP3NSgT28PxVOEcHCyo7KQg+TqsmkwYkxYG7bYpbzMOQMYmB4+YS7FIJv5CqYW1QVOkMliGYq8dlCSPoHcBBtLASKZwtOdCeDnjH7gHs7iyv5TRkUECpBgeeqs3TFat87Dg/yoUPSK83Sp4MbHu5TEDnGDELUILG7OOz1SfQ57SDSxCVb/lwBbFZFdyG/4HZhq1Rx743UBt+TWlB7p9Cb3kSmAOn2Jag3bGhaTaTeJy/WVELHtqF5bJpLdIubcuTcmNUo5tHVOZgvmEX9+yE912oT9s60fThkD6cIUEFwOogoVCMwoHI3pYsQNbnyN6J96zHUmvi5uKnzgbQ+vNylJPz3zVoj6NxNq8AWuArHcz5mo1inj0IpLpOqlXhgDCO/lnGfnFVa0ZaWkqqEu34mr0wb0JEdmCH91jgARD3rcV9mXr5uweyYNOXvRsTzgCyuDCjkhGCzqk1RkKrKgMr8xYwyvs/Ts3IFOKCO6sR+X9OFfb0iUXd4LkTNkw0mHufcXX/wnNp/BZQs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.10
Release Details
UpdatedOct. 27, 2026, 3:22 p.m.
Changelog

Security patches from an external source-code audit (five findings — all addressed).

Fixed — security

  • Rich text XSS (critical). Notes on the canvas were rendered with v-html unsanitized: any invited player could send/persist markup and run it in every viewer's Nextcloud-origin page. Rich text is now sanitized with DOMPurify (default safe profile — scripts, event handlers and javascript:/data: URLs stripped; heading/colour/list/link formatting preserved) at every entry point AND at render, so even previously-persisted malicious notes render inert.
  • Scene-save takeover (high). The scene-save endpoint accepted a full document replacement from ANY invited player, including renaming the scene and wiping the map/fog/config. Player saves are now a server-side scoped merge: only keys whose permission layer allows updates pass through (tokens/blocks/maps/drawings/measurements), while name, gridConfig, mode and unknown keys remain GM-only and can no longer be overwritten or cleared. Also gained the standard raw-body fallback.
  • ownerOnly token enforcement bypass (high). The token-ownership lookup queried a SCENE ROW by the token id (always missing), then fell back to the attacker-supplied owner field, and treated null (= unknown) as allowed — so ownerOnly token protection was effectively decorative and players could move or delete tokens of others. Ownership now resolves from the persisted scene document only, with no client fallback, and unknown ownership DENIES the action (deny by default).
  • Third-party addon proxy / store endpoints removed (two highs). The iframe addon system was removed from the app in 0.7.1, but its server-side same-origin fetch proxy and store endpoints remained — serving attacker-controlled remote HTML from the Nextcloud origin and fetching attacker URLs with redirects left intact (SSRF class). Rather than hardening dead endpoints, they (and their DB entities, routes, and capability bridge references) are deleted outright.

Removed

  • AddonProxyController, AddonController, Addon/AddonMapper entities and the /addon-proxy + /api/addons(-store) routes (dead since 0.7.1's addon consolidation; kept previously only for compatibility).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureQOd35W5gxwQUfySa9xZZtiS4LJFRiM2sdFx3bDlpAy4GZ9mmJ7M9SL5459nt5nGg
/YQ0FB3Uh0AzGT9ZjcjTiiVlsasXly9cI/7iqzMmg5wBbV0CE8BHnHbm8ptz2Qdf
brn9vhAlyYzo5s31VKWs2Ubobmil6Eo7xOsRmCBi9VZEkIokRboUtoBq7v1xwpek
aaJtAb3EantEXYxwn7Bs4QtkCmzWneyRrU6Ved+xOESjynlh9uyNHRhoq6xiR1LD
gn27UaUlZh5iN98AYF+Yb4kN4VyW6/nt0dsI7JRcRzzmCEInGKEVaSlfNHOVgUgj
2ua1SGyKjxRISun8V3/qqTLee7luMq2dlfSJMLMDYBfShOUSigFx0As/ti38Fa1U
AlkcgTs5xWTKKRHTE62sy9SvYTmHub70pdPjaBqwg5HylpZSrJYdDp6nfyFquu+i
EyqCu3GsWQFylocvt9wVQgYkYfQADBKIc/+Oill0zxqWiSG1Qg0nwi3DlE/C+FHd
ppESpC8UT4zLBXkFbCOnJtEBgSMdiR9n5pksgtadKg2yLRFaQ5wTWhWg6jUP8z4M
WoAiCa1Qgs7WhZhjYkGxdgpkEbxo+dV2WL1yuS5oDHbJJv86skhShnZA4L86Ypdc
qiq9PPfd/SK3UclWBpbC8sYzQ0oWId8gQ/iIIfAJtgM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.9
Release Details
UpdatedOct. 26, 2026, 5:50 p.m.
Changelog

Dice physics/render fixes found by testing 0.7.8 in the field. (Repackaged in place after field-testing caught the d4's rest pose — see below.)

Fixed

  • The d4 roll crashed at spawn and froze the table. Field-testing the first 0.7.9 packaging showed the d4 "spawning in the plane and doing nothing" (a half-buried wedge) in 3D and a frozen dice panel + stuck camera in 2D. Root cause, found by running the real module: _spawnDie never destructured labelValues — every d4 roll threw a ReferenceError AFTER the mesh was created but BEFORE the physics body existed, leaving a bodyless tetra at the scene origin (half of it below the floor — the wedge); the per-frame mesh sync then threw on d.body.position every frame, killing the render loop (room frozen at that frame; "does nothing"). Fixes: the destructure is complete; physics bodies are now created BEFORE cosmetic labels so a label failure can only log, never break the die or the loop; the per-frame sync skips body-less entries defensively; and the settle-snap block's stray CANNON reference (a second loop-killer at settle) now reads the stored this.CANNON. Verified by running the real module: dice tumble, settle at exact inradii (flush, apex up), sleep, and report values — d4, d8, d10, d20 in one batch.
  • Settled dice now rest like real dice. The physics solver can stop a die mid-tilt (a tetra balancing on an edge/vertex contact) which read as "not a d4 at all" — and it leaves a small allowed penetration at rest (the d4 sank ~4% of its size — the "clips into the floor" look). On settle each die's most-downward face is rotated to exactly flat (apex straight up for the d4, crisp kites for the d10), residual sink is lifted out, and the pose is locked by sleeping the body. The result read runs on the snapped pose, so what you see and what is reported always agree.
  • The d10's "wedge"/"no faces" and leaning rest. The trapezohedron's winding fix flipped only the FIRST triangle of each quad, leaving the other half of the kite faces wound inward. Consequences: cannon-es rejected those faces as pointing into the shape (the die could only rest on half of them, leaned/jittered and never went to sleep so rolls idled to the ~6s timeout), and the renderer BACKFACE-CULLED the inverted faces — the die looked like a half-missing "boat" wedge. The flip now reverses the entire quad cycle; verified numerically: no cannon warnings, the die sleeps after settling, and all faces render.
  • Dice result view jumps back after ~half a second. The camera goal was dropped the moment it was reached, so the zoom snapped back to the overview immediately. The zoom now HOLDS until the next roll.
  • Only one die showed when several rolled. The result camera now cycles through every resting die (~2.5s each, wrapping around) until the next roll.
  • d4 numbers bigger and edge-adjacent to read like a physical d4.
  • Striped/shadow-acne faces. The main light self-shadowed dice at ~0.04 units/texel, rendering dark diagonal stripes across faces ("texture issues"). Shadow bias + normalBias added.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturePhL1ZJe/lTJjNgB02CdcG98mXydMcgpG2WybZuPzMqzZe2uDb9fZieIgBGyo0wsw
rvVMZ0geqkk2X6QcBqzYLVWKVnde81TqxFCmWfJ/cdU5Nwl6hrpqSSI0M01szWAk
cq4OPDQUU3QgCzpZGpNd9GV9PXeGHG4KDoxARedHxFpdrqWBAMJFAE3gnijZWRWI
T63o/4VV/uhzgimniygv2MNURHEj2iJEp1pHqKN6wuT20vwQaYBvvQHAQL7UVkf1
r3dbaUNqfBOWC/zdzK5JNdviCYd1hyqiN/PIgL3rQMz8A+eRPnHYAQh3RsKJUkod
zLzNdaJ7oBaHPiSR02HFvxNJGI1wRTTRdmazJyk3nvkSGkjMfPuAAhW3zC5vApBv
2KBlRht+rEIeAeEfXqk0PXto6M5f99SUq8IGJCLvpKNTAVWpmXOQWoaW6fZLDD/Y
IBSSTQbreos6KLtNjBpVg6amJMrT0sm92HgEhKbhl+shvyEXQwzN2wL/Zf5zqRCb
5tel81xYpcQ8IdXX88HQYg2wWkPUtnq/0bLe7lpS2hfpquzDMZTgIO1+zuyOTCCD
6RocQTFduaPpzZebTc2htoZuideLUM45aUdX9NNAv28OH2xxO8EdWINbVWzPs+QY
D+jeY3Rn5wCgqo3HkrauGm1RYgL95HIkWPRLPFWbvwc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.8
Release Details
UpdatedOct. 26, 2026, 1:12 p.m.
Changelog

Dice render fixes completing the 0.7.7 batch (kept 0.7.7's published tag intact; deploy 0.7.8 to get the whole batch).

Fixed

  • d4 is a real, vertex-numbered d4. It rests on a face and the result is read at the TOP vertex (its direction points straight up when settled — verified numerically for all four settle states). Each face now prints THREE numbers near its edges — the value of each of its corners — exactly like a physical d4, so the result is legible from any viewing angle (the old face-centre labels were invisible when the upright face was seen edge-on, which is why numbers appeared only "from afar").
  • d8 face map had duplicated values. The calibration call passed the FULL canonical list ([1,8,2,7,3,6,4,5]) where the pairing helper expects only the first half: pairs were built as (1→8), then (8→1), (2→7), then (7→2) — every value used twice, and 3/4/5/6 never appeared. Fixed to [1,2,3,4]; opposites now correctly sum to 9 with all eight values present.
  • Face labels no longer land at arbitrary, upside-down twists. Label orientation is now canonical per face (the die's local up projected into the face plane, with a degeneracy fallback), shared by every die type — mirrored in the field as numbers reading "9" for a flipped "6", and the d10/d8 screenshots showing upside-down digits.
  • Label textures skip mipmap generation (minor spawn-cost win).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturebkDeJUFvyrSo9zV0/aDTsda7jDfUoutfXQ+fzMGblGx61A01/VGsQ8CDOB+xkCl3
pffrvNx7GVvWLHCnVAcHe+N9tch5NdRlDud6++TeArglx6HxJ0nFmUG8Wm1KAvVN
kavJo0iHiTVIQjdbfoBl+WGljPzMQAQ0zqILWXvoFjl/lLMuYZIqeNTavkVWgesW
lf8evfRiZdrw44rBGvMiOhAtQ8xGvHppfYCtvEIMAv5xcF3O67Mdz8bmwGkwUm8Q
wFsvgaKqNScmXe7HvmQk00pi2cB30KCBE6mkCCS7vo4TWvFbzPj9sA42PlJZvbtW
TUwdP/ZoMQmegMNhj0jVpvUlnbx76htTKhG6+te4cCo4Us1GkHui3HZ728chLz9t
zC5Qzsd+4uEtfIhKvW/clXxgZLJnriShXvHtSAbeldnVQCr2oHxUGqTJ7DwZ2CIH
ZSFUroerJMJG5+MU8dviCGNonkN3pWKCWz1iWxBMAKHhVwVUM7Zl/AIcZwauEtQ3
b5fODgfhv82P3KjdHNc0wbsTfDbNUu818/yrZj0PibGVmGRYl+exrG0dmV5UPwTx
L2NPeauXIXjU4CzpU9YVgXJUf8qvzunT6bqhXP3eeG07CsQPhnvT3ZT12AiYBNjs
mBZ/cR1VZ+qJxiw1e8rrkVJ5hspgNbhR68Mc+creI7Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.6
Release Details
UpdatedOct. 25, 2026, 1:43 p.m.
Changelog

The d10 die was geometrically wrong, 3D fog only appeared on mouse release and stuttered, and the draw tool was inert in 3D rooms.

Fixed — dice

  • d10 rebuilt as a true pentagonal trapezohedron. The old construction was built with n=10 (a twenty-faced decagonal solid whose 0–9 values cycled across 20 faces, several doubled and mislabelled) and placed labels far off the faces. The new builder is exact: two apices, a 2n ring staggered between heights ±e, and the kite faces are provably planar for the exact stagger e = h(1−cos(π/n))/(1+cos(π/n)) — verified numerically (10 faces, each with an exact antipodal face, opposite values pairing to 0+9…4+5, labels sitting on the surface).

Fixed — 3D drawing & fog feel

  • Strokes preview live in 3D. Fog brushes and the pencil now draw while you drag onto a live overlay canvas, instead of appearing only after the left button released.
  • Laggy fog gone. Overlay textures upload at most once per frame via a dirty flag (a live stroke used to trigger a full 1024² texture re-upload per mouse-move); committed strokes redraw the canvas incrementally.
  • The draw tool works in 3D rooms. Scene3D gained a drawings layer (pen/marker freehand, line/rect/ellipse/triangle/hexagon, polygon, and plain text notes) over the ground, in the same shared pixel stroke space and message formats as 2D — saves and live sync carry both room kinds' drawings.
  • Rich text notes anchor and project correctly in 3D rooms (camera projection instead of the 2D stage transform).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturepFiOO0M61kVrvkCFsustb+HsBKY7cG3PUtznTophB5jIOM42tyD5VLYJ9+Z58ihW
ISM8dcpL8PyLyu9F/IhrNuERJlSzhkZn1pEeIxyFLI670uDMemm15bFzJaqTga5e
ztkfOVHIV+akQraVtumEqTgEYd5zrLL3a2Nw3i/DG1d549oAXRErOZIXPdWZVmc4
of2wkrR585DYYgrZ+96pDARa0Bn4KxL6m+rJmQDsm6HjsQBgwr8r0NCdjn5sdbX+
HLeqfmNRhn4u0AFRi8iiUGkQGN7xLSD4UkrizAOOrTqWaVSwqjOQuEMuN73QebUj
Pbzc83ySKbjr/GQDLCvtIm7gVeifn5GG/OsJge/5wrPw0opTQ7Y3yrOVismrzXyH
OmvEFcAKft/oIgB3bAxioQDYg/gpRAMPyzRbTgk5a8HAa/4hJZZ4S9QhDhJlg8NI
9DnKA5mSnEq4xMHMVPvXo52tWVxXDVa13+mFtPBtnCvdVxcn+S83tjvK/SZNFY62
SmhM5rCUIH2xcm4cHRixV+M5pLxEeJ9UkryD9FKtXx8+yiPD/8Mf/zusKbE073Tb
JYcHzi6wAxef4uDWTqqvnlpVN0k7sshmRsIR15GjmZYvmcDzqClqkEOI8j+kSDsW
U9Hyh5wAUOymjISEPHT1z2k4AZg0m5I+bj7PqX3X2yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.2
Release Details
UpdatedJune 26, 2026, 9:45 a.m.
Changelog

Fixed

  • File picker now works. Fixed OC.dialogs.filepicker call to use the correct 7-arg signature for Nextcloud 28+ — the picker shows a "Choose" button and the callback fires with the selected path.
  • Permanent rulers no longer snap horizontal. In 3D the ruler stored y=0 (ground height) instead of z (depth), so all rulers appeared as flat horizontal lines. Now stores both y and z so the ruler renders at the correct depth in 3D mode.
  • Render loop no longer steps dice in 2D mode. The 3D DiceRoller was stepping even in 2D mode; now only steps when mode is 3D (the DicePanel manages its own world in 2D).

Added

  • DM Control Panel. A comprehensive left-side sidebar (🛠 in the toolbar, GM only) consolidating all DM controls:
  • Scene: rename, grid type/size/line-width/opacity/style/colour, scale
  • Layers: toggle visibility for grid, drawings, fog, fog preview
  • Player permissions: per-layer create/update/delete/owner-only table
  • Players: search Nextcloud users, invite, remove
  • Session: send reminders, reveal all fog, delete scene Replaces the separate GridSettings and PermissionsPanel popovers.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureimsxWHI6Z92dMsB779WbE2Ak195OEfqZqyU3jwsa2PdmdGyXnS7mfRcHNfHyyITDPGDyR6cSxiiACW+/r+2H9rs9YhgB4ipaByzJszvb3VFc6jf9aZONWmKp1zSlPPbz6XTkaSG9rbmWmMWBaW7bzdsReis8e1ikQOF/e4dNSucGC1nJT/DL6EjS+UZI500GMuelkR8Xc8yC6kGUoOpWfH4AXaGQBQyQkDHA5NjGz/wquMdXRtBdHxHvVknYCkKdJm0ehtwydziIC1YsPeLWXly2W732RGm2fP1GphVjL6DMY5NMDvlbxndXyWkOKckvbeRe/liVKkvq182/FNREXGQujeTCKrGrc2Dzn2NAPmHDQ8zDyV3lsPCLej6LPXwDXkCDKdeJ8IGnSeoVKiCxgsdnBR4kOHFQIGcn1CjiEy94xVkRTjA4WZgFSbtrZQtPcFb5csT+B5rVlQA98rwUiHppqvRQssv8UV0hwlRJC5IOW2I4vR+MLllei4r55OoGJ/V1lhjlrWSMDo5aw9fbDOrRppyswI3ojxg8gUuwt0qfogYcoC6cFgAbp8ewiR4Wv7ficpjTD2NtJGH0BfajzBB63AauGn7McawRvR183x5WQwppdDogSy9IaNi3nT6DSokpkA2i4CdMNzaYJQn67fRTEp7/kjwSOgtCNXKjWC0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.1
Release Details
UpdatedJune 25, 2026, 6:48 a.m.
Changelog

Changed

  • Consolidated dice UI. Replaced the separate floating DiceTray and DiceViewport with a single DicePanel sidebar. In 2D mode it shows a mini 3D canvas with the physics dice; in 3D mode it drives the main scene's DiceRoller. One panel, mode-appropriate behavior.
  • Asset picker fixed. Rewrote AssetPicker to use Nextcloud's native OC.dialogs.filepicker and proper WebDAV URLs via generateRemoteUrl('dav'), so maps/tokens/models load with session auth. Removed the broken custom BrowseList.
  • Addons inlined. Removed the iframe-based addon system. The initiative tracker is now a built-in Vue component toggled from the topbar (⚔).
  • Nextcloud theming. All colors now use Nextcloud CSS variables (--color-primary-element, --color-main-background, --color-main-text, --color-border, etc.) so the app follows the user's light/dark theme and the admin's accent color automatically. No more hardcoded gold/blue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturejeIzLqOzQoGxqSExMXeqdfX+bfTgrpGEYUZ9zKauEMrhqOJe18bGHuG+FuO7Q0ot
igY1d5b8AH+gapepjK5WBi4QzMd+fGhbXpB7F9kaVDTS6VlBn/BW1bUFFZwV2cYb
n0//YdE1+mA/jYczltbqnVCzj+qXICtHeGGjhRiPBG8osJ4aMVbxQzGEFyfxijJI
v8fi24m0Ja+OMSsBHpEZ9z68j+QqimKnZ9huKWmlyB3b6KSTyp3ICMnAOf6PU9Ij
KId+xEcd3A5i1oxmnxd4+xgnc+NDgzGRrkGDEXD2FJgvux7CRZomgZIGS1CnQk90
tT6bIV1HfRzlD2AHF/3h/wZKYZT5z/wsRabSnB4TvCyVZ4And3WJm/Jy7UhUmnun
kTXueO8aWkH4zI3d4OAS9AEFGoa8uq4yiY9xsYDY/RfH3CFZvQx90L2vBeSS8sp0
KPgnEpDBDN/pOogorgHdy3B+jNiAKuuQMkl/XV8RFd3mqX73b5QpxkV4NzrkPOl6
ooJ9rWtohYSCjG020QZ2y1HCbvirfxh/tY4vdqcBeYvxGginEuQHssCkgTySw/Dq
0le5Pj142rv9FIva0EPbfn8QphNV0g5n/DnwAeUwD85JvEggeOBAQ84kH7fGh7sV
ViSn4EQq6RzM5vrM6wRuN05gcZi3axYkVLWMcy7NTnQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0
Release Details
UpdatedJune 25, 2026, 5:17 a.m.
Changelog

Added

  • Token health system. DM-controlled HP bars on every token (2D bar + 3D billboard). GM double-clicks a token to edit HP; quick ±1/±5 buttons. Synced + persisted; GM-only server-side.
  • Measure modes. Transient ruler, permanent rulers (synced/persisted, right-click to delete), and movement mode (drag a token with a live ruler). Four measurement types: euclidean, chessboard, alternating-diagonal, manhattan. Per-scene ft/square scale.
  • Grid controls. Square / hex-pointy / hex-flat grids, line style (solid/dashed/dotted), colour, opacity, width, per-scene scale. Grid settings popover (⊞ in the toolbar, GM only).
  • Player permissions. Per-layer create/update/delete toggles for maps/tokens/drawings/fog, plus owner-only tokens. Enforced server-side on the room relay; GM bypasses. Permissions panel (🔒, GM only).
  • Fog shapes & preview. Rect/circle/polygon fog modes (plus brush/eraser), cut/uncut toggle, fog preview (GM sees player view), configurable fog colour.
  • Drawing modes. Pen, marker (closed freehand), line, rect, ellipse, triangle, hexagon, polygon (click-to-add, double-click to close), text. Separate stroke + fill colour pickers and width slider. Synced + persisted.
  • Rich text on canvas. In-place contentEditable editor (bold/italic/ lists/headings/emoji) replacing the prompt() dialog; HTML overlay that tracks pan/zoom.
  • Multiple maps per scene. Add maps without replacing (multi-floor / side-by-side), lock/unlock + scale each map for grid alignment. Synced + persisted.
  • 2D dice viewport. A self-contained 3D physics dice tray in a corner canvas in 2D mode, so players roll and see the result without leaving the battlemap. Rolls broadcast to the room.
  • Signed room tokens. HMAC-signed short-lived tokens; the relay verifies signature + expiry against a shared secret. Live multiplayer no longer needs DEV_TRUST.
  • Nextcloud 34 support. Dependency max-version bumped to 34.
  • Asset library. AssetController browses Nextcloud Files (folders, thumbnails, direct file serving) with a BrowseList picker.
  • Addon store verification. Catalog entries validated server-side; verified badge in the UI; warns on non-catalog installs.
  • Dice calibration. d8/d12/d20 canonical face maps (opposites sum to max+1); d10 rebuilt as a true pentagonal trapezohedron.
  • App Store-ready metadata. info.xml now includes website, repository, documentation links, and uses the SPDX licence identifier (AGPL-3.0-or-later).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0 (nightly)
Release Details
UpdatedJune 24, 2026, 4:40 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 31

Grimoire 0.7.11
Release Details
UpdatedOct. 29, 2026, 4 a.m.
Changelog

Community feature request: manage placed 3D models.

Added

  • Selected-token controls in 3D rooms. Click a token with the Grab tool and a bar appears above the tool options: rotate ±45°, resize (−/+ 0.25 steps, 0.4×–4×), delete (with a confirmation), and deselect. A ring highlights the selected token and follows it as it moves.
  • Changes apply instantly and broadcast as token:upsert; deletes remove the token for everyone (token:remove) and clear the selection. Clicking empty space deselects. Remote deletion of the selected token clears the bar.

Changed

  • Upserts of existing tokens now check the update permission (create before, when the token was new). Rotate/resize are edits, not creations — this matches the UI gating, which also honours ownerOnly.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureEAgcR+NCTLBB9/+XQR0QsusPkTQ56Cu00kbP79OUcIkugLDZqR4oP7hHA/qpR7RBA4ig5oOFdsOsF93LA3WxmcABnr3GEG/yDpryIQCgWWza/8JtI19Py+SgvzYPVDM0FhpQpeIr1tsdZZ1P4FuBqcYCI6YSaTmP3NSgT28PxVOEcHCyo7KQg+TqsmkwYkxYG7bYpbzMOQMYmB4+YS7FIJv5CqYW1QVOkMliGYq8dlCSPoHcBBtLASKZwtOdCeDnjH7gHs7iyv5TRkUECpBgeeqs3TFat87Dg/yoUPSK83Sp4MbHu5TEDnGDELUILG7OOz1SfQ57SDSxCVb/lwBbFZFdyG/4HZhq1Rx743UBt+TWlB7p9Cb3kSmAOn2Jag3bGhaTaTeJy/WVELHtqF5bJpLdIubcuTcmNUo5tHVOZgvmEX9+yE912oT9s60fThkD6cIUEFwOogoVCMwoHI3pYsQNbnyN6J96zHUmvi5uKnzgbQ+vNylJPz3zVoj6NxNq8AWuArHcz5mo1inj0IpLpOqlXhgDCO/lnGfnFVa0ZaWkqqEu34mr0wb0JEdmCH91jgARD3rcV9mXr5uweyYNOXvRsTzgCyuDCjkhGCzqk1RkKrKgMr8xYwyvs/Ts3IFOKCO6sR+X9OFfb0iUXd4LkTNkw0mHufcXX/wnNp/BZQs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.10
Release Details
UpdatedOct. 27, 2026, 3:22 p.m.
Changelog

Security patches from an external source-code audit (five findings — all addressed).

Fixed — security

  • Rich text XSS (critical). Notes on the canvas were rendered with v-html unsanitized: any invited player could send/persist markup and run it in every viewer's Nextcloud-origin page. Rich text is now sanitized with DOMPurify (default safe profile — scripts, event handlers and javascript:/data: URLs stripped; heading/colour/list/link formatting preserved) at every entry point AND at render, so even previously-persisted malicious notes render inert.
  • Scene-save takeover (high). The scene-save endpoint accepted a full document replacement from ANY invited player, including renaming the scene and wiping the map/fog/config. Player saves are now a server-side scoped merge: only keys whose permission layer allows updates pass through (tokens/blocks/maps/drawings/measurements), while name, gridConfig, mode and unknown keys remain GM-only and can no longer be overwritten or cleared. Also gained the standard raw-body fallback.
  • ownerOnly token enforcement bypass (high). The token-ownership lookup queried a SCENE ROW by the token id (always missing), then fell back to the attacker-supplied owner field, and treated null (= unknown) as allowed — so ownerOnly token protection was effectively decorative and players could move or delete tokens of others. Ownership now resolves from the persisted scene document only, with no client fallback, and unknown ownership DENIES the action (deny by default).
  • Third-party addon proxy / store endpoints removed (two highs). The iframe addon system was removed from the app in 0.7.1, but its server-side same-origin fetch proxy and store endpoints remained — serving attacker-controlled remote HTML from the Nextcloud origin and fetching attacker URLs with redirects left intact (SSRF class). Rather than hardening dead endpoints, they (and their DB entities, routes, and capability bridge references) are deleted outright.

Removed

  • AddonProxyController, AddonController, Addon/AddonMapper entities and the /addon-proxy + /api/addons(-store) routes (dead since 0.7.1's addon consolidation; kept previously only for compatibility).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureQOd35W5gxwQUfySa9xZZtiS4LJFRiM2sdFx3bDlpAy4GZ9mmJ7M9SL5459nt5nGg
/YQ0FB3Uh0AzGT9ZjcjTiiVlsasXly9cI/7iqzMmg5wBbV0CE8BHnHbm8ptz2Qdf
brn9vhAlyYzo5s31VKWs2Ubobmil6Eo7xOsRmCBi9VZEkIokRboUtoBq7v1xwpek
aaJtAb3EantEXYxwn7Bs4QtkCmzWneyRrU6Ved+xOESjynlh9uyNHRhoq6xiR1LD
gn27UaUlZh5iN98AYF+Yb4kN4VyW6/nt0dsI7JRcRzzmCEInGKEVaSlfNHOVgUgj
2ua1SGyKjxRISun8V3/qqTLee7luMq2dlfSJMLMDYBfShOUSigFx0As/ti38Fa1U
AlkcgTs5xWTKKRHTE62sy9SvYTmHub70pdPjaBqwg5HylpZSrJYdDp6nfyFquu+i
EyqCu3GsWQFylocvt9wVQgYkYfQADBKIc/+Oill0zxqWiSG1Qg0nwi3DlE/C+FHd
ppESpC8UT4zLBXkFbCOnJtEBgSMdiR9n5pksgtadKg2yLRFaQ5wTWhWg6jUP8z4M
WoAiCa1Qgs7WhZhjYkGxdgpkEbxo+dV2WL1yuS5oDHbJJv86skhShnZA4L86Ypdc
qiq9PPfd/SK3UclWBpbC8sYzQ0oWId8gQ/iIIfAJtgM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.9
Release Details
UpdatedOct. 26, 2026, 5:50 p.m.
Changelog

Dice physics/render fixes found by testing 0.7.8 in the field. (Repackaged in place after field-testing caught the d4's rest pose — see below.)

Fixed

  • The d4 roll crashed at spawn and froze the table. Field-testing the first 0.7.9 packaging showed the d4 "spawning in the plane and doing nothing" (a half-buried wedge) in 3D and a frozen dice panel + stuck camera in 2D. Root cause, found by running the real module: _spawnDie never destructured labelValues — every d4 roll threw a ReferenceError AFTER the mesh was created but BEFORE the physics body existed, leaving a bodyless tetra at the scene origin (half of it below the floor — the wedge); the per-frame mesh sync then threw on d.body.position every frame, killing the render loop (room frozen at that frame; "does nothing"). Fixes: the destructure is complete; physics bodies are now created BEFORE cosmetic labels so a label failure can only log, never break the die or the loop; the per-frame sync skips body-less entries defensively; and the settle-snap block's stray CANNON reference (a second loop-killer at settle) now reads the stored this.CANNON. Verified by running the real module: dice tumble, settle at exact inradii (flush, apex up), sleep, and report values — d4, d8, d10, d20 in one batch.
  • Settled dice now rest like real dice. The physics solver can stop a die mid-tilt (a tetra balancing on an edge/vertex contact) which read as "not a d4 at all" — and it leaves a small allowed penetration at rest (the d4 sank ~4% of its size — the "clips into the floor" look). On settle each die's most-downward face is rotated to exactly flat (apex straight up for the d4, crisp kites for the d10), residual sink is lifted out, and the pose is locked by sleeping the body. The result read runs on the snapped pose, so what you see and what is reported always agree.
  • The d10's "wedge"/"no faces" and leaning rest. The trapezohedron's winding fix flipped only the FIRST triangle of each quad, leaving the other half of the kite faces wound inward. Consequences: cannon-es rejected those faces as pointing into the shape (the die could only rest on half of them, leaned/jittered and never went to sleep so rolls idled to the ~6s timeout), and the renderer BACKFACE-CULLED the inverted faces — the die looked like a half-missing "boat" wedge. The flip now reverses the entire quad cycle; verified numerically: no cannon warnings, the die sleeps after settling, and all faces render.
  • Dice result view jumps back after ~half a second. The camera goal was dropped the moment it was reached, so the zoom snapped back to the overview immediately. The zoom now HOLDS until the next roll.
  • Only one die showed when several rolled. The result camera now cycles through every resting die (~2.5s each, wrapping around) until the next roll.
  • d4 numbers bigger and edge-adjacent to read like a physical d4.
  • Striped/shadow-acne faces. The main light self-shadowed dice at ~0.04 units/texel, rendering dark diagonal stripes across faces ("texture issues"). Shadow bias + normalBias added.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturePhL1ZJe/lTJjNgB02CdcG98mXydMcgpG2WybZuPzMqzZe2uDb9fZieIgBGyo0wsw
rvVMZ0geqkk2X6QcBqzYLVWKVnde81TqxFCmWfJ/cdU5Nwl6hrpqSSI0M01szWAk
cq4OPDQUU3QgCzpZGpNd9GV9PXeGHG4KDoxARedHxFpdrqWBAMJFAE3gnijZWRWI
T63o/4VV/uhzgimniygv2MNURHEj2iJEp1pHqKN6wuT20vwQaYBvvQHAQL7UVkf1
r3dbaUNqfBOWC/zdzK5JNdviCYd1hyqiN/PIgL3rQMz8A+eRPnHYAQh3RsKJUkod
zLzNdaJ7oBaHPiSR02HFvxNJGI1wRTTRdmazJyk3nvkSGkjMfPuAAhW3zC5vApBv
2KBlRht+rEIeAeEfXqk0PXto6M5f99SUq8IGJCLvpKNTAVWpmXOQWoaW6fZLDD/Y
IBSSTQbreos6KLtNjBpVg6amJMrT0sm92HgEhKbhl+shvyEXQwzN2wL/Zf5zqRCb
5tel81xYpcQ8IdXX88HQYg2wWkPUtnq/0bLe7lpS2hfpquzDMZTgIO1+zuyOTCCD
6RocQTFduaPpzZebTc2htoZuideLUM45aUdX9NNAv28OH2xxO8EdWINbVWzPs+QY
D+jeY3Rn5wCgqo3HkrauGm1RYgL95HIkWPRLPFWbvwc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.8
Release Details
UpdatedOct. 26, 2026, 1:12 p.m.
Changelog

Dice render fixes completing the 0.7.7 batch (kept 0.7.7's published tag intact; deploy 0.7.8 to get the whole batch).

Fixed

  • d4 is a real, vertex-numbered d4. It rests on a face and the result is read at the TOP vertex (its direction points straight up when settled — verified numerically for all four settle states). Each face now prints THREE numbers near its edges — the value of each of its corners — exactly like a physical d4, so the result is legible from any viewing angle (the old face-centre labels were invisible when the upright face was seen edge-on, which is why numbers appeared only "from afar").
  • d8 face map had duplicated values. The calibration call passed the FULL canonical list ([1,8,2,7,3,6,4,5]) where the pairing helper expects only the first half: pairs were built as (1→8), then (8→1), (2→7), then (7→2) — every value used twice, and 3/4/5/6 never appeared. Fixed to [1,2,3,4]; opposites now correctly sum to 9 with all eight values present.
  • Face labels no longer land at arbitrary, upside-down twists. Label orientation is now canonical per face (the die's local up projected into the face plane, with a degeneracy fallback), shared by every die type — mirrored in the field as numbers reading "9" for a flipped "6", and the d10/d8 screenshots showing upside-down digits.
  • Label textures skip mipmap generation (minor spawn-cost win).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturebkDeJUFvyrSo9zV0/aDTsda7jDfUoutfXQ+fzMGblGx61A01/VGsQ8CDOB+xkCl3
pffrvNx7GVvWLHCnVAcHe+N9tch5NdRlDud6++TeArglx6HxJ0nFmUG8Wm1KAvVN
kavJo0iHiTVIQjdbfoBl+WGljPzMQAQ0zqILWXvoFjl/lLMuYZIqeNTavkVWgesW
lf8evfRiZdrw44rBGvMiOhAtQ8xGvHppfYCtvEIMAv5xcF3O67Mdz8bmwGkwUm8Q
wFsvgaKqNScmXe7HvmQk00pi2cB30KCBE6mkCCS7vo4TWvFbzPj9sA42PlJZvbtW
TUwdP/ZoMQmegMNhj0jVpvUlnbx76htTKhG6+te4cCo4Us1GkHui3HZ728chLz9t
zC5Qzsd+4uEtfIhKvW/clXxgZLJnriShXvHtSAbeldnVQCr2oHxUGqTJ7DwZ2CIH
ZSFUroerJMJG5+MU8dviCGNonkN3pWKCWz1iWxBMAKHhVwVUM7Zl/AIcZwauEtQ3
b5fODgfhv82P3KjdHNc0wbsTfDbNUu818/yrZj0PibGVmGRYl+exrG0dmV5UPwTx
L2NPeauXIXjU4CzpU9YVgXJUf8qvzunT6bqhXP3eeG07CsQPhnvT3ZT12AiYBNjs
mBZ/cR1VZ+qJxiw1e8rrkVJ5hspgNbhR68Mc+creI7Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.6
Release Details
UpdatedOct. 25, 2026, 1:43 p.m.
Changelog

The d10 die was geometrically wrong, 3D fog only appeared on mouse release and stuttered, and the draw tool was inert in 3D rooms.

Fixed — dice

  • d10 rebuilt as a true pentagonal trapezohedron. The old construction was built with n=10 (a twenty-faced decagonal solid whose 0–9 values cycled across 20 faces, several doubled and mislabelled) and placed labels far off the faces. The new builder is exact: two apices, a 2n ring staggered between heights ±e, and the kite faces are provably planar for the exact stagger e = h(1−cos(π/n))/(1+cos(π/n)) — verified numerically (10 faces, each with an exact antipodal face, opposite values pairing to 0+9…4+5, labels sitting on the surface).

Fixed — 3D drawing & fog feel

  • Strokes preview live in 3D. Fog brushes and the pencil now draw while you drag onto a live overlay canvas, instead of appearing only after the left button released.
  • Laggy fog gone. Overlay textures upload at most once per frame via a dirty flag (a live stroke used to trigger a full 1024² texture re-upload per mouse-move); committed strokes redraw the canvas incrementally.
  • The draw tool works in 3D rooms. Scene3D gained a drawings layer (pen/marker freehand, line/rect/ellipse/triangle/hexagon, polygon, and plain text notes) over the ground, in the same shared pixel stroke space and message formats as 2D — saves and live sync carry both room kinds' drawings.
  • Rich text notes anchor and project correctly in 3D rooms (camera projection instead of the 2D stage transform).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturepFiOO0M61kVrvkCFsustb+HsBKY7cG3PUtznTophB5jIOM42tyD5VLYJ9+Z58ihW
ISM8dcpL8PyLyu9F/IhrNuERJlSzhkZn1pEeIxyFLI670uDMemm15bFzJaqTga5e
ztkfOVHIV+akQraVtumEqTgEYd5zrLL3a2Nw3i/DG1d549oAXRErOZIXPdWZVmc4
of2wkrR585DYYgrZ+96pDARa0Bn4KxL6m+rJmQDsm6HjsQBgwr8r0NCdjn5sdbX+
HLeqfmNRhn4u0AFRi8iiUGkQGN7xLSD4UkrizAOOrTqWaVSwqjOQuEMuN73QebUj
Pbzc83ySKbjr/GQDLCvtIm7gVeifn5GG/OsJge/5wrPw0opTQ7Y3yrOVismrzXyH
OmvEFcAKft/oIgB3bAxioQDYg/gpRAMPyzRbTgk5a8HAa/4hJZZ4S9QhDhJlg8NI
9DnKA5mSnEq4xMHMVPvXo52tWVxXDVa13+mFtPBtnCvdVxcn+S83tjvK/SZNFY62
SmhM5rCUIH2xcm4cHRixV+M5pLxEeJ9UkryD9FKtXx8+yiPD/8Mf/zusKbE073Tb
JYcHzi6wAxef4uDWTqqvnlpVN0k7sshmRsIR15GjmZYvmcDzqClqkEOI8j+kSDsW
U9Hyh5wAUOymjISEPHT1z2k4AZg0m5I+bj7PqX3X2yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.2
Release Details
UpdatedJune 26, 2026, 9:45 a.m.
Changelog

Fixed

  • File picker now works. Fixed OC.dialogs.filepicker call to use the correct 7-arg signature for Nextcloud 28+ — the picker shows a "Choose" button and the callback fires with the selected path.
  • Permanent rulers no longer snap horizontal. In 3D the ruler stored y=0 (ground height) instead of z (depth), so all rulers appeared as flat horizontal lines. Now stores both y and z so the ruler renders at the correct depth in 3D mode.
  • Render loop no longer steps dice in 2D mode. The 3D DiceRoller was stepping even in 2D mode; now only steps when mode is 3D (the DicePanel manages its own world in 2D).

Added

  • DM Control Panel. A comprehensive left-side sidebar (🛠 in the toolbar, GM only) consolidating all DM controls:
  • Scene: rename, grid type/size/line-width/opacity/style/colour, scale
  • Layers: toggle visibility for grid, drawings, fog, fog preview
  • Player permissions: per-layer create/update/delete/owner-only table
  • Players: search Nextcloud users, invite, remove
  • Session: send reminders, reveal all fog, delete scene Replaces the separate GridSettings and PermissionsPanel popovers.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureimsxWHI6Z92dMsB779WbE2Ak195OEfqZqyU3jwsa2PdmdGyXnS7mfRcHNfHyyITDPGDyR6cSxiiACW+/r+2H9rs9YhgB4ipaByzJszvb3VFc6jf9aZONWmKp1zSlPPbz6XTkaSG9rbmWmMWBaW7bzdsReis8e1ikQOF/e4dNSucGC1nJT/DL6EjS+UZI500GMuelkR8Xc8yC6kGUoOpWfH4AXaGQBQyQkDHA5NjGz/wquMdXRtBdHxHvVknYCkKdJm0ehtwydziIC1YsPeLWXly2W732RGm2fP1GphVjL6DMY5NMDvlbxndXyWkOKckvbeRe/liVKkvq182/FNREXGQujeTCKrGrc2Dzn2NAPmHDQ8zDyV3lsPCLej6LPXwDXkCDKdeJ8IGnSeoVKiCxgsdnBR4kOHFQIGcn1CjiEy94xVkRTjA4WZgFSbtrZQtPcFb5csT+B5rVlQA98rwUiHppqvRQssv8UV0hwlRJC5IOW2I4vR+MLllei4r55OoGJ/V1lhjlrWSMDo5aw9fbDOrRppyswI3ojxg8gUuwt0qfogYcoC6cFgAbp8ewiR4Wv7ficpjTD2NtJGH0BfajzBB63AauGn7McawRvR183x5WQwppdDogSy9IaNi3nT6DSokpkA2i4CdMNzaYJQn67fRTEp7/kjwSOgtCNXKjWC0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.1
Release Details
UpdatedJune 25, 2026, 6:48 a.m.
Changelog

Changed

  • Consolidated dice UI. Replaced the separate floating DiceTray and DiceViewport with a single DicePanel sidebar. In 2D mode it shows a mini 3D canvas with the physics dice; in 3D mode it drives the main scene's DiceRoller. One panel, mode-appropriate behavior.
  • Asset picker fixed. Rewrote AssetPicker to use Nextcloud's native OC.dialogs.filepicker and proper WebDAV URLs via generateRemoteUrl('dav'), so maps/tokens/models load with session auth. Removed the broken custom BrowseList.
  • Addons inlined. Removed the iframe-based addon system. The initiative tracker is now a built-in Vue component toggled from the topbar (⚔).
  • Nextcloud theming. All colors now use Nextcloud CSS variables (--color-primary-element, --color-main-background, --color-main-text, --color-border, etc.) so the app follows the user's light/dark theme and the admin's accent color automatically. No more hardcoded gold/blue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturejeIzLqOzQoGxqSExMXeqdfX+bfTgrpGEYUZ9zKauEMrhqOJe18bGHuG+FuO7Q0ot
igY1d5b8AH+gapepjK5WBi4QzMd+fGhbXpB7F9kaVDTS6VlBn/BW1bUFFZwV2cYb
n0//YdE1+mA/jYczltbqnVCzj+qXICtHeGGjhRiPBG8osJ4aMVbxQzGEFyfxijJI
v8fi24m0Ja+OMSsBHpEZ9z68j+QqimKnZ9huKWmlyB3b6KSTyp3ICMnAOf6PU9Ij
KId+xEcd3A5i1oxmnxd4+xgnc+NDgzGRrkGDEXD2FJgvux7CRZomgZIGS1CnQk90
tT6bIV1HfRzlD2AHF/3h/wZKYZT5z/wsRabSnB4TvCyVZ4And3WJm/Jy7UhUmnun
kTXueO8aWkH4zI3d4OAS9AEFGoa8uq4yiY9xsYDY/RfH3CFZvQx90L2vBeSS8sp0
KPgnEpDBDN/pOogorgHdy3B+jNiAKuuQMkl/XV8RFd3mqX73b5QpxkV4NzrkPOl6
ooJ9rWtohYSCjG020QZ2y1HCbvirfxh/tY4vdqcBeYvxGginEuQHssCkgTySw/Dq
0le5Pj142rv9FIva0EPbfn8QphNV0g5n/DnwAeUwD85JvEggeOBAQ84kH7fGh7sV
ViSn4EQq6RzM5vrM6wRuN05gcZi3axYkVLWMcy7NTnQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0
Release Details
UpdatedJune 25, 2026, 5:17 a.m.
Changelog

Added

  • Token health system. DM-controlled HP bars on every token (2D bar + 3D billboard). GM double-clicks a token to edit HP; quick ±1/±5 buttons. Synced + persisted; GM-only server-side.
  • Measure modes. Transient ruler, permanent rulers (synced/persisted, right-click to delete), and movement mode (drag a token with a live ruler). Four measurement types: euclidean, chessboard, alternating-diagonal, manhattan. Per-scene ft/square scale.
  • Grid controls. Square / hex-pointy / hex-flat grids, line style (solid/dashed/dotted), colour, opacity, width, per-scene scale. Grid settings popover (⊞ in the toolbar, GM only).
  • Player permissions. Per-layer create/update/delete toggles for maps/tokens/drawings/fog, plus owner-only tokens. Enforced server-side on the room relay; GM bypasses. Permissions panel (🔒, GM only).
  • Fog shapes & preview. Rect/circle/polygon fog modes (plus brush/eraser), cut/uncut toggle, fog preview (GM sees player view), configurable fog colour.
  • Drawing modes. Pen, marker (closed freehand), line, rect, ellipse, triangle, hexagon, polygon (click-to-add, double-click to close), text. Separate stroke + fill colour pickers and width slider. Synced + persisted.
  • Rich text on canvas. In-place contentEditable editor (bold/italic/ lists/headings/emoji) replacing the prompt() dialog; HTML overlay that tracks pan/zoom.
  • Multiple maps per scene. Add maps without replacing (multi-floor / side-by-side), lock/unlock + scale each map for grid alignment. Synced + persisted.
  • 2D dice viewport. A self-contained 3D physics dice tray in a corner canvas in 2D mode, so players roll and see the result without leaving the battlemap. Rolls broadcast to the room.
  • Signed room tokens. HMAC-signed short-lived tokens; the relay verifies signature + expiry against a shared secret. Live multiplayer no longer needs DEV_TRUST.
  • Nextcloud 34 support. Dependency max-version bumped to 34.
  • Asset library. AssetController browses Nextcloud Files (folders, thumbnails, direct file serving) with a BrowseList picker.
  • Addon store verification. Catalog entries validated server-side; verified badge in the UI; warns on non-catalog installs.
  • Dice calibration. d8/d12/d20 canonical face maps (opposites sum to max+1); d10 rebuilt as a true pentagonal trapezohedron.
  • App Store-ready metadata. info.xml now includes website, repository, documentation links, and uses the SPDX licence identifier (AGPL-3.0-or-later).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0 (nightly)
Release Details
UpdatedJune 24, 2026, 4:40 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 30

Grimoire 0.7.11
Release Details
UpdatedOct. 29, 2026, 4 a.m.
Changelog

Community feature request: manage placed 3D models.

Added

  • Selected-token controls in 3D rooms. Click a token with the Grab tool and a bar appears above the tool options: rotate ±45°, resize (−/+ 0.25 steps, 0.4×–4×), delete (with a confirmation), and deselect. A ring highlights the selected token and follows it as it moves.
  • Changes apply instantly and broadcast as token:upsert; deletes remove the token for everyone (token:remove) and clear the selection. Clicking empty space deselects. Remote deletion of the selected token clears the bar.

Changed

  • Upserts of existing tokens now check the update permission (create before, when the token was new). Rotate/resize are edits, not creations — this matches the UI gating, which also honours ownerOnly.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureEAgcR+NCTLBB9/+XQR0QsusPkTQ56Cu00kbP79OUcIkugLDZqR4oP7hHA/qpR7RBA4ig5oOFdsOsF93LA3WxmcABnr3GEG/yDpryIQCgWWza/8JtI19Py+SgvzYPVDM0FhpQpeIr1tsdZZ1P4FuBqcYCI6YSaTmP3NSgT28PxVOEcHCyo7KQg+TqsmkwYkxYG7bYpbzMOQMYmB4+YS7FIJv5CqYW1QVOkMliGYq8dlCSPoHcBBtLASKZwtOdCeDnjH7gHs7iyv5TRkUECpBgeeqs3TFat87Dg/yoUPSK83Sp4MbHu5TEDnGDELUILG7OOz1SfQ57SDSxCVb/lwBbFZFdyG/4HZhq1Rx743UBt+TWlB7p9Cb3kSmAOn2Jag3bGhaTaTeJy/WVELHtqF5bJpLdIubcuTcmNUo5tHVOZgvmEX9+yE912oT9s60fThkD6cIUEFwOogoVCMwoHI3pYsQNbnyN6J96zHUmvi5uKnzgbQ+vNylJPz3zVoj6NxNq8AWuArHcz5mo1inj0IpLpOqlXhgDCO/lnGfnFVa0ZaWkqqEu34mr0wb0JEdmCH91jgARD3rcV9mXr5uweyYNOXvRsTzgCyuDCjkhGCzqk1RkKrKgMr8xYwyvs/Ts3IFOKCO6sR+X9OFfb0iUXd4LkTNkw0mHufcXX/wnNp/BZQs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.10
Release Details
UpdatedOct. 27, 2026, 3:22 p.m.
Changelog

Security patches from an external source-code audit (five findings — all addressed).

Fixed — security

  • Rich text XSS (critical). Notes on the canvas were rendered with v-html unsanitized: any invited player could send/persist markup and run it in every viewer's Nextcloud-origin page. Rich text is now sanitized with DOMPurify (default safe profile — scripts, event handlers and javascript:/data: URLs stripped; heading/colour/list/link formatting preserved) at every entry point AND at render, so even previously-persisted malicious notes render inert.
  • Scene-save takeover (high). The scene-save endpoint accepted a full document replacement from ANY invited player, including renaming the scene and wiping the map/fog/config. Player saves are now a server-side scoped merge: only keys whose permission layer allows updates pass through (tokens/blocks/maps/drawings/measurements), while name, gridConfig, mode and unknown keys remain GM-only and can no longer be overwritten or cleared. Also gained the standard raw-body fallback.
  • ownerOnly token enforcement bypass (high). The token-ownership lookup queried a SCENE ROW by the token id (always missing), then fell back to the attacker-supplied owner field, and treated null (= unknown) as allowed — so ownerOnly token protection was effectively decorative and players could move or delete tokens of others. Ownership now resolves from the persisted scene document only, with no client fallback, and unknown ownership DENIES the action (deny by default).
  • Third-party addon proxy / store endpoints removed (two highs). The iframe addon system was removed from the app in 0.7.1, but its server-side same-origin fetch proxy and store endpoints remained — serving attacker-controlled remote HTML from the Nextcloud origin and fetching attacker URLs with redirects left intact (SSRF class). Rather than hardening dead endpoints, they (and their DB entities, routes, and capability bridge references) are deleted outright.

Removed

  • AddonProxyController, AddonController, Addon/AddonMapper entities and the /addon-proxy + /api/addons(-store) routes (dead since 0.7.1's addon consolidation; kept previously only for compatibility).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureQOd35W5gxwQUfySa9xZZtiS4LJFRiM2sdFx3bDlpAy4GZ9mmJ7M9SL5459nt5nGg
/YQ0FB3Uh0AzGT9ZjcjTiiVlsasXly9cI/7iqzMmg5wBbV0CE8BHnHbm8ptz2Qdf
brn9vhAlyYzo5s31VKWs2Ubobmil6Eo7xOsRmCBi9VZEkIokRboUtoBq7v1xwpek
aaJtAb3EantEXYxwn7Bs4QtkCmzWneyRrU6Ved+xOESjynlh9uyNHRhoq6xiR1LD
gn27UaUlZh5iN98AYF+Yb4kN4VyW6/nt0dsI7JRcRzzmCEInGKEVaSlfNHOVgUgj
2ua1SGyKjxRISun8V3/qqTLee7luMq2dlfSJMLMDYBfShOUSigFx0As/ti38Fa1U
AlkcgTs5xWTKKRHTE62sy9SvYTmHub70pdPjaBqwg5HylpZSrJYdDp6nfyFquu+i
EyqCu3GsWQFylocvt9wVQgYkYfQADBKIc/+Oill0zxqWiSG1Qg0nwi3DlE/C+FHd
ppESpC8UT4zLBXkFbCOnJtEBgSMdiR9n5pksgtadKg2yLRFaQ5wTWhWg6jUP8z4M
WoAiCa1Qgs7WhZhjYkGxdgpkEbxo+dV2WL1yuS5oDHbJJv86skhShnZA4L86Ypdc
qiq9PPfd/SK3UclWBpbC8sYzQ0oWId8gQ/iIIfAJtgM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.9
Release Details
UpdatedOct. 26, 2026, 5:50 p.m.
Changelog

Dice physics/render fixes found by testing 0.7.8 in the field. (Repackaged in place after field-testing caught the d4's rest pose — see below.)

Fixed

  • The d4 roll crashed at spawn and froze the table. Field-testing the first 0.7.9 packaging showed the d4 "spawning in the plane and doing nothing" (a half-buried wedge) in 3D and a frozen dice panel + stuck camera in 2D. Root cause, found by running the real module: _spawnDie never destructured labelValues — every d4 roll threw a ReferenceError AFTER the mesh was created but BEFORE the physics body existed, leaving a bodyless tetra at the scene origin (half of it below the floor — the wedge); the per-frame mesh sync then threw on d.body.position every frame, killing the render loop (room frozen at that frame; "does nothing"). Fixes: the destructure is complete; physics bodies are now created BEFORE cosmetic labels so a label failure can only log, never break the die or the loop; the per-frame sync skips body-less entries defensively; and the settle-snap block's stray CANNON reference (a second loop-killer at settle) now reads the stored this.CANNON. Verified by running the real module: dice tumble, settle at exact inradii (flush, apex up), sleep, and report values — d4, d8, d10, d20 in one batch.
  • Settled dice now rest like real dice. The physics solver can stop a die mid-tilt (a tetra balancing on an edge/vertex contact) which read as "not a d4 at all" — and it leaves a small allowed penetration at rest (the d4 sank ~4% of its size — the "clips into the floor" look). On settle each die's most-downward face is rotated to exactly flat (apex straight up for the d4, crisp kites for the d10), residual sink is lifted out, and the pose is locked by sleeping the body. The result read runs on the snapped pose, so what you see and what is reported always agree.
  • The d10's "wedge"/"no faces" and leaning rest. The trapezohedron's winding fix flipped only the FIRST triangle of each quad, leaving the other half of the kite faces wound inward. Consequences: cannon-es rejected those faces as pointing into the shape (the die could only rest on half of them, leaned/jittered and never went to sleep so rolls idled to the ~6s timeout), and the renderer BACKFACE-CULLED the inverted faces — the die looked like a half-missing "boat" wedge. The flip now reverses the entire quad cycle; verified numerically: no cannon warnings, the die sleeps after settling, and all faces render.
  • Dice result view jumps back after ~half a second. The camera goal was dropped the moment it was reached, so the zoom snapped back to the overview immediately. The zoom now HOLDS until the next roll.
  • Only one die showed when several rolled. The result camera now cycles through every resting die (~2.5s each, wrapping around) until the next roll.
  • d4 numbers bigger and edge-adjacent to read like a physical d4.
  • Striped/shadow-acne faces. The main light self-shadowed dice at ~0.04 units/texel, rendering dark diagonal stripes across faces ("texture issues"). Shadow bias + normalBias added.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturePhL1ZJe/lTJjNgB02CdcG98mXydMcgpG2WybZuPzMqzZe2uDb9fZieIgBGyo0wsw
rvVMZ0geqkk2X6QcBqzYLVWKVnde81TqxFCmWfJ/cdU5Nwl6hrpqSSI0M01szWAk
cq4OPDQUU3QgCzpZGpNd9GV9PXeGHG4KDoxARedHxFpdrqWBAMJFAE3gnijZWRWI
T63o/4VV/uhzgimniygv2MNURHEj2iJEp1pHqKN6wuT20vwQaYBvvQHAQL7UVkf1
r3dbaUNqfBOWC/zdzK5JNdviCYd1hyqiN/PIgL3rQMz8A+eRPnHYAQh3RsKJUkod
zLzNdaJ7oBaHPiSR02HFvxNJGI1wRTTRdmazJyk3nvkSGkjMfPuAAhW3zC5vApBv
2KBlRht+rEIeAeEfXqk0PXto6M5f99SUq8IGJCLvpKNTAVWpmXOQWoaW6fZLDD/Y
IBSSTQbreos6KLtNjBpVg6amJMrT0sm92HgEhKbhl+shvyEXQwzN2wL/Zf5zqRCb
5tel81xYpcQ8IdXX88HQYg2wWkPUtnq/0bLe7lpS2hfpquzDMZTgIO1+zuyOTCCD
6RocQTFduaPpzZebTc2htoZuideLUM45aUdX9NNAv28OH2xxO8EdWINbVWzPs+QY
D+jeY3Rn5wCgqo3HkrauGm1RYgL95HIkWPRLPFWbvwc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.8
Release Details
UpdatedOct. 26, 2026, 1:12 p.m.
Changelog

Dice render fixes completing the 0.7.7 batch (kept 0.7.7's published tag intact; deploy 0.7.8 to get the whole batch).

Fixed

  • d4 is a real, vertex-numbered d4. It rests on a face and the result is read at the TOP vertex (its direction points straight up when settled — verified numerically for all four settle states). Each face now prints THREE numbers near its edges — the value of each of its corners — exactly like a physical d4, so the result is legible from any viewing angle (the old face-centre labels were invisible when the upright face was seen edge-on, which is why numbers appeared only "from afar").
  • d8 face map had duplicated values. The calibration call passed the FULL canonical list ([1,8,2,7,3,6,4,5]) where the pairing helper expects only the first half: pairs were built as (1→8), then (8→1), (2→7), then (7→2) — every value used twice, and 3/4/5/6 never appeared. Fixed to [1,2,3,4]; opposites now correctly sum to 9 with all eight values present.
  • Face labels no longer land at arbitrary, upside-down twists. Label orientation is now canonical per face (the die's local up projected into the face plane, with a degeneracy fallback), shared by every die type — mirrored in the field as numbers reading "9" for a flipped "6", and the d10/d8 screenshots showing upside-down digits.
  • Label textures skip mipmap generation (minor spawn-cost win).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturebkDeJUFvyrSo9zV0/aDTsda7jDfUoutfXQ+fzMGblGx61A01/VGsQ8CDOB+xkCl3
pffrvNx7GVvWLHCnVAcHe+N9tch5NdRlDud6++TeArglx6HxJ0nFmUG8Wm1KAvVN
kavJo0iHiTVIQjdbfoBl+WGljPzMQAQ0zqILWXvoFjl/lLMuYZIqeNTavkVWgesW
lf8evfRiZdrw44rBGvMiOhAtQ8xGvHppfYCtvEIMAv5xcF3O67Mdz8bmwGkwUm8Q
wFsvgaKqNScmXe7HvmQk00pi2cB30KCBE6mkCCS7vo4TWvFbzPj9sA42PlJZvbtW
TUwdP/ZoMQmegMNhj0jVpvUlnbx76htTKhG6+te4cCo4Us1GkHui3HZ728chLz9t
zC5Qzsd+4uEtfIhKvW/clXxgZLJnriShXvHtSAbeldnVQCr2oHxUGqTJ7DwZ2CIH
ZSFUroerJMJG5+MU8dviCGNonkN3pWKCWz1iWxBMAKHhVwVUM7Zl/AIcZwauEtQ3
b5fODgfhv82P3KjdHNc0wbsTfDbNUu818/yrZj0PibGVmGRYl+exrG0dmV5UPwTx
L2NPeauXIXjU4CzpU9YVgXJUf8qvzunT6bqhXP3eeG07CsQPhnvT3ZT12AiYBNjs
mBZ/cR1VZ+qJxiw1e8rrkVJ5hspgNbhR68Mc+creI7Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.6
Release Details
UpdatedOct. 25, 2026, 1:43 p.m.
Changelog

The d10 die was geometrically wrong, 3D fog only appeared on mouse release and stuttered, and the draw tool was inert in 3D rooms.

Fixed — dice

  • d10 rebuilt as a true pentagonal trapezohedron. The old construction was built with n=10 (a twenty-faced decagonal solid whose 0–9 values cycled across 20 faces, several doubled and mislabelled) and placed labels far off the faces. The new builder is exact: two apices, a 2n ring staggered between heights ±e, and the kite faces are provably planar for the exact stagger e = h(1−cos(π/n))/(1+cos(π/n)) — verified numerically (10 faces, each with an exact antipodal face, opposite values pairing to 0+9…4+5, labels sitting on the surface).

Fixed — 3D drawing & fog feel

  • Strokes preview live in 3D. Fog brushes and the pencil now draw while you drag onto a live overlay canvas, instead of appearing only after the left button released.
  • Laggy fog gone. Overlay textures upload at most once per frame via a dirty flag (a live stroke used to trigger a full 1024² texture re-upload per mouse-move); committed strokes redraw the canvas incrementally.
  • The draw tool works in 3D rooms. Scene3D gained a drawings layer (pen/marker freehand, line/rect/ellipse/triangle/hexagon, polygon, and plain text notes) over the ground, in the same shared pixel stroke space and message formats as 2D — saves and live sync carry both room kinds' drawings.
  • Rich text notes anchor and project correctly in 3D rooms (camera projection instead of the 2D stage transform).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturepFiOO0M61kVrvkCFsustb+HsBKY7cG3PUtznTophB5jIOM42tyD5VLYJ9+Z58ihW
ISM8dcpL8PyLyu9F/IhrNuERJlSzhkZn1pEeIxyFLI670uDMemm15bFzJaqTga5e
ztkfOVHIV+akQraVtumEqTgEYd5zrLL3a2Nw3i/DG1d549oAXRErOZIXPdWZVmc4
of2wkrR585DYYgrZ+96pDARa0Bn4KxL6m+rJmQDsm6HjsQBgwr8r0NCdjn5sdbX+
HLeqfmNRhn4u0AFRi8iiUGkQGN7xLSD4UkrizAOOrTqWaVSwqjOQuEMuN73QebUj
Pbzc83ySKbjr/GQDLCvtIm7gVeifn5GG/OsJge/5wrPw0opTQ7Y3yrOVismrzXyH
OmvEFcAKft/oIgB3bAxioQDYg/gpRAMPyzRbTgk5a8HAa/4hJZZ4S9QhDhJlg8NI
9DnKA5mSnEq4xMHMVPvXo52tWVxXDVa13+mFtPBtnCvdVxcn+S83tjvK/SZNFY62
SmhM5rCUIH2xcm4cHRixV+M5pLxEeJ9UkryD9FKtXx8+yiPD/8Mf/zusKbE073Tb
JYcHzi6wAxef4uDWTqqvnlpVN0k7sshmRsIR15GjmZYvmcDzqClqkEOI8j+kSDsW
U9Hyh5wAUOymjISEPHT1z2k4AZg0m5I+bj7PqX3X2yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.2
Release Details
UpdatedJune 26, 2026, 9:45 a.m.
Changelog

Fixed

  • File picker now works. Fixed OC.dialogs.filepicker call to use the correct 7-arg signature for Nextcloud 28+ — the picker shows a "Choose" button and the callback fires with the selected path.
  • Permanent rulers no longer snap horizontal. In 3D the ruler stored y=0 (ground height) instead of z (depth), so all rulers appeared as flat horizontal lines. Now stores both y and z so the ruler renders at the correct depth in 3D mode.
  • Render loop no longer steps dice in 2D mode. The 3D DiceRoller was stepping even in 2D mode; now only steps when mode is 3D (the DicePanel manages its own world in 2D).

Added

  • DM Control Panel. A comprehensive left-side sidebar (🛠 in the toolbar, GM only) consolidating all DM controls:
  • Scene: rename, grid type/size/line-width/opacity/style/colour, scale
  • Layers: toggle visibility for grid, drawings, fog, fog preview
  • Player permissions: per-layer create/update/delete/owner-only table
  • Players: search Nextcloud users, invite, remove
  • Session: send reminders, reveal all fog, delete scene Replaces the separate GridSettings and PermissionsPanel popovers.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureimsxWHI6Z92dMsB779WbE2Ak195OEfqZqyU3jwsa2PdmdGyXnS7mfRcHNfHyyITDPGDyR6cSxiiACW+/r+2H9rs9YhgB4ipaByzJszvb3VFc6jf9aZONWmKp1zSlPPbz6XTkaSG9rbmWmMWBaW7bzdsReis8e1ikQOF/e4dNSucGC1nJT/DL6EjS+UZI500GMuelkR8Xc8yC6kGUoOpWfH4AXaGQBQyQkDHA5NjGz/wquMdXRtBdHxHvVknYCkKdJm0ehtwydziIC1YsPeLWXly2W732RGm2fP1GphVjL6DMY5NMDvlbxndXyWkOKckvbeRe/liVKkvq182/FNREXGQujeTCKrGrc2Dzn2NAPmHDQ8zDyV3lsPCLej6LPXwDXkCDKdeJ8IGnSeoVKiCxgsdnBR4kOHFQIGcn1CjiEy94xVkRTjA4WZgFSbtrZQtPcFb5csT+B5rVlQA98rwUiHppqvRQssv8UV0hwlRJC5IOW2I4vR+MLllei4r55OoGJ/V1lhjlrWSMDo5aw9fbDOrRppyswI3ojxg8gUuwt0qfogYcoC6cFgAbp8ewiR4Wv7ficpjTD2NtJGH0BfajzBB63AauGn7McawRvR183x5WQwppdDogSy9IaNi3nT6DSokpkA2i4CdMNzaYJQn67fRTEp7/kjwSOgtCNXKjWC0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.1
Release Details
UpdatedJune 25, 2026, 6:48 a.m.
Changelog

Changed

  • Consolidated dice UI. Replaced the separate floating DiceTray and DiceViewport with a single DicePanel sidebar. In 2D mode it shows a mini 3D canvas with the physics dice; in 3D mode it drives the main scene's DiceRoller. One panel, mode-appropriate behavior.
  • Asset picker fixed. Rewrote AssetPicker to use Nextcloud's native OC.dialogs.filepicker and proper WebDAV URLs via generateRemoteUrl('dav'), so maps/tokens/models load with session auth. Removed the broken custom BrowseList.
  • Addons inlined. Removed the iframe-based addon system. The initiative tracker is now a built-in Vue component toggled from the topbar (⚔).
  • Nextcloud theming. All colors now use Nextcloud CSS variables (--color-primary-element, --color-main-background, --color-main-text, --color-border, etc.) so the app follows the user's light/dark theme and the admin's accent color automatically. No more hardcoded gold/blue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturejeIzLqOzQoGxqSExMXeqdfX+bfTgrpGEYUZ9zKauEMrhqOJe18bGHuG+FuO7Q0ot
igY1d5b8AH+gapepjK5WBi4QzMd+fGhbXpB7F9kaVDTS6VlBn/BW1bUFFZwV2cYb
n0//YdE1+mA/jYczltbqnVCzj+qXICtHeGGjhRiPBG8osJ4aMVbxQzGEFyfxijJI
v8fi24m0Ja+OMSsBHpEZ9z68j+QqimKnZ9huKWmlyB3b6KSTyp3ICMnAOf6PU9Ij
KId+xEcd3A5i1oxmnxd4+xgnc+NDgzGRrkGDEXD2FJgvux7CRZomgZIGS1CnQk90
tT6bIV1HfRzlD2AHF/3h/wZKYZT5z/wsRabSnB4TvCyVZ4And3WJm/Jy7UhUmnun
kTXueO8aWkH4zI3d4OAS9AEFGoa8uq4yiY9xsYDY/RfH3CFZvQx90L2vBeSS8sp0
KPgnEpDBDN/pOogorgHdy3B+jNiAKuuQMkl/XV8RFd3mqX73b5QpxkV4NzrkPOl6
ooJ9rWtohYSCjG020QZ2y1HCbvirfxh/tY4vdqcBeYvxGginEuQHssCkgTySw/Dq
0le5Pj142rv9FIva0EPbfn8QphNV0g5n/DnwAeUwD85JvEggeOBAQ84kH7fGh7sV
ViSn4EQq6RzM5vrM6wRuN05gcZi3axYkVLWMcy7NTnQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0
Release Details
UpdatedJune 25, 2026, 5:17 a.m.
Changelog

Added

  • Token health system. DM-controlled HP bars on every token (2D bar + 3D billboard). GM double-clicks a token to edit HP; quick ±1/±5 buttons. Synced + persisted; GM-only server-side.
  • Measure modes. Transient ruler, permanent rulers (synced/persisted, right-click to delete), and movement mode (drag a token with a live ruler). Four measurement types: euclidean, chessboard, alternating-diagonal, manhattan. Per-scene ft/square scale.
  • Grid controls. Square / hex-pointy / hex-flat grids, line style (solid/dashed/dotted), colour, opacity, width, per-scene scale. Grid settings popover (⊞ in the toolbar, GM only).
  • Player permissions. Per-layer create/update/delete toggles for maps/tokens/drawings/fog, plus owner-only tokens. Enforced server-side on the room relay; GM bypasses. Permissions panel (🔒, GM only).
  • Fog shapes & preview. Rect/circle/polygon fog modes (plus brush/eraser), cut/uncut toggle, fog preview (GM sees player view), configurable fog colour.
  • Drawing modes. Pen, marker (closed freehand), line, rect, ellipse, triangle, hexagon, polygon (click-to-add, double-click to close), text. Separate stroke + fill colour pickers and width slider. Synced + persisted.
  • Rich text on canvas. In-place contentEditable editor (bold/italic/ lists/headings/emoji) replacing the prompt() dialog; HTML overlay that tracks pan/zoom.
  • Multiple maps per scene. Add maps without replacing (multi-floor / side-by-side), lock/unlock + scale each map for grid alignment. Synced + persisted.
  • 2D dice viewport. A self-contained 3D physics dice tray in a corner canvas in 2D mode, so players roll and see the result without leaving the battlemap. Rolls broadcast to the room.
  • Signed room tokens. HMAC-signed short-lived tokens; the relay verifies signature + expiry against a shared secret. Live multiplayer no longer needs DEV_TRUST.
  • Nextcloud 34 support. Dependency max-version bumped to 34.
  • Asset library. AssetController browses Nextcloud Files (folders, thumbnails, direct file serving) with a BrowseList picker.
  • Addon store verification. Catalog entries validated server-side; verified badge in the UI; warns on non-catalog installs.
  • Dice calibration. d8/d12/d20 canonical face maps (opposites sum to max+1); d10 rebuilt as a true pentagonal trapezohedron.
  • App Store-ready metadata. info.xml now includes website, repository, documentation links, and uses the SPDX licence identifier (AGPL-3.0-or-later).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0 (nightly)
Release Details
UpdatedJune 24, 2026, 4:40 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 29

Grimoire 0.7.11
Release Details
UpdatedOct. 29, 2026, 4 a.m.
Changelog

Community feature request: manage placed 3D models.

Added

  • Selected-token controls in 3D rooms. Click a token with the Grab tool and a bar appears above the tool options: rotate ±45°, resize (−/+ 0.25 steps, 0.4×–4×), delete (with a confirmation), and deselect. A ring highlights the selected token and follows it as it moves.
  • Changes apply instantly and broadcast as token:upsert; deletes remove the token for everyone (token:remove) and clear the selection. Clicking empty space deselects. Remote deletion of the selected token clears the bar.

Changed

  • Upserts of existing tokens now check the update permission (create before, when the token was new). Rotate/resize are edits, not creations — this matches the UI gating, which also honours ownerOnly.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureEAgcR+NCTLBB9/+XQR0QsusPkTQ56Cu00kbP79OUcIkugLDZqR4oP7hHA/qpR7RBA4ig5oOFdsOsF93LA3WxmcABnr3GEG/yDpryIQCgWWza/8JtI19Py+SgvzYPVDM0FhpQpeIr1tsdZZ1P4FuBqcYCI6YSaTmP3NSgT28PxVOEcHCyo7KQg+TqsmkwYkxYG7bYpbzMOQMYmB4+YS7FIJv5CqYW1QVOkMliGYq8dlCSPoHcBBtLASKZwtOdCeDnjH7gHs7iyv5TRkUECpBgeeqs3TFat87Dg/yoUPSK83Sp4MbHu5TEDnGDELUILG7OOz1SfQ57SDSxCVb/lwBbFZFdyG/4HZhq1Rx743UBt+TWlB7p9Cb3kSmAOn2Jag3bGhaTaTeJy/WVELHtqF5bJpLdIubcuTcmNUo5tHVOZgvmEX9+yE912oT9s60fThkD6cIUEFwOogoVCMwoHI3pYsQNbnyN6J96zHUmvi5uKnzgbQ+vNylJPz3zVoj6NxNq8AWuArHcz5mo1inj0IpLpOqlXhgDCO/lnGfnFVa0ZaWkqqEu34mr0wb0JEdmCH91jgARD3rcV9mXr5uweyYNOXvRsTzgCyuDCjkhGCzqk1RkKrKgMr8xYwyvs/Ts3IFOKCO6sR+X9OFfb0iUXd4LkTNkw0mHufcXX/wnNp/BZQs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.10
Release Details
UpdatedOct. 27, 2026, 3:22 p.m.
Changelog

Security patches from an external source-code audit (five findings — all addressed).

Fixed — security

  • Rich text XSS (critical). Notes on the canvas were rendered with v-html unsanitized: any invited player could send/persist markup and run it in every viewer's Nextcloud-origin page. Rich text is now sanitized with DOMPurify (default safe profile — scripts, event handlers and javascript:/data: URLs stripped; heading/colour/list/link formatting preserved) at every entry point AND at render, so even previously-persisted malicious notes render inert.
  • Scene-save takeover (high). The scene-save endpoint accepted a full document replacement from ANY invited player, including renaming the scene and wiping the map/fog/config. Player saves are now a server-side scoped merge: only keys whose permission layer allows updates pass through (tokens/blocks/maps/drawings/measurements), while name, gridConfig, mode and unknown keys remain GM-only and can no longer be overwritten or cleared. Also gained the standard raw-body fallback.
  • ownerOnly token enforcement bypass (high). The token-ownership lookup queried a SCENE ROW by the token id (always missing), then fell back to the attacker-supplied owner field, and treated null (= unknown) as allowed — so ownerOnly token protection was effectively decorative and players could move or delete tokens of others. Ownership now resolves from the persisted scene document only, with no client fallback, and unknown ownership DENIES the action (deny by default).
  • Third-party addon proxy / store endpoints removed (two highs). The iframe addon system was removed from the app in 0.7.1, but its server-side same-origin fetch proxy and store endpoints remained — serving attacker-controlled remote HTML from the Nextcloud origin and fetching attacker URLs with redirects left intact (SSRF class). Rather than hardening dead endpoints, they (and their DB entities, routes, and capability bridge references) are deleted outright.

Removed

  • AddonProxyController, AddonController, Addon/AddonMapper entities and the /addon-proxy + /api/addons(-store) routes (dead since 0.7.1's addon consolidation; kept previously only for compatibility).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureQOd35W5gxwQUfySa9xZZtiS4LJFRiM2sdFx3bDlpAy4GZ9mmJ7M9SL5459nt5nGg
/YQ0FB3Uh0AzGT9ZjcjTiiVlsasXly9cI/7iqzMmg5wBbV0CE8BHnHbm8ptz2Qdf
brn9vhAlyYzo5s31VKWs2Ubobmil6Eo7xOsRmCBi9VZEkIokRboUtoBq7v1xwpek
aaJtAb3EantEXYxwn7Bs4QtkCmzWneyRrU6Ved+xOESjynlh9uyNHRhoq6xiR1LD
gn27UaUlZh5iN98AYF+Yb4kN4VyW6/nt0dsI7JRcRzzmCEInGKEVaSlfNHOVgUgj
2ua1SGyKjxRISun8V3/qqTLee7luMq2dlfSJMLMDYBfShOUSigFx0As/ti38Fa1U
AlkcgTs5xWTKKRHTE62sy9SvYTmHub70pdPjaBqwg5HylpZSrJYdDp6nfyFquu+i
EyqCu3GsWQFylocvt9wVQgYkYfQADBKIc/+Oill0zxqWiSG1Qg0nwi3DlE/C+FHd
ppESpC8UT4zLBXkFbCOnJtEBgSMdiR9n5pksgtadKg2yLRFaQ5wTWhWg6jUP8z4M
WoAiCa1Qgs7WhZhjYkGxdgpkEbxo+dV2WL1yuS5oDHbJJv86skhShnZA4L86Ypdc
qiq9PPfd/SK3UclWBpbC8sYzQ0oWId8gQ/iIIfAJtgM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.9
Release Details
UpdatedOct. 26, 2026, 5:50 p.m.
Changelog

Dice physics/render fixes found by testing 0.7.8 in the field. (Repackaged in place after field-testing caught the d4's rest pose — see below.)

Fixed

  • The d4 roll crashed at spawn and froze the table. Field-testing the first 0.7.9 packaging showed the d4 "spawning in the plane and doing nothing" (a half-buried wedge) in 3D and a frozen dice panel + stuck camera in 2D. Root cause, found by running the real module: _spawnDie never destructured labelValues — every d4 roll threw a ReferenceError AFTER the mesh was created but BEFORE the physics body existed, leaving a bodyless tetra at the scene origin (half of it below the floor — the wedge); the per-frame mesh sync then threw on d.body.position every frame, killing the render loop (room frozen at that frame; "does nothing"). Fixes: the destructure is complete; physics bodies are now created BEFORE cosmetic labels so a label failure can only log, never break the die or the loop; the per-frame sync skips body-less entries defensively; and the settle-snap block's stray CANNON reference (a second loop-killer at settle) now reads the stored this.CANNON. Verified by running the real module: dice tumble, settle at exact inradii (flush, apex up), sleep, and report values — d4, d8, d10, d20 in one batch.
  • Settled dice now rest like real dice. The physics solver can stop a die mid-tilt (a tetra balancing on an edge/vertex contact) which read as "not a d4 at all" — and it leaves a small allowed penetration at rest (the d4 sank ~4% of its size — the "clips into the floor" look). On settle each die's most-downward face is rotated to exactly flat (apex straight up for the d4, crisp kites for the d10), residual sink is lifted out, and the pose is locked by sleeping the body. The result read runs on the snapped pose, so what you see and what is reported always agree.
  • The d10's "wedge"/"no faces" and leaning rest. The trapezohedron's winding fix flipped only the FIRST triangle of each quad, leaving the other half of the kite faces wound inward. Consequences: cannon-es rejected those faces as pointing into the shape (the die could only rest on half of them, leaned/jittered and never went to sleep so rolls idled to the ~6s timeout), and the renderer BACKFACE-CULLED the inverted faces — the die looked like a half-missing "boat" wedge. The flip now reverses the entire quad cycle; verified numerically: no cannon warnings, the die sleeps after settling, and all faces render.
  • Dice result view jumps back after ~half a second. The camera goal was dropped the moment it was reached, so the zoom snapped back to the overview immediately. The zoom now HOLDS until the next roll.
  • Only one die showed when several rolled. The result camera now cycles through every resting die (~2.5s each, wrapping around) until the next roll.
  • d4 numbers bigger and edge-adjacent to read like a physical d4.
  • Striped/shadow-acne faces. The main light self-shadowed dice at ~0.04 units/texel, rendering dark diagonal stripes across faces ("texture issues"). Shadow bias + normalBias added.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturePhL1ZJe/lTJjNgB02CdcG98mXydMcgpG2WybZuPzMqzZe2uDb9fZieIgBGyo0wsw
rvVMZ0geqkk2X6QcBqzYLVWKVnde81TqxFCmWfJ/cdU5Nwl6hrpqSSI0M01szWAk
cq4OPDQUU3QgCzpZGpNd9GV9PXeGHG4KDoxARedHxFpdrqWBAMJFAE3gnijZWRWI
T63o/4VV/uhzgimniygv2MNURHEj2iJEp1pHqKN6wuT20vwQaYBvvQHAQL7UVkf1
r3dbaUNqfBOWC/zdzK5JNdviCYd1hyqiN/PIgL3rQMz8A+eRPnHYAQh3RsKJUkod
zLzNdaJ7oBaHPiSR02HFvxNJGI1wRTTRdmazJyk3nvkSGkjMfPuAAhW3zC5vApBv
2KBlRht+rEIeAeEfXqk0PXto6M5f99SUq8IGJCLvpKNTAVWpmXOQWoaW6fZLDD/Y
IBSSTQbreos6KLtNjBpVg6amJMrT0sm92HgEhKbhl+shvyEXQwzN2wL/Zf5zqRCb
5tel81xYpcQ8IdXX88HQYg2wWkPUtnq/0bLe7lpS2hfpquzDMZTgIO1+zuyOTCCD
6RocQTFduaPpzZebTc2htoZuideLUM45aUdX9NNAv28OH2xxO8EdWINbVWzPs+QY
D+jeY3Rn5wCgqo3HkrauGm1RYgL95HIkWPRLPFWbvwc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.8
Release Details
UpdatedOct. 26, 2026, 1:12 p.m.
Changelog

Dice render fixes completing the 0.7.7 batch (kept 0.7.7's published tag intact; deploy 0.7.8 to get the whole batch).

Fixed

  • d4 is a real, vertex-numbered d4. It rests on a face and the result is read at the TOP vertex (its direction points straight up when settled — verified numerically for all four settle states). Each face now prints THREE numbers near its edges — the value of each of its corners — exactly like a physical d4, so the result is legible from any viewing angle (the old face-centre labels were invisible when the upright face was seen edge-on, which is why numbers appeared only "from afar").
  • d8 face map had duplicated values. The calibration call passed the FULL canonical list ([1,8,2,7,3,6,4,5]) where the pairing helper expects only the first half: pairs were built as (1→8), then (8→1), (2→7), then (7→2) — every value used twice, and 3/4/5/6 never appeared. Fixed to [1,2,3,4]; opposites now correctly sum to 9 with all eight values present.
  • Face labels no longer land at arbitrary, upside-down twists. Label orientation is now canonical per face (the die's local up projected into the face plane, with a degeneracy fallback), shared by every die type — mirrored in the field as numbers reading "9" for a flipped "6", and the d10/d8 screenshots showing upside-down digits.
  • Label textures skip mipmap generation (minor spawn-cost win).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturebkDeJUFvyrSo9zV0/aDTsda7jDfUoutfXQ+fzMGblGx61A01/VGsQ8CDOB+xkCl3
pffrvNx7GVvWLHCnVAcHe+N9tch5NdRlDud6++TeArglx6HxJ0nFmUG8Wm1KAvVN
kavJo0iHiTVIQjdbfoBl+WGljPzMQAQ0zqILWXvoFjl/lLMuYZIqeNTavkVWgesW
lf8evfRiZdrw44rBGvMiOhAtQ8xGvHppfYCtvEIMAv5xcF3O67Mdz8bmwGkwUm8Q
wFsvgaKqNScmXe7HvmQk00pi2cB30KCBE6mkCCS7vo4TWvFbzPj9sA42PlJZvbtW
TUwdP/ZoMQmegMNhj0jVpvUlnbx76htTKhG6+te4cCo4Us1GkHui3HZ728chLz9t
zC5Qzsd+4uEtfIhKvW/clXxgZLJnriShXvHtSAbeldnVQCr2oHxUGqTJ7DwZ2CIH
ZSFUroerJMJG5+MU8dviCGNonkN3pWKCWz1iWxBMAKHhVwVUM7Zl/AIcZwauEtQ3
b5fODgfhv82P3KjdHNc0wbsTfDbNUu818/yrZj0PibGVmGRYl+exrG0dmV5UPwTx
L2NPeauXIXjU4CzpU9YVgXJUf8qvzunT6bqhXP3eeG07CsQPhnvT3ZT12AiYBNjs
mBZ/cR1VZ+qJxiw1e8rrkVJ5hspgNbhR68Mc+creI7Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.6
Release Details
UpdatedOct. 25, 2026, 1:43 p.m.
Changelog

The d10 die was geometrically wrong, 3D fog only appeared on mouse release and stuttered, and the draw tool was inert in 3D rooms.

Fixed — dice

  • d10 rebuilt as a true pentagonal trapezohedron. The old construction was built with n=10 (a twenty-faced decagonal solid whose 0–9 values cycled across 20 faces, several doubled and mislabelled) and placed labels far off the faces. The new builder is exact: two apices, a 2n ring staggered between heights ±e, and the kite faces are provably planar for the exact stagger e = h(1−cos(π/n))/(1+cos(π/n)) — verified numerically (10 faces, each with an exact antipodal face, opposite values pairing to 0+9…4+5, labels sitting on the surface).

Fixed — 3D drawing & fog feel

  • Strokes preview live in 3D. Fog brushes and the pencil now draw while you drag onto a live overlay canvas, instead of appearing only after the left button released.
  • Laggy fog gone. Overlay textures upload at most once per frame via a dirty flag (a live stroke used to trigger a full 1024² texture re-upload per mouse-move); committed strokes redraw the canvas incrementally.
  • The draw tool works in 3D rooms. Scene3D gained a drawings layer (pen/marker freehand, line/rect/ellipse/triangle/hexagon, polygon, and plain text notes) over the ground, in the same shared pixel stroke space and message formats as 2D — saves and live sync carry both room kinds' drawings.
  • Rich text notes anchor and project correctly in 3D rooms (camera projection instead of the 2D stage transform).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturepFiOO0M61kVrvkCFsustb+HsBKY7cG3PUtznTophB5jIOM42tyD5VLYJ9+Z58ihW
ISM8dcpL8PyLyu9F/IhrNuERJlSzhkZn1pEeIxyFLI670uDMemm15bFzJaqTga5e
ztkfOVHIV+akQraVtumEqTgEYd5zrLL3a2Nw3i/DG1d549oAXRErOZIXPdWZVmc4
of2wkrR585DYYgrZ+96pDARa0Bn4KxL6m+rJmQDsm6HjsQBgwr8r0NCdjn5sdbX+
HLeqfmNRhn4u0AFRi8iiUGkQGN7xLSD4UkrizAOOrTqWaVSwqjOQuEMuN73QebUj
Pbzc83ySKbjr/GQDLCvtIm7gVeifn5GG/OsJge/5wrPw0opTQ7Y3yrOVismrzXyH
OmvEFcAKft/oIgB3bAxioQDYg/gpRAMPyzRbTgk5a8HAa/4hJZZ4S9QhDhJlg8NI
9DnKA5mSnEq4xMHMVPvXo52tWVxXDVa13+mFtPBtnCvdVxcn+S83tjvK/SZNFY62
SmhM5rCUIH2xcm4cHRixV+M5pLxEeJ9UkryD9FKtXx8+yiPD/8Mf/zusKbE073Tb
JYcHzi6wAxef4uDWTqqvnlpVN0k7sshmRsIR15GjmZYvmcDzqClqkEOI8j+kSDsW
U9Hyh5wAUOymjISEPHT1z2k4AZg0m5I+bj7PqX3X2yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.2
Release Details
UpdatedJune 26, 2026, 9:45 a.m.
Changelog

Fixed

  • File picker now works. Fixed OC.dialogs.filepicker call to use the correct 7-arg signature for Nextcloud 28+ — the picker shows a "Choose" button and the callback fires with the selected path.
  • Permanent rulers no longer snap horizontal. In 3D the ruler stored y=0 (ground height) instead of z (depth), so all rulers appeared as flat horizontal lines. Now stores both y and z so the ruler renders at the correct depth in 3D mode.
  • Render loop no longer steps dice in 2D mode. The 3D DiceRoller was stepping even in 2D mode; now only steps when mode is 3D (the DicePanel manages its own world in 2D).

Added

  • DM Control Panel. A comprehensive left-side sidebar (🛠 in the toolbar, GM only) consolidating all DM controls:
  • Scene: rename, grid type/size/line-width/opacity/style/colour, scale
  • Layers: toggle visibility for grid, drawings, fog, fog preview
  • Player permissions: per-layer create/update/delete/owner-only table
  • Players: search Nextcloud users, invite, remove
  • Session: send reminders, reveal all fog, delete scene Replaces the separate GridSettings and PermissionsPanel popovers.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureimsxWHI6Z92dMsB779WbE2Ak195OEfqZqyU3jwsa2PdmdGyXnS7mfRcHNfHyyITDPGDyR6cSxiiACW+/r+2H9rs9YhgB4ipaByzJszvb3VFc6jf9aZONWmKp1zSlPPbz6XTkaSG9rbmWmMWBaW7bzdsReis8e1ikQOF/e4dNSucGC1nJT/DL6EjS+UZI500GMuelkR8Xc8yC6kGUoOpWfH4AXaGQBQyQkDHA5NjGz/wquMdXRtBdHxHvVknYCkKdJm0ehtwydziIC1YsPeLWXly2W732RGm2fP1GphVjL6DMY5NMDvlbxndXyWkOKckvbeRe/liVKkvq182/FNREXGQujeTCKrGrc2Dzn2NAPmHDQ8zDyV3lsPCLej6LPXwDXkCDKdeJ8IGnSeoVKiCxgsdnBR4kOHFQIGcn1CjiEy94xVkRTjA4WZgFSbtrZQtPcFb5csT+B5rVlQA98rwUiHppqvRQssv8UV0hwlRJC5IOW2I4vR+MLllei4r55OoGJ/V1lhjlrWSMDo5aw9fbDOrRppyswI3ojxg8gUuwt0qfogYcoC6cFgAbp8ewiR4Wv7ficpjTD2NtJGH0BfajzBB63AauGn7McawRvR183x5WQwppdDogSy9IaNi3nT6DSokpkA2i4CdMNzaYJQn67fRTEp7/kjwSOgtCNXKjWC0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.1
Release Details
UpdatedJune 25, 2026, 6:48 a.m.
Changelog

Changed

  • Consolidated dice UI. Replaced the separate floating DiceTray and DiceViewport with a single DicePanel sidebar. In 2D mode it shows a mini 3D canvas with the physics dice; in 3D mode it drives the main scene's DiceRoller. One panel, mode-appropriate behavior.
  • Asset picker fixed. Rewrote AssetPicker to use Nextcloud's native OC.dialogs.filepicker and proper WebDAV URLs via generateRemoteUrl('dav'), so maps/tokens/models load with session auth. Removed the broken custom BrowseList.
  • Addons inlined. Removed the iframe-based addon system. The initiative tracker is now a built-in Vue component toggled from the topbar (⚔).
  • Nextcloud theming. All colors now use Nextcloud CSS variables (--color-primary-element, --color-main-background, --color-main-text, --color-border, etc.) so the app follows the user's light/dark theme and the admin's accent color automatically. No more hardcoded gold/blue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturejeIzLqOzQoGxqSExMXeqdfX+bfTgrpGEYUZ9zKauEMrhqOJe18bGHuG+FuO7Q0ot
igY1d5b8AH+gapepjK5WBi4QzMd+fGhbXpB7F9kaVDTS6VlBn/BW1bUFFZwV2cYb
n0//YdE1+mA/jYczltbqnVCzj+qXICtHeGGjhRiPBG8osJ4aMVbxQzGEFyfxijJI
v8fi24m0Ja+OMSsBHpEZ9z68j+QqimKnZ9huKWmlyB3b6KSTyp3ICMnAOf6PU9Ij
KId+xEcd3A5i1oxmnxd4+xgnc+NDgzGRrkGDEXD2FJgvux7CRZomgZIGS1CnQk90
tT6bIV1HfRzlD2AHF/3h/wZKYZT5z/wsRabSnB4TvCyVZ4And3WJm/Jy7UhUmnun
kTXueO8aWkH4zI3d4OAS9AEFGoa8uq4yiY9xsYDY/RfH3CFZvQx90L2vBeSS8sp0
KPgnEpDBDN/pOogorgHdy3B+jNiAKuuQMkl/XV8RFd3mqX73b5QpxkV4NzrkPOl6
ooJ9rWtohYSCjG020QZ2y1HCbvirfxh/tY4vdqcBeYvxGginEuQHssCkgTySw/Dq
0le5Pj142rv9FIva0EPbfn8QphNV0g5n/DnwAeUwD85JvEggeOBAQ84kH7fGh7sV
ViSn4EQq6RzM5vrM6wRuN05gcZi3axYkVLWMcy7NTnQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0
Release Details
UpdatedJune 25, 2026, 5:17 a.m.
Changelog

Added

  • Token health system. DM-controlled HP bars on every token (2D bar + 3D billboard). GM double-clicks a token to edit HP; quick ±1/±5 buttons. Synced + persisted; GM-only server-side.
  • Measure modes. Transient ruler, permanent rulers (synced/persisted, right-click to delete), and movement mode (drag a token with a live ruler). Four measurement types: euclidean, chessboard, alternating-diagonal, manhattan. Per-scene ft/square scale.
  • Grid controls. Square / hex-pointy / hex-flat grids, line style (solid/dashed/dotted), colour, opacity, width, per-scene scale. Grid settings popover (⊞ in the toolbar, GM only).
  • Player permissions. Per-layer create/update/delete toggles for maps/tokens/drawings/fog, plus owner-only tokens. Enforced server-side on the room relay; GM bypasses. Permissions panel (🔒, GM only).
  • Fog shapes & preview. Rect/circle/polygon fog modes (plus brush/eraser), cut/uncut toggle, fog preview (GM sees player view), configurable fog colour.
  • Drawing modes. Pen, marker (closed freehand), line, rect, ellipse, triangle, hexagon, polygon (click-to-add, double-click to close), text. Separate stroke + fill colour pickers and width slider. Synced + persisted.
  • Rich text on canvas. In-place contentEditable editor (bold/italic/ lists/headings/emoji) replacing the prompt() dialog; HTML overlay that tracks pan/zoom.
  • Multiple maps per scene. Add maps without replacing (multi-floor / side-by-side), lock/unlock + scale each map for grid alignment. Synced + persisted.
  • 2D dice viewport. A self-contained 3D physics dice tray in a corner canvas in 2D mode, so players roll and see the result without leaving the battlemap. Rolls broadcast to the room.
  • Signed room tokens. HMAC-signed short-lived tokens; the relay verifies signature + expiry against a shared secret. Live multiplayer no longer needs DEV_TRUST.
  • Nextcloud 34 support. Dependency max-version bumped to 34.
  • Asset library. AssetController browses Nextcloud Files (folders, thumbnails, direct file serving) with a BrowseList picker.
  • Addon store verification. Catalog entries validated server-side; verified badge in the UI; warns on non-catalog installs.
  • Dice calibration. d8/d12/d20 canonical face maps (opposites sum to max+1); d10 rebuilt as a true pentagonal trapezohedron.
  • App Store-ready metadata. info.xml now includes website, repository, documentation links, and uses the SPDX licence identifier (AGPL-3.0-or-later).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0 (nightly)
Release Details
UpdatedJune 24, 2026, 4:40 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 28

Grimoire 0.7.11
Release Details
UpdatedOct. 29, 2026, 4 a.m.
Changelog

Community feature request: manage placed 3D models.

Added

  • Selected-token controls in 3D rooms. Click a token with the Grab tool and a bar appears above the tool options: rotate ±45°, resize (−/+ 0.25 steps, 0.4×–4×), delete (with a confirmation), and deselect. A ring highlights the selected token and follows it as it moves.
  • Changes apply instantly and broadcast as token:upsert; deletes remove the token for everyone (token:remove) and clear the selection. Clicking empty space deselects. Remote deletion of the selected token clears the bar.

Changed

  • Upserts of existing tokens now check the update permission (create before, when the token was new). Rotate/resize are edits, not creations — this matches the UI gating, which also honours ownerOnly.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureEAgcR+NCTLBB9/+XQR0QsusPkTQ56Cu00kbP79OUcIkugLDZqR4oP7hHA/qpR7RBA4ig5oOFdsOsF93LA3WxmcABnr3GEG/yDpryIQCgWWza/8JtI19Py+SgvzYPVDM0FhpQpeIr1tsdZZ1P4FuBqcYCI6YSaTmP3NSgT28PxVOEcHCyo7KQg+TqsmkwYkxYG7bYpbzMOQMYmB4+YS7FIJv5CqYW1QVOkMliGYq8dlCSPoHcBBtLASKZwtOdCeDnjH7gHs7iyv5TRkUECpBgeeqs3TFat87Dg/yoUPSK83Sp4MbHu5TEDnGDELUILG7OOz1SfQ57SDSxCVb/lwBbFZFdyG/4HZhq1Rx743UBt+TWlB7p9Cb3kSmAOn2Jag3bGhaTaTeJy/WVELHtqF5bJpLdIubcuTcmNUo5tHVOZgvmEX9+yE912oT9s60fThkD6cIUEFwOogoVCMwoHI3pYsQNbnyN6J96zHUmvi5uKnzgbQ+vNylJPz3zVoj6NxNq8AWuArHcz5mo1inj0IpLpOqlXhgDCO/lnGfnFVa0ZaWkqqEu34mr0wb0JEdmCH91jgARD3rcV9mXr5uweyYNOXvRsTzgCyuDCjkhGCzqk1RkKrKgMr8xYwyvs/Ts3IFOKCO6sR+X9OFfb0iUXd4LkTNkw0mHufcXX/wnNp/BZQs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.10
Release Details
UpdatedOct. 27, 2026, 3:22 p.m.
Changelog

Security patches from an external source-code audit (five findings — all addressed).

Fixed — security

  • Rich text XSS (critical). Notes on the canvas were rendered with v-html unsanitized: any invited player could send/persist markup and run it in every viewer's Nextcloud-origin page. Rich text is now sanitized with DOMPurify (default safe profile — scripts, event handlers and javascript:/data: URLs stripped; heading/colour/list/link formatting preserved) at every entry point AND at render, so even previously-persisted malicious notes render inert.
  • Scene-save takeover (high). The scene-save endpoint accepted a full document replacement from ANY invited player, including renaming the scene and wiping the map/fog/config. Player saves are now a server-side scoped merge: only keys whose permission layer allows updates pass through (tokens/blocks/maps/drawings/measurements), while name, gridConfig, mode and unknown keys remain GM-only and can no longer be overwritten or cleared. Also gained the standard raw-body fallback.
  • ownerOnly token enforcement bypass (high). The token-ownership lookup queried a SCENE ROW by the token id (always missing), then fell back to the attacker-supplied owner field, and treated null (= unknown) as allowed — so ownerOnly token protection was effectively decorative and players could move or delete tokens of others. Ownership now resolves from the persisted scene document only, with no client fallback, and unknown ownership DENIES the action (deny by default).
  • Third-party addon proxy / store endpoints removed (two highs). The iframe addon system was removed from the app in 0.7.1, but its server-side same-origin fetch proxy and store endpoints remained — serving attacker-controlled remote HTML from the Nextcloud origin and fetching attacker URLs with redirects left intact (SSRF class). Rather than hardening dead endpoints, they (and their DB entities, routes, and capability bridge references) are deleted outright.

Removed

  • AddonProxyController, AddonController, Addon/AddonMapper entities and the /addon-proxy + /api/addons(-store) routes (dead since 0.7.1's addon consolidation; kept previously only for compatibility).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureQOd35W5gxwQUfySa9xZZtiS4LJFRiM2sdFx3bDlpAy4GZ9mmJ7M9SL5459nt5nGg
/YQ0FB3Uh0AzGT9ZjcjTiiVlsasXly9cI/7iqzMmg5wBbV0CE8BHnHbm8ptz2Qdf
brn9vhAlyYzo5s31VKWs2Ubobmil6Eo7xOsRmCBi9VZEkIokRboUtoBq7v1xwpek
aaJtAb3EantEXYxwn7Bs4QtkCmzWneyRrU6Ved+xOESjynlh9uyNHRhoq6xiR1LD
gn27UaUlZh5iN98AYF+Yb4kN4VyW6/nt0dsI7JRcRzzmCEInGKEVaSlfNHOVgUgj
2ua1SGyKjxRISun8V3/qqTLee7luMq2dlfSJMLMDYBfShOUSigFx0As/ti38Fa1U
AlkcgTs5xWTKKRHTE62sy9SvYTmHub70pdPjaBqwg5HylpZSrJYdDp6nfyFquu+i
EyqCu3GsWQFylocvt9wVQgYkYfQADBKIc/+Oill0zxqWiSG1Qg0nwi3DlE/C+FHd
ppESpC8UT4zLBXkFbCOnJtEBgSMdiR9n5pksgtadKg2yLRFaQ5wTWhWg6jUP8z4M
WoAiCa1Qgs7WhZhjYkGxdgpkEbxo+dV2WL1yuS5oDHbJJv86skhShnZA4L86Ypdc
qiq9PPfd/SK3UclWBpbC8sYzQ0oWId8gQ/iIIfAJtgM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.9
Release Details
UpdatedOct. 26, 2026, 5:50 p.m.
Changelog

Dice physics/render fixes found by testing 0.7.8 in the field. (Repackaged in place after field-testing caught the d4's rest pose — see below.)

Fixed

  • The d4 roll crashed at spawn and froze the table. Field-testing the first 0.7.9 packaging showed the d4 "spawning in the plane and doing nothing" (a half-buried wedge) in 3D and a frozen dice panel + stuck camera in 2D. Root cause, found by running the real module: _spawnDie never destructured labelValues — every d4 roll threw a ReferenceError AFTER the mesh was created but BEFORE the physics body existed, leaving a bodyless tetra at the scene origin (half of it below the floor — the wedge); the per-frame mesh sync then threw on d.body.position every frame, killing the render loop (room frozen at that frame; "does nothing"). Fixes: the destructure is complete; physics bodies are now created BEFORE cosmetic labels so a label failure can only log, never break the die or the loop; the per-frame sync skips body-less entries defensively; and the settle-snap block's stray CANNON reference (a second loop-killer at settle) now reads the stored this.CANNON. Verified by running the real module: dice tumble, settle at exact inradii (flush, apex up), sleep, and report values — d4, d8, d10, d20 in one batch.
  • Settled dice now rest like real dice. The physics solver can stop a die mid-tilt (a tetra balancing on an edge/vertex contact) which read as "not a d4 at all" — and it leaves a small allowed penetration at rest (the d4 sank ~4% of its size — the "clips into the floor" look). On settle each die's most-downward face is rotated to exactly flat (apex straight up for the d4, crisp kites for the d10), residual sink is lifted out, and the pose is locked by sleeping the body. The result read runs on the snapped pose, so what you see and what is reported always agree.
  • The d10's "wedge"/"no faces" and leaning rest. The trapezohedron's winding fix flipped only the FIRST triangle of each quad, leaving the other half of the kite faces wound inward. Consequences: cannon-es rejected those faces as pointing into the shape (the die could only rest on half of them, leaned/jittered and never went to sleep so rolls idled to the ~6s timeout), and the renderer BACKFACE-CULLED the inverted faces — the die looked like a half-missing "boat" wedge. The flip now reverses the entire quad cycle; verified numerically: no cannon warnings, the die sleeps after settling, and all faces render.
  • Dice result view jumps back after ~half a second. The camera goal was dropped the moment it was reached, so the zoom snapped back to the overview immediately. The zoom now HOLDS until the next roll.
  • Only one die showed when several rolled. The result camera now cycles through every resting die (~2.5s each, wrapping around) until the next roll.
  • d4 numbers bigger and edge-adjacent to read like a physical d4.
  • Striped/shadow-acne faces. The main light self-shadowed dice at ~0.04 units/texel, rendering dark diagonal stripes across faces ("texture issues"). Shadow bias + normalBias added.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturePhL1ZJe/lTJjNgB02CdcG98mXydMcgpG2WybZuPzMqzZe2uDb9fZieIgBGyo0wsw
rvVMZ0geqkk2X6QcBqzYLVWKVnde81TqxFCmWfJ/cdU5Nwl6hrpqSSI0M01szWAk
cq4OPDQUU3QgCzpZGpNd9GV9PXeGHG4KDoxARedHxFpdrqWBAMJFAE3gnijZWRWI
T63o/4VV/uhzgimniygv2MNURHEj2iJEp1pHqKN6wuT20vwQaYBvvQHAQL7UVkf1
r3dbaUNqfBOWC/zdzK5JNdviCYd1hyqiN/PIgL3rQMz8A+eRPnHYAQh3RsKJUkod
zLzNdaJ7oBaHPiSR02HFvxNJGI1wRTTRdmazJyk3nvkSGkjMfPuAAhW3zC5vApBv
2KBlRht+rEIeAeEfXqk0PXto6M5f99SUq8IGJCLvpKNTAVWpmXOQWoaW6fZLDD/Y
IBSSTQbreos6KLtNjBpVg6amJMrT0sm92HgEhKbhl+shvyEXQwzN2wL/Zf5zqRCb
5tel81xYpcQ8IdXX88HQYg2wWkPUtnq/0bLe7lpS2hfpquzDMZTgIO1+zuyOTCCD
6RocQTFduaPpzZebTc2htoZuideLUM45aUdX9NNAv28OH2xxO8EdWINbVWzPs+QY
D+jeY3Rn5wCgqo3HkrauGm1RYgL95HIkWPRLPFWbvwc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.8
Release Details
UpdatedOct. 26, 2026, 1:12 p.m.
Changelog

Dice render fixes completing the 0.7.7 batch (kept 0.7.7's published tag intact; deploy 0.7.8 to get the whole batch).

Fixed

  • d4 is a real, vertex-numbered d4. It rests on a face and the result is read at the TOP vertex (its direction points straight up when settled — verified numerically for all four settle states). Each face now prints THREE numbers near its edges — the value of each of its corners — exactly like a physical d4, so the result is legible from any viewing angle (the old face-centre labels were invisible when the upright face was seen edge-on, which is why numbers appeared only "from afar").
  • d8 face map had duplicated values. The calibration call passed the FULL canonical list ([1,8,2,7,3,6,4,5]) where the pairing helper expects only the first half: pairs were built as (1→8), then (8→1), (2→7), then (7→2) — every value used twice, and 3/4/5/6 never appeared. Fixed to [1,2,3,4]; opposites now correctly sum to 9 with all eight values present.
  • Face labels no longer land at arbitrary, upside-down twists. Label orientation is now canonical per face (the die's local up projected into the face plane, with a degeneracy fallback), shared by every die type — mirrored in the field as numbers reading "9" for a flipped "6", and the d10/d8 screenshots showing upside-down digits.
  • Label textures skip mipmap generation (minor spawn-cost win).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturebkDeJUFvyrSo9zV0/aDTsda7jDfUoutfXQ+fzMGblGx61A01/VGsQ8CDOB+xkCl3
pffrvNx7GVvWLHCnVAcHe+N9tch5NdRlDud6++TeArglx6HxJ0nFmUG8Wm1KAvVN
kavJo0iHiTVIQjdbfoBl+WGljPzMQAQ0zqILWXvoFjl/lLMuYZIqeNTavkVWgesW
lf8evfRiZdrw44rBGvMiOhAtQ8xGvHppfYCtvEIMAv5xcF3O67Mdz8bmwGkwUm8Q
wFsvgaKqNScmXe7HvmQk00pi2cB30KCBE6mkCCS7vo4TWvFbzPj9sA42PlJZvbtW
TUwdP/ZoMQmegMNhj0jVpvUlnbx76htTKhG6+te4cCo4Us1GkHui3HZ728chLz9t
zC5Qzsd+4uEtfIhKvW/clXxgZLJnriShXvHtSAbeldnVQCr2oHxUGqTJ7DwZ2CIH
ZSFUroerJMJG5+MU8dviCGNonkN3pWKCWz1iWxBMAKHhVwVUM7Zl/AIcZwauEtQ3
b5fODgfhv82P3KjdHNc0wbsTfDbNUu818/yrZj0PibGVmGRYl+exrG0dmV5UPwTx
L2NPeauXIXjU4CzpU9YVgXJUf8qvzunT6bqhXP3eeG07CsQPhnvT3ZT12AiYBNjs
mBZ/cR1VZ+qJxiw1e8rrkVJ5hspgNbhR68Mc+creI7Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.6
Release Details
UpdatedOct. 25, 2026, 1:43 p.m.
Changelog

The d10 die was geometrically wrong, 3D fog only appeared on mouse release and stuttered, and the draw tool was inert in 3D rooms.

Fixed — dice

  • d10 rebuilt as a true pentagonal trapezohedron. The old construction was built with n=10 (a twenty-faced decagonal solid whose 0–9 values cycled across 20 faces, several doubled and mislabelled) and placed labels far off the faces. The new builder is exact: two apices, a 2n ring staggered between heights ±e, and the kite faces are provably planar for the exact stagger e = h(1−cos(π/n))/(1+cos(π/n)) — verified numerically (10 faces, each with an exact antipodal face, opposite values pairing to 0+9…4+5, labels sitting on the surface).

Fixed — 3D drawing & fog feel

  • Strokes preview live in 3D. Fog brushes and the pencil now draw while you drag onto a live overlay canvas, instead of appearing only after the left button released.
  • Laggy fog gone. Overlay textures upload at most once per frame via a dirty flag (a live stroke used to trigger a full 1024² texture re-upload per mouse-move); committed strokes redraw the canvas incrementally.
  • The draw tool works in 3D rooms. Scene3D gained a drawings layer (pen/marker freehand, line/rect/ellipse/triangle/hexagon, polygon, and plain text notes) over the ground, in the same shared pixel stroke space and message formats as 2D — saves and live sync carry both room kinds' drawings.
  • Rich text notes anchor and project correctly in 3D rooms (camera projection instead of the 2D stage transform).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturepFiOO0M61kVrvkCFsustb+HsBKY7cG3PUtznTophB5jIOM42tyD5VLYJ9+Z58ihW
ISM8dcpL8PyLyu9F/IhrNuERJlSzhkZn1pEeIxyFLI670uDMemm15bFzJaqTga5e
ztkfOVHIV+akQraVtumEqTgEYd5zrLL3a2Nw3i/DG1d549oAXRErOZIXPdWZVmc4
of2wkrR585DYYgrZ+96pDARa0Bn4KxL6m+rJmQDsm6HjsQBgwr8r0NCdjn5sdbX+
HLeqfmNRhn4u0AFRi8iiUGkQGN7xLSD4UkrizAOOrTqWaVSwqjOQuEMuN73QebUj
Pbzc83ySKbjr/GQDLCvtIm7gVeifn5GG/OsJge/5wrPw0opTQ7Y3yrOVismrzXyH
OmvEFcAKft/oIgB3bAxioQDYg/gpRAMPyzRbTgk5a8HAa/4hJZZ4S9QhDhJlg8NI
9DnKA5mSnEq4xMHMVPvXo52tWVxXDVa13+mFtPBtnCvdVxcn+S83tjvK/SZNFY62
SmhM5rCUIH2xcm4cHRixV+M5pLxEeJ9UkryD9FKtXx8+yiPD/8Mf/zusKbE073Tb
JYcHzi6wAxef4uDWTqqvnlpVN0k7sshmRsIR15GjmZYvmcDzqClqkEOI8j+kSDsW
U9Hyh5wAUOymjISEPHT1z2k4AZg0m5I+bj7PqX3X2yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<36.0.0
Minimum Integer bits32
Grimoire 0.7.2
Release Details
UpdatedJune 26, 2026, 9:45 a.m.
Changelog

Fixed

  • File picker now works. Fixed OC.dialogs.filepicker call to use the correct 7-arg signature for Nextcloud 28+ — the picker shows a "Choose" button and the callback fires with the selected path.
  • Permanent rulers no longer snap horizontal. In 3D the ruler stored y=0 (ground height) instead of z (depth), so all rulers appeared as flat horizontal lines. Now stores both y and z so the ruler renders at the correct depth in 3D mode.
  • Render loop no longer steps dice in 2D mode. The 3D DiceRoller was stepping even in 2D mode; now only steps when mode is 3D (the DicePanel manages its own world in 2D).

Added

  • DM Control Panel. A comprehensive left-side sidebar (🛠 in the toolbar, GM only) consolidating all DM controls:
  • Scene: rename, grid type/size/line-width/opacity/style/colour, scale
  • Layers: toggle visibility for grid, drawings, fog, fog preview
  • Player permissions: per-layer create/update/delete/owner-only table
  • Players: search Nextcloud users, invite, remove
  • Session: send reminders, reveal all fog, delete scene Replaces the separate GridSettings and PermissionsPanel popovers.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignatureimsxWHI6Z92dMsB779WbE2Ak195OEfqZqyU3jwsa2PdmdGyXnS7mfRcHNfHyyITDPGDyR6cSxiiACW+/r+2H9rs9YhgB4ipaByzJszvb3VFc6jf9aZONWmKp1zSlPPbz6XTkaSG9rbmWmMWBaW7bzdsReis8e1ikQOF/e4dNSucGC1nJT/DL6EjS+UZI500GMuelkR8Xc8yC6kGUoOpWfH4AXaGQBQyQkDHA5NjGz/wquMdXRtBdHxHvVknYCkKdJm0ehtwydziIC1YsPeLWXly2W732RGm2fP1GphVjL6DMY5NMDvlbxndXyWkOKckvbeRe/liVKkvq182/FNREXGQujeTCKrGrc2Dzn2NAPmHDQ8zDyV3lsPCLej6LPXwDXkCDKdeJ8IGnSeoVKiCxgsdnBR4kOHFQIGcn1CjiEy94xVkRTjA4WZgFSbtrZQtPcFb5csT+B5rVlQA98rwUiHppqvRQssv8UV0hwlRJC5IOW2I4vR+MLllei4r55OoGJ/V1lhjlrWSMDo5aw9fbDOrRppyswI3ojxg8gUuwt0qfogYcoC6cFgAbp8ewiR4Wv7ficpjTD2NtJGH0BfajzBB63AauGn7McawRvR183x5WQwppdDogSy9IaNi3nT6DSokpkA2i4CdMNzaYJQn67fRTEp7/kjwSOgtCNXKjWC0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.1
Release Details
UpdatedJune 25, 2026, 6:48 a.m.
Changelog

Changed

  • Consolidated dice UI. Replaced the separate floating DiceTray and DiceViewport with a single DicePanel sidebar. In 2D mode it shows a mini 3D canvas with the physics dice; in 3D mode it drives the main scene's DiceRoller. One panel, mode-appropriate behavior.
  • Asset picker fixed. Rewrote AssetPicker to use Nextcloud's native OC.dialogs.filepicker and proper WebDAV URLs via generateRemoteUrl('dav'), so maps/tokens/models load with session auth. Removed the broken custom BrowseList.
  • Addons inlined. Removed the iframe-based addon system. The initiative tracker is now a built-in Vue component toggled from the topbar (⚔).
  • Nextcloud theming. All colors now use Nextcloud CSS variables (--color-primary-element, --color-main-background, --color-main-text, --color-border, etc.) so the app follows the user's light/dark theme and the admin's accent color automatically. No more hardcoded gold/blue.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturejeIzLqOzQoGxqSExMXeqdfX+bfTgrpGEYUZ9zKauEMrhqOJe18bGHuG+FuO7Q0ot
igY1d5b8AH+gapepjK5WBi4QzMd+fGhbXpB7F9kaVDTS6VlBn/BW1bUFFZwV2cYb
n0//YdE1+mA/jYczltbqnVCzj+qXICtHeGGjhRiPBG8osJ4aMVbxQzGEFyfxijJI
v8fi24m0Ja+OMSsBHpEZ9z68j+QqimKnZ9huKWmlyB3b6KSTyp3ICMnAOf6PU9Ij
KId+xEcd3A5i1oxmnxd4+xgnc+NDgzGRrkGDEXD2FJgvux7CRZomgZIGS1CnQk90
tT6bIV1HfRzlD2AHF/3h/wZKYZT5z/wsRabSnB4TvCyVZ4And3WJm/Jy7UhUmnun
kTXueO8aWkH4zI3d4OAS9AEFGoa8uq4yiY9xsYDY/RfH3CFZvQx90L2vBeSS8sp0
KPgnEpDBDN/pOogorgHdy3B+jNiAKuuQMkl/XV8RFd3mqX73b5QpxkV4NzrkPOl6
ooJ9rWtohYSCjG020QZ2y1HCbvirfxh/tY4vdqcBeYvxGginEuQHssCkgTySw/Dq
0le5Pj142rv9FIva0EPbfn8QphNV0g5n/DnwAeUwD85JvEggeOBAQ84kH7fGh7sV
ViSn4EQq6RzM5vrM6wRuN05gcZi3axYkVLWMcy7NTnQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0
Release Details
UpdatedJune 25, 2026, 5:17 a.m.
Changelog

Added

  • Token health system. DM-controlled HP bars on every token (2D bar + 3D billboard). GM double-clicks a token to edit HP; quick ±1/±5 buttons. Synced + persisted; GM-only server-side.
  • Measure modes. Transient ruler, permanent rulers (synced/persisted, right-click to delete), and movement mode (drag a token with a live ruler). Four measurement types: euclidean, chessboard, alternating-diagonal, manhattan. Per-scene ft/square scale.
  • Grid controls. Square / hex-pointy / hex-flat grids, line style (solid/dashed/dotted), colour, opacity, width, per-scene scale. Grid settings popover (⊞ in the toolbar, GM only).
  • Player permissions. Per-layer create/update/delete toggles for maps/tokens/drawings/fog, plus owner-only tokens. Enforced server-side on the room relay; GM bypasses. Permissions panel (🔒, GM only).
  • Fog shapes & preview. Rect/circle/polygon fog modes (plus brush/eraser), cut/uncut toggle, fog preview (GM sees player view), configurable fog colour.
  • Drawing modes. Pen, marker (closed freehand), line, rect, ellipse, triangle, hexagon, polygon (click-to-add, double-click to close), text. Separate stroke + fill colour pickers and width slider. Synced + persisted.
  • Rich text on canvas. In-place contentEditable editor (bold/italic/ lists/headings/emoji) replacing the prompt() dialog; HTML overlay that tracks pan/zoom.
  • Multiple maps per scene. Add maps without replacing (multi-floor / side-by-side), lock/unlock + scale each map for grid alignment. Synced + persisted.
  • 2D dice viewport. A self-contained 3D physics dice tray in a corner canvas in 2D mode, so players roll and see the result without leaving the battlemap. Rolls broadcast to the room.
  • Signed room tokens. HMAC-signed short-lived tokens; the relay verifies signature + expiry against a shared secret. Live multiplayer no longer needs DEV_TRUST.
  • Nextcloud 34 support. Dependency max-version bumped to 34.
  • Asset library. AssetController browses Nextcloud Files (folders, thumbnails, direct file serving) with a BrowseList picker.
  • Addon store verification. Catalog entries validated server-side; verified badge in the UI; warns on non-catalog installs.
  • Dice calibration. d8/d12/d20 canonical face maps (opposites sum to max+1); d10 rebuilt as a true pentagonal trapezohedron.
  • App Store-ready metadata. info.xml now includes website, repository, documentation links, and uses the SPDX licence identifier (AGPL-3.0-or-later).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Grimoire 0.7.0 (nightly)
Release Details
UpdatedJune 24, 2026, 4:40 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhN7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNjI0MTI1MjEwWhcNMzYwOTI5MTI1MjEwWjATMREwDwYD
VQQDDAhncmltb2lyZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALhB
w6iV06SaP4Antui7Nd6xVMPBbr0lH5/NSYMEaobt97npV0LP8Rs3Nr3aks7X2h84
Dpdri9+qrFPwzszbd3kQWECH1q9RBLJ3qg4p8czzqA3S3BXIXJdWC7kT9z5m3634
yCkSMp1wLQ3r4bEoD35QBnKL8zyXtRZARAu7hnCM2dzVvHVPZTPhf4OGMaKeYBFT
2DB0SJTk/VoHXBEinJegAYoQiRFt0JxBnPwni7Ajdx75OaT+U7FKkmEnfyMkZwX+
v2Aq+eCuljoeZkC9k6GdAPk1biOd3nXgIk6MCYPEavLrELHCeEWwGXqgzlsbyPHS
/vCsxDkMId1fkbCKnVhqGmqrITFjQmE7O93uEEyCxenckhPnI5xibWaJpVE9FN95
KZ6JcJA/dBNL/AJeOVotT+hCLY4Lv3GUVqtn+rnTTHz5F478c6ZwRpFTvfao4XLz
HC4JV26Rsm+AlsmHksptkuKYwDev/CqI7HyP7V9qGNaNHRGqR1HnjVa8op+Rh3mH
fwcXIGNxuZeUZ7SVTbba07ADBam/eMP6JDIlVW7HGZowNl05D+ouLVtZA+yPTgGK
9iQfgecDg6uNjBUQkEU6phTnY3pcJLXTiNxfQAMmhKpq6w/ziwYtRVbh7OyQ0SWH
7B/YxQl1Vi3EbAFo4bpYKZBCxJGAj+41l0HKXuPrAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAArWzQ1oKVxCNGd6ldbQLSDThHC7nbsqpfsnKB/3hog4tWw8x4+P0Lql
3h5sOYikpfeDQ6F0/nCJqKtHva+JysgPOn+QOKPh5E9SSp6vjmNgvtu8sU81kgAW
UgnqZB0itMV4/jTr8NBoYm+QHX17njG5YtKCE3uk9HWN8ObY8tigLf5AgHf2fQ5z
hQt53V4mXahMMefkzMxZI9IMmf6y9hca34WAqAgm/ey5dUuCv8g/5FC4c4zcVHDR
xjVJaFw43gFdcrhYC4p7IonVMKQ1LxKoGKD2ldSMyItt9jwt+9wxhs5RvyhvPRvf
LIjgSPXHKOPsAhC99HlZsyroxfoI8V0=
-----END CERTIFICATE-----
SignaturedPEoVR7qPlzxyOEbJ79/JHQO/dA5dt9U8jt+7o8obt059knNClmTBCWMtNtG0NVy
GPujt2KYif+hcUm/jdwMZXhergR4yF8QAvYU/VtrD9Sp52jpPCEjTg6Yx9St6VsS
RRnv2Dza8ahMrH+OluYBTRbwegm4E1LDrVuTmgN9ebfS7uxa8xUnhfoUiJp838jS
Oel6OoLftsKXypPAGsRcvqgys370/h4SCKDE5UpBMNlw5Q7A/Oqhm738ZEf7SmIs
5ugIdGQeoHjXpza91CW1w6Wtq+66W8auskfJMKkN0YINMK5NqVNdMvZAlzn5VQ3M
ctHn1ZlTZ3SeWsvmsc0F5vRYmopzJ6rsXgFXis3gQIIOSsr/0pCir9niGZUq+xj2
be89kPPwufVRQp+aoxl/IgBr4cbv3xfuIebsYHWfeea10O3hQLcSC0x6bWSCMPfz
XLpo0tS2pIdGs5GnUjgbna6EpV0NClkxIBoV4UqMdDPMWeTQ+am8sEJvsFEhp1hN
1bd/NGXukqeYu/KrN/tEqZ8PdawHNEF8TCB5pyU6wvcKMNaII5KxLJ98OmZdm6QU
6vOXm4eEMBnyMgRALsZMD4vN5L8JlOEbOxYqiQ2WBIu2PPUQJ9QJimdazS4yEG16
9tKokMIYL68fVfbw7LZ1IzZ/vwruifXCQaoKt5cnEiU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32