Repository navigation
v0.7.3 (bêta)
Pre-releaseTermDevTools v0.7.3 (beta)
Version française : CHANGELOG_fr.md
In one sentence: a production cluster can be protected — the requests that write are confirmed or refused, and a banner says so.
What's new
- Per-cluster protection, chosen in the connection form, right under the URL, and saved in
config.yaml(protection:):- "writes need confirmation" (
confirm): a request that writes opens a popup naming the cluster and the request, with the focus on "Cancel" —Enterpressed out of habit orEscsends nothing. "Send" sends the request as it was resolved onCtrl+E. - "read-only" (
read_only): a request that writes is refused, nothing is sent, and the status bar says how to allow it. - "none" (
none), the default: nothing changes for existing clusters.
- "writes need confirmation" (
- What writes: any
PUT, anyDELETE, and anyPOSTmissing from a list of known reads (_search,_count,_msearch,_mget,_field_caps,_analyze,_explain, pipeline simulations…) —_bulkand_delete_by_query, but also_refresh,_flushor_forcemerge, which act on the cluster.GETrequests go through, except_refresh,_flushand OpenSearch's SQL or PPL. The request is classified as it is sent, after${name}variables are substituted. - Banner across the top of a protected cluster's main screen: red with confirmation, yellow with read-only, with an optional label ("PROD · read-only"). A cluster without protection keeps exactly the layout of earlier versions.
- Cluster history: the protection shows under the URL of each protected cluster.
The level is set at connection: to change it, connect again. It is a safety net against slips, not security — anyone who can run the tool can remove it. To really prevent writing, use an account with no write privilege on the cluster.
Fixes
- The status bar's message is no longer cut from its first word on an 80-column terminal: a realistic URL and user name left it a few columns. It now comes first — the user gives way, then the URL is cut short, then the cluster.
Before upgrading from 0.7.2
- Nothing to do: a
config.yamlwithoutprotection:loads as before, with no protection and no banner.
Checks
go vetandgo test ./...pass, run on Windows: unit tests and tests of the interface on a simulated 80×24 screen.- The protection is checked against a real Elasticsearch 9.5.4 and OpenSearch 3.9.0: deleting an index is refused in read-only, doesn't happen while the confirmation is cancelled, and happens once confirmed.
- A security review of the protection came before the release; the bypasses it found are fixed and covered by tests.
govulncheck: no known vulnerability, neither in the dependencies nor in the standard library of Go 1.27.3, which the binaries are built with.- No independent external audit was carried out.
Known limits
- The list of reads can't be extended: a read missing from it is confirmed, or refused in read-only, for nothing.
- The limits of 0.7 still apply: see the changelog.
Binaries
One self-sufficient file per platform — no archive and no companion file:
termdevtools-linux-amd64— Linux x86-64 (static binary)termdevtools-windows-amd64.exe— Windows 10/11 x64termdevtools-darwin-arm64— macOS Apple SiliconSHA256SUMS— SHA-256 checksums of the three files
Download the file for your platform and SHA256SUMS, check it (sha256sum -c SHA256SUMS --ignore-missing on Linux), make it executable (chmod +x, Linux and macOS), run it: termdevtools --version answers termdevtools v0.7.3. The binaries are not signed. Step by step, platform by platform: INSTALL.md (français). go install github.com/gnocent/termdevtools@v0.7.3 works too.