Data Sources
The external APIs and blockchain data that power Frontier Pulse.
24,502
Solar Systems
from World API
10 min
Refresh Rate
oracle cycle
5 min
Cache TTL
live data
50
Batch Size
per PTB transaction
EVE Frontier World API
The World API is the primary source of game state. Base URL: https://world-api-stillness.live.tech.evefrontier.com
| Endpoint | Data | Used For |
|---|---|---|
GET /v2/solarsystems | 24,502 systems with 3D coords, constellation, region | Galaxy map rendering, system enumeration |
GET /v2/solarsystems/:id | Single system detail + gate links | Deep dive panel, constellation neighbors |
GET /v2/smartassemblies | All deployed Smart Assemblies (gates, SSUs, turrets) | Infrastructure mapping, stewardship scoring |
GET /v2/killmails | PvP kill records (attacker, victim, system, timestamp) | Combat analysis, volatility scoring |
Pagination Strategy
All paginated endpoints support ?limit=N&offset=M and return metadata.total. Frontier Pulse uses parallel page fetching for speed:
worldApi.ts
// 1. Probe for total count
const probe = await fetch(`${BASE}/v2/solarsystems?limit=1&offset=0`);
const total = (await probe.json()).metadata.total; // → 24502
// 2. Fetch all pages in parallel (1000 per page)
const pages = Math.ceil(total / 1000); // → 25 pages
const fetches = Array.from({ length: pages }, (_, i) =>
fetch(`${BASE}/v2/solarsystems?limit=1000&offset=${i * 1000}`)
.then(r => r.json())
.then(d => d.data)
);
const all = (await Promise.all(fetches)).flat(); // → 24502 systemsCoordinate Normalization
World API provides 3D coordinates (x, y, z). The frontend normalizes these to 0-1 range for Canvas rendering:
worldApi.ts
// Find bounds across all systems
for (const s of all) {
minX = min(minX, s.location.x); maxX = max(maxX, s.location.x);
minZ = min(minZ, s.location.z); maxZ = max(maxZ, s.location.z);
minY = min(minY, s.location.y); maxY = max(maxY, s.location.y);
}
// Normalize with 3% padding
nx = 0.03 + ((x - minX) / rangeX) * 0.94 // → horizontal position
ny = 0.03 + ((z - minZ) / rangeZ) * 0.94 // → vertical position
depth = (y - minY) / rangeY // → parallax/sizingSui Blockchain
On-chain data is read via Sui JSON-RPC and written via the Sui TypeScript SDK.
| Method | Data | Used By |
|---|---|---|
sui_getObject | PulseRegistry shared object (CHI, player count, system count, timestamps) | Frontend suiReader.ts |
suix_queryTransactionBlocks | Oracle transaction history filtered by package ID | Transaction log page |
signAndExecuteTransaction | Batched PTBs for system health, reputation, CHI, alerts | Oracle suiWriter.ts |
Reading On-Chain Data
lib/suiReader.ts
const SUI_RPC = "https://fullnode.testnet.sui.io:443";
const REGISTRY_ID = "0x945f1d589bae9c60e95b99c0f02a7fffb814db3772cb16467e5c683ea0bd32c4";
async function rpc<T>(method: string, params: unknown[]): Promise<T> {
const res = await fetch(SUI_RPC, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }),
});
return (await res.json()).result as T;
}
// Read CHI + registry stats
const result = await rpc("sui_getObject", [
REGISTRY_ID,
{ showContent: true },
]);
const fields = result.data?.content?.fields;
// → fields.chi.fields.overall_score, fields.total_players, etc.Data Priority Chain
The frontend uses a three-tier fallback strategy for every data request:
1On-chain (Sui) — Read from PulseRegistry via JSON-RPC. Most authoritative.
2Live-computed — Fetch World API data and compute scores locally using
liveData.ts.3Deterministic fallback — Hash-based vitals from
vitals.ts. Same ID = same scores, always.This means the dashboard always works, even when the oracle is offline or the World API is unreachable. Only the source and freshness of scores changes.
Caching & Refresh Rates
| Data Type | Cache Location | TTL |
|---|---|---|
| Solar systems (24K) | In-memory (worldApi.ts) | 10 minutes |
| Smart assemblies + killmails | In-memory (liveData.ts) | 5 minutes |
| Computed scores (CHI, reputation) | Sui blockchain | Written every 10 min by oracle |
| Pulse Card SVG | HTTP Cache-Control | max-age=300 (5 min) |
| Frontend page data | None (force-dynamic) | Fresh on every load |
External Resources
| Resource | URL |
|---|---|
| World API (Swagger) | docs.evefrontier.com/SwaggerWorldApi |
| Builder Documentation | docs.evefrontier.com |
| Sui JSON-RPC Reference | docs.sui.io/references/sui-api |
| Sui TypeScript SDK | sdk.mystenlabs.com |
| Move Book | move-book.com |
| EVE Frontier Discord | discord.gg/evefrontier |