v1.3.0 — CSV bulk send, broker selectors, DLQ tools, workspaces, faker
Downloads
| Platform | File | Size |
|---|---|---|
| 🍎 macOS (Intel + Apple Silicon universal) | AMQPush_1.3.0_universal.dmg |
10.4 MB |
| 🪟 Windows x64 — NSIS installer | AMQPush_1.3.0_x64-setup.exe |
3.5 MB |
| 🪟 Windows x64 — MSI installer | AMQPush_1.3.0_x64_en-US.msi |
5.2 MB |
| 🐧 Linux x64 — Debian/Ubuntu | AMQPush_1.3.0_amd64.deb |
6.5 MB |
| 🐧 Linux x64 — RPM (Fedora/RHEL) | AMQPush-1.3.0-1.x86_64.rpm |
6.5 MB |
| 🐧 Linux x64 — portable | AMQPush_1.3.0_amd64.AppImage |
82 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.3.0] — 2026-05-10
Highlights
- CSV-driven bulk send — load a spreadsheet, each row becomes a message. Column headers turn into
{{column_name}}tokens that resolve per-row in Body and Properties; live progress, abort, and a dry-run preview let you sanity-check substitutions before kicking off a thousand-message batch. - Broker-side selectors in Subscribe — JMS-style filter expression (
priority > 5 AND application_property:type = 'order') attached as an AMQP 1.0 source filter viaapache.org:selector-filter:string. The broker filters; you only pay the wire cost for messages you care about. - DLQ inspector + requeue — Browser detects dead-letter queues by name (
DLQ,*.DLQ,_dlq,dead, etc.) and surfaces a banner plus a green Requeue all button. Each message is republished to its_AMQ_ORIG_ADDRESS(Artemis) /originalDestination(Classic) with internal markers stripped so the broker doesn't immediately re-DLQ the copy. Per-message Requeue → <origin> action on the details pane too. - Profile workspaces — group your saved brokers under labels like
Dev/Staging/Prod(or per service / project). Workspaces drive sectioned headers in the global profile picker and the Cmd+K palette so a setup with 20+ profiles stops feeling unwieldy. - Faker tokens in Variables — 35+ new built-in tokens for realistic-looking test data:
{{faker.email}},{{faker.fullName}},{{faker.creditCardNumber}},{{faker.iban}},{{faker.streetAddress}},{{faker.lorem(N)}}, and many more. Powered by@faker-js/faker.
Added — Send view
CSV bulk send (new tab)
- New CSV tab in the Send view with a dropzone / file picker for any well-formed CSV (parsed via
papaparse, RFC 4180-compliant). - Header row drives the column-token catalogue: clicking a
{{column_name}}chip copies it to the clipboard for paste into Body / Properties. - Preview table shows the first 5 rows with click-to-select; the highlighted row drives the Dry-run preview that shows exactly how the Body resolves after substitution (so you spot a mistyped column before you blast 10 000 messages out).
- Send N messages action loops over every row, runs Pre-script per iteration with column values available via
ctx.get("col_name"), applies token substitution to Body and every Property value, sends. Live progress bar with ok / fail counts. - Cancel mid-batch via an
AbortController— the loop exits cleanly at the next iteration boundary. - Configurable per-row delay (
csv_delay), useful for pacing against rate-limited consumers. - Schema validation is intentionally skipped in CSV mode — the tab is optimised for throughput; validate on a single representative row in the regular Send view first if you need a guard.
Added — Variables
- Faker token namespace —
{{faker.<path>}}and{{faker.<path>(<arg>)}}covering people (firstName / lastName / fullName / jobTitle / gender), internet (email / username / url / domain / userAgent / password / ip / ipv6 / macAddress / phone), address (streetAddress / city / state / country / countryCode / zipCode / latitude / longitude), finance (creditCardNumber / creditCardCvv / creditCardExpiry / iban / bic / currency / amount), commerce (companyName / productName / productPrice / department), and text (lorem / loremParagraph / word). - All faker tokens surface in the existing autocompletion dropdown and the Variables tab "Built-in presets" list with descriptions.
- Auto-detect of the Raw subtype now keeps a manual JSON / XML pick when the editor is empty (regression noticed in 1.2.0): the dropdown sticks until you actually clear non-empty content.
Added — Subscribe view
- New Selector input — toggleable input below the queue picker accepts a JMS-style filter expression. Sent to
start_subscriberas the newselectorparameter; the Rust side packages it into an AMQP source filter set with descriptorapache.org:selector-filter:string. - Active-subscription chips now show a small filter-icon badge when a selector is set; the tooltip surfaces the actual selector text so you can confirm what's running.
- Compatible with Artemis, ActiveMQ Classic, Qpid Broker-J. Brokers that don't support the filter typically reject the attach with a clear error message we surface in the log.
Added — Browser view (DLQ tooling)
- DLQ detection — the peek pane recognises queues named
DLQ,*.DLQ,*_dlq,ActiveMQ.DLQ,ExpiryQueue, or anything containing "dlq" / "dead" (case-insensitive). - DLQ banner appears under the peek-pane header explaining how requeue works and which property carries the original destination on the user's broker.
- Requeue all button (next to Purge) — iterates the peeked messages, looks up
_AMQ_ORIG_ADDRESS/_AMQ_ORIG_QUEUE(Artemis) ororiginalDestination/JMSXOriginalDestination(Classic), republishes each to its origin via the existingsend_messagecommand. Internal markers are stripped from the republished copy so the broker doesn't re-DLQ it on first failure. - Requeue → <origin> chip on the per-message details pane for selective requeue.
- Progress counter (
Requeue 7/24) replaces the button label while a bulk requeue is in flight.
Added — Connection / profiles
- New Workspace field on every profile (free-form text, datalist autocomplete from existing labels). Empty →
Default. - The header profile picker groups profiles under
<DropdownSection>headers per workspace; user-named groups float to the top,Defaultalways last. - The Cmd+K palette uses workspace as the category for profile-switch actions:
Profiles · Dev,Profiles · Staging, etc., so fuzzy search likedev pmatches Dev profiles before others. - Backward-compatible: legacy profiles without a
workspacekey are loaded asDefaultvia Rust#[serde(default)].
Backend
- New direct dep
serde_amqp = "0.14"(already pulled in transitively byfe2o3-amqp-types, zero compile cost) — used to constructDescribed<Value>+Descriptorfor the JMS-selector filter set. - New direct deps on the frontend:
@faker-js/faker(English locale, ~700 KB) andpapaparse(RFC 4180 CSV parser, ~30 KB). subscriber::startsignature gained aselector: Stringparameter;Receiver::builder().source(Source { filter, ... }).attach(...)is used when the selector is non-empty, falling back to the simplerReceiver::attachpath otherwise.start_subscriberTauri command takes an optionalselector: Option<String>(backward compat: callers that omit it get no-filter behaviour).Profilestruct (Rust + TS) gained aworkspacefield with#[serde(default = "default_workspace")]so olderprofiles.jsonfiles load asDefault.
Fixed
- Auto-detect of the Send view's Raw subtype no longer reverts the user's manual JSON / XML pick when they clear the editor before content arrives — picking a type in an empty buffer now sticks.