Skip to content

Configuration

Beekeeper Studio uses an ini configuration system that lets you customize the app to match your workflow and preferences. Using simple INI configuration files, you can adjust everything from keyboard shortcuts and database connection timeouts to security settings like PIN protection.

Quick Start

New to configuration? Jump to the Getting Started section for a simple walkthrough, or check out our example configurations to see common customizations.

Configuration Files

Beekeeper Studio uses a three-tier configuration system that gives you flexible control over settings. Settings are loaded in the order below.

Configuration Purpose Load Order
Default Baseline settings that ship with the app First
User Your personal customizations Second
Administrator Machine-wide settings (admin controlled) Third

That means: Admin settings override user settings, user settings override default settings. IT administrators can enforce policies by providing a machine-wide Administrator configuration.

Configuration File Locations

Beekeeper Studio looks for specific files in specific locations. This is not configurable. Note that the user and admin files have different names

Config Location
User ~/Library/Application Support/beekeeper-studio/user.config.ini
Admin /Library/Application Support/beekeeper-studio/system.config.ini
Config Location
User ~/.config/beekeeper-studio/user.config.ini
Admin /etc/beekeeper-studio/system.config.ini
Config Location
User %APPDATA%\beekeeper-studio\user.config.ini
Admin C:\ProgramData\beekeeper-studio\system.config.ini

Put a local.config.ini in the root of the Beekeeper Studio project directory. This is used only during app development and takes the place of both user and admin files.

How To Use Config Files

Step 1: Create Your Configuration File

Decide which file to change (user or administrator). If the file doesn't exist yet, create it using any text editor. Here's a simple starter configuration. I can put this in my User configuration:

; My Beekeeper Studio Configuration
; Lines starting with semicolons are comments

[ui.tableTable]
pageSize = 200                          ; Show more rows per page

Step 2: Save and Restart

  1. Save your configuration file
  2. Restart Beekeeper Studio
  3. Your new settings will take effect

Configuration Not Working?

If your changes aren't taking effect:

  • File location: Ensure your configuration file is in the correct directory for your OS
  • Syntax errors: Verify INI syntax (section headers in [brackets], spaces around =)
  • Restart required: Configuration changes require a complete application restart
  • Setting names: Check for typos in section names or setting keys
  • File permissions: Ensure the configuration file is readable by Beekeeper Studio
  • Check logs: Enable debug logging to see configuration loading details

Configuration Reference

Below are the default configuration values for Beekeeper Studio, copy and modify as needed.

[general]
checkForUpdatesInterval = 86400000      ; 24 hours
dataSyncInterval = 30000                ; 30 secs
workspaceSyncInterval = 5000            ; 5 seconds!

[security]
disconnectOnSuspend = false
disconnectOnLock = false
disconnectOnIdle = false
lockMode = disabled ; disabled, pin, future: google, ldap, oauth; applies when connecting to any db
idleThresholdSeconds = 300 ; time before user is considered 'idle'
idleCheckIntervalSeconds = 30 ; time between idle checks
minPinLength = 6

[ui.general]
; Controls the encoding format used to display binary data in the application.
; Possible values: base64, hex
binaryEncoding = hex

[ui.layout]
mainContentMinWidth = 200       ; Minimum width of main content area in pixels
primarySidebarMinWidth = 150    ; Minimum width of primary sidebar area in pixels
secondarySidebarMinWidth = 150  ; Minimum width of secondary sidebar area in pixels

[ui.queryEditor]
maxResults = 50000

[ui.tableTable]
pageSize = 100
largeFieldWidth = 300
maxColumnWidth = 1000
minColumnWidth = 100
maxInitialWidth = 500
defaultColumnWidth = 125

[ui.tableTriggers]
maxColumnWidth = 300

[ui.tableList]
itemHeight = 22.8               ; in pixels

[ui.export]
errorNoticeTimeout = 60000      ; 1 minute

[db.mysql]
; The milliseconds before a timeout occurs during the initial connection to the MySQL server.
connectTimeout = 3600000        ; 1 minute

; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = true

[db.mariadb]
; The milliseconds before a timeout occurs during the initial connection to the MySQL server.
connectTimeout = 3600000        ; 1 minute

; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = true

[db.tidb]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = true

[db.postgres]
; number of milliseconds to wait before timing out when connecting a new client.
; Reference https://node-postgres.com/apis/pool#new-pool
connectionTimeout = 15000       ; 15 seconds

; number of milliseconds a client must sit idle in the pool and not be checked.
; out before it is disconnected from the backend and discarded
; Reference https://node-postgres.com/apis/pool#new-pool
idleTimeout = 20000             ; 20 seconds

; maximum number of clients the pool should contain
; Reference https://node-postgres.com/apis/pool#new-pool
maxClient = 5

; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = true

[db.cockroachdb]
; number of milliseconds to wait before timing out when connecting a new client
; Reference https://node-postgres.com/apis/pool#new-pool
connectionTimeout = 15000       ; 15 seconds

; number of milliseconds a client must sit idle in the pool and not be checked
; out before it is disconnected from the backend and discarded
; Reference https://node-postgres.com/apis/pool#new-pool
idleTimeout = 20000             ; 20 seconds

; maximum number of clients the pool should contain
; Reference https://node-postgres.com/apis/pool#new-pool
maxClient = 5

; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.redshift]
; number of milliseconds to wait before timing out when connecting a new client
; Reference https://node-postgres.com/apis/pool#new-pool
connectionTimeout = 15000       ; 15 seconds

; number of milliseconds a client must sit idle in the pool and not be checked
; out before it is disconnected from the backend and discarded
; Reference https://node-postgres.com/apis/pool#new-pool
idleTimeout = 20000             ; 20 seconds

; maximum number of clients the pool should contain
; Reference https://node-postgres.com/apis/pool#new-pool
maxClient = 5

; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.sqlite]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = true

[db.sqlserver]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.bigquery]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.oracle]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.cassandra]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.firebird]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.clickhouse]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.mongodb]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.duckdb]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[db.sqlanywhere]
; Allow skipping to last page of a table in the table view. This uses a count query so it could be expensive
allowSkipToLastPage = false

[keybindings.general]
refresh[] = f5
refresh[] = ctrlOrCmd+r
addRow = ctrlOrCmd+n
save = ctrlOrCmd+s
openInSqlEditor = ctrlOrCmd+shift+s
openQuickSearch = ctrlOrCmd+p
copySelection = ctrlOrCmd+c
pasteSelection = ctrlOrCmd+v
cloneSelection = ctrlOrCmd+d
deleteSelection = delete

[keybindings.tab]
closeTab = ctrlOrCmd+w
nextTab[] = ctrl+tab
nextTab[] = ctrlOrCmd+pagedown
previousTab[] = ctrl+shift+tab
previousTab[] = ctrlOrCmd+pageup
reopenLastClosedTab = ctrlOrCmd+shift+t
switchTab1 = alt+1
switchTab2 = alt+2
switchTab3 = alt+3
switchTab4 = alt+4
switchTab5 = alt+5
switchTab6 = alt+6
switchTab7 = alt+7
switchTab8 = alt+8
switchTab9 = alt+9

[keybindings.quickSearch]
focusSearch[] = ctrlOrCmd+k
focusSearch[] = ctrlOrCmd+o
close = esc
selectUp[] = up
selectUp[] = ctrlOrCmd+p
selectDown[] = down
selectDown[] = ctrlOrCmd+n
open = enter
altOpen = ctrlOrCmd+enter
openInBackground = right
altOpenInBackground = ctrlOrCmd+right

[keybindings.queryEditor]
selectEditor = ctrlOrCmd+l
submitQueryToFile = ctrlOrCmd+i
submitCurrentQueryToFile = ctrlOrCmd+shift+i
selectNextResult = shift+up
selectPreviousResult = shift+down
copyResultSelection = ctrlOrCmd+c
switchPaneFocus = ctrlOrCmd+`
openTableFilter = ctrlOrCmd+f
closeTableFilter = esc

[keybindings.tableTable]
nextPage = ctrlOrCmd+right
previousPage = ctrlOrCmd+left
focusOnFilterInput = ctrlOrCmd+f
openEditorModal = shift+enter
firstPage = ctrlOrCmd+h
lastPage = ctrlOrCmd+l

[plugins.bks-ai-shell]
enabled = true