From 8c9f525a8046878d5deaf2d0681d0d8c5709f9fb Mon Sep 17 00:00:00 2001
From: Eddie A Tejeda <669988+eddietejeda@users.noreply.github.com>
Date: Wed, 8 Jul 2026 21:43:08 -0700
Subject: [PATCH] =?UTF-8?q?docs(readme):=20rework=20for=20users=20?=
=?UTF-8?q?=E2=80=94=20quickstart=20first,=20tasks=20over=20flags?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The README was a flag-by-flag reference manual with maintainer content mixed in. Restructured around what a new user does: install, a runnable quickstart (real public parquet, three commands to a query result), then task-oriented tours — getting data in (connect vs import, stated as a choice for the first time), query/explore, cross-source joins, search, scripting/agents. Per-flag detail defers to --help and the bundled skills; the Releasing section moves to docs/RELEASING.md; the version badge tracks releases instead of a hardcoded number.
---
README.md | 411 +++++++++++++++-------------------------------
docs/RELEASING.md | 19 +++
2 files changed, 148 insertions(+), 282 deletions(-)
create mode 100644 docs/RELEASING.md
diff --git a/README.md b/README.md
index 6192bd87..c107500f 100644
--- a/README.md
+++ b/README.md
@@ -5,13 +5,17 @@
Command line interface for Hotdata.
-
+
---
+Query, search, and join your data from one place — live databases, APIs, cloud
+storage, Iceberg catalogs, and files you upload — with plain SQL and a few
+commands.
+
## Install
**Homebrew**
@@ -20,357 +24,200 @@
brew install hotdata-dev/tap/cli
```
-**Binary (macOS, Linux)**
-
-Download a binary from [Releases](https://github.com/hotdata-dev/hotdata-cli/releases).
+**Binary (macOS, Linux)** — download from [Releases](https://github.com/hotdata-dev/hotdata-cli/releases).
-**Build from source** (requires Rust)
+**From source** (requires Rust)
```sh
-cargo build --release
-cp target/release/hotdata /usr/local/bin/hotdata
+cargo install --path .
```
-## Connect
+Stay current with `hotdata upgrade`, and enable tab completion with
+`hotdata completions bash|zsh|fish`.
-Run:
+## Quickstart
```sh
+# 1. Sign in (or create an account with `hotdata auth register`)
hotdata auth login
-```
-This launches a browser window where you can authorize the CLI to access your Hotdata account. (Bare `hotdata auth` prints the `auth` subcommand help.)
+# 2. Create a database and load some data — any parquet file, local or by URL
+hotdata databases create --catalog demo
+hotdata databases load --catalog demo --table trips \
+ --url https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2024-01.parquet
-Alternatively, authenticate with an API key using the `--api-key` flag:
-
-```sh
-hotdata --api-key
+# 3. Query it
+hotdata query "SELECT count(*) AS trips, round(avg(fare_amount), 2) AS avg_fare
+ FROM demo.public.trips"
```
-Or set the `HOTDATA_API_KEY` environment variable (also loaded from `.env` files):
+That's the core loop: create a **managed database**, put data in it, query it
+with PostgreSQL-dialect SQL. Everything else builds on that.
-```sh
-export HOTDATA_API_KEY=
-hotdata
-```
+## Getting your data in
-API key priority (lowest to highest): config file → `HOTDATA_API_KEY` env var → `--api-key` flag.
+There are two ways to make your data queryable, and they compose:
-## Commands
+- **Connect** — a live, synced view of an external source. The data stays
+ where it is; Hotdata keeps the schema and cache fresh.
+- **Import** — copy data *into* a managed database, either from a file you
+ have or from an external source via `hotdata ingest`.
-| Command | Subcommands | Description |
-| :-- | :-- | :-- |
-| `auth` | `login`, `status`, `logout` | `login` opens browser login; `status` / `logout` manage the saved profile |
-| `workspaces` | `list`, `set` | Manage workspaces |
-| `connections` | `list`, `create`, `refresh`, `new` | Manage connections |
-| `databases` | `list`, `create`, `delete`, `tables` | Managed databases (create and load tables via parquet) |
-| `tables` | `list` | List tables and columns |
-| `context` | `list`, `show`, `pull`, `push` | Workspace Markdown context (e.g. data model `DATAMODEL`) via the context API |
-| `query` | | Execute a SQL query |
-| `queries` | `list` | Inspect query run history |
-| `search` | | Full-text search across a table column |
-| `indexes` | `list`, `create`, `delete` | Manage indexes on a table |
-| `embedding-providers` | `list`, `get`, `create`, `update`, `delete` | Manage embedding providers used by vector indexes |
-| `results` | `list` | Retrieve stored query results |
-| `jobs` | `list` | Manage background jobs |
-| `ingest` | `new-connection`, `show-connection`, `list-connections`, `delete-connection`, `connectors`, `new-import`, `list-imports`, `trigger-import`, `status` | Pull data from external sources (databases, APIs, buckets, Iceberg) into managed databases |
-| `skills` | `install`, `status` | Manage the hotdata agent skill |
-
-## Global options
-
-| Option | Description | Type | Default |
-| :-- | :-- | :-- | :-- |
-| `--api-key` | API key (overrides env var and config) | string | |
-| `-v, --version` | Print version | boolean | |
-| `-h, --help` | Print help | boolean | |
-
-## Workspaces
+### Connect a live database
```sh
-hotdata workspaces list [--format table|json|yaml]
-hotdata workspaces set []
-```
-
-- `list` shows all workspaces with a `*` marker on the active one.
-- `set` switches the active workspace. Omit the ID for interactive selection.
-- The active workspace is used as the default for all commands that accept `--workspace-id`.
-
-## Connections
+hotdata connections new # guided wizard
+# or non-interactively:
+hotdata connections create --name "prod-replica" --type postgres \
+ --config '{"host":"db.example.com","port":5432,"user":"reader","database":"app","password":"'"$DB_PASSWORD"'"}'
-```sh
-hotdata connections list [-w ] [-o table|json|yaml]
-hotdata connections [-w ] [-o table|json|yaml]
-hotdata connections refresh [-w ] [--data] [--schema --table ] [--async] [--include-uncached]
-hotdata connections new [-w ]
+hotdata tables list # see what's now queryable
```
-- `list` returns `id`, `name`, `source_type` for each connection.
-- Pass a connection ID to view details (id, name, source type, table counts).
-- `refresh` triggers a schema refresh by default. Pass `--data` to refresh cached row data instead.
-- `--schema` and `--table` narrow a data refresh to a single table (must be supplied together).
-- `--async` submits a data refresh as a background job and returns a job ID; poll with `hotdata jobs `. Only valid with `--data` — schema refresh is always synchronous.
-- `--include-uncached` includes tables that haven't been cached yet in a connection-wide data refresh. Only valid with `--data` and no `--table`.
-- `new` launches an interactive connection creation wizard.
-
-### Create a connection
+`hotdata connections create list` shows every supported type, and
+`hotdata connections create list -o json` prints the exact config
+fields it takes.
-```sh
-# List available connection types
-hotdata connections create list [--format table|json|yaml]
-
-# Inspect schema for a connection type
-hotdata connections create list --format json
-
-# Create a connection
-hotdata connections create --name "my-conn" --type postgres --config '{"host":"...","port":5432,...}'
-```
+### Import from external sources (`ingest`)
-## Databases
-
-Managed databases are Hotdata-owned catalogs you create and populate yourself (no remote source to sync). Query them with SQL as `.schema.table`.
+Pull data from SQL databases, APIs, S3/GCS/Azure buckets, or Iceberg catalogs
+into a managed database:
```sh
-hotdata databases list [-w ] [-o table|json|yaml]
-hotdata databases create [--name ] [--catalog ] [--table