Extensions

The Extension Mechanism and the Community Repository

An extension is a shared library built for one DuckDB 61,228 version and platform. INSTALL downloads it once into ~/.duckdb/extensions/<version>/<platform>/, LOAD links it into the running process, and many core extensions (httpfs, postgres, iceberg among them) autoload the first time a query needs them. Core extensions are built and signed by the DuckDB project; the community repository holds hundreds of third-party ones, built and signed by DuckDB's CI and installed with FROM community:

481-extensions.sql: installed extensions, and a community extension in useSQL
SELECT extension_name AS name, installed, loaded, install_mode, installed_from AS repo
FROM duckdb_extensions()
WHERE extension_name IN ('parquet', 'json', 'httpfs', 'postgres_scanner', 'spatial');
INSTALL prql FROM community;
LOAD prql;
from sales
filter status != 'cancelled'
group genre (aggregate {gross = sum gross_amount})
sort {-gross}
take 2;
Output
│       name       │ installed │ loaded  │   install_mode    │  repo   │
...
│ httpfs           │ true      │ false   │ REPOSITORY        │ core    │
│ parquet          │ true      │ true    │ STATICALLY_LINKED │         │
│ postgres_scanner │ true      │ false   │ REPOSITORY        │ core    │
...
│ Technology │     934530.50 │
│ Cooking    │     716952.00 │

parquet and json are compiled into the CLI; httpfs and postgres (listed by its old name, postgres_scanner) wait in the cache. After LOAD prql the CLI accepted a PRQL pipeline, a query language the extension compiles to SQL. Extensions run inside your process with its privileges, so DuckDB refuses unsigned ones unless you start it with allow_unsigned_extensions. The cache is kept per DuckDB version (v1.5.5 in the path), so an upgrade installs extensions afresh.