Space Mesh enables communication between orbital nodes via Inter-Satellite Links (ISL). When direct ground contact isn’t available, data can be routed through neighboring satellites to reach a ground station.
Without ISL, each orbital node must wait for its own ground pass. With ISL, data can relay through neighboring satellites:
Without ISL
With ISL
Each satellite waits independently for ground contact. Long gaps between sync opportunities.
Satellite
Sync Pattern
Sat-1
Sync - Wait 90min - Sync - Wait 90min
Sat-2
Wait 30min - Sync - Wait 90min - Sync
Sat-3
Wait 60min - Sync - Wait 90min - Sync
Any satellite can relay through neighbors to reach ground. Continuous sync capability.Example route: Sat-1 → Sat-2 → Sat-3 → Ground StationAll nodes can sync continuously via mesh routing.
# Update positions (typically from TLE)mesh.update_positions(epoch=datetime.now())# Or subscribe to position updates@mesh.on_topology_changedef handle_change(event): if event.type == "link_lost": print(f"Link lost: {event.source} ↔ {event.target}") # Routes using this link are automatically rerouted elif event.type == "link_established": print(f"New link: {event.source} ↔ {event.target}")# Get current network statestate = mesh.get_state()print(f"Active nodes: {state.active_nodes}")print(f"Active links: {state.active_links}")print(f"Network diameter: {state.diameter} hops")print(f"Avg path length: {state.avg_path_length:.1f} hops")
from rotastellar_distributed import SpaceMesh# Create mesh for a Walker constellationmesh = SpaceMesh(api_key="rs_...")# Add 40 satellites in polar orbitfor plane in range(8): for sat in range(5): mesh.add_node( f"sat-{plane}-{sat}", orbit_alt=550, orbit_inc=97.5, raan=plane * 45, # Right ascension true_anomaly=sat * 72, # Position in plane isl_range=5000 )# Add global ground stationsstations = [ ("svalbard", 78.2, 15.6), ("hawaii", 19.8, -155.5), ("singapore", 1.3, 103.8), ("chile", -33.4, -70.6), ("south-africa", -33.9, 18.4),]for name, lat, lon in stations: mesh.add_ground_station(name, lat, lon)# Network statsstate = mesh.get_state()print(f"Satellites: {state.active_nodes}")print(f"ISL links: {state.active_links}")print(f"Ground stations: {state.ground_stations}")print(f"Global coverage: {state.coverage:.1%}")# Any satellite can reach ground within 2 hopsfor sat in mesh.nodes: routes = mesh.find_paths(sat, "any-ground", max_hops=2) assert len(routes) > 0, f"{sat} has no route to ground!"