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.
- Native SwiftUI menu bar interface
- Concurrent HTTP and HTTPS health checks
HEADrequests with an automaticGETfallback for servers that rejectHEAD- 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
- 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
Run the test suite from the repository root:
swift testBuild 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.
Install the pinned release tooling:
pnpm install --frozen-lockfilePreview the release plan, then run the interactive release:
pnpm release -- --dry-run
pnpm releaseVerso 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.
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.
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.
| 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 |
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.
Uptime Monitor is licensed under the Apache License 2.0, identified by the SPDX expression Apache-2.0.