Skip to content

Uptime Monitor app icon

Uptime Monitor

Uptime Monitor is a native macOS menu bar app for checking the HTTP health of multiple websites and reviewing a rolling 90-day uptime history.

Features

  • Native SwiftUI menu bar interface
  • Concurrent HTTP and HTTPS health checks
  • HEAD requests with an automatic GET fallback for servers that reject HEAD
  • Configurable intervals from one minute to five hours
  • A 90-day daily uptime timeline with explicit no-data days
  • Per-site color labels and drag-and-drop ordering
  • Localized interfaces for English, Simplified Chinese, Traditional Chinese (Taiwan), Japanese, Spanish, and Korean
  • Local-only configuration and history storage
  • Accessible status labels, controls, and history summaries

Requirements

  • macOS 14 or later
  • Swift 6.2 toolchain, such as Xcode 26 or a compatible standalone toolchain
  • Node.js 22.18 or later and pnpm 11.20 for maintainers creating releases

Build and run

Run the test suite from the repository root:

swift test

Build an application bundle and open it:

./Scripts/build-app.sh release
open "dist/Uptime Monitor.app"

The local build is ad-hoc signed for development. Public distribution requires an Apple Developer ID signature and notarization.

You can also open Package.swift directly in Xcode for development and debugging.

Releases

Install the pinned release tooling:

pnpm install --frozen-lockfile

Preview the release plan, then run the interactive release:

pnpm release -- --dry-run
pnpm release

Verso updates package.json, creates the release commit and annotated v* tag, and atomically pushes both. The tag-triggered workflow verifies that the tag matches the package version, injects that version into the app bundle, creates a ZIP archive and SHA-256 checksum, and uploads both files to the corresponding GitHub Release.

Automated release builds are currently ad-hoc signed and not notarized. Configure Developer ID signing and notarization before treating them as trusted end-user distribution packages.

Health-check behavior

Each check uses a ten-second timeout and an ephemeral URLSession without persistent cookies. The app sends a HEAD request first and retries with a range-limited GET request when a server returns HTTP 405 or 501. HTTP status codes from 200 through 399 are considered healthy.

If a website address does not include a scheme, the app uses HTTPS. Plain HTTP remains supported when it is entered explicitly.

Data and privacy

Configured websites, preferences, and aggregated daily history are stored locally in UserDefaults. Uptime Monitor has no account system, analytics, advertising, cloud synchronization, or cookie persistence. Network requests are sent only to websites configured by the user.

Project layout

Path Purpose
Sources/UptimeMonitor/Monitoring Health checks, persistence, and history aggregation
Sources/UptimeMonitor/Localization Language selection and localized string lookup
Sources/UptimeMonitor/Views Menu bar and settings interfaces
Sources/UptimeMonitor/Resources Localized application strings
App Bundle metadata, localized display names, and icon assets
Scripts/build-app.sh Release bundle assembly and ad-hoc signing
package.json and verso.toml Release version and Verso configuration
.github/workflows/release.yml Tag-triggered build and GitHub Release assets

Contributing

Contributions are welcome. Read CONTRIBUTING.md and follow the Code of Conduct before opening a pull request.

Security issues must be reported privately according to SECURITY.md.

License

Uptime Monitor is licensed under the Apache License 2.0, identified by the SPDX expression Apache-2.0.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages