• 2.2.0 e46cd0533a

    2.2.0 Stable

    kerem released this 2025-06-26 21:26:41 +03:00 | 27 commits to main since this release

    📅 Originally published on GitHub: Thu, 26 Jun 2025 18:37:24 GMT
    🏷️ Git tag created: Thu, 26 Jun 2025 18:26:41 GMT

    Release Info

    Item SHA-256 Desc
    📄 ntfy-desktop-2.2.0-win32-arm64.zip de62a4762adbbd253d635331012595667388b9d88d34173d5d313d196996c5d1 Windows arm64 (64-bit) binaries
    📄 ntfy-desktop-2.2.0-win32-ia32.zip 262787447910e8e080d0326ac0bdd83bcbc94f02aa5867b5a64c5941aff1f83f Windows ia32 (32-bit) binaries
    📄 ntfy-desktop-2.2.0-win32-amd64.zip 9d7ce3f6df9dde7a79e0f9a3e95745591b2ab5c69211425f319c6728e6a8eafa Windows x64 (64-bit) binaries
    📄 ntfy-desktop-2.2.0-linux-arm64.zip 06359a6d48f948ab54788180a6158d6f066db02e7e85d238971c79a7ea8415ca Linux arm64 (64-bit) binaries
    📄 ntfy-desktop-2.2.0-linux-armv7l.zip c91c6092d4b8354eba733826d392805cc19a6812fb757d2baa2507a2502d76c6 Linux armv7l (32-bit) binaries
    📄 ntfy-desktop-2.2.0-linux-amd64.zip 4c98fe1a773bde72bf3e0725c5e62afa4781a28363b341d103175c3adf72815e Linux x64 (64-bit) binaries
    📄 ntfy-desktop-2.2.0-darwin-arm64.zip 298750372e775f8c92505956a7abebfac95fe99f621a880d48190ddcd13db79a Darwin / macOS arm64 (64-bit) binaries
    📄 ntfy-desktop-2.2.0-darwin-amd64.zip f82ee7ea0a763a561723c685dd4df85a398cfd7cbef0801c055c1edf6cc07d92 Darwin / macOS x64 (64-bit) binaries
    📄 sha256sum.txt.asc Signed SHA256 hash digest
    📄 sha1sum.txt.asc Signed SHA1 hash digest
    🏷️ GUID 22ce449b-259e-57f4-bf70-d94d669cc4b0
    🏷️ UUID ae6d8eea-511d-53a8-bb01-6231ecfb9298
    🕟 Stamp 2.1.2-2025-06-09T18:44:32.000Z 🔺 2.1.3-2025-06-25T03:04:15.000Z
    📅 Last Release 15 days ago



    What's New

    This release contains the following changes:


    Note

    This major releases focuses on a complete re-write of the entire app. It also utilizes a proper file structure, separating the application files from other git repo or template files. Additionally, this release focuses on security and utilizing proper practices within Electron to ensure the end-user is not exposed to potential harmful attacks later through open processes that could be intercepted. We have no idea if people are using this app to transmit sensitive information, but it's better to be safe than sorry. Numerous performance enhancing changes have also been made, including proper graceful shutdowns for all operating systems, including MacOSX.

    There are plans for more features, but this re-write needed to come first in order to establish a proper structure.


    • feat: New Notification Badge #27 #88
      • When the user receives a new message, a numerical value is shown in the OS taskbar indicating how many un-read messages the user has.
      • Unread will clear once the user interacts with the menu
    • feat: New Inter-Process Communication
      • Electron's different processes now communicate safely with one another without the risk of exposing sensitive info
      • Main process and renderer are completely segregated from one another
    • feat: Action Triggers
      • Ntfy Desktop now can interpret what buttons you are clicking on the interface; which opens the door to many new features based on a user's navigation
      • Introduced with new badge notification counter
    • improvement: Class Segregation
      • All classes now reside in a dedicated folder, instead of in the main app code
    • improvement: Application Restructured
      • For the most part, the app has been entirely re-written
      • Ntfy app files now reside in src/ folder instead of app and repo files being mingled together
    • improvement: Migrated Electron Menus
      • Instead of residing in the main app file; menus have been migrated to their own independent class
    • improvement: Rewrote Windows and Linux Build Scripts
      • Can utilize both local and global node packages
      • Changed the compression functionality for MacOSX users
    • improvement: Switched to Node Imports
    • improvement: Re-wrote isValidUrl Functionality
      • Now supports both external and internal (localhost) instances of Ntfy
    • improvement: Electron Preloader and Renderer
      • Added preloader.js and renderer.js to handle the different processes
    • improvement: Consistent API Token Handling
      • Safer fallback for empty API tokens
    • improvement: Topics Validation
      • Check for empty/missing topics before attempting requests
    • improvement: Proper Interval Management
      • Store and cleanup polling intervals properly
    • improvement: Shutdown State Management
      • Prevent operations during app shutdown
    • improvement: Enhanced User-Agent
      • Include app version in requests
    • improvement: Shutdown Checks
      • Skip operations when app is shutting down
    • improvement: Null Response Handling
      • Handle cases where requests return null
    • improvement: Poll Rate Clamping
      • Automatically fix out-of-bounds poll rates
    • improvement: Proper macOS Support
      • Handle window lifecycle correctly on macOS
    • improvement: Enhanced URL Validation
      • Better localhost detection and fallback handling
    • pref: Request Timeout Handling
      • Added 30-second timeout for message requests with proper cleanup
    • pref: Concurrent Polling Prevention
      • Added isPolling flag to prevent multiple simultaneous requests
    • pref: Graceful Shutdown System
      • Implemented proper cleanup when app closes
    • pref: Poll Rate Validation
      • Added bounds checking (5s minimum, 1 hour maximum)
    • pref: Better Error Handling
      • Distinguish between timeout and network errors
    • pref: Improved Logging
      • More detailed error messages and URI information
    • pref: Menu Initialization
      • Menus now wait until Ntfy is completely initialized before loading
    • fix(security): Disabled Node Integration #117
      • Changed nodeIntegration: false to prevent renderer from accessing Node.js APIs
    • fix(security): Enabled Context Isolation #117
      • Ensures proper isolation between main and renderer processes
    • fix(security): Disabled Remote Module #117
      • Prevents potential security vulnerabilities
    • fix(security): Enabled Web Security #117
      • Blocks insecure content and experimental features
    • fix(security): Sandboxed About Window #117
      • Added sandbox mode for the about dialog
    • fix(build): Windows .batch Build Script
      • windows batch build script provided with app failed to build if build/ folders didn't already exist
    • fix(build): MacOS Binaries Build Failed on Windows
      • when attempting to build macOSX binaries on Windows, script would fail due to windows compression
      • changed to tar.gz
    • tests: New Test Suite
      • Each release will now run an extensive set of tests to ensure Ntfy functionality works properly
      • Utilizes both Vitest and Playwright



    Statistics

    How the files have changed:

    • Changed files : 16
    • Changes : 2474
    • Commits : 36
    • Additions : 1965
    • Deletions : 509
    • PRs (categorized) : 24
    • PRs (uncategorized) : 12
    • PRs (open) : 0




    Pull Requests

    This release is associated with the following pull requests:


    🪛 Continuous integration

    • update workflow working directory for node commands : 737080d2d7 @Aetherinox
    • update .env file working path : 3787357680 @Aetherinox
    • update working directory for package.json : e902918a93 @Aetherinox
    • change working directory on npm-tests workflow : d9b4ae12a4 @Aetherinox

    🚀 Features

    • add back and forward functionality to view menu : 338782370a @Aetherinox
    • add new electron preload.js #116 : 90db478e2c @Aetherinox
    • add new electron renderer.js #116 : 455ef7446a @Aetherinox
    • add preload.js to main dialog #116 : b1f3f961b5 @Aetherinox
    • add badge indicator to taskbar icon #27 : 9f66220461 @Aetherinox
    • add graceful shutdown functionality when app closed : 68cbe33601 @Aetherinox
    • force maximum retries on IsValidUrl : 899207546b @Aetherinox
    • add polling rate when getting messages from ntfy server : 38fdf83448 @Aetherinox
    • add proper ipc communication from main process to renderer #117 : 58a1e1620f @Aetherinox
    • add AbortController when fetching messages from ntfy server : 225050bc65 @Aetherinox
    • add graceful shutdown for all supported operating systems : 07c7d10ed9 @Aetherinox

    🐛 Bugfixes

    • (security) set nodeIntegration: false to prevent renderer from accessing node api #117 : 69fc3ca22e @Aetherinox
    • (security) ensure proper isolation between main and renderer processes #117 : 72074cd9a7 @Aetherinox
    • (security) prevent potential security vulnerabilities #117 : 90bc6f6f13 @Aetherinox
    • (security) block insecure content and experimental features #117 : 3eaf5133db @Aetherinox
    • class Log.js importing package in wrong dir, add package.json import : 494970251e @Aetherinox

    🔧 Changes

    • clean parent directory; migrate app to src #116 : 0aa9fbdf11 @Aetherinox
    • update .gitignore : 0d667e3484 @Aetherinox
    • assign new classes from classes folder to main process : c7ef861afe @Aetherinox

    n#### Optimizations

    • menus now wait on app to initialize before loading into memory : 1812db52a9 @Aetherinox

    🧹 Housekeeping

    • re-write build scripts, fix macos bugs with archive compression #116 : 2e11ecd633 @Aetherinox
    • break up classes into separate folder classes #116 : 94a7e828cc @Aetherinox
    • update eslint rules and dependencies #116 : 2e108b2ebb @Aetherinox
    • update webpage templates #116 : 05e3e3687e @Aetherinox
    • electron menus migrated to class, and out of main.js #116 : faa2c47b33 @Aetherinox
    • update comments : c218b2852e @Aetherinox
    • update url verification function to support localhost / self-hosted instances #116 : 1d89168070 @Aetherinox
    • add helper for variable getters : c38242fc93 @Aetherinox
    • update linter issues : 99e1c92f67 @Aetherinox

    📦 Build & Dependencies

    • stop tracking package-lock.json : 9624c81a4b @Aetherinox
    • add package.json imports for loader : 41a0f53fcf @Aetherinox
    • update package dependencies : 75af12678a @Aetherinox
    • define electron types : 8f2659f7ae @Aetherinox
    • (tests) add test suite to project : 50f6e1c6a5 @Aetherinox
    • update package.json scripts to use npx : 07b902d9bd @Aetherinox
    • bump project version to v2.2.0 : 95310006cb @Aetherinox



    Downloads