⌘K ctrl+k
Search Shortcut cmd + k | ctrl + k
Command Line Arguments

The table below summarizes DuckDB's command line options. To list all command line options, use the command:

duckdb -help

For a list of dot commands available in the CLI shell, see the Dot Commands page.

Argument Description  
-agent Render output for an AI coding agent. See the Agent Mode page  
-ascii Set output mode to ascii  
-bail Stop after hitting an error  
-batch Force batch I/O  
-box Set output mode to box  
-column Set output mode to column  
-cmd COMMAND Run COMMAND before reading stdin  
-connect [TYPE[:SECRET]] Connect to a remote database. The default type is quack. A named secret can be provided after the type  
-c COMMAND Run COMMAND and exit  
-csv Set output mode to csv  
-dark-mode Use dark mode colors for syntax highlighting  
-echo Print commands before execution  
-f FILENAME Run the script in FILENAME and exit. Note that the ~/.duckdbrc is read and executed first (if it exists)  
-format Format SQL read from stdin, writing the result to stdout  
-format-file FILENAME Format the SQL in FILENAME, writing the result to stdout  
-init FILENAME Run the script in FILENAME upon startup (instead of ~/.duckdbrc)  
-header Turn headers on  
-h Show the help message  
-help Show the help message  
-html Set output mode to HTML  
-interactive Force interactive I/O  
-json Set output mode to json  
-jsonlines Set output mode to jsonlines  
-light-mode Use light mode colors for syntax highlighting  
-line Set output mode to line  
-list Set output mode to list  
-manual FUNCTION Show the manual page for a SQL function and exit  
-markdown Set output mode to markdown  
-newline SEP Set output row separator. Default: \n  
-no-agent Never render output for an AI coding agent. See the Agent Mode page  
-no-init Skip processing the init file (~/.duckdbrc or the file passed to -init)  
-noheader Turn headers off  
-no-stdin Exit after processing options instead of reading stdin  
-nullvalue TEXT Set text string for NULL values. Default: NULL  
-quote Set output mode to quote  
-readonly Open the database read-only. This option also supports attaching to remote databases via HTTPS  
-s COMMAND Run COMMAND and exit  
-safe Enable safe mode  
-separator SEP Set output column separator to SEP. Default: ` `
-serve [quack[:SECRET]] Serve the opened database with Quack. A named secret can be provided after the type  
-storage-version VER Database storage compatibility version to use. To use the latest storage version, pass -storage-version latest  
-table Set output mode to table  
-ui Loads and starts the DuckDB UI. If the UI is not yet installed, it installs the ui extension  
-unredacted Allow printing unredacted secrets. Sets the allow_unredacted_secrets option to true  
-unsigned Allow loading of unsigned extensions. This option is intended to be used for developing extensions. Consult the Securing DuckDB page for guidelines on how to set up DuckDB in a secure manner  
-version Show DuckDB version  

Serving and Connecting to Remote Databases

New The -serve and -connect arguments were introduced in DuckDB 2.0.

The -serve argument starts a Quack server for the database opened by the CLI. Without a database path or additional configuration, it serves an in-memory database on localhost:9494:

duckdb -serve

To serve a persistent database, provide its path before -serve:

duckdb analytics.duckdb -serve

The -connect argument connects the CLI to a remote database. Without arguments, it connects to the Quack server on localhost:9494 using the default quack secret. If this secret does not exist yet, -serve creates it as a persistent secret, so running duckdb -serve and duckdb -connect on the same machine works without further setup:

duckdb -connect

Both arguments accept a connection type and an optional named secret in the form TYPE:SECRET. Only the quack type can be served. For example, after creating a persistent Quack secret named analytics, serve or connect with:

duckdb analytics.duckdb -serve quack:analytics
duckdb -connect quack:analytics

The -connect argument cannot be combined with a local database path because the CLI acts as a client for the remote database.

The SQL commands executed by -serve and -connect can be customized using the .serve_command and .connect_command dot commands, e.g., in the ~/.duckdbrc file. By default, -serve calls quack_serve and -connect runs a CONNECT statement.

Passing a Sequence of Arguments

Note that the CLI arguments are processed in order, similarly to the behavior of the SQLite CLI. For example:

duckdb -csv -c 'SELECT 42 AS hello' -json -c 'SELECT 84 AS world'

Returns the following:

hello
42
[{"world":84}]

The -init script (or the default ~/.duckdbrc when -init is not given) is an exception: it always runs at startup, before any -cmd, -c, or -s command, regardless of where it appears on the command line. You therefore cannot use a -cmd argument to inject configuration that takes effect before the init script runs. To set configuration that the init script depends on, place it at the top of the init script itself.

© 2026 DuckDB Foundation, Amsterdam NL
DuckDB Home Code of Conduct Trademark Use Blog