Skip to main content
Development preview — The SDK is under active development.

SDK overview

The Astral SDK is the official TypeScript client for the Astral Protocol. It provides a unified interface for working with location attestations, multi-factor location proofs, and verifiable geospatial computations.

Design philosophy

  • Namespaced API: Clear separation between location, compute, stamps, proofs, and plugin operations
  • Workflow-oriented: Distinct offchain and onchain workflows for location attestations
  • Plugin-extensible: Register location proof plugins; collect signals, create location stamps, and compose multifactor location evidence bundles
  • Multidimensional verification: No single “confidence score” — applications apply their own weighting to a CredibilityVector
  • Type-safe: Full TypeScript support with comprehensive types
  • Batteries included: Handles signing, encoding, EAS integration, and plugin orchestration

Package structure

import { AstralSDK } from '@decentralized-geo/astral-sdk';

// Initialize with unified configuration
const astral = new AstralSDK({
  chainId: 84532,
  signer: wallet,
  apiUrl: 'https://staging-api.astral.global',
  apiKey: 'your-api-key'
});

// Location module — offchain workflow
astral.location.offchain.create(input);
astral.location.offchain.sign(unsigned);
astral.location.offchain.verify(attestation);
astral.location.offchain.publish(attestation);

// Location module — onchain workflow
astral.location.onchain.create(input);
astral.location.onchain.register(unsigned);
astral.location.onchain.verify(attestation);
astral.location.onchain.revoke(attestation);

// Location module — common operations
astral.location.build(input);
astral.location.encode(attestation);
astral.location.decode(data);

// Compute module — spatial operations
astral.compute.distance(from, to, options);
astral.compute.area(geometry, options);
astral.compute.length(geometry, options);
astral.compute.contains(container, containee, options);
astral.compute.within(geometry, target, radius, options);
astral.compute.intersects(a, b, options);

// Compute module — submission
astral.compute.submit(delegatedAttestation);
astral.compute.estimate(delegatedAttestation);
astral.compute.health();

// Stamps module — evidence collection
astral.stamps.collect(options);
astral.stamps.create(options, signals);
astral.stamps.sign(options, stamp, signer);
astral.stamps.verify(stamp, options);

// Proofs module — proof construction + verification
astral.proofs.create(claim, stamps);
astral.proofs.verify(proof, options);

// Plugins module — plugin registration + discovery
astral.plugins.register(plugin);
astral.plugins.get(name);
astral.plugins.list();

Quick start

import { AstralSDK } from '@decentralized-geo/astral-sdk';
import { ethers } from 'ethers';

const provider = new ethers.JsonRpcProvider('https://sepolia.base.org');
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);

const astral = new AstralSDK({
  chainId: 84532,
  signer: wallet,
  apiUrl: 'https://staging-api.astral.global'
});

// Create an offchain location attestation
const attestation = await astral.location.offchain.create({
  location: {
    type: 'Point',
    coordinates: [2.2945, 48.8584]
  },
  memo: 'Eiffel Tower'
});

console.log('Attestation UID:', attestation.uid);

// Compute distance between two locations
const distance = await astral.compute.distance(
  attestation.uid,
  landmarkUID,
  { schema: SCHEMA_UID }
);

console.log('Distance:', distance.result, distance.units);

Configuration

interface AstralConfig {
  // Required
  chainId: number;              // Target chain ID (e.g., 84532 for Base Sepolia)

  // Recommended
  signer?: Signer;              // For signing attestations and transactions
  provider?: Provider;          // For read-only blockchain operations
  apiUrl?: string;              // Defaults to 'https://staging-api.astral.global'
  apiKey?: string;              // Required for TEE verification and hosted endpoints

  // Advanced
  debug?: boolean;              // Enable debug logging
  schemas?: RuntimeSchemaConfig[];  // Pre-register custom schemas
  defaultSchema?: RuntimeSchemaConfig;  // Override default schema
  strictSchemaValidation?: boolean;     // Throw on schema validation errors
}
ChainChain ID
Base Sepolia84532
Base Mainnet8453
Ethereum Sepolia11155111
Ethereum Mainnet1
Celo42220
Arbitrum42161
Optimism10

Module architecture

AstralSDK
├── location: LocationModule      (offchain + onchain attestation workflows)
│   ├── offchain: OffchainWorkflow
│   │   ├── create()    — build + sign in one step
│   │   ├── sign()      — sign unsigned attestation
│   │   ├── verify()    — verify signature
│   │   └── publish()   — store to IPFS/storage
│   ├── onchain: OnchainWorkflow
│   │   ├── create()    — build + register in one step
│   │   ├── register()  — register unsigned attestation
│   │   ├── verify()    — verify onchain attestation
│   │   └── revoke()    — revoke attestation
│   ├── build()         — build unsigned attestation
│   ├── encode()        — encode for EAS
│   └── decode()        — decode from EAS
├── compute: ComputeModule        (verifiable geospatial operations)
│   ├── distance()      — distance between geometries
│   ├── area()          — area of polygon
│   ├── length()        — length of line
│   ├── contains()      — containment check
│   ├── within()        — proximity check
│   ├── intersects()    — intersection check
│   ├── submit()        — submit delegated attestation
│   ├── estimate()      — estimate gas
│   └── health()        — service health check
├── stamps: StampsModule          (evidence collection orchestration)
│   ├── collect()       — collect raw signals from plugins
│   ├── create()        — process signals into unsigned stamp
│   ├── sign()          — sign a stamp
│   └── verify()        — verify stamp validity
├── proofs: ProofsModule          (proof construction + verification)
│   ├── create()        — bundle claim + stamps into proof
│   └── verify()        — verify proof (local or TEE mode)
└── plugins: PluginRegistry       (plugin registration + discovery)
    ├── register()      — register a plugin
    ├── get()           — get plugin by name
    ├── has()           — check if plugin exists
    ├── list()          — list plugin metadata
    ├── all()           — get all plugins
    └── withMethod()    — find plugins with a specific method

Key concepts

Namespaced modules

Clear separation: location.offchain.*, location.onchain.*, compute.*, stamps.*, proofs.*, and plugins.*

Flexible inputs

Accept UIDs, raw GeoJSON, or attestation objects interchangeably.

Delegated attestations

SDK handles the delegated attestation pattern — you pay gas, Astral is attester.

Plugin extensibility

Register proof-of-location plugins for multifactor evidence collection and verification.

Pages

Installation

Install and configure the SDK

Location module

Offchain and onchain attestation workflows

Stamps module

Evidence collection and stamp creation

Location proofs

Proof construction and multidimensional verification

Plugins

Plugin system and registry

Compute module

Geospatial computation methods

EAS integration

Ethereum Attestation Service integration

Migration guide

Migrate from v0.1.x to v0.2.0