Network

Every IP this machine has right now, Enter copies it

palupdated 2026-10-27SystemComes with pal󱔓Menu bar: Network status

Open in pal

Comes with pal, so a new install already has it; the button finds it in pal again if you removed it. This page can't see what your pal has installed.

Network: Every address in three sections, each row with its kind's glyph, the detail pane on the Wi-Fi interface
Every address in three sections, each row with its kind's glyph, the detail pane on the Wi-Fi interface
Network: The public IP with where it is and whose it is
The public IP with where it is and whose it is
Network: dns at the root finds the resolvers
dns at the root finds the resolvers
Network: Copy the value, or open the Network settings
Copy the value, or open the Network settings
1 of 4

What it does

Every address this machine has: each interface's IPs, the public IP with its location, the gateway, the DNS servers and the Tailscale IP. Enter copies the value.

  • Each interface's IPv4 and IPv6, the Wi-Fi network's name, the Tailscale IPs and the hostname
  • The public IP with its city, country and provider (from ipinfo.io by default)
  • The default gateway and the DNS servers in the order they are asked
  • enter copies the value, cmd+enter opens the network settings
  • A side pane with the details: interface, SSID, signal, MAC and status

Palettes 1

  • Networknetworkliverefreshes every 1 min

    Live rows, listed again when the panel shows and the last listing is over a minute old; ⌘R lists now and fetches the public IP again.

    • ↵Copy the value
    • ⌘↵Open Network settings

Actions

  • CopyThe row's value.↵
  • Open Network settingsSystem Settings on macOS; gnome-control-center, systemsettings or nm-connection-editor on Linux.⌘↵

Settings

Extension, [extensions.network]

public_ip_url
https://ipinfo.io/json text

Fetched with a 3 s timeout and kept 10 minutes; JSON with `ip` (and `city`, `country`, `org` when it has them) or a bare address. Empty: no public IP row.

networks
none list

One line per network, `SSID = kind label:Name icon:X`, keyed on the SSID or on the gateway (`192.168.1.1 = ...` also covers a cable into the same router and a Wi-Fi name macOS declines to reveal). Every field is optional and the order is free: a bare word is the kind, `label:` renames the network on the bar (the palette keeps the real SSID; a name with a space goes in quotes, `label:"Cafe Corner"`), `icon:` is one emoji or a Nerd Font glyph pasted in (the Icons palette copies one) drawn instead of the signal, hotspot, open or wired mark. Keyed fields rather than positions so a line with only an icon needs no placeholders. Kinds: `hide` drops the bar item entirely, since the network you are on almost all the time can tell you nothing and its absence is the point; `hotspot` marks one that costs data; `public` one to distrust. For example `192.168.1.1 = hide icon:󰋜`, `Cafe Wifi = hotspot label:Cafe icon:☕`.

Defaults shown. Change them in pal's settings window or in the config file.

The README

Everything Network does, key by key, from the extension's own README.md

Network

This machine's addresses, one row per value: the value is the row's name so it reads at a glance, the label is the subtitle, enter copies. Live, listed again when the panel shows and the last listing is over a minute old; cmd+r lists now. The palette opens with the detail pane showing.

The rows

section rows from
This machine every interface's IPv4 and global IPv6 addresses (loopback and link-local left out), the Wi-Fi one labelled with its SSID; the Tailscale IPv4 and IPv6; the hostname; the Bonjour .local name on macOS macOS: ifconfig, networksetup -listallhardwareports (the kind), ipconfig getsummary <dev> (SSID, security); Linux: ip -j addr, iw dev; tailscale ip where the CLI is on PATH (or the Tailscale.app binary on macOS); os.hostname(), scutil --get LocalHostName
Internet the public IP, with the city, country and organisation when the endpoint gives them one GET of public_ip_url with a 3 s timeout, kept 10 minutes (cmd+r fetches again; a failure is not kept); JSON with ip (ipinfo), query (ip-api) or connection.isp (ipwho.is) shapes, or a bare address
Network the default gateway with its interface; the DNS servers in resolver order macOS: route -n get default, scutil --dns; Linux: ip -j route show default, /etc/resolv.conf (behind systemd-resolved's stub, resolvectl dns)

Every tool runs with a 3 s timeout and a missing one just leaves its rows out. The tunnel interface carrying the Tailscale addresses (utun4, tailscale0) is folded into the Tailscale rows. When nothing has an address, or there is no route, an inert row says so; the public IP row says why when the fetch fails.

Keywords make the rows findable from the root: wifi, lan, ip for an interface address, public, wan, external for the public IP, gateway, router for the route, dns, nameserver for a resolver, tailscale, vpn for those.

The detail pane lists every field of the row: interface, kind, SSID, security, IPv4, IPv6, MAC and status for an address; city, region, country, organisation and when it was fetched for the public IP; the resolver order for a DNS server.

Bar item

Network status reads the interface carrying the default route every five seconds (and on wake/network events). The glyph is the whole message on Wi-Fi: four levels of signal strength, or its own mark for a hotspot, an open network or a wired link, and a red one when there is no default route. Beside it the network's name, unless Icon only is set — then the glyph stands alone and hovering gives the name, the address, the signal and the gateway. Click opens Network Settings, while the popover opens this palette.

networks is one line per network, SSID = kind label:Name icon:X, keyed on the SSID or on the gateway (neither alone is enough, since macOS redacts the name, see below, and a cable into the same router has no name at all, so 192.168.1.1 = ... reaches both). The fields are keyed rather than positional: any subset in any order reads the same and a line with only an icon needs no placeholders. A bare word is the kind, label: gives the strip a friendlier name (the palette always retains the real SSID; a name with a space goes in quotes, label:"Cafe Corner"), icon: is one emoji or a Nerd Font glyph pasted in (the Icons palette copies one; the bar draws the bundled Symbols Nerd Font). Each field comes from the first matching line that sets it, so an SSID line and a gateway line for the same router can split the work.

192.168.1.1 = hide icon:󰋜
Cafe Wifi = hotspot label:Cafe icon:☕
marvin = icon:📱
kind what it does
hide The item is not drawn. For the network you are on almost all the time: it can tell you nothing you do not already know from the room you are in, so its absence is what carries information; the item appearing at all means you are somewhere else.
hotspot Marks a link whose data costs money. A name containing iphone, android, hotspot or tether is taken as one without being configured.
public Marks one not to be trusted. A network with no security is marked that way on its own.

The icon stands in for the signal, hotspot, open or wired mark on the strip, and on that interface's rows in the palette; the tooltip then carries hotspot or open network where the glyph would have said it, and the popover's badge still names the kind. The label replaces the SSID, and on a cable the kind, since a gateway-keyed line reaches both. Settings includes Wi-Fi, weak, hotspot, open, icon-only, wired and offline preview states.

The older ssid_labels (SSID = label) and network_icons (SSID = glyph) lists still work this release: they are folded into the table after the networks lines, so a networks line wins for the field it sets, and their presence is logged once as deprecated. Move them onto networks lines; the keys go away next release.

Keyboard

keys action
enter Copy the value; with rows marked (⌘-click, ⇧↓), every value, one a line
cmd+enter Open Network settings: the Network pane of System Settings on macOS; on Linux the first of gnome-control-center network, systemsettings kcm_networkmanagement, nm-connection-editor installed
cmd+i Hide or show the detail pane (open by default here)
cmd+r List again, and fetch the public IP again

Setup

Nothing to install: the rows come from the OS's own tools. tailscale on PATH (or Tailscale.app) adds the Tailscale rows.

The SSID on macOS: since Sonoma the system redacts the network name for a process without Location Services access (ipconfig getsummary prints <redacted>, networksetup -getairportnetwork says not associated), and pal's own grant does not reach the tools it runs, so the summary is followed by a read through the core's wifi capability (CoreWLAN, in-process). That read also carries the signal strength, which needs no grant at all; the name it has only once pal holds Location access: the Wi-Fi palette asks for it the first time it lists, and Settings > General > Permissions has the button. Without it the Wi-Fi row is labelled by kind (en0 · Wi-Fi) and the detail pane says what is missing; everything else works without it.

The public IP is one request to public_ip_url (ipinfo.io by default); set it empty for no Internet section and no request at all.

Settings, [extensions.network]:

key type default what
public_ip_url text https://ipinfo.io/json The endpoint the public IP row asks. Empty: no Internet section. https://api.ipify.org (a bare address) and http://ip-api.com/json work too.
networks list [] One line per network, SSID = kind label:Name icon:X (or gateway = ...); each field optional, any order. Kind is hide, hotspot or public; the label is the bar's name; the icon is one emoji or a Nerd Font glyph drawn instead of the signal, hotspot, open or wired mark. The old ssid_labels and network_icons lists are still read this release.

What it does not do

  • Flush DNS: on macOS it is dscacheutil -flushcache; killall -HUP mDNSResponder, which needs sudo, and the host has no way to ask for a password; run it from a terminal.
  • Change anything: no joining, no interface toggles; Open Network settings hands that to the OS. Wi-Fi networks are the Wi-Fi extension's.
  • Speed tests, ping, port scans: only what the machine already knows about itself, plus the one public IP request.
  • Watch for changes: the rows are as of the last listing, a minute old at most when the panel shows.

Platforms

macOS and Linux, with the platform's own tools as in the table above. The Bonjour .local name and the SSID redaction are macOS only; the resolvectl path is for a Linux behind systemd-resolved.

A glyph-only bar item is the core's: [bar.items."network/status"] show_title = false in the config, or Title off on the item's pane under Settings > Bar.