Releases: httuicom/httui
httui notes v0.4.1
Maintenance release: installer, offline fonts, bug fixes.
Added
- One-line installer —
curl -fsSL https://httui.com/install.sh | shinstalls the latest macOS or Linux build.
Changed
- Self-hosted fonts — fonts are bundled instead of fetched from the Google Fonts CDN; the app now works fully offline.
Fixed
- Editor — leaked focus listeners when switching files or toggling vim.
- HTTP block — visible flash from the body editor reconfiguring on every blur in form mode.
- Connections — save failures in the new-connection modal now show an error instead of failing silently.
httui notes v0.4.0
First public release. httui is a git-native, local-first desktop
markdown editor with executable HTTP and DB blocks inline in
documents and an embedded Claude chat assistant. Vaults are plain
.md files plus a .httui/ sidecar — no proprietary store, no
account.
Distribution: macOS .dmg (unsigned), Windows .msi / .exe,
Linux .deb / .rpm / AppImage, a Homebrew cask, and a winget
manifest. In-app auto-update is served from GitHub Releases;
pre-releases are opt-in under Settings → General.
Added
- Executable HTTP & DB blocks — run requests and queries inline in markdown documents; chain blocks with
{{ref}}and the positional{{$prev.path}}reference. - Claude chat assistant — embedded assistant with MCP tools, image attachments, and per-session permissions.
- Git integration — a collapsible Source Control side panel and a full Git pane-tab: stage / commit, one-click Sync (commit → pull → push), branch switcher, merge-conflict resolution, commit-message templates, history with inline diffs, and share-via-repo URLs.
- Vault flow — empty-state Open / Clone / Create cards; a first-run scan prompts for keychain secrets the vault references but the machine lacks.
- Connections page — master-detail view with live status, latency, schema preview, and "used in runbooks" navigation.
- Variables & Environments pages — a cross-environment variable grid with secret reveal and session overrides, plus environment cards with clone / rename / delete.
- Quick popovers — ⌘E environment switcher, connection quick-edit,
{{var}}inspector, and ⌘⇧V new-variable — none of which steal editor focus. - DocHeader — a card above the editor with the title, abstract, tags, pre-flight checks, and document metadata.
- Workbench shell — a new top bar, sidebar (Files / Connections / Variables), and an interactive status bar.
- File-backed configuration — connections, environments, and UI preferences live in plain TOML files, with
*.local.tomloverrides and a watcher that picks up external edits. - Vault migration — converts a legacy SQLite vault to the file-based layout (backs up first, idempotent, with a dry-run preview).
- File conflict detection — externally modified files surface a banner with Reload / Keep Mine choices.
Changed
- HTTP block storage — request bodies are stored as HTTP-message text inside an
httpfenced code block; legacy JSON-bodied blocks are still parsed on read. - Performance — large response bodies render in a read-only editor instead of blocking the webview, and the HTTP executor caps response bodies at 100 MB.
Removed
- TipTap editor and the E2E block — superseded by CodeMirror 6 and the HTTP block.
- Top-bar "Run all" button, the editor toolbar, and heading auto-numbering — dropped as redundant.
- Web-app and Docker self-host — explicitly out of scope.
Fixed
- Unreadable push errors — git push rejections (protected branch, non-fast-forward, auth) now show a readable summary instead of raw git stderr.
- Invisible merge conflicts — a conflicted vault no longer reports "working tree clean"; the git panel parses unmerged entries and shows the resolver.
- Markdown round-trip —
httpanddb-*fenced blocks survive the CodeMirror parser / serializer cycle without corruption. - HTTP headers — invalid header names produce a clear error instead of a generic
reqwestbuilder error. - HTTP cancel — cancelling mid-body returns a clean result rather than partial bytes.
- Chat auto-save — auto-save is suppressed while an
update_notetool call is in flight, driven by tool events instead of timeouts.
Security
- Secrets in the OS keychain — connection passwords and
is_secretvariables are stored in the system keychain, with only a sentinel reference in config files; plaintext fallback applies only when the keychain is unavailable. - SQL injection guard —
{{ref}}references in SQL blocks are always converted to bind parameters, never string-interpolated.
httui notes v0.4.0-rc.3
First public release. httui notes is a git-native, local-first desktop
markdown editor with executable HTTP and DB blocks inline in documents
and an embedded Claude chat assistant. Vaults are plain .md files
plus a .httui/ sidecar — no proprietary store, no account.
This entry consolidates the v1 foundation work (epics 00–37) and the
v2 vertical pass (V1–V12): the empty-state vault flow (open / clone /
create), the workbench shell + design system, refined Connections /
Variables / Environments master-detail surfaces, the document
DocHeader (frontmatter + tags), the Git side panel + share-via-repo,
the quick popovers (⌘E / connection chip / {{var}} / ⌘⇧V / clone
env), and the signed/cross-platform release pipeline.
Distribution: macOS .dmg (unsigned developer build for v1 — see
docs/RELEASE.md for the Gatekeeper bypass), Windows .msi / .exe,
Linux .deb / .rpm / AppImage, a Homebrew cask, and a winget
manifest. In-app auto-update is served from GitHub Releases on the
stable channel by default; pre-releases are opt-in under
Settings → General.
Added
- ⌘E env switcher — atalho abre um dropdown no seletor de
ambiente da status bar com atalhos numéricos (1–9) pra trocar de
env e uma ação rápida "Clone <env>". (V11 cenário 1) - Quick-edit de conexão — clicar numa conexão na sidebar abre
um popover com status, "Rotate password", override temporário de
host:port (só pra sessão, badge TEMPORARY na conexão), Test e
Duplicate. (V11 cenário 2) - Popover do
{{var}}no editor — clicar num chip{{var}}
mostra o valor no ambiente ativo, um override de sessão e
"Used in N blocks", sem perder o cursor do editor ao fechar.
(V11 cenário 3) - ⌘⇧V nova variável — popover estilo cmd+K com seletor de tipo
(Text/Number/Bool/Secret) e helpers de template
({{uuid()}},{{now()}},{{base64()}},{{env()}},
{{$prev.body.id}}); salva no ambiente ativo. (V11 cenário 4) - Referência posicional
{{$prev.path}}— encadeia bloco→bloco
usando a resposta do bloco anterior sem precisar nomear um
alias=. (V11 cenário 4) - Git side panel (Source Control) — coluna lateral colapsável
estilo VS Code, aberta/fechada pelo botão git da top bar e
persistente entre sessões: status do branch, lista de mudanças
com stage/unstage por arquivo, campo de commit, Sync, history
compacto, e botão "Details" pro pane-tab detalhado. Não rouba o
foco do editor. (V10.1 cenários 1, 5) - Sync de 1 clique — botão Sync faz stage-all → commit → pull
(fast-forward only) → push numa ação só, com progresso por
etapa; para na etapa que falhar e mostra o motivo; reusa o
confirm de set-upstream quando o branch não tem upstream.
(V10.1 cenário 3) - Template de commit message — o campo de commit vem
pré-preenchido (Update <nota>/Update N notespor padrão);
configurável em Settings → General com placeholders{{notes}}
/{{count}}/{{date}}. (V10.1 cenários 2, 8) - History compacto + diff inline — últimos commits no side
panel (hash, autor, subject, tempo relativo); clicar abre o diff
do commit ali mesmo; "View all" abre o pane-tab. (V10.1 cenário 4) - Faixa de métricas no pane-tab git — branch, upstream,
ahead/behind explícito, mudanças por tipo, autor do último
commit, último sync e URL do remote acima das abas. (V10.1
cenário 6) - Git panel — aba singleton (botão na top bar) com Status / Log:
working tree (staged/unstaged/untracked), stage/unstage por
arquivo, commit form com preview, log filtrável (autor / path),
diff de commit lado-a-lado, push / pull / fetch, e prompt de
confirmar set-upstream ao dar push numa branch sem upstream.
Detectagit remote addfeito por fora sem precisar recarregar.
(V10 cenários 1-5, 8) - Branch switcher — o indicador de branch na status bar agora
abre um picker (branches locais + remotas, filtro, criar nova) que
faz checkout e recarrega a árvore de arquivos. (V10 cenário 4) - Resolução de conflito de merge — banner por arquivo
conflitado com Accept yours / Accept theirs e um resolvedor 3-way
(ours editável ↔ theirs, base sob demanda). No editor markdown,
hunks de conflito ganham destaque (ours/theirs/markers) + ações
inline na linha do marker (accept current/incoming/both). (V10
cenário 6) - Share via URL do repositório — popover (na status bar e no
git panel) com as URLs HTTPS / SSH / Web do remote; copiar ou
abrir a Web URL no navegador. (V10 cenário 7) - DocHeader card acima do CM6 — breadcrumb (workspace › path),
h1 serif do título, abstract serif, tag chips na coluna direita,
pill row de pre-flight checks, meta strip com gravatar do owner +
edited mtime + branch + diff stats (main +N ~M) + last run
status. Card é o ponto de entrada visual da nota. (V6 cenários 1-2) - Pre-flight check builder no DocHeader —
+ Add checkabre
popover com kind picker (connection / env_var / branch /
file_exists / command) + CM6 inline editor pra value com
autocomplete contextual (connections puxam de
ConnectionsStore, env_var da env ativa). Pill cliclável
abre o mesmo popover em modo edit (pré-bind do kind/value +
botão Remove). (V6 cenário 9) - Pre-flight context wiring — evaluator agora lê o estado real
do vault: connection names doConnectionsStore, env-var keys
da env ativa viaEnvironmentsStore, branch corrente via
git rev-parse --abbrev-ref HEAD.file_exists/command
contra FS + PATH. Checks deixam de ser "decorativos" e passam
a refletir o ambiente. (V6 cenário 9 —def8e27,3c3be69) - Pre-flight Run-all gate —
⌘⇧R(Run all) com pre-flight
com falha abre dialog de confirmação;Shift+⌘⇧Rfaz override.
(V6 cenário 10) - Variables page (master-detail) — TopBar
LuKeyRound
abre tab dedicada com lista densa cross-env (1 row por chave,
colunas por env, contagemUSESvia vault-grep), sidebar
SCOPES/HELPERS, detail panel à direita com value-per-env (Show
pra secrets resolve via keychain, Edit + Override + Delete por
row), is_secret toggle com prompt + migração para/do keychain,
USED IN BLOCKS lista clicável que pula pro arquivo. (V5
cenários 1-4) - Session override — botão
Overrideem cada value row salva
TEMPORARY value em memória (useSessionOverrideStore); chip
TEMPORARYclicável dropa.getActiveVariablesmergeia
overrides em cima do resolver, então blocos HTTP/DB
consomem o valor de override. Sem persistência. (V5 cenário 3) - + New variable inline form — table-row style
(KEY mono input + VALUE input + lock toggle + + save + × cancel)
inserido no header da Variables page. (V5 cenário 5) - Environments page — TopBar
LuLayersabre tab com cards
densos por env (varCount, connectionsUsedCount, ACTIVE pill,
chips personal/temporary). Click ativa o env via
set_active_environment; o pill ACTIVE faz swap visual
animado entre cards (FLIP manual viagetBoundingClientRect- translate inverso, 360ms ease-out). (V5 cenário 6)
- Clone / Rename / Delete environment — ⋮ menu em cada card
abre Chakra Popover ancorado embaixo. Clone copia plain vars.
Rename migra entries de keychain (novo backend
rename_environment+EnvironmentsStore::rename_env).
Delete tem banner Destructive + type-the-name confirmation
(industry-standard guardrail). (V5 cenários 7-8) - + New environment — Popover anchored no botão pra criar
novo env (envs/.toml). (V5 cenário 6 polish) - EnvironmentManager drawer — refatorado pra consumir
VariableValueRow+NewVariableForm(V5 atoms). Per-var
delete shortcut (× vermelho ghost) + + New variable inline- per-env Set active / Duplicate / Delete header actions.
(V5 cenário 10)
- per-env Set active / Duplicate / Delete header actions.
- Master-detail shared atoms —
components/layout/shared/
expõeSectionLabel,SidebarHintCard,
MasterDetailListHeader,MasterDetailSidebarRow+
constantsMASTER_DETAIL_SIDEBAR_WIDTH(220px) /
_DETAIL_WIDTH(420px). Connections + Variables agora
alinham layout pixel-pixel via essas peças. - Connections page (master-detail) — página dedicada (TopBar
LuPlugou via tab) substitui o drawer legado: lista filtrada por
kind/env/status com status dot + latência, painel detail com
credentials + schema preview + "Used in runbooks" (file:line link
com navegação), modal "New connection" com tabs per-kind
(Form / Connection string / SSL — SSH placeholder), file picker
nativo para SQLite db / cert / key paths, ⋮ menu de row
(Edit / Test / Duplicate / Delete) e config-changed listener
refletindo edição manual deconnections.toml. (V4 cenários 1-8) find_connection_uses_cmdTauri command — vault-grep
on-demand (httui_core::connection_uses) que walk*.mde
retorna{file, line}de cada referênciadb-<connection>no
vault. (V4 cenário 7)- Workbench shell + design system — top bar com logo, breadcrumb
(workspace › project › file), segmented env switcher, ⌘K search e
branch button substituem a topbar legada. Sidebar nova reúne Files,
Connections (status dot + latência ms + PROD chip) e Variables
(lock icon + valor mascarado para entriesis_secret). Status bar
interativa expõe env menu, branch menu, contador+N ~M -Dde
mudanças git, latência, cursor (Ln/Col), encoding e versão.
(V2 cenários 1-3) - Inline DocHeader (Notion-mode) — título serif, abstract, tags
(chips +/×) e checklist preflight ([x] item) editáveis dentro do
CodeMirror; frontmatter YAML invisível e gerado automaticamente.
Meta strip do header mostra autor (avatar Gravatar + nome),
contagem de blocos e last-run inline. (V2 cenário 4.5) - Empty-state cards (Open / Clone / Create vault) — primeiro
contato com o app sem vault aberto. Three actionable cards
replace the legacy "Em branco / Templates / Importar" surface,
with inline error rendering per card and Mac-native directory
picker. Open and Create rely onscaffold_new_vault; Clone
s...