diff --git a/handler/builder.go b/handler/builder.go
index e05526f..1d7a260 100644
--- a/handler/builder.go
+++ b/handler/builder.go
@@ -113,6 +113,7 @@ func (handler *InoHandler) generateBuildEnvironment(buildPath *paths.Path) error
 
 	// XXX: do this from IDE or via gRPC
 	args := []string{globalCliPath,
+		"--config-file", globalCliConfigPath,
 		"compile",
 		"--fqbn", fqbn,
 		"--only-compilation-database",
diff --git a/handler/handler.go b/handler/handler.go
index 827f057..6ef25a7 100644
--- a/handler/handler.go
+++ b/handler/handler.go
@@ -29,13 +29,15 @@ import (
 )
 
 var globalCliPath string
+var globalCliConfigPath string
 var globalClangdPath string
 var globalFormatterConf *paths.Path
 var enableLogging bool
 
 // Setup initializes global variables.
-func Setup(cliPath string, clangdPath string, formatFilePath string, _enableLogging bool) {
+func Setup(cliPath, cliConfigPath, clangdPath, formatFilePath string, _enableLogging bool) {
 	globalCliPath = cliPath
+	globalCliConfigPath = cliConfigPath
 	globalClangdPath = clangdPath
 	if formatFilePath != "" {
 		globalFormatterConf = paths.New(formatFilePath)
@@ -632,6 +634,7 @@ func (handler *InoHandler) initializeWorkbench(ctx context.Context, params *lsp.
 func extractDataFolderFromArduinoCLI() (*paths.Path, error) {
 	// XXX: do this from IDE or via gRPC
 	args := []string{globalCliPath,
+		"--config-file", globalCliConfigPath,
 		"config",
 		"dump",
 		"--format", "json",
diff --git a/main.go b/main.go
index 03305a2..f0b90da 100644
--- a/main.go
+++ b/main.go
@@ -16,6 +16,7 @@ import (
 var clangdPath string
 var compileCommandsDir string
 var cliPath string
+var cliConfigPath string
 var initialFqbn string
 var initialBoardName string
 var enableLogging bool
@@ -26,6 +27,7 @@ func main() {
 	flag.StringVar(&clangdPath, "clangd", "clangd", "Path to clangd executable")
 	flag.StringVar(&compileCommandsDir, "compile-commands-dir", "", "Specify a path to look for compile_commands.json. If path is invalid, clangd will look in the current directory and parent paths of each source file. If not specified, the clangd process is started without the compilation database.")
 	flag.StringVar(&cliPath, "cli", "arduino-cli", "Path to arduino-cli executable")
+	flag.StringVar(&cliConfigPath, "cli-config", "", "Path to arduino-cli config file")
 	flag.StringVar(&initialFqbn, "fqbn", "arduino:avr:uno", "Fully qualified board name to use initially (can be changed via JSON-RPC)")
 	flag.StringVar(&initialBoardName, "board-name", "", "User-friendly board name to use initially (can be changed via JSON-RPC)")
 	flag.BoolVar(&enableLogging, "log", false, "Enable logging to files")
@@ -47,7 +49,11 @@ func main() {
 		log.SetOutput(os.Stderr)
 	}
 
-	handler.Setup(cliPath, clangdPath, formatFilePath, enableLogging)
+	if cliConfigPath == "" {
+		log.Fatal("Path to ArduinoCLI config file must be set.")
+	}
+
+	handler.Setup(cliPath, cliConfigPath, clangdPath, formatFilePath, enableLogging)
 	initialBoard := lsp.Board{Fqbn: initialFqbn, Name: initialBoardName}
 
 	stdio := streams.NewReadWriteCloser(os.Stdin, os.Stdout)