Open-source file-format loaders for geospatial, tabular, and 3D data, with worker-thread and streaming support for big-data JS apps.
What it does
loaders.gl is an open-source JavaScript library (MIT, v4) that loads and writes tabular, geospatial, and 3D file formats through a single unified API. It runs in browsers, Node.js, and web workers, and ships pre-integrated with the deck.gl visualization framework.
Loading geospatial or 3D data in JavaScript is a format zoo: shapefiles, glTF, Arrow tables, CSVs, point clouds. loaders.gl (MIT, currently at v4) gives every format the same load / loadInBatches call, so switching formats does not rewrite your data pipeline.
The library is split into a small @loaders.gl/core module and a range of optional format modules (CSV, Arrow, glTF, and more) that you install individually. Per the docs, each module exports loaders and writers with identical method signatures, so you can swap CSVLoader for ArrowLoader without touching the rest of your code. Crucially, some modules (like @loaders.gl/arrow) return columnar Arrow tables rather than row objects, which is a meaningful distinction for analytics pipelines that expect columnar memory layouts.
Many loaders ship pre-built web workers, moving parse work off the main thread entirely. One non-obvious gotcha noted in the architecture: worker-thread loaders rely on transferable typed arrays and modern browser security headers (COOP/COEP and SharedArrayBuffer access) for full performance. If your deployment cannot set those headers, loaders fall back gracefully but lose the off-thread benefit.
loaders.gl is pre-integrated with deck.gl and the broader vis.gl ecosystem, which is genuinely convenient: deck.gl's internal fetchFile hooks and CORS handling are wired up out of the box. However, that tight coupling means the library is tuned around vis.gl usage patterns. If your only format is GeoJSON and you do not need workers or streaming, a lighter-weight library may avoid the module overhead entirely. loaders.gl earns its footprint when you need multi-format support, streaming, or worker offload.
loaders.gl is the right call when your app must handle multiple geospatial or 3D formats at scale, tested at deck.gl production scale. Start at loaders.gl/docs to browse format modules, then install only the loaders your stack actually needs.
Features
Field notes
Reviewed Jun 26, 2026
Best for
Builder outcomes
Watch out
Tested with
loaders.gl is an open-source (MIT) JavaScript library at v4 that provides a unified API for loading and writing tabular, geospatial, and 3D file formats. It ships as a small core module plus optional format-specific modules (CSV, Arrow, glTF, Shapefile, and more), each returning parsed data as plain JavaScript objects or typed arrays. The library runs in browsers, Node.js LTS, and web workers, and comes pre-integrated with the deck.gl visualization framework.
Install `@loaders.gl/core` plus whichever format module you need (for example `@loaders.gl/csv`), then call `load('data.csv', CSVLoader)` to get a JavaScript array of row objects. For files larger than memory, use `loadInBatches` with an async iterator: `for await (const batch of await loadInBatches('data.csv', CSVLoader))`. The docs at loaders.gl/docs include a Get Started guide that walks through both patterns in TypeScript.
Yes. loaders.gl is released under the MIT license, making it free to use, modify, and redistribute in both commercial and open-source projects. It is published as a suite of composable npm modules, so you only install the loaders your application actually needs.
loaders.gl is best for JavaScript applications that must handle multiple geospatial or 3D file formats, especially when streaming large files or offloading parse work to web workers. It is the natural choice for teams building on deck.gl or other vis.gl frameworks, and for Node.js backend services that need the same format support as the browser client. If your app only consumes a single lightweight format like GeoJSON, a narrower library avoids the extra module weight.
loaders.gl's core advantage over single-format libraries is a unified API: swapping `CSVLoader` for `ArrowLoader` (or a 3D loader) requires no changes to the surrounding data pipeline. Format-specific libraries often expose idiosyncratic APIs and offer no worker or streaming support. The tradeoff is that loaders.gl's module system adds some bundle overhead, and some modules (like `@loaders.gl/arrow`) return columnar Arrow tables rather than row objects, which can surprise developers expecting row-oriented output from every loader.
Worker-thread parsing requires the browser deployment to set Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy (COOP/COEP) headers to enable SharedArrayBuffer; without those headers, loaders fall back to the main thread and you lose the off-thread benefit. The Arrow module returns columnar memory layouts, not row arrays, so downstream code must account for both output shapes. Pre-integration with vis.gl means the library is optimized for deck.gl usage patterns, which may not align perfectly with unrelated stacks. Finally, if your only format is GeoJSON and you need no workers or streaming, lighter alternatives will reduce bundle size.
Better Upload: MIT-licensed React library for direct-to-S3 file uploads with minimal setup, presigned URLs, and drag-and-drop UI components.
Best for React apps needing direct-to-S3 file uploads without proxying bytes through the API serverOpen-source React loading animation library with 55+ dot-matrix loaders for shadcn/Tailwind projects, install in one command.
Best for React and Tailwind CSS teams who want polished, on-brand loading animations without building from scratchVisual RAG pipeline that retrieves over screenshot tiles instead of parsed text, preserving tables, charts, and layout for more accurate document search.
Best for Builders doing RAG over documents where tables, charts, or layout carry meaning that HTML parsing silently dropsDependency-free gallery of math-driven loading animations (rose, Lissajous, cardioid, and more) with formulas and copyable code for UI builders.
Best for Builders who want visually distinctive loading animations grounded in named mathematical curvesAuto-generated, pixel-perfect skeleton screens for React, Vue, Svelte, Angular, and React Native, no manual placeholders needed.
Best for Teams tired of skeleton screens drifting out of sync after UI changesFree, MIT-licensed React loading animation registry for shadcn-style projects, copy-paste spinners, skeletons, and motion primitives.
Best for Teams building React and Tailwind CSS products that already use shadcn/ui and need consistent pending states fast