---
title: "Frontend Engineering at Palantir: Plotlines in Three.js"
description: "Palantir’s frontend engineers are building a 3D implementation of Gaia to visualize Foundry Ontology objects with geospatial properties, including ground locations, satellite positions, and paths through space. The system uses Zodiac, a Three.js library backed by Foundry-based APIs: the backend stores, filters, and computes data, while the frontend receives simplified geometry and style information for rendering. Performance techniques include converting latitude and longitude to Earth-fixed coordinates once, batching similarly styled lines into single draw calls, and using instanced meshes plus batched updates for dense satellite scenes; orbital propagation uses TLEs client-side, while heavier analysis remains server-side. The article also describes frame-synchronized animation callbacks that update material properties without rebuilding geometry, while noting that 3D APIs continue to iterate across usability, platform integration, and performance as new data sources and workflows are added."
---

# Frontend Engineering at Palantir: Plotlines in Three.js

[Palantir](https://yomu.fyi/company/palantir) · Palantir · Apr 7, 2026

**Type:** Explainer

## Summary

Palantir’s frontend engineers are building a 3D implementation of Gaia to visualize Foundry Ontology objects with geospatial properties, including ground locations, satellite positions, and paths through space. The system uses Zodiac, a Three.js library backed by Foundry-based APIs: the backend stores, filters, and computes data, while the frontend receives simplified geometry and style information for rendering. Performance techniques include converting latitude and longitude to Earth-fixed coordinates once, batching similarly styled lines into single draw calls, and using instanced meshes plus batched updates for dense satellite scenes; orbital propagation uses TLEs client-side, while heavier analysis remains server-side. The article also describes frame-synchronized animation callbacks that update material properties without rebuilding geometry, while noting that 3D APIs continue to iterate across usability, platform integration, and performance as new data sources and workflows are added.

## Context

Frontend teams needed to render geospatial Ontology objects for defense and intelligence operations in 3D, including objects at altitude, satellite positions, orbital paths, and high-density datasets. A browser-accessible implementation also had to address performance challenges when networks and operational conditions are demanding.

## Approach / What changed

Gaia’s 3D implementation uses Zodiac, a Three.js library, and Foundry-based rendering APIs. The backend handles storage, filtering, and heavier computation, then sends simplified geometry and styles to the client. The renderer uses Earth-fixed coordinates, grouped geometries, single draw calls, instanced meshes, batched satellite updates, client-side TLE propagation, and animation callbacks that change material properties without rebuilding geometry.

## Takeaways

- EarthLineGroup batches similarly styled lines into one draw call, so 10,000 lines with the same styling can become a single GPU operation.
- Instanced meshes let one Zodiac object render thousands of satellites or other objects sharing geometry in the same draw call, with positions updated in batches.
- Animation callbacks run on every frame and update material properties such as color, opacity, and dash direction without rebuilding geometry.

**Tags:** [Architecture](https://yomu.fyi/topic/architecture), [Performance](https://yomu.fyi/topic/performance), [TypeScript](https://yomu.fyi/topic/typescript)

- Source: [Palantir](https://blog.palantir.com/frontend-engineering-at-palantir-plotlines-in-three-js-c0c47f310715)
- Source URL: https://blog.palantir.com/frontend-engineering-at-palantir-plotlines-in-three-js-c0c47f310715
- Ingested by Yomu: 2026-08-30T13:12:28.631Z

[Read original post](https://blog.palantir.com/frontend-engineering-at-palantir-plotlines-in-three-js-c0c47f310715)
