Search Shortcut cmd + k | ctrl + k
Search cmd+k ctrl+k
0.10 (stable)
DuckDB Installation

This page contains installation options for DuckDB:

  • Binaries are available for major programming languages and platforms
  • We recommend using the stable release, currently 0.10.2
  • If there are no pre-packaged binaries for a platform, consider building DuckDB from source


  • 0.10.2 (stable release)
  • Nightly build (bleeding edge)


  • Command line
  • Python
  • R
  • Java
  • Node.js
  • Rust
  • Go
  • C/C++
  • ODBC


  • Windows
  • macOS
  • Linux

Download method

  • Package manager
  • Direct download


  • x86_64
  • arm64


This section is intentionally left blank

Usage example

import duckdb
cursor = duckdb.connect()
print(cursor.execute('SELECT 42').fetchall())
pip install duckdb --upgrade
npm install duckdb
cargo add duckdb --features bundled
go get
git clone
cd duckdb
git checkout v0.10.2
make -j8
git clone
cd duckdb
make -j8
brew install duckdb
DuckDB is currently not available via apt/yum.
Please use the following binary:
DuckDB is currently not available via apt/yum.
Please use the following binary:
winget install DuckDB.cli

sudo apt-get install unixodbc unixodbc-dev
./ --help

sudo apt-get install unixodbc unixodbc-dev
./ --help
pip install duckdb --pre --upgrade
install.packages('duckdb', repos=c('', ''))
Nightly Java builds are available in the Sonatype snapshots repository, which can be accessed as follows:


npm install duckdb@next
Currently not available
import duckdb
cursor = duckdb.connect()
print(cursor.execute('SELECT 42').fetchall())
con = dbConnect(duckdb::duckdb(), ":memory:")
dbWriteTable(con, "iris", iris)
dbGetQuery(con, 'SELECT "Species", MIN("Sepal.Width") FROM iris GROUP BY "Species"')
Connection conn = DriverManager.getConnection("jdbc:duckdb:");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 42");
var duckdb = require('duckdb');
var db = new duckdb.Database(':memory:'); // or a file name for a persistent DB
db.all('SELECT 42 AS fortytwo', function(err, res) {
  if (err) {
use duckdb::{Connection, Result};

struct Person { id: i32, name: String, }

fn main() -> Result<()> {
    let conn = Connection::open_in_memory()?;

        r"CREATE TABLE person (id BIGINT, name VARCHAR);
          INSERT INTO person VALUES (42, 'John');
    let mut stmt = conn.prepare("SELECT id, name FROM person")?;
    let person_iter = stmt.query_map([], |row| {
        Ok(Person {id: row.get(0)?, name: row.get(1)?})

    for person in person_iter {
        println!("Found person {:?}", person.unwrap());
package main

import (
	_ ""

func main() {
	db, _ := sql.Open("duckdb", "")

	db.Exec(`CREATE TABLE person (id INTEGER, name VARCHAR)`)
	db.Exec(`INSERT INTO person VALUES (42, 'John')`)

	var (
		id   int
		name string
	row := db.QueryRow(`SELECT id, name FROM person`)
	_ = row.Scan(&id, &name)
	fmt.Println("id:", id, "name:", name)
DuckDB db(nullptr);
Connection con(db);
auto result = con.Query("SELECT 42");
About this page

Last modified: 2024-04-22