← Blog

PrintStash v0.7.0: print notifications and safer mesh scans

PrintStash v0.7.0 added webhook, Discord, Telegram, and ntfy alerts, improved thumbnails, guarded large-mesh scans, and fixed G-code metadata.

release

PrintStash v0.7.0 added opt-in notifications for print and printer events. It also changed how dense meshes are handled, improved thumbnails, and fixed several G-code and self-hosted download problems.

Notifications are off until configured

Channels could subscribe to completed, failed, and cancelled prints plus printers going offline. Generic JSON webhooks, Discord, Telegram, and ntfy were supported, with event and printer filters per channel.

Events were queued in the same database transaction as the state change and sent by a background dispatcher. Failed delivery used exponential backoff. The UI showed recent attempts and offered a Test action.

Delivery is at least once, so a retried webhook may arrive more than once. Current receivers should deduplicate the Idempotency-Key header.

Messages included a source-model link when a safe http or https URL was available. Telegram values were escaped for HTML, and Unicode ntfy titles were encoded correctly.

Dense meshes no longer take down a scan

Before loading STL, PLY, OBJ, or 3MF geometry, PrintStash estimated the triangle count. Files above VAULT_MESH_MAX_RENDER_TRIANGLES, which defaulted to 2,000,000, stayed indexed but skipped generated geometry and thumbnails. A 3MF could keep its embedded preview.

STL and 3MF downloads also moved to streaming from disk, and interrupted scans reached a terminal state instead of remaining stuck.

Better thumbnails and orientation

The thumbnail renderer added crease-aware smooth shading and a Z-up three-quarter camera. Organic models appeared less faceted, and models designed upright no longer lay on their side with the floor grid through them.

G-code and slicer fixes

OrcaSlicer filament length stopped being multiplied by 1,000. Bed temperature parsing recognized OrcaSlicer and Bambu Studio’s hot_plate_temp, while PrusaSlicer fill_density became available as infill metadata.

Open in slicer began using a short-lived, file-scoped download token in the URL so OrcaSlicer and Bambu Studio could fetch a protected file and still recognize its extension. macOS bambustudioopen:// handling remained supported.

ZIP imports also started preserving their folder structure as nested collections.

Two additive migrations created the notification tables and the disabled-by-default feature flag. The release added VAULT_MESH_MAX_RENDER_TRIANGLES and VAULT_SLICER_DOWNLOAD_TOKEN_EXPIRE_MINUTES configuration.

Read the current notification guide and large-mesh write-up for behavior added after this release.

#24 tracks the dense-mesh failure, and #27 tracks the self-hosted slicer download fix.