finds.dev← search

// the find

dbcli/mycli

★ 11,976 · Python · BSD-3-Clause · updated Oct 2026

Rich MySQL Terminal Client with AutoCompletion, Syntax Highlighting, and Dataframes

mycli is a MySQL command-line client built on prompt_toolkit and Pygments. It adds schema-aware completion, syntax highlighting, fzf history search, an output explorer, and Polars dataframe transforms to the shell. It suits people who spend their day in a MySQL, MariaDB, or TiDB shell and find the stock mysql client too bare. If you only run occasional scripted queries, the stock client or a GUI is still the simpler choice.

Context-sensitive completion is the real differentiator: after FROM it offers table names, and after WHERE it offers columns from the tables in scope. The completion engine and the schema prefetcher are separate from the REPL (completion_engine.py, sql_completer.py, schema_prefetcher.py), and each has its own pytest file. Shell-style redirects ($>, $>>, $|) and the fzf output explorer let you pipe results out without leaving the client, and the .| and .> operators cover the common step of pulling a result into a dataframe or Parquet file. Credential handling is thought through: keyring storage, Vault, and SSH, Kubernetes, and Boundary tunnels are each isolated in their own integration package, and there is a checkup mode for diagnosing a broken setup. Testing is layered, with pytest unit tests for most packages plus a behave feature suite that drives the CLI end to end.

The breadth is the cost. The [all] extra and the feature list (Polars, LLM queries, Vault, Boundary, Kubernetes tunnels) make the install and the set of things you trust with credentials larger than a terminal client needs. Compatibility is claimed for MySQL, MariaDB, Percona, TiDB, and Doris, but the README rates Windows and WSL as only partially supported, so native Windows users should expect rough edges. The Docker Hub images are out of date by the README's own admission, so you need ghcr.io. A pure-Python stack on prompt_toolkit and PyMySQL will not match a native client on very large result sets, and on big schemas completion is only useful once the prefetch has finished. Configuration is spread across ~/.myclirc, Jinja-parameterised favourite queries, and key bindings documented in a separate file, and some features are reachable only through key bindings, so a new user has to hunt for where a setting lives.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →