惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
量子位
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
GbyAI
GbyAI
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
Y
Y Combinator Blog
L
LangChain Blog
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
Martin Fowler
Martin Fowler
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客

Supabase Blog

AI Agents Know About Supabase. They Don't Always Use It Right. Custom OIDC Providers for Supabase Auth 100,000 GitHub stars Supabase docs over SSH Navigating Regional Network Blocks Supabase Joins the Stripe Projects Developer Preview Log Drains: Now available on Pro Supabase Storage: major performance, security, and reliability updates Supabase incident on February 12, 2026 Hydra joins Supabase X / Twitter OAuth 2.0 is now available for Supabase Auth BKND joins Supabase Supabase is now an official Claude connector Supabase PrivateLink is now available Introducing: Postgres Best Practices When to use Read Replicas vs. bigger compute Introducing TRAE SOLO integration with Supabase Supabase Security Retro: 2025 Sync Stripe Data to Your Supabase Database in One Click Building ChatGPT Apps with Supabase Edge Functions and mcp-use Own Your Observability: Supabase Metrics API Introducing Supabase for Platforms Adding Async Streaming to Postgres Foreign Data Wrappers Build "Sign in with Your App" using Supabase Auth Introducing Seven New Email Templates for Supabase Auth The new Supabase power for Kiro Introducing Supabase ETL Introducing Analytics Buckets Introducing Vector Buckets Snap, Inc. Launches Snap Cloud, Powered by Supabase
Introducing iceberg-js: A JavaScript Client for Apache Ic...
Katerina Skroumpelou · 2025-12-08 · via Supabase Blog

Introducing iceberg-js: A JavaScript Client for Apache Iceberg

Today we are releasing iceberg-js, a minimal, vendor-agnostic JavaScript client for the Apache Iceberg REST Catalog API.

Apache Iceberg is becoming the standard for large-scale analytics workloads. But until now, JavaScript and TypeScript developers have lacked a simple way to interact with Iceberg REST Catalogs.

We recently launched Analytics Buckets in the Supabase Dashboard. This feature lets you create and manage Iceberg tables directly from the Supabase UI. To power this experience, we needed a JavaScript library that could talk to Iceberg REST Catalogs.

We looked around and did not find what we needed. Most Iceberg tooling is built for JVM languages like Java and Scala. The JavaScript ecosystem had nothing lightweight and focused. So we built iceberg-js.

We care about supporting open-source tools and communities, and creating developer-friendly libraries is one of the ways we contribute.

iceberg-js is a thin HTTP wrapper that mirrors the official Iceberg REST API. It provides a 1:1 mapping to the API, making it easy to manage namespaces and tables from any JavaScript or TypeScript environment.

The library is designed around a few core principles:

First, it is generic. It works with any Iceberg REST Catalog implementation. It is not tied to any specific vendor.

Second, it is minimal. There is no engine-specific logic and no heavy dependencies. It uses the native fetch API with support for custom implementations.

Third, it is type-safe. It provides full TypeScript support with strongly-typed request and response models.

We were deliberate about what iceberg-js should not do. Keeping the scope narrow is what makes the library maintainable.

  • iceberg-js does not support data operations. It cannot read or write Parquet files. For that, use a query engine like DuckDB, Spark, or Trino.

  • It does not support query execution. It is purely a catalog management tool.

  • It does not include engine-specific integrations. No Spark, Flink, or other engine code.

  • It does not support advanced features like branching, tagging, or time travel queries beyond basic metadata operations.

These boundaries exist on purpose. For data operations, pair iceberg-js with a query engine that supports Iceberg.

Install the package:


_10

npm install iceberg-js


Create a catalog client and start managing namespaces and tables:


_15

import { IcebergRestCatalog } from 'iceberg-js'

_15

_15

const catalog = new IcebergRestCatalog({

_15

baseUrl: 'https://my-catalog.example.com/iceberg/v1',

_15

auth: {

_15

type: 'bearer',

_15

token: process.env.ICEBERG_TOKEN,

_15

},

_15

})

_15

_15

// Create a namespace

_15

await catalog.createNamespace({ namespace: ['analytics'] })

_15

_15

// List tables

_15

const tables = await catalog.listTables({ namespace: ['analytics'] })


The library supports multiple authentication methods including bearer tokens, custom headers, and custom functions for dynamic authentication.

iceberg-js works everywhere JavaScript runs. It supports Node.js (ESM and CommonJS), TypeScript, modern browsers, Deno, and all major bundlers like Webpack, Vite, and Rollup.

All compatibility scenarios are tested in CI on Node.js 20 and 22.

iceberg-js is MIT licensed and available on GitHub. We welcome contributions that align with the library's goals. Note, as mentioned above, the library is intentionally focused. We plan to keep it that way. If you need features outside the scope of catalog management, we recommend pairing iceberg-js with a query engine.

You can start using iceberg-js today.