What's New
Stay up to date with the latest features, improvements, and fixes
What's New in Margin Master
Stay up to date with the latest features, improvements, and fixes.
MarginMaster v2026.303.40103 v2026.303.40103
March 3, 2026 20 changes(2 deployments combined)-
Improved update snooze interface
Replaced cryptic snooze options ("1 Hour", "1 Day", "1 Week", "1 Month") with descriptive labels ("Don't show me for one hour", "Don't show me for one day", etc.) and moved the snooze selector into the update status dialog itself. The 1-month option was removed. The selected snooze interval is now saved immediately when closing the dialog and respected during automatic update checks.
-
Streamlined update snooze preferences
Moved the snooze interval selector directly into the Update Status dialog, replacing the separate multi-button snooze prompt. Users can now choose their preferred reminder frequency ("Show me every update", "Don't show me for one hour/day/week") from a dropdown when viewing update information. The selected interval is automatically saved when closing the dialog. Also removed the "1 Month" snooze option to simplify choices.
-
License initialization logging enhanced
Startup now logs whether IPWorks licenses were loaded from the API or from cached appsettings.json. If both sources fail, a warning is logged indicating FTP/SFTP/ZIP operations may not work, but application startup continues normally.
-
Performance logging for selection box loading
Added diagnostic timing to track how long each selection box takes to populate. Fields taking over 5 seconds now log a warning, while fields taking over 1 second log an informational message. Binary fields (Yes/No values) now skip expensive database queries and use static values, significantly improving startup performance.
-
Enhanced selection box loading performance
Added performance optimizations for boolean/binary fields (HasZonePricing, Lock, PrivateLabel) by using static Yes/No values instead of querying the database. Added performance logging to identify slow-loading selection boxes. Binary fields now load instantly rather than requiring expensive DISTINCT queries.
-
Fixed auto-update crash in debug mode
Resolved a NotInstalledException that occurred when checking for updates in debug mode on non-installed builds. The application now simulates update checks when running under the debugger without a Velopack installation, allowing developers to test the application without crashes.
-
Fixed auto-update check error in debug mode
Resolved an error that prevented the auto-update system from checking for updates when running in debug mode. The system now properly simulates update checks during development without throwing exceptions.
-
Fixed Query Store enablement compatibility
Resolved an issue where enabling Query Store for diagnostics would fail on certain SQL Server builds that don't support the STALE_QUERY_THRESHOLD_DAYS parameter. The system now automatically retries without this parameter if needed.
-
Fixed managed index recommendations for cross-database scenarios
Corrected an issue in the diagnostics system where missing index recommendations would generate invalid SQL when the database name in the recommendation differed from the current connection context. Recommendations now always use local table references that work correctly.
-
File menu separator cleanup
Removed an extra separator line in the File menu that appeared between the Restart and Exit menu items. The menu now has better visual spacing with a single separator appropriately grouping the restart and exit functions together at the bottom of the menu.
-
Cleaned up File menu separator
Removed an extra separator line that appeared before the Exit menu item in the main window's File menu, eliminating visual clutter and improving the menu layout.
-
Reorganized database connection menu items
Moved "Connect to existing database" and "Create a new database" from the dynamic database names dropdown list to dedicated menu items in the File menu, positioned above Restart and Exit with separators for visual clarity. This change makes these important connection commands more discoverable and separates them from the list of recent/available databases.
-
Redesigned update notification display
Replaced the full-width green banner with a compact "Update Available" badge in the window's title bar header. This reduces visual clutter while still making update availability clearly visible. Clicking the badge opens the update dialog.
-
Redesigned update notification display
Replaced the full-width green banner that appeared below the main toolbar with a compact "Update Available" badge in the window header. The badge shows an icon and text, is clickable to view update details, and only appears when an update is actually available. This reduces visual clutter while still keeping users informed.
-
Expanded startup indexes for faster initial queries
Added managed indexes for commonly queried columns (Dept, Class, VendorNumber, PrimeVendor, ProductGroup, ProductGroup2, Location) on all main tables. These indexes prevent expensive full table scans when populating selection boxes at startup, particularly for cold storage scenarios. Also improved error handling to automatically disable indexes when target tables don't exist.
-
IPWorks licenses served from cloud API
Runtime licenses for IPWorks (FTP), IPWorksSSH (SFTP), and IPWorksZip components are now retrieved from the Blazor API during startup, with base64-encoded appsettings.json fallback for offline use. This removes hard-coded license keys from source code and enables centralized license management. The new IPWorksLicenseService follows the same pattern as the Dapper configuration service and runs in parallel during startup to avoid delays.
-
IPWorks NuGet packages updated
Updated nsoftware.IPWorks to build 9544, nsoftware.IPWorksSSH to build 9545, and nsoftware.IPWorksZip to build 9544. Debug builds now include version checking to warn developers when package versions and license keys may be out of sync.
-
Cleaned up unused update notification code
Removed the custom notification toast system (UpdateNotificationView, UpdateNotificationViewModel) and associated custom notification service, simplifying the update notification architecture.
-
Cleaned up unused notification components
Removed the UpdateNotificationView and UpdateNotificationViewModel components that are no longer needed after redesigning the update notification system.
-
License management centralized across all FTP operations
All FTP, SFTP, and ZIP operations now retrieve licenses through the new IPWorksLicenseService instead of referencing a static class. This affects backup/restore operations, vendor file downloads (Do-It-Best mailbox, Ace/Orgill/EJ catalog imports), database backup compression, and support file replication.

