Skip to content
AmAzing129Public

About

Native macOS menu bar utility for checking public internet egress location

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

EgressBar

EgressBar is a native macOS menu bar utility that shows where your current public internet traffic exits: city, region, country, IP address, ASN, and ISP.

It is useful when switching VPNs, proxies, Wi-Fi networks, or cloud workspaces and you want a quick sanity check from the menu bar.

Requirements

  • macOS 13 or newer
  • Swift 5.9 or newer

Agent Installation

Give the following instructions to a local agent to install EgressBar automatically on a Mac:

Install EgressBar from https://github.com/AmAzing129/EgressBar on this Mac.

Steps:
1. Verify that Xcode Command Line Tools and Swift are available:
   `xcode-select -p` and `swift --version`.
2. Clone the repository to `~/EgressBar` if it is not already present:
   `git clone https://github.com/AmAzing129/EgressBar.git ~/EgressBar`.
   If `~/EgressBar` already exists, run `git -C ~/EgressBar pull`.
3. Build the project:
   `cd ~/EgressBar && make build`.
4. Package the macOS app bundle:
   `cd ~/EgressBar && make package`.
5. Launch the packaged app:
   `open ~/EgressBar/.build/EgressBar.app`.
6. Confirm that `~/EgressBar/.build/EgressBar.app/Contents/MacOS/EgressBar`
   exists and that EgressBar is visible in the macOS menu bar.

Do not move the app bundle after packaging unless the user asks for a different
install location. The packaged app is required for the Launch at Login toggle;
`make run` is only for development.

Features

  • Menu bar title like Los Angeles, California, US
  • Menu details for IP, network status, location, country, city, region, ASN, ISP, and last updated time
  • Manual refresh
  • Configurable automatic refresh interval (1–1440 whole minutes; default: 10 minutes)
  • Network-change refresh via NWPathMonitor
  • Automatic refresh on macOS system proxy changes, with client-specific node-switch detection for FlClash
  • Copy current IP to the pasteboard
  • Optional Launch at Login toggle
  • Optional IPinfo token stored in the macOS Keychain

Refresh Interval

Open the menu bar menu, choose Settings..., and enter the Refresh interval (minutes). Click Apply to save it and refresh immediately. The automatic refresh timer restarts with the new interval; no app restart is needed.

The interval is saved locally and restored when EgressBar launches. New installs use 10 minutes. Refresh Now also saves the current settings and refreshes; Cancel discards edits to the token, interval, and proxy-change monitoring.

Startup, network changes, and manual refreshes can trigger additional IPinfo requests between automatic refreshes.

Proxy Changes

Node-switch detection is client-specific. EgressBar does not provide universal node-switch detection for every proxy application. macOS system proxy settings and a proxy application's internal node selection are separate signals:

Signal Coverage Limits
macOS system proxy settings Changes to proxy on/off state, address, or port, regardless of which client changes those settings Switching a node while keeping the same local proxy address and port may leave these settings unchanged
Saved node selections Dedicated adapters for FlClash and FlClash for oixCloud, using compatible local storage Other clients, including Surge and Clash Verge, do not have a node-selection adapter in this version

Refresh when proxy changes is enabled by default in Settings. EgressBar checks local routing state every two seconds and waits 1.5 seconds after a detected change to let the proxy client settle. Rapid changes are combined into one refresh, and a change during an IP request queues another refresh afterward. IP lookups use a new connection so a tunnel through the previous node is not reused. Unchanged local state does not send additional IPinfo requests.

The FlClash adapters recognize the application identifiers com.follow.clash and com.oixcloud.clash. They compare the running client's current profile, proxy mode, and saved node selections. Paths are resolved from the current user's home directory at runtime. EgressBar compares routing fields from local preferences and opens database.sqlite read-only; no controller API is needed. These adapters work for users with compatible client storage and contain no machine-specific paths, profile IDs, node names, or credentials.

This detects saved selections, including manually choosing another group or node. Automatic failover within a group may not update these saved selections. Other clients, older FlClash storage formats, and future incompatible schemas may not expose a detectable node change. In those cases, use the regular refresh interval or Refresh. Temporary read failures are ignored and retried.

The displayed IP is the exit used for the IPinfo request. With per-domain proxy rules, other sites can use a different exit.

Development

Build:

make build

Run from source:

make run

Run the proxy-change detection tests (using temporary databases and preferences):

swift test

Package an App Bundle

make package
open .build/EgressBar.app

Use the packaged app for the Launch at Login toggle. make run is intended for development.

The default bundle identifier is com.amazing.egressbar. For your own release builds, override it at package time:

BUNDLE_ID=com.example.egressbar make package

IPinfo

Without a token, EgressBar uses:

https://ipinfo.io/json

With a token, EgressBar uses:

https://ipinfo.io/json?token=...

You can set the token in Settings. Development builds may also read IPINFO_TOKEN from the environment when no Keychain token has been saved.

Privacy

EgressBar does not collect analytics and does not run its own backend. It sends requests to IPinfo so IPinfo can return your public egress location and network metadata. See PRIVACY.md for details.

Screenshots

Screenshots should be captured from a packaged build. Avoid publishing images that include a real personal IP address or precise home/work location; redact those values or use a test network.

Contributing

Contributions are welcome. See CONTRIBUTING.md.

License

MIT. See LICENSE.

About

Native macOS menu bar utility for checking public internet egress location

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages