Skip to content

v1.2.0 — schema validation, Cmd+K palette, in-app Help, scheduled sends

Choose a tag to compare

@github-actions github-actions released this 10 May 13:21

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-wasm for 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 purgePurge button 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 with instancePath (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 legacy body_schema field 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 AbortController so nothing is sent.

Added — Browser view

  • Purge queue (red button on the peek pane header) — calls Artemis removeAllMessages via 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 / .log plain-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/latest and 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.dismissedUpdateVersion so 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_icon module sets NSApplication.applicationIconImage from the embedded icon.png at startup, so dev-mode runs (raw binary, no .app bundle) show the AMQPush logo in the Dock and Cmd-Tab instead of the generic blue-folder placeholder.
  • The same image is registered under the NSApplicationIcon named-image cache, so the standard About panel shows the logo too.

About dialog with build date

  • build.rs stamps AMQPUSH_BUILD_DATE (format ddMMyyyy) into the binary at compile time.
  • Setup hook installs a custom Tauri menu whose About item uses an AboutMetadata with short_version set 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.rs module (~30 LoC) using objc2 + objc2-app-kit + objc2-foundation (already pulled in transitively by Tauri — zero extra compile cost).
  • New notif_drainer.rs — silent consumer of activemq.notifications to prevent unrouted notifications from filling the DLQ on Artemis brokers with send-to-dla-on-no-route enabled.
  • New purge_queue Tauri command using the persistent ManagementChannel pattern (lazy-open, drop on error).
  • AboutMetadataBuilder plumbed through a custom macOS menu in lib.rs::install_macos_menu — replicates Tauri's default app menu with our injected metadata.
  • build.rs extended to emit AMQPUSH_BUILD_DATE via chrono (added under [build-dependencies], default-features = false, clock feature only).
  • Template struct (Rust + TS) gained body_schema_json / body_schema_xsd with #[serde(default)]; legacy body_schema retained for backward compat.
  • LogEntry migrated from ts: "HH:MM:SS" string to tsMs: number for date-aware filtering / sorting; loader migrates legacy entries.