## For peer-to-peer software, "online" and "offline" are about access to specific peers and services
In a world of centralized servers, there are only two important states to communicate to the user about their relationship to the network: either their device can access the centralized server and is therefore "online" or the device cannot access it and is therefore "offline."
"Offline" generally connotes a reduced set of features and possibly that the software does not work _at all_.
(note that even in the simple on/off case there is a state of reduced connectivity where access to the server is going on/off rapidly or the network connection is unusably slow. while these states are typically communicated in the UI as online because the server is technically "reachable", they are closer to offline.)
Note that local-first software does not necessitate peer-to-peer networking! You can store data local-first and then synchronize across peers with the assistance of a centralized service.
In a local-first peer-to-peer connected world, there are various states of connectivity. There is a truly "offline" state where no other peers nor any centralized services can be reached. For each peer, there is a concept of reachability to that peer. Typically, we're operating in a multi-device world, where certain peers represent my own devices. There's a connectivity status for each of my own devices. And finally, a user may have one "privileged peer" that represents an always-on, cloud-deployed peer that performs backup, continual sync, and other services. Connectivity to this peer would indicate to the user that their work is being persisted or backed up, or other services are available such as remote compute. Finally, if the device requires a service to be available in order to do peer discovery, access to that service represents the ability to discover and connect to new peers.
cool title: "Unbundling Online Status"
In the final analysis, in a peer-to-peer world, connectivity is on a peer-by-peer basis and connectivity to peers indicates the availability of specific _services_. Some of those services may include:
- real-time collaboration with another end user
- synchronization with one of my other devices
- backup of my work
- ability to connect to new users
- specialized remote compute capabilities such as an LLM or an indexer
The simplistic on/off representation of connectivity found in the centralized world will have to be unbundled into the availability of a set of capabilities. Each capability may be available or not depending on network conditions, the computational capabilities of the client device, and a variety of other factors.