Skip to content

DuckDB-WASM malforms http:// URLs into https://http #2118

@v-kessler

Description

@v-kessler

What happens?

Description

When using DuckDB-WASM to read Iceberg tables from an http:// REST catalog, the data file URLs are incorrectly rewritten to https://http//..., causing the request to fail. This breaks the ability to use DuckDB-WASM with local Iceberg development environments.

Image
  1. Observe the network request in browser DevTools when DuckDB attempts to fetch Parquet data files

Expected Behavior

When the Iceberg catalog returns metadata pointing to data files at http:// URLs (e.g., from MinIO or local S3-compatible storage), DuckDB should preserve the original scheme and make requests to:

http://localhost:9000/warehouse/data/00000-0-abc123.parquet

Actual Behavior

The URL is automatically rewritten and DuckDB attempts to fetch:

https://http//localhost:9000/warehouse/data/00000-0-abc123.parquet

This results in a 404 or network error, making it impossible to read the actual table data.

Environment

  • DuckDB-WASM version: ^1.31.1-dev1.0
  • Browser: Microsoft Edge Version 141.0.3537.85 (Official build) (arm64)
  • OS: macOS 15.6.1
  • Iceberg REST Catalog: Lakekeeper
  • Object Storage: AWS S3

Additional Context

  • HTTPS URLs work correctly when the catalog/storage uses HTTPS
Image

Iceberg-Specific Context

In typical local development with Iceberg:

  • REST Catalog runs on http://localhost:8181
  • Object Storage AWS s3

The URL malformation breaks this workflow entirely for HTTP-based development environments.

This significantly increases complexity for local Iceberg development and testing.

Impact

This prevents using DuckDB-WASM with Iceberg in:

  • Local development environments (typically HTTP-only)
  • Internal/private networks that may not use HTTPS
  • Any HTTP-only Iceberg REST catalog + object storage setup

To Reproduce

Reproduction Steps

  1. Initialize DuckDB-WASM in a browser environment
  2. Configure an Iceberg catalog with HTTP endpoint:

CREATE OR REPLACE SECRET iceberg_secret_np (
        TYPE iceberg,
        TOKEN 'TOKEN' );
 ATTACH 'demo' AS demo (
          TYPE iceberg,
          SECRET iceberg_secret_np,
          ENDPOINT 'https://lakekeeper.nonprod.de/catalog'
        );

  1. Query an Iceberg table:
await db.query(`
    SELECT * FROM demo.my_namespace.my_table LIMIT 10;
`);

Browser/Environment:

Microsoft Edge Version 141.0.3537.85 (Official build) (arm64)

Device:

macOS 15.6.1

DuckDB-Wasm Version:

^1.31.1-dev1.0

DuckDB-Wasm Deployment:

Vite bundled (ES modules) in Vue 3 application

Full Name:

Viktor Kessler

Affiliation:

Vakamo/Lakekeeper

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions