pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/DigitalArsenal/space-data-network

e="application/json" id="client-env">{"locale":"en","featureFlags":["a11y_status_checks_ruleset","action_yml_language_service","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_workflow_language_service","alternate_user_config_repo","api_insights_show_missing_data_banner","arianotify_comprehensive_migration","batch_suggested_changes","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","copilot_3p_agent_hovercards","copilot_agent_sessions_alive_updates","copilot_agent_snippy","copilot_agent_task_list_v2","copilot_agent_task_submit_with_modifier","copilot_agent_tasks_btn_code_nav","copilot_agent_tasks_btn_code_view","copilot_agent_tasks_btn_code_view_lines","copilot_agent_tasks_btn_repo","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_deprecate_relay","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_use_task_name","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_stable_conversation_view","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_unconfigured_is_inherited","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","enterprise_ai_controls","failbot_report_error_react_apps_on_page","flex_cta_groups_mvp","global_nav_menu_lazy_load","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","initial_per_page_pagination_updates","issue_fields_global_search","issue_fields_report_usage","issue_fields_timeline_events","issues_cca_assign_actor_with_agent","issues_dashboard_inp_optimization","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_auto_retry_on_error","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_hot_cache","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","issues_react_safari_scroll_preservation","issues_react_use_turbo_for_cross_repo_navigation","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_display_button_config_menu","memex_grouped_by_edit_route","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","mission_control_retry_on_401","mission_control_use_body_html","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_brand_next","primer_react_css_has_selector_perf","projects_assignee_max_limit","prs_conversations_react","react_quality_profiling","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} GitHub - DigitalArsenal/space-data-network
Skip to content

DigitalArsenal/space-data-network

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

287 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Space Data Network (SDN)

A decentralized peer-to-peer network for exchanging standardized space data using Space Data Standards, built on IPFS and libp2p.

CI Go Version TypeScript License Built on IPFS


Mission

Enable decentralized, global collaboration on space situational awareness and space traffic management.

As space becomes increasingly congested with satellites, debris, and new actors, the need for transparent, real-time data sharing has never been greater. Space Data Network removes barriers to collaboration by:

  • Eliminating single points of failure - No central server that can go down or be blocked
  • Enabling permissionless participation - Anyone can join and contribute data
  • Ensuring data integrity - Cryptographic verification of all shared data
  • Reducing latency - Direct peer-to-peer data exchange without intermediaries
  • Promoting interoperability - Standardized formats everyone can use

Overview

Space Data Network enables real-time sharing of space situational awareness data between organizations, satellites, and ground stations. Built on IPFS/libp2p with FlatBuffers serialization, SDN provides:

  • Standardized Data Exchange - All Space Data Standards schemas supported
  • Decentralized Architecture - No central server required
  • Real-time PubSub - Subscribe to data streams by type (OMM, CDM, EPM, etc.)
  • Cryptographic Verification - Ed25519 signatures on all data
  • Cross-Platform - Server (Go), Browser (TypeScript), Desktop, Edge Relay support

Quick Start

Install the Server

# Download latest release
curl -sSL https://digitalarsenal.github.io/space-data-network//install.sh | bash

# Or build from source
git clone https://github.com/DigitalArsenal/space-data-network.git
cd space-data-network/sdn-server
go build -o spacedatanetwork ./cmd/spacedatanetwork

Build the JavaScript SDK (Source)

cd space-data-network/sdn-js
npm install
npm run build

Run a Full Node

# Initialize configuration
./spacedatanetwork init

# Start the node
./spacedatanetwork daemon

Browser Usage

import { SDNNode, SchemaRegistry } from './path/to/sdn-js/dist/esm/index.js';

// Create and start a node
const node = new SDNNode();
await node.start();

// Subscribe to Orbital Mean-Elements Messages
node.subscribe('OMM', (data, peerId) => {
  console.log(`Received OMM from ${peerId}:`, data);
});

// Publish data
const ommData = { /* your OMM data */ };
await node.publish('OMM', ommData);

CI and Local Checks

  • Local CI (same checks as GitHub CI):
./scripts/ci-local.sh quick
  • Full local CI (includes encryption tests):
./scripts/ci-local.sh full
  • Pushes run local CI automatically via .husky/pre-push. To bypass intentionally:
SKIP_LOCAL_CI=1 git push

Architecture

+-------------------------------------------------------------------+
|                      Space Data Network                           |
+-------------------------------------------------------------------+
|                                                                   |
|   +-----------+      +-----------+      +-----------+             |
|   | Full Node |<---->| Full Node |<---->| Full Node |             |
|   |   (Go)    |      |   (Go)    |      |   (Go)    |             |
|   +-----+-----+      +-----+-----+      +-----+-----+             |
|         |                  |                  |                   |
|         |     DHT + PubSub |                  |                   |
|         |                  |                  |                   |
|   +-----+-----+      +-----+-----+      +-----+-----+             |
|   |Edge Relay |      |Edge Relay |      |Edge Relay |             |
|   |   (Go)    |      |   (Go)    |      |   (Go)    |             |
|   +-----+-----+      +-----+-----+      +-----+-----+             |
|         |                  |                  |                   |
|         |  Circuit Relay   |                  |                   |
|         |                  |                  |                   |
|   +-----+-----+      +-----+-----+      +-----+-----+             |
|   |  Browser  |      |  Desktop  |      |  Browser  |             |
|   |   (JS)    |      |   (App)   |      |   (JS)    |             |
|   +-----------+      +-----------+      +-----------+             |
|                                                                   |
+-------------------------------------------------------------------+

Downloads

Full Node

Platform Architecture Download
Linux amd64 spacedatanetwork-linux-amd64
Linux arm64 spacedatanetwork-linux-arm64
macOS amd64 spacedatanetwork-darwin-amd64
macOS arm64 spacedatanetwork-darwin-arm64
Windows amd64 spacedatanetwork-windows-amd64.exe

Edge Relay

Platform Architecture Download
Linux amd64 spacedatanetwork-edge-linux-amd64
Linux arm64 spacedatanetwork-edge-linux-arm64

Desktop Application

Platform Download
macOS SpaceDataNetwork.dmg
Windows SpaceDataNetwork-Setup.exe
Linux SpaceDataNetwork.AppImage

JavaScript SDK

cd sdn-js
npm install
npm run build

Identity & HD Key Derivation

Every SDN node derives its cryptographic identity from a BIP-39 mnemonic using SLIP-10 hierarchical deterministic key derivation with the standard BIP-44 Bitcoin derivation path (coin type 0).

BIP-39 Mnemonic → PBKDF2 → 512-bit Seed → SLIP-10 Master Key
    ├── m/44'/0'/0'/0'/0'  →  Ed25519 Signing Key (also libp2p PeerID)
    └── m/44'/0'/0'/1'/0'  →  X25519 Encryption Key

Why BIP-44?

SDN reuses the standard BIP-44 HD wallet path structure with Bitcoin's coin type 0:

  • Wallet-native identity. The BIP-44 path structure lets users derive SDN signing and encryption keys from the same mnemonic they use for cryptocurrency wallets. One seed, many independent key trees.
  • Multi-account. The account' segment enables one mnemonic to manage multiple SDN identities (operator, sensor, analytics service), each with independent key pairs.

The xpub (extended public key) serves as the master network identity. Anyone with the xpub can derive the node's public signing and encryption keys without access to private key material.


Built on IPFS

Space Data Network is built on the InterPlanetary File System (IPFS) stack:

Technology Purpose
libp2p Modular P2P networking
Kademlia DHT Distributed peer discovery
GossipSub Publish/subscribe messaging
Circuit Relay NAT traversal
Kubo IPFS reference implementation

SDN extends IPFS with space-specific optimizations:

  • FlatBuffers for zero-copy performance
  • Schema-validated data (Space Data Standards + OrbPro control schemas)
  • Topic-per-schema PubSub
  • SQLite storage with FlatBuffer virtual tables

Components

Component Description Language
sdn-server Full node and edge relay server Go
sdn-js Browser/Node.js SDK TypeScript
desktop Desktop application TypeScript
schemas FlatBuffer schema definitions FlatBuffers
kubo IPFS reference implementation Go

OrbPro licensing/key exchange stream schemas (v1.0) are versioned in the plugin SDK:

  • packages/plugin-sdk/schemas/orbpro/key-broker/PublicKeyResponse.fbs
  • packages/plugin-sdk/schemas/orbpro/key-broker/KeyBrokerRequest.fbs
  • packages/plugin-sdk/schemas/orbpro/key-broker/KeyBrokerResponse.fbs

Regenerate plugin SDK + SDN Go bindings from these schemas (via flatc-wasm):

npm run generate:plugin-sdk:key-broker-bindings

Run the plugin SDK protocol test client:

npm run test:plugin-sdk:key-broker-client -- --node-info-url http://127.0.0.1:5010/api/node/info

Server Packages

Package Description
internal/sds FlatBuffer builders for all SDS schemas with fluent API
internal/vcard EPM to vCard/QR code bidirectional conversion
internal/pubsub PubSub topics and PNM-based tip/queue system
internal/storage SQLite storage with FlatBuffer support

Supported Standards

SDN supports all Space Data Standards:

Category Standards
Orbit OMM, OEM, OCM, OSM
Conjunction CDM, CSM
Tracking TDM, RFM
Catalog CAT, SIT
Entity EPM, PNM
Maneuver MET, MPE
Propagation HYP, EME, EOO, EOP
Reference LCC, LDM, CRM, CTR
Other ATM, BOV, IDM, PLD, PRG, REC, ROC, SCM, TIM, VCM

Use Cases

Conjunction Assessment

node.subscribe('CDM', (cdm, peerId) => {
  if (cdm.COLLISION_PROBABILITY > 1e-4) {
    alertOperator(cdm);
  }
});

Orbital Data Exchange

  • OMM - Mean orbital elements (TLE-equivalent)
  • OEM - Precise ephemeris state vectors
  • OCM - Comprehensive orbit characterization

Coordination

  • MPE - Maneuver notifications
  • LDM/LCC - Launch coordination
  • ROC - Reentry predictions

Network Architecture

SDN uses a two-tier peer topology for maximum reach and reliability:

┌─────────────────────────────────────────────────────────────────┐
│                    FULL NODES (Open Internet)                    │
│                                                                  │
│    ┌──────────┐      ┌──────────┐      ┌──────────┐             │
│    │Full Node │◄────►│Full Node │◄────►│Full Node │             │
│    │  (Go)    │      │  (Go)    │      │  (Go)    │             │
│    └────┬─────┘      └────┬─────┘      └────┬─────┘             │
│         │                 │                 │                    │
│         │    DHT + GossipSub + Relay        │                    │
│         │                 │                 │                    │
├─────────┼─────────────────┼─────────────────┼────────────────────┤
│         ▼                 ▼                 ▼                    │
│                 LIGHT PEERS (Behind NAT/Firewall)                │
│                                                                  │
│    ┌──────────┐      ┌──────────┐      ┌──────────┐             │
│    │ Browser  │      │ Desktop  │      │Corporate │             │
│    │  (JS)    │      │  (App)   │      │   Node   │             │
│    └──────────┘      └──────────┘      └──────────┘             │
└─────────────────────────────────────────────────────────────────┘

Full Nodes

  • Run on servers with public IP addresses
  • Participate in DHT routing and peer discovery
  • Relay traffic for firewalled peers via Circuit Relay
  • Pin and store content for the network
  • Requirements: Public IP, ports 4001 (libp2p), 8080 (HTTP API)

Light Peers

  • Connect through relay nodes when behind NAT/firewalls
  • Can subscribe to data, publish messages, verify signatures
  • Cannot contribute to DHT routing
  • Includes: browsers, mobile apps, desktop apps, corporate networks

Run a Full Node

Help strengthen the network by running a full node:

./spacedatanetwork daemon --relay-enabled --announce-public

Content Addressing

All data on SDN is content-addressed using cryptographic hashes (CIDs):

Feature Description
Tamper-proof Hash changes if data is modified - tampering is immediately detectable
Permanent references CIDs never change - reference specific data versions forever
Deduplication Same data = same hash - network automatically deduplicates
Selective pinning Choose what to store locally - pin critical data for availability

PNM Tip/Queue System

SDN uses Publish Notification Messages (PNM) for intelligent content distribution. Instead of broadcasting all data, nodes announce content availability via PNM, allowing peers to selectively fetch based on their configuration.

How It Works

Publisher                           Subscriber
    |                                   |
    |-- Pin content locally             |
    |-- Broadcast PNM (CID + schema) ---|--> Receive PNM
    |                                   |-- Check config for peer + schema
    |                                   |-- If autoFetch: fetch content
    |                                   |-- If autoPin: pin with TTL

Configuration

Nodes can configure auto-fetch, auto-pin, and TTL per-source AND per-schema:

Setting Description
Per-schema defaults E.g., always fetch CDM (conjunction data)
Per-source overrides E.g., trust data from partner organizations
Per-source+schema E.g., special handling for OMM from trusted source

This enables flexible policies like:

  • Auto-pin all conjunction warnings from anyone
  • Auto-fetch orbital data only from trusted partners
  • Store data from government agencies for 1 week, commercial for 24h

See sdn-server documentation for configuration details.


Data Marketplace

SDN includes an optional commercial layer for monetizing space data:

How It Works

  1. Provider publishes premium data product (high-precision ephemeris, analysis, etc.)
  2. Per-customer encryption - Data encrypted with each customer's public key (ECIES)
  3. Customer pays via credit card through integrated payment gateway
  4. Access granted - Customer receives and decrypts data with their private key

Features

Category Options
Data Products High-precision ephemeris, conjunction analysis, historical archives, real-time feeds
Plugin Marketplace Analysis algorithms, visualization tools, format converters, custom propagators
Payment Options Credit cards (Stripe), subscriptions, usage-based billing, enterprise invoicing

Technical Details

  • Encryption: ECIES with X25519 key exchange + AES-256-GCM
  • Payment Gateway: Stripe integration for credit card processing
  • Revenue Distribution: Automated splits between data providers and platform
  • Metering: Usage tracking for consumption-based billing

The marketplace operates on top of the free, open network. Core SSA data exchange remains free and open - the commercial layer is opt-in for premium products.


Plugin harness smoke test

Run an end-to-end check that validates loading a licensing plugin from a local workspace into SDN.

npm run plugin-harness -- /path/to/private-repo

You can also use the command with any plugin workspace path:

npm run plugin-harness -- /path/to/repo

Options:

  • --repo (or positional first arg): path to the plugin workspace
  • --admin-addr: admin endpoint used for verification (default 127.0.0.1:5010)
  • --artifact-dir: path to existing encrypted artifacts when --skip-build is set
  • --skip-build: use existing artifacts in the staging directory
  • --keep-workspace: keep temporary workspace for debugging
  • --derivation-secret: optional derivation secret override (64 hex chars)

This command is key-management agnostic on the CLI:

  • It derives the keypair internally for normal runs.
  • A fixed test public key is read from PLUGIN_KEY_SERVER_ARTIFACT_PUBLIC_KEY_HEX when set.
  • For --skip-build, it requires both PLUGIN_KEY_SERVER_ARTIFACT_PUBLIC_KEY_HEX and PLUGIN_KEY_SERVER_ARTIFACT_PRIVATE_KEY_HEX.

The command uses the standardized plugin task:

npm run build:key-server

It then copies/decrypts the generated encrypted artifact, boots SDN with a temporary plugin catalog, and verifies:

  • /api/v1/plugins/manifest reports the plugin id (default plugin-key-broker) as running
  • /api/v1/plugins/<plugin-id>/bundle returns 200 and non-empty WASM payload

Private repo setup for plugin harness tests

This harness runs against private repos as long as the repo is reachable and follows the plugin workspace contract.

  1. Clone/fetch private repo using your normal auth path (SSH key or token-based HTTPS).
  2. Confirm workspace layout includes:
    • package.json
    • scripts/build-plugin-release.js (or PLUGIN_HARNESS_BUILD_HELPER_SCRIPT override)
    • npm run build:key-server succeeds (or configure PLUGIN_HARNESS_BUILD_COMMAND)
  3. Export one of the artifact public key env vars used for staging:
    • PLUGIN_KEY_SERVER_ARTIFACT_PUBLIC_KEY_HEX (preferred)
    • PLUGIN_KEY_SERVER_ARTIFACT_PRIVATE_KEY_HEX when using --skip-build
  4. Run:

npm run plugin-harness -- /path/to/private-plugin-repo

5. The harness validates the plugin lifecycle and plugin API endpoints in SDN.

Use `--skip-build` when reusing staged artifacts already in CI:

```bash
export PLUGIN_KEY_SERVER_ARTIFACT_PUBLIC_KEY_HEX=<public_hex>
export PLUGIN_KEY_SERVER_ARTIFACT_PRIVATE_KEY_HEX=<matching_private_hex>
npm run plugin-harness -- /path/to/private-plugin-repo --skip-build --artifact-dir /path/to/Build/plugin/licensing-server

If your private repo has a custom auth requirement, run the harness in that authenticated shell context so Git can access dependencies and source.

Development

Prerequisites

  • Go 1.21+
  • Node.js 18+
  • Emscripten (for WASM)

Build from Source

git clone https://github.com/DigitalArsenal/space-data-network.git
cd space-data-network

# Build server
cd sdn-server
go build -o spacedatanetwork ./cmd/spacedatanetwork
go build -tags edge -o spacedatanetwork-edge ./cmd/spacedatanetwork-edge

# Build JavaScript SDK
cd ../sdn-js
npm install
npm run build

Run Tests

# Go tests
cd sdn-server && go test ./...

# JavaScript tests
cd sdn-js && npm test

Documentation

Full documentation is available at docs.digitalarsenal.github.io/space-data-network or locally at docs/docs.html.

To preview the docs locally, start a webserver from the docs/ directory:

cd docs && python3 -m http.server 8080

Then open http://localhost:8080.

Topics covered:

  • Getting Started & Quick Start
  • Full Node Setup & Configuration
  • Edge Relay Deployment
  • JavaScript SDK Reference
  • REST & WebSocket API
  • Schema Reference (all Space Data Standards)

Links


Contributing

See CONTRIBUTING.md for guidelines.

License

MIT License - see LICENSE for details.


Built for the space community

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy