Repository navigation
Releases
Releases · QRun-IO/qqq-cli
qqq 1.0.0
Immutable
release. Only release title and notes can be modified.
[1.0.0] - 2026-11-01
qqq 1.0: the command-line client and the full-screen terminal UI (qqq ui), shipped together as one
binary per platform. Packages: @qrun-io/qqq-cli 1.0.0, @qrun-io/qqq-core 1.0.0 (new),
@qrun-io/qqq-ui-api-client 1.8.0, @qrun-io/qqq-ui-api-conformance 1.6.0. Servers: UI API 1.6.0 up
to 2.0 (QQQ 4.1.0-RC.15 or later). Released as 1.0.0-rc.1 first (tags v1.8.0-rc.2,
cli-v1.0.0-rc.1); this entry is that candidate's plus everything that landed after it. Short commit ids
in parentheses mark the changes made after the candidate.
Added
Command line
- The grammar is
qqq <noun> <verb>(table query,process run, ...); the 0.1 flat commands
(apps,tables,query,get,run,jobs,tail) still work as aliases. - Sign-in: session sign-in for MOCK and anonymous servers; OAuth2 device flow and browser sign-in with
PKCE on a loopback redirect; TABLE_BASEDqqq login --username(password asked, orQQQ_PASSWORD; only
the server session is kept, a refused password stores nothing); refresh before expiry;logout --provider-logoutrevokes (RFC 7009) and opens the end-session page; refused refreshes exit 3. Sign-ins
live in the macOS Keychain, Linux Secret Service, Windows DPAPI or a 0600 file. - Profiles (
--profile,QQQ_PROFILE) with a short name (2 to 6 characters, for the footer and
Home), a description, a sign-in mode for OAuth2 servers (autoasks,browser,device) and
the last use and user; all additive inconfig.json, so files written by 1.0.0-rc.1 load unchanged and
keep theirnote(shown when there is no description).qqq profile list|add|edit|use|remove(also
underqqq config profile):addandedittake--short,--description,--auth-modeand
--check(refuse unless the server answers),edittakes--serverand--rename, an empty value
removes a field,list --probeadds each server's status (d9317f5). - Tables:
list,describe,query(filters, sort, paging,--search,--joinandtable.field
columns,--count,--print-filter, saved views with--view),count,stats(server columnStats, else
computed from the matching records with a note on stderr;--localforces it,--no-localrestores the
error,--max-recordscaps the read at 10,000 by default; 7c66b16),get(sections, adornments,--associations,--links,--follow,--key,--copy),
create,copy,update(-eedits HTML and code fields in$EDITOR),delete,children,
export(csv, tsv, xlsx, json),downloadand--uploadfor file fields,variantsand--variant
everywhere (the chosen variant is remembered per server),columns,actions(what you can do to a
table, with the command for each),api-callandwidget-form. - Forms: contingent fields (country, state, city) with narrowing possible values, labels or unique
partial labels for ids (also in--where), local validation with the server's codes, form adjusters,
interactive-i, CHIP values in their colours. - Filters: the grammar (shorthand operators, quoting, AND/OR groups, expression values such as
now(-7d),thisPeriod(month),me()). Text filters ask for case-insensitive matching (CONTAINS,
STARTS_WITH,ENDS_WITH, quick search);~=,OPERATOR:CSor--case-sensitiveask for a
case-sensitive match. The server does not read the option over the UI API yet (finding 27), so matching
stays case-sensitive until it does. - Processes:
list,describe,runwith every step component (help, HTML as text, view pairs,
process records, the validation review, summary lines, downloads, widgets), asynchronous jobs with
progress,--filefor BLOB fields, back steps, min/max input records, and Ctrl-C that cancels the run on
the server (exit 130). - Bulk load and bulk changes:
table bulk-insertfrom a CSV or Excel file (the upload template, the
server's column suggestion, a mapping document, flags or-i, value mapping, the validation review,
--dry-run),table bulk-editof chosen records or by key rows from a file,table bulk-deletewith
review and confirmation, andbulk-profile list | save | rename | deletefor saved mappings. - Dates: DATE_TIME typed and shown in the local zone (
TZ), sent as UTC instants;--utcfor raw. - More nouns:
apps show(app homes with counts,--widgets),home(counts, quick actions, recent
records),find(the command palette: an app, table, process or report by label),tail,saved-view,
audit list,report runandsaved-report list | show | preview | run | set | pivot | schedules | schedule,share(records of shareable tables),widget(charts and tables as text,--record,
--run),job,prefs,help show,help-search, andapi <operationId>for any of the 219
operations. - Search:
qqq searchshows the matched field and snippet (match), takes--tablerepeated or as a
comma list,--limitper table, names the tables and the total in the footer, searchesfield:value
with a note, lists the quick search syntax in--helpand prints the whole response with--json
(0e07f8a). - Developer mode and scripts:
table apis,table api-doc,table developer, andscript list | show | store | test | logs. - Extensions: a noun per extension the client document knows (14: esb, collab, health, alerts,
assistant, sql-workbench, ...), gated on the server's installed extensions and documented minimum
versions; first-class verbs foresbandcollab(presence, comments, favorites, follow, my work, tags
by id or label). Results print scalars as aligned key/value rows (nested objects as dotted keys) and each
list of objects as a sub-table fitted to the terminal width, with default columns for the inbox,
notebooks, SQL history, comments, tasks, favorites and recents and--columns a,b(or--fields) to
choose;--json, yaml, csv and text are unchanged (5e34433). - Printing (the printing extension, qbit-printing 2.x):
qqq print <table> <id...>renders each record
as a record sheet through the table's Print process, queues one job per record and follows the jobs until
they have printed (--printer,--copies,--no-wait,--timeout; exit 1 when a job failed, 4 when
jobs are still running at the timeout);qqq print list <table>prints a table list (criteria, order,
columns,--page, paper and orientation; up to 10,000 rows);qqq print text [file|-]prints text as a
monospace PDF;qqq print job list|status [--watch]|cancel;qqq printer list|use|show|forget|devices.
The printer chosen is remembered per profile (printing.printersin config.json). Without the extension
the commands exit 5 with the installed list (c1e7bf9, 4bd62b7, d632987, d81c053). - Disabled tables and processes are listed with the reason, and queries, writes, copies, bulk commands
and runs on them are refused before any request, as the web explains the denial. - Shell completion for bash, zsh, fish and PowerShell from the local metadata cache;
cache show | refresh | clear;config set themeanddownload-dir. - Diagnostics and conventions:
qqq doctor,qqq --version(the build and the supported UI API
range), build lines inqqq doctorandqqq ui --check, consistent exit codes (2 usage, 3 auth, 4
unreachable or 502/503/504, 5 not found, 6 validation, 70 server error), downloads that never overwrite a
file or leave--out-dir. - History:
qqq historylists everything you did with the CLI and the TUI on the profile in use,
like a shell history (number, relative or--absolutetime, client, kind, summary;--limit,--since 2h|2026-11-01,--grep,--kind,--all-profiles,--commands,--format);qqq history rerun <n>
runs a line again (asking first for commands that change data),qqq history clearempties it. The
activity log is one JSONL file per profile in~/.local/state/qqq/activity/, rotated once at 5 MB;
secrets (token, password and PIN flags, secret pairs and filter values, Authorization headers) are
written as***;QQQ_HISTORY=offturns it off (0bcc735). - Uploading an attachment to a server without the Object Storage QBit says "This server cannot store
attachments: the Object Storage QBit is not installed."; any server failure naming a missing QBit gets one
such line (437ed3c). - Assistant (assistant extension, qbit-assistant):
qqq assistant ask "<question>"streams the
answer as the model writes it, then prints its numbers (counts, metrics) and the records and tables it
refers to as a table with the command that opens each;--table <t> [--record <id>]sends that page as
context the way the Next UI's panel does,-c <id>continues a conversation,--jsonprints the whole
answer.qqq assistant configshows whether it answers and with which model, or the reason
(NOT_CONFIGURED: no model provider, with what to configure). The generated operation subcommands stay
(a5e0cf4).
Terminal UI (qqq ui)
- A classic full-screen UI in the same binary and on the same profiles and sign-ins as the CLI:
function-key bar (F1 Help to F10 Quit, with Esc+digit for terminals that take the F-keys), PgUp/PgDn
everywhere, Esc back with the screen below keeping its place, a:command line that speaks the CLI
grammar (history, Ctrl+R, Tab completion listing every command with a description, then its arguments),
and a live footer (server and profile, sign-in, UI API version, ping, realtime stream, jobs, clock).
qqq ui table query person -w ...opens a screen directly. - Home: greeting and connection, counts, recently viewed records, quick actions, favorites,
application cards (each with the app's icon as a glyph, an ASCII stand-in under the ASCII-glyphs
setting), work (jobs, alerts, my work, release notes) and the instance's...