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
-serveand-connectarguments 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
-initscript (or the default~/.duckdbrcwhen-initis not given) is an exception: it always runs at startup, before any-cmd,-c, or-scommand, regardless of where it appears on the command line. You therefore cannot use a-cmdargument 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.