{"id":51316234,"url":"https://github.com/darrylmorley/whatport","last_synced_at":"2026-07-01T07:31:37.413Z","repository":{"id":358862553,"uuid":"1243402766","full_name":"darrylmorley/whatport","owner":"darrylmorley","description":"macOS menu bar utility showing real-time USB-C port status (protocol, speed, power). Apple Silicon only.","archived":false,"fork":false,"pushed_at":"2026-06-19T15:38:51.000Z","size":3070,"stargazers_count":13,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-06-19T17:27:17.581Z","etag":null,"topics":["apple-silicon","iokit","mac-app","macos","menubar","menubar-app","swift","swiftui","thunderbolt","usb-c","utility"],"latest_commit_sha":null,"homepage":"https://www.whatport.app","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/darrylmorley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-19T10:01:51.000Z","updated_at":"2026-06-19T15:38:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/darrylmorley/whatport","commit_stats":null,"previous_names":["darrylmorley/whatport"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/darrylmorley/whatport","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darrylmorley%2Fwhatport","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darrylmorley%2Fwhatport/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darrylmorley%2Fwhatport/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darrylmorley%2Fwhatport/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/darrylmorley","download_url":"https://codeload.github.com/darrylmorley/whatport/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darrylmorley%2Fwhatport/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34997947,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple-silicon","iokit","mac-app","macos","menubar","menubar-app","swift","swiftui","thunderbolt","usb-c","utility"],"created_at":"2026-07-01T07:31:36.872Z","updated_at":"2026-07-01T07:31:37.399Z","avatar_url":"https://github.com/darrylmorley.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WhatPort\n\n[![Latest Release](https://img.shields.io/github/v/release/darrylmorley/whatport?label=Latest%20Release\u0026color=blue)](https://github.com/darrylmorley/whatport/releases)\n[![Platform](https://img.shields.io/badge/Platform-macOS%2014%2B-brightgreen)](https://github.com/darrylmorley/whatport)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/darrylmorley/whatport/blob/main/LICENSE)\n\nA lightweight macOS menu bar utility that shows real-time USB-C and Thunderbolt port status. See what's connected, how fast it's running, and how much power each port is using.\n\nFree and open source. Apple Silicon only (M1 and later).\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/port-list.webp\" width=\"280\" alt=\"WhatPort port list showing connected devices\"\u003e\n  \u003cimg src=\"screenshots/detail-connections.webp\" width=\"280\" alt=\"Port detail showing display link rate and lanes, plus the connections the port has set up\"\u003e\n  \u003cimg src=\"screenshots/detail-charging.webp\" width=\"280\" alt=\"Port detail showing charging status, the named charger and its power menu, and a rolling power graph\"\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Port overview** at a glance from the menu bar, with active count and power in/out\n- **Protocol detection** for Thunderbolt 3/4/5, DisplayPort alt-mode, USB3, and USB2\n- **Live lane status** showing exactly which lanes are carrying data and at what speed\n- **Connections** showing what the port has actually set up, and flagging anything macOS has blocked (the usual reason a dock's USB or display won't work)\n- **Display detail** with link rate (HBR2/HBR3), lanes in use, native versus Thunderbolt-tunnelled, connected display count, and any hub or HDMI converter in the chain\n- **Power monitoring** with real-time wattage, voltage, current, and a 60-second rolling graph\n- **Charging status** that says why a connected charger isn't charging: charging, fully charged, held to protect battery health, or just not charging\n- **Device and dock identification** including product name, vendor, serial number, USB version, and the connected Thunderbolt dock's own name\n- **Charger identification** naming the adapter and listing its full advertised power menu\n- **Cable info** showing cable type and USB PD revision\n- **Liquid detection** flagging a wet port (M3 and later)\n- **Thunderbolt capability** showing max supported speed and lane width per port\n- **Port statistics** with lifetime connection counts and error tracking\n- **MagSafe support** with charging status and power draw\n- **Menu and shortcuts** with a right-click menu for Settings, GitHub, About, and Quit, plus the standard Cmd+, and Cmd+Q\n\n## WhatPort Pro: the Flight Recorder\n\nThe live view tells you what your ports are doing right now. The **Flight Recorder** keeps watching when you're not, so you can catch the intermittent faults that only show up when nobody's looking. It runs always-on in the background, records each port's power, protocol, and link state to a local database, and survives restarts.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/flight-recorder-timeline.png\" width=\"420\" alt=\"Flight Recorder timeline of plug, unplug, and power events\"\u003e\n  \u003cimg src=\"screenshots/flight-recorder-graphs.png\" width=\"420\" alt=\"Flight Recorder power graphs for every port over time\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/flight-recorder-health.png\" width=\"420\" alt=\"Flight Recorder port health scores\"\u003e\n  \u003cimg src=\"screenshots/flight-recorder-alerts.png\" width=\"420\" alt=\"Flight Recorder alert rules for overcurrent, link errors, and disconnects\"\u003e\n\u003c/p\u003e\n\n- **Event timeline.** Every plug, unplug, protocol change, and power event over time, filterable by port and event kind.\n- **Power graphs.** Power draw for every port across a selectable time range, with disk-backed history so it survives a restart.\n- **Port health scoring.** Each port scored by how often faults recur, with a clear \"not a hardware diagnosis\" note. Reset the baseline once you've dealt with something.\n- **Alerts.** Get notified on overcurrent, link error, disconnect, or protocol downgrade.\n- **Sessions.** Bookmark a stretch of recording, name it, and export it to JSON or CSV.\n- **Survives an overnight kill.** With Launch at Login on, it restarts itself within seconds if macOS stops it to free memory. A deliberate Quit still quits.\n\n**£4.99 one-time, works on up to 2 Macs.** Secure checkout via Stripe; your licence key is emailed instantly. [Buy WhatPort Pro at whatport.app](https://www.whatport.app/#pro).\n\nThe base app in this repository is the free, open-source half. The Flight Recorder is the paid part and is not included in the open-source build.\n\n## Install\n\nDownload the latest release from the [releases page](https://github.com/darrylmorley/whatport/releases), unzip, and drag `WhatPort.app` to your Applications folder. Or with [Homebrew](https://brew.sh):\n\n```bash\nbrew install --cask darrylmorley/whatport/whatport\n```\n\nThe app is signed and notarized by Apple.\n\n## Requirements\n\n- macOS 14.0 (Sonoma) or later\n- Apple Silicon Mac (M1, M2, M3, M4, or later)\n\n## Build from source\n\nPure SwiftPM, no Xcode project needed:\n\n```bash\ngit clone https://github.com/darrylmorley/whatport.git\ncd whatport\nmake app        # assemble WhatPort.app\n```\n\n`swift build` compile-checks without producing a runnable bundle, `make app` assembles the `.app`, and `make run` launches it. No entitlements or root access needed, all IOKit reads are unprivileged.\n\n## How it works\n\nWhatPort correlates several unprivileged IOKit and SMC services per physical port. The main ones:\n\n1. **AppleTypeCPhy** for USB-C lane state (transport protocol, power level per lane)\n2. **IOThunderboltPort** for Thunderbolt link speed, width, and capability\n3. **SMC and USB-PD** for power, split into power in and power out (watts, voltage, current per port)\n\nConnection events are detected via IOKit interest notifications for sub-second response. All state (connections, power, transports) is also polled every second as a safety net.\n\nNo analytics, no telemetry, no network requests. The app reads local IOKit data and nothing else.\n\n## Architecture\n\nThree layers, each depending only on the one below:\n\n```\nSwiftUI (WhatPort)  -\u003e  Domain (WhatPortCore)  -\u003e  IOKit (WhatPortIOKit)\n```\n\n- **WhatPortIOKit**: All IOKit C API interaction. Nothing above this layer touches C pointers or IORegistry.\n- **WhatPortCore**: Pure Swift domain model and correlation logic. No IOKit or UI imports.\n- **WhatPort**: SwiftUI views and formatting. No data fetching or business logic.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarrylmorley%2Fwhatport","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdarrylmorley%2Fwhatport","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarrylmorley%2Fwhatport/lists"}