Repository navigation
Releases: fact0real/yaam
Release list
YAAM 1.37.37: Upload privacy safeguards, active station filtering, and platform stability fixes
YAAM 1.37.37 introduces positive ADIF field allowlists for online logbook uploads, granular Data Safety privacy controls, active station callsign filtering, and extensive platform and DSP stability fixes.
Highlights
- Positive Upload Allowlist (Patch 61): Uploads to QRZ, eQSL, Club Log, HRDLog, HamQTH, Wavelog, and LoTW now use strict per-service allowlists. The other station's personal data (email, address, notes, biography, precise coordinates) and your own street address/exact coordinates are excluded by default.
- Three Granular Privacy Opt-Ins: Added configurable switches under Settings → Data Safety:
- Upload other station's name and QTH (default: OFF).
- Upload contact details and precise locations (default: OFF).
- Upload comments and QSL messages (default: OFF; internal tags are always stripped).
- Active Station Callsign Boundary: Online synchronization (QSL Hub Sync All / Selected, Wavelog full sync) now uploads only QSOs matching the active station's callsign. Historical or imported QSOs under other callsigns remain safe in the local log and are cleanly skipped with reported counts.
- Wavelog Connection & Rights Test: New non-mutating
check_authtest distinguishes read-only from read/write API keys, warning before upload attempts fail. Modern endpoints (api/qso,get_contacts_adif,station_info) are now used. - Strict TQSL Verification: Only exit code 0 marks an entire batch as uploaded. Diagnostic codes 8, 9, and 14 leave QSOs unmarked and present TQSL diagnostic messages for operator review. Temporary files are signed inside an isolated
0700sandbox directory. - Digital Suite & DSP Improvements:
- Standardized PSK31 Varicode to the 128-character G3PLX specification, eliminating duplicate codes.
- Corrected Hellschreiber fractional sample accumulator to achieve exact 245 pixels/s reception at 44.1 kHz and 48 kHz.
- Buffered streaming RTTY/PSK characters to decode callsigns on complete word boundaries.
- Inhibited unconfigured digital audio playback before PTT keying to prevent invalid RF transmission.
- Applied calibrated +0.66 s DT timing offset to FT8 decodes and normalized weather queries to coarse 4-character grid locators.
- Radio & CW Safety:
- 200 ms connection loss detection during CW transmission immediately cancels ON AIR status and Auto-CQ.
- Connected
rigctldinstances default to the shared client without requiring Operator Desk to be opened first.
- Hardening & Security:
- Removed
get-task-allowdebugger entitlement from Release builds and disabled base entitlement injection. - Documented full entitlement inventory in
DEVELOPER_DOCUMENTATION.md. - Replaced silent ADIF auto-save failures (
try?) with surfaced I/O error reporting and serialized disk writes. - Required explicit in-band frequencies for contest quick-logging.
- Removed legacy demonstration callsigns and seed entries from club memberships, call history, and SCP engines.
- Removed
Verification & Regressions
- Full upload privacy suite (19 allowlist + 52 switch + 100 sync regression checks) passed.
- Digital receive review, CW connection loss, FT8 timing calibration, and workspace review regressions passed.
- Release entitlements regression passed with code-signed sandbox validation.
- Native arm64 macOS Release build succeeded with 0 compiler warnings/errors.
Acknowledgments
Special thanks to EA3JIC for patch 61, regression suites, and detailed technical review notes.
v1.17.4 (Build 62)
Changelog
All notable changes to YAAM are documented in this file.
YAAM is a macOS-native Amateur Radio logbook manager focused on protected local storage, ADIF interoperability, operating workflow, QSL confirmation intelligence, award progress, and station-aware tools.
[1.17.4] - 2026-08-21
Highlights
This release improves day-to-day usability of large logbooks. Log Table scrolling is substantially lighter, filter results follow a predictable UTC date order, internal record numbers no longer clutter the table, and the Help experience is easier to search and navigate.
Improved
Log Table Performance
- Reworked Log Table scrolling to use a single lazy two-axis table surface.
- Removed per-row geometry calculations previously used to keep the left control area pinned.
- Reduced rendering work for large Master Logs, improving vertical and horizontal scrolling responsiveness.
- Kept the table header visible while scrolling.
- Replaced the wide leading row-number area with a compact selection and delete control area.
- Preserved all internal record identifiers in the protected database; only their visual display was removed.
Leaderboard Performance
- Switched major Leaderboard content stacks to lazy rendering.
- Limited rank-chart rendering to the latest 90 visible days.
- Reduced chart point and layout work when a station has a long rank-history archive.
- Preserved full stored history while optimizing only the visual presentation.
Filtering Workflow
- Applying filters now automatically orders matching QSOs by
QSO_DATEandTIME_ONin descending UTC order. - Added visible guidance in the Filter window so operators understand that filtered results are shown newest first.
- Filtered results remain non-destructive: applying or resetting filters never modifies QSOs, confirmations, enrichment data, or database records.
Country and Entity Display
- Improved visual distinction between Greece and Crete.
- Crete is now represented as
🇬🇷◈, retaining its Greek association while clearly identifying it as a distinct operating/entity label in YAAM views.
Help Center
- Added Help search for faster access to relevant operating guidance.
- Added a dedicated Log Table & Filters guide covering:
- Large-log browsing
- Search and filtering
- UTC date ordering
- Column visibility
- Hidden-versus-deleted data behavior
- Confirmation filtering
- Persistent station-specific table layouts
- Internal database identifiers and why they are not shown in the table
- Expanded guidance around safer high-volume log review and column management.
Changed
- Removed the visible database row-number column from Log Table.
- Updated context-menu language from row-number-based actions to QSO-based actions.
- Reduced the width of the leading table control column.
- Retained row selection and deletion actions through compact icon controls with tooltips.
Fixed
- Fixed visual ambiguity where Crete and Greece used the same flag display.
- Fixed filtered result ordering being dependent on the previously active table sort.
- Addressed unnecessary layout cost that could make large log tables feel sluggish.
- Addressed unnecessary chart rendering cost that could make Leaderboard scrolling less responsive.
Current Feature Set
Logbook and Data Safety
- Protected SQLite-backed Master Log storage.
- Station-profile-aware logbooks for home, portable, club, remote, and historical operations.
- ADIF import, export, conversion, filtering, and CSV/Excel output.
- SmartSDR / SDR-Control log import support.
- Duplicate detection, review, and protected import workflow.
- Automatic restore points and database safety tooling.
- Hidden-column policy that keeps operational fields stored without overwhelming the daily table view.
QSL and Confirmation Intelligence
- QRZ Logbook confirmation synchronization.
- LoTW confirmation synchronization.
- Incremental and full-history confirmation rebuild workflows.
- Confirmation reconciliation for identifying matched, unmatched, ambiguous, and missing records.
- QSL card generation and mail workflows.
- Batch QSL-card sending for confirmed QSOs.
- Reminder workflows for recent unconfirmed QSOs.
- QRZ incoming confirmation-request review and missing-QSO follow-up email drafting.
QRZ, Awards, and Rankings
- QRZ login workflow with protected session handling.
- QRZ award loading with achieved awards, progress, and achievement display.
- Award cards with completion states and progress indicators.
- QRZ global rank enrichment for QSO, Bands, and DXCC rank metrics.
- Rival comparison and tracked callsign history.
- Daily rank-history refresh and configurable rank backfill workflow.
- Rank momentum feedback showing relative improvement or lost ground against tracked rivals.
- QRZ rank congratulation and QSL-request email template support.
Operator Desk
- Quick Log workflow with callsign lookup and duplicate awareness.
- QRZ and HAMQTH enrichment support.
- Worked history, same-band/mode context, and confirmation awareness.
- DX Cluster connection and spot intelligence.
- Rig control through Hamlib
rigctld. - WSJT-X and JTDX UDP integration.
- Contest Workspace with serial tracking, duplicate awareness, ADIF contest fields, and Cabrillo export.
- Portable activity support.
- Cloud and mobile companion features.
Contest, DX, and Propagation
- Contest calendar with cached schedule support.
- Contest-interest settings and relevance highlighting.
- DXpedition watch with active-spot awareness.
- 6m / Magic Band monitoring.
- PSK Reporter and propagation context.
- Middle East and Iran-adjacent propagation awareness.
- VHF and E-skip propagation display.
Statistics and Planning
- Total, confirmed, and unconfirmed QSO statistics.
- DXCC and confirmed-DXCC totals.
- Worked and confirmed 4-character Maidenhead grid totals.
- Band and country breakdowns.
- Unconfirmed DXCC analysis.
- Award and operating-progress summaries.
Upgrade Notes
- Existing Master Log data remains intact.
- Internal QSO identifiers are still retained in the database even though they are no longer displayed in Log Table.
- Existing column preferences remain station-specific.
- After upgrading, open Help > Log Table & Filters for the updated table, filtering, and column-visibility guide.
- For a complete confirmation refresh after changing station identity or credentials, use the Full QSL History workflow.
Build Information
- Version:
1.17.4 - Build:
62 - Platform: macOS
v1.7.0: YAAM Confirmation Sync and Feature Updates
Recent Development Update
Added
- QRZ Logbook confirmation sync alongside LoTW confirmation sync.
- QRZ confirmed QSO parsing from QRZ Logbook API ADIF responses.
- DX Advisor “Callsigns With No Confirmed QSOs” follow-up workflow.
- One-click QRZ email lookup from DX Advisor.
- Multi-QSO confirmation request emails with full unconfirmed QSO details.
- Bulk QSL email sending with recipient selection.
- Duplicate email warning based on previous email history.
APP_YAAM_LAST_EMAILtable column showing last email date, status, and subject.- SDR-Control
SmartSDR.smartsdrlogdirect import. - Periodic SDR-Control sync from Settings.
- External ADIF periodic sync for WSJT-X, JTDX, GridTracker, Log4OM, N1MM, and similar apps.
- DX Advisor propagation panels for HF, VHF, solar indices, and geomagnetic data.
- Audible success/failure feedback for major actions.
Changed
- Moved SMTP/email settings from Log Table Viewer to
Settings > Email. - Removed SMTP button from the Log Table toolbar.
- Improved QRZ confirmation sync with a separate QRZ sync timestamp.
- Improved QRZ API parsing for escaped ADIF payloads.
- Improved email templates for confirmation requests.
- Improved default Log Table visibility by hiding low-value columns.
- Moved
MY_*andAPP_LOTW_*columns behind optional display controls. - Bulk email now plays one final result sound instead of one sound per recipient.
Fixed
- Fixed QRZ confirmations not being applied to table rows.
- Fixed QRZ API responses being misread as errors when ADIF was HTML-escaped.
- Fixed QRZ email decoding from encoded
qmailvalues. - Fixed QRZ email values containing trailing
mailto. - Fixed missing VHF propagation display values from HamQSL.
- Fixed repeated email sends without warning.
- Fixed SDR-Control iCloud permission and plist parsing issues.
- Fixed background-thread publishing warnings during model updates.
Technical
- Added centralized activity sound handling in
AppState. - Added QRZ Logbook API response parser.
- Added QRZ/LoTW confirmation cache updates.
- Added persisted email history storage.
- Added SDR-Control binary plist parser and ADIF field mapper.
- Added periodic sync timers for SDR-Control and External ADIF.
v1.3.0 — Master Logbook Engine & Targeted Enrichment
YAAM (Yet Another ADIF Manager) has evolved from a lightweight ADIF viewer into a centralized Master Logbook Database Engine. This release introduces targeted multi-row enrichment, dual-cloud QSL synchronization with LoTW & QRZ, full historical log downloads, and crucial network sandbox fixes on macOS.
🌟 Key Highlights
- Master Logbook Workspace Architecture: Automatically loads your callsign-specific master database on launch, isolating your primary logbook from temporary "Guest" logs.
- Smart Merge & Deduplication: Prevents duplicate QSO records using a 5-part composite unique key (
CALL + QSO_DATE + TIME + BAND + MODE). - Targeted Enrichment (Max 19 Rows): Select specific rows via checkboxes (capped at 19 rows per batch), enrich individual callsigns from the context menu, or cancel in-flight tasks instantly.
- Dual Cloud QSL Sync: Simultaneously fetches incremental QSL confirmations from both ARRL LoTW and QRZ Logbook API.
- Full Cloud History Importer: Downloads 100% of your historical QSOs from LoTW and seamlessly merges them into your Master Logbook.
- macOS Sandbox SMTP Fix: Resolves
curl Error 6 (Could not resolve host)inside the macOS Sandbox, sanitizes Google App Passwords, and provides a live debug terminal. - Direct QRZ Profile Link (
QRZ_URL): Dynamically generates clickable profile links (https://www.qrz.com/db/CALLSIGN) that open directly in your default browser.
🛠️ Technical Changelog
🏗️ 1. Core Architecture & Persistence
- Multi-Profile Support: Isolated database storage located at
Application Support/YAAM/MasterLogs/MasterLogbook_\(callsign).adi. - Context-Aware Auto-Save: Implemented
autoSaveActiveWorkspacefor background persistence of cell edits, row deletions, and enrichment flags directly to the active file workspace. - Import Strategy Modal: Added a native
NSAlertprompt upon opening new files offering "Merge into Master Log" or "Open as Guest Log".
🪄 2. Targeted Enrichment Engine
- Delta Enrichment (
APP_YAAM_ENRICHED): Flags processed records to skip re-fetching previously enriched callsigns, accelerating batch processing. - Multi-Row Selection Limit: Enforces a strict selection limit of 19 rows per batch with a native alert warning if exceeded.
- Task Cancellation: Integrated
stopEnrichmentusing Swift Concurrency'sTask.cancel()for instant user-initiated cancellation. - Auto-Deselect: Automatically clears row checkmarks once enrichment completes to optimize UX.
- Right-Click Context Menu: Added
🪄 Enrich Callsign 'CALL'to enrich single callsigns directly from the table grid.
🔄 3. Cloud Synchronization & APIs
- QRZ Logbook API Integration: Fully implemented HTTP FETCH against QRZ's official Logbook API (
https://logbook.qrz.com/api) withMODIFIEDSINCEtimestamping. - Flexible Matching Engine: Enhanced
cleanDateandcleanBandnormalizers to reliably match mismatched ADIF fields between local records and server reports. - Full Cloud Importer: Rebuilt
fetchAndManageCloudLogbookusingqso_qsosince=1900-01-01to pull 100% of historical QSOs from LoTW, complete with confirmation dialogs.
📧 4. Sandbox Networking & SMTP
- Sandbox Environment Injection: Injected
ProcessInfo.processInfo.environmentinto the child/usr/bin/curlprocess to grant DNS resolution access within the macOS Sandbox. - App Password Sanitizer: Automatically strips white space characters from 16-character Google App Passwords.
- Sender Callsign Sanitization: Corrected the callsign resolver algorithm to prevent email addresses from populating template callsign placeholders.
- Inline Debug Terminal: Added a live terminal log view to inspect connection handshakes and server response codes in case of SMTP failures.
🎨 5. UI/UX Enhancements
- Deep Link Renderer: Dedicated rendering for the
QRZ_URLcolumn featuring a Safari icon, underline styling, and native browser launch viaNSWorkspace.shared.open. - Dynamic Row Highlighting: Selected rows are highlighted with a distinct accent background color.
- Status Bar Selection Counter: Real-time feedback in the bottom status bar displaying
Selected: X / 19 Max.
🐛 Bug Fixes
- 🔴 FIXED: Log data loss occurring after quitting and reopening the application.
- 🔴 FIXED:
curl Error 6 (Could not resolve host)during SMTP email dispatch inside the macOS Sandbox. - 🔴 FIXED: Station email address overriding callsign placeholders in email templates.
- 🔴 FIXED:
Sync QSLsbutton failing to update QRZ confirmations and displaying inaccurate confirmed counts. - 🔴 FIXED:
Cloud Logbookbutton restricting downloads to only recent 30 QSLs rather than fetching full history.
v1.2.0 — Authenticated QRZ Email Scraper, Bulk Log Enrichment & Native SMTP Client 🚀
What's New in YAAM v1.2.0 🚀
Version 1.2.0 is one of our biggest updates yet! This release introduces Automated Bulk Log Enrichment, Native In-App SMTP Email Dispatching, and a breakthrough WebKit-based QRZ Email Scraper that seamlessly bypasses Cloudflare protections and dynamic DOM anti-scraping mechanisms.
✨ Key Highlights & Features
📧 1. Authenticated QRZ Email Scraper & Cloudflare Decryptor
- Dynamic
#qemEvent Triggering: Automatically interacts with QRZ’s protected<span id="qem">element by executingshowqem()and dispatching synthetic DOM mouseover/click events to reveal hidden emails. - Native WebKit Integration (
WKWebView): Runs an in-memory macOS WebKit engine that shares cookies (WKWebsiteDataStore.default()), bypassing Cloudflare TLS fingerprinting, CAPTCHA challenges, and anti-bot blocks. - Cloudflare Email XOR Decryptor: Built-in algorithm to decode hex-encrypted email attributes (
data-cfemailandemail-protection#HEX) on profiles using Cloudflare obfuscation. - MFA / 2FA Login Support: Embedded native browser sheet allowing operators to securely log in to QRZ.com with full Multi-Factor Authentication support.
📊 2. Bulk Log Enrichment Engine
- One-Click Data Enrichment: The new 🪄 Enrich Data toolbar button automatically fetches global standings and emails for all unique callsigns in your loaded ADIF logbook.
- Real-Time QRZ Ranks: Dynamically appends and renders RANK_QSO, RANK_BAND, and RANK_DXCC columns directly inside the spreadsheet viewer.
- Color-Coded Rank Badges: Visual distinction for QSO (Blue), Band (Orange), and DXCC (Green) rankings.
- Instant UI Column Injection: Guaranteed thread-safe header re-rendering on the Main Thread (
@MainActor).
✉️ 3. Built-In Native macOS SMTP Email Client
- Zero External Dependencies: Uses macOS native
/usr/bin/curlunder the hood for encrypted SMTP/SMTPS transfers (supports Gmail, Outlook, custom servers). - Interactive Email Hyperlinks: Clicking any blue email address in the table view instantly opens the Email Composer Sheet.
- Pre-Configured Template Engine:
- 🎴 QSL Requests: Exchange QSL cards via Bureau or Direct.
- 🗓️ Sked Requests: Schedule band/mode contacts for rare DXCC entities.
- ☁️ LoTW Reminders: Polite upload reminders for unconfirmed QSOs.
- Dedicated SMTP Settings Panel: Configure server host, TLS port (465/587), username, and App Passwords safely.
🛠️ Improvements & Bug Fixes
- Structured Async/Await Refactoring: Converted multi-step API and WebKit workflows to Swift’s modern concurrency model (
Task,async/await,withCheckedContinuation), eliminating background thread crashes (pid failure) and UI deadlocks. - AppKit
NSAlertMigration: Fully replaced buggy SwiftUI alert modifiers with native macOSNSAlertmodal windows to prevent window layout collapse. - SF Symbols Fix: Replaced legacy SF Symbol names with native Mac symbols (
arrow.clockwise.icloud). - Optimized Scraping Delays: Gentle 0.5s inter-request throttling to protect your IP from rate limits.
🛠️ Installation & Upgrade
- Download
YAAM.dmgorYAAM.zipfrom the Assets below. - Drag YAAM.app into your
/Applicationsfolder (replacing the previous version). - Open YAAM and click Enrich Data to automatically fetch ranks and emails!
v1.1.0 — Real-Time QRZ Leaderboard VS Mode & Standalone Cloud Logbook 🚀
What's New in YAAM v1.1.0 🚀
We are thrilled to announce YAAM v1.1.0, featuring major breakthroughs in cloud synchronization, real-time leaderboard analytics, and a polished macOS native UI!
🏆 1. Full-Page QRZ Global Leaderboard & Head-to-Head (VS Mode)
- Dedicated Leaderboard Tab: Search any ham radio callsign to instantly view their real-time global rankings.
- Head-to-Head Comparison (VS Mode): Compare your station's global rank against any rival operator side-by-side!
- Smart Rank Delta Badges: Calculates rank differences and score gaps in real-time across QSO, Band, and DXCC categories via
qrz-rank.asis.sh.
☁️ 2. Standalone Cloud Logbook Fetcher
- No Local File Needed: Download your entire historical logbook directly from LoTW/QRZ servers.
- Incremental Offline Sync: Automatically saves an offline copy (
MyCloudLogbook.adi) and appends only new QSO records during subsequent syncs.
🍏 3. Refined Native macOS Experience
- Native AppKit
NSAlertEngine: Replaced SwiftUI alert modifiers with robust macOSNSAlertwindows, resolving layout collapse bugs and providing direct release links. - Redesigned About Window: Added a native Apple-style About dialog featuring clickable repository links and station metadata.
- Persistent QSL Match Caching: Fast offline cross-referencing against your local
confirmed_cache.jsondatabase.
🛠️ Installation
- Download
YAAM.dmgorYAAM.zipfrom the assets below. - Drag YAAM.app to your
/Applicationsfolder. - Launch YAAM and configure your Station Callsign in Preferences (⌘,).
Developed with ❤️ by EP2AES (fact0real)
GitHub Repository: https://github.com/fact0real/yaam