v1.2.0 — schema validation, Cmd+K palette, in-app Help, scheduled sends
Downloads
| Platform | File | Size |
|---|---|---|
| 🍎 macOS (Intel + Apple Silicon universal) | AMQPush_1.2.0_universal.dmg |
10.6 MB |
| 🪟 Windows x64 — NSIS installer | AMQPush_1.2.0_x64-setup.exe |
3.5 MB |
| 🪟 Windows x64 — MSI installer | AMQPush_1.2.0_x64_en-US.msi |
5.2 MB |
| 🐧 Linux x64 — Debian/Ubuntu | AMQPush_1.2.0_amd64.deb |
6.7 MB |
| 🐧 Linux x64 — RPM (Fedora/RHEL) | AMQPush-1.2.0-1.x86_64.rpm |
6.7 MB |
| 🐧 Linux x64 — portable | AMQPush_1.2.0_amd64.AppImage |
86 MB |
Binaries are not code-signed. macOS Gatekeeper / Windows SmartScreen will warn on first launch.
- macOS: right-click
AMQPush.app→ Open → confirm.- Windows: click "More info" → "Run anyway" on the SmartScreen dialog.
- Linux (
.AppImage):chmod +x AMQPush_*.AppImage && ./AMQPush_*.AppImage.
[1.2.0] — 2026-05-10
Highlights
- Schema-validated bodies — paste or upload a JSON Schema or XSD into the new Body schema modal; AMQPush validates every send against it (ajv for JSON, lazy-loaded
xmllint-wasmfor XML) and gates the Send button on the result. - Cmd+K command palette — fuzzy-searchable index of every view, action, profile and theme. Keyboard-only navigation, sticky category headers, kbd-shortcut hints inline.
- In-app Help —
?icon (and bare-key?shortcut) opens a 17-section guide with sidebar nav, full-text search, and copy-pasteable examples for every feature. - Browser purge —
Purgebutton in the queue browser wipes a queue via Artemis management RPC, with a confirm modal showing the broker-reported message count. - Scheduled & delayed sends — first-send delay with a cancellable countdown; combine with Batch for scheduled bursts.
- Pre-script tab — small JS sandbox runs before each send (
ctx.set/ctx.get/ctx.iter), perfect for counters, derived IDs, randomized routing keys. - Update checker — silent GitHub Releases poll on startup; new versions surface as a non-intrusive header pill with a "Skip this version" option.
Added — Send view
Body validation (schema modal)
- New shield-pill in the Body sub-toolbar opens a per-language schema editor — JSON Schema for JSON bodies, XSD for XML.
- Modal supports paste and file upload (
.json/.xsd/.xml); Clear / Close buttons; Esc to dismiss. - JSON Schema validation runs synchronously via
ajv(Draft-07 + 2020-12); errors show withinstancePath(e.g./order/lines/0/qty). - XSD validation runs asynchronously via
xmllint-wasm(libxml2 in WebAssembly, ~500 KB) — lazy-loaded only when both an XSD and a non-empty body exist, so startup is unaffected. - Both schemas are saved per-template under
body_schema_json/body_schema_xsd. Older templates with the legacybody_schemafield migrate transparently into the JSON slot. - Status pill states: grey "Schema…" (none), blue "schema" (configured / waiting), green "schema ✓", red "schema ✗ (N)", spinner during async XSD validation.
Variables
- New Variables tab — user-defined
{{name}}substitutions with enable toggle, key, value (chains other tokens), description. - Built-in token catalogue (
{{uuid}},{{timestamp}},{{date}},{{now}},{{random}},{{int}}) is always available in Body / Properties without registration. - Body editor autocomplete pops up on
{{— surfaces user vars first, then built-ins, with descriptions. - Auto-detect of the active subtype now keeps a manual JSON / XML pick when the editor is empty (previously it snapped back to
text).
Pre-script
- New Pre-script tab with a CodeMirror-edited JS snippet that runs before every send.
- API:
ctx.set(key, value),ctx.get(key),ctx.iter(1-based index in Batch loops). - Runs in a sandboxed evaluator — no DOM, no
fetch, pure computation.
Schedule
- New Schedule toggle — delays the first send by N seconds (independent of the Batch loop's per-iteration delay).
- Countdown is shown inside the Send button; Cancel aborts the wait via
AbortControllerso nothing is sent.
Added — Browser view
- Purge queue (red button on the peek pane header) — calls Artemis
removeAllMessagesvia the persistent management channel. - Confirm modal shows the broker-reported message count and a destructive-action warning before executing.
- After purge the queue list and peek pane refresh automatically.
Added — Logs view
- Sortable table — Time / Level / Message columns, click headers to flip direction.
- Date column added (legacy
HH:MM:SS-only entries migrate into a synthesised today-stamp on load). - Date-preset filter — All / Today / Last hour / Last 24h / Last 7 days.
- Per-column substring search; level filter dropdown (info / ok / err).
- Pause vs Follow are now two distinct controls with clear tooltips:
- Pause freezes the table (snapshot mode); new events keep arriving in the buffer.
- Follow keeps the view scrolled to the newest row; turn off when scrolling up to read older entries.
- Export dropdown — JSON / CSV /
.logplain-text; export respects the current filter.
Added — Command Palette (Cmd+K)
- Fuzzy subsequence matching with word-start / consecutive-match bonuses ("gss" matches "Go-to Send" better than "Logs Stats Subscriber").
- Categorised list (Navigation / Actions / Profiles / Theme) with sticky headers.
- Up / Down skip disabled rows; Enter runs; Esc closes.
- Surfaces every reachable action: switch view, connect / disconnect, switch profile, change theme, send now, clear logs, open Help, show update notes.
Added — Help modal
- Opens via the new
?icon in the header (or the bare-key?shortcut, or Cmd+K → "Open Help"). - Left pane: searchable section navigation; right pane: full content; Esc closes.
- 17 sections covering Getting Started, Connection, Send (Body / Variables / Pre-script / Batch & Schedule / Reply / Templates / Body validation), Receive, Browser, History, Stats, Logs, Keyboard shortcuts, Tips & Tricks, Files & Storage.
- All shortcuts, file paths and JSON Schema / XSD examples documented in-app — no need to leave the window.
Added — Update checker
- On startup AMQPush hits
https://api.github.com/repos/DEADover/AMQPush/releases/latestand compares against the running version. - New version → blue header pill
vX.Y.Z; click opens a release-notes modal with Open on GitHub and Skip this version. - Dismissed versions persist in
localStorage.amqpush.dismissedUpdateVersionso the same release won't re-prompt. - Falls through silently on offline / rate-limit; no telemetry, no signing keys, no auto-installer (manual download from GitHub).
Added — UI primitives & polish
- New shared components:
CommandPalette,HelpModal,Callout,CopyButton(with success animation),Dropdown/DropdownItem/DropdownSection/DropdownFooter,SectionLabel,SegmentedControl,Toggle,ViewTopBar. - Connection view split into General / Advanced tabs with an Activity log pane.
- Sidebar collapses smoothly via CSS (single render tree, no layout thrash).
- Theme dropdown replaces the cycle-through-themes button (Light / Dark / Use system preference shown explicitly).
- All long property keys in the Help modal break cleanly inside their column — no text overlap on entries like
amqpush.dismissedUpdateVersion.
Added — macOS polish
Icon at runtime
- Custom
dock_iconmodule setsNSApplication.applicationIconImagefrom the embeddedicon.pngat startup, so dev-mode runs (raw binary, no.appbundle) show the AMQPush logo in the Dock and Cmd-Tab instead of the generic blue-folder placeholder. - The same image is registered under the
NSApplicationIconnamed-image cache, so the standard About panel shows the logo too.
About dialog with build date
build.rsstampsAMQPUSH_BUILD_DATE(formatddMMyyyy) into the binary at compile time.- Setup hook installs a custom Tauri menu whose About item uses an
AboutMetadatawithshort_versionset to the build date — the parenthesised slot now shows(10052026)instead of repeating the version.
Fixed
- Send view's Raw subtype dropdown now sticks when picked on an empty editor (previously the auto-detect would immediately revert to
text). - Variable substitution inside JSON bodies is now schema-validated against the template form —
{"id": "{{uuid}}"}reports as valid even though the unsubstituted token wouldn't satisfy a strict parser. - Auto-detect of the Raw subtype no longer toggles the type while a manual pick is in effect (only releases on explicit clear after content existed).
Backend
- New
dock_icon.rsmodule (~30 LoC) usingobjc2+objc2-app-kit+objc2-foundation(already pulled in transitively by Tauri — zero extra compile cost). - New
notif_drainer.rs— silent consumer ofactivemq.notificationsto prevent unrouted notifications from filling the DLQ on Artemis brokers withsend-to-dla-on-no-routeenabled. - New
purge_queueTauri command using the persistentManagementChannelpattern (lazy-open, drop on error). AboutMetadataBuilderplumbed through a custom macOS menu inlib.rs::install_macos_menu— replicates Tauri's default app menu with our injected metadata.build.rsextended to emitAMQPUSH_BUILD_DATEviachrono(added under[build-dependencies],default-features = false,clockfeature only).Templatestruct (Rust + TS) gainedbody_schema_json/body_schema_xsdwith#[serde(default)]; legacybody_schemaretained for backward compat.LogEntrymigrated fromts: "HH:MM:SS"string totsMs: numberfor date-aware filtering / sorting; loader migrates legacy entries.