Skip to content

Releases: JordanNewell/curt-openwith

v1.0.1 — native Windows launcher (winget-ready)

Choose a tag to compare

@JordanNewell JordanNewell released this 01 Nov 15:54
v1.0.1
6175453

Double-click a .curt file and it opens in the offline Curt Viewer — a browser page that renders the conversation locally. No server, no network, no install beyond your user account.

What's new in v1.0.1

  • Native Windows launcher (CurtViewer.exe) — the .curt file association now points at a small (5.5 KB) native exe instead of the .cmd wrapper, so double-clicking a .curt file no longer flashes a console window. Error dialogs still surface; exit codes pass straight through. The exe ships prebuilt and is reproducible from source on any Windows box with build.cmd (uses the C# compiler Windows already ships at C:\Windows\Microsoft.NET\...\v4.0.30319\csc.exe — no SDK, no downloads; source in src-windows/).
  • winget-ready — the zip now contains a portable exe, which makes the package eligible for the Windows Package Manager. A draft manifest (JordanNewell.CurtViewer, zip installer, portable nested exe) is in the repo under packaging/winget/; submission to microsoft/winget-pkgs is pending (needs CLA + publisher verification — human call, see the README there).

Upgrade note

If you installed v1.0.0: extract this folder (keep it somewhere stable — the association points into it) and re-run install.cmd so the registered open command picks up CurtViewer.exe. uninstall.cmd still removes the association the same way as before.

What's in the zip

The viewer (vendored, fully offline), the shared python generator, CurtViewer.exe + src-windows/CurtViewer.cs + build.cmd, and per-OS association installers/uninstallers.

Install

Windows — extract the folder somewhere stable, double-click install.cmd (registers CurtViewer.exe, or builds it with the in-box compiler if missing, falling back to the curtopen.cmd wrapper; writes four values under HKCU\Software\Classes — current user only, no admin), then double-click any .curt file. uninstall.cmd removes them.

macOS — extract, then bash mac/install.sh (builds ~/Applications/Curt Viewer.app, registers with LaunchServices; with duti installed it becomes the default .curt handler). bash mac/uninstall.sh to remove. Requires python3.

Linux — extract, then sh linux/install.sh (installs to ~/.local/share/curt-openwith/ plus desktop + mime entries, sets the default handler via xdg-mime). sh linux/uninstall.sh to remove. Requires python3.

Security

Everything is local and offline: the installer touches only your user account (HKCU on Windows, $HOME on macOS/Linux), and the viewer fetches nothing. The generated view-*.html file contains a plain-text copy of the conversation next to the source file — delete it when you're done with a sensitive transcript. Message content can't execute in the viewer: all rendering goes through textContent, and the injected file text is \u003c-escaped so smuggled </script> markup stays inert (tested in CI on real macOS and Linux runners, and by the Windows suite including the new launcher checks).

curt-openwith v1.0.0

Choose a tag to compare

@JordanNewell JordanNewell released this 01 Nov 15:16
v1.0.0
f088a21

Double-click a .curt file and it opens in the offline Curt Viewer — a browser page that renders the conversation locally. No server, no network, no install beyond your user account.

What's in the zip: the viewer (vendored, fully offline), the shared python generator, and per-OS association installers/uninstallers.

Install

Windows — extract the folder somewhere stable, double-click install.cmd (writes four values under HKCU\Software\Classes; current user only, no admin), then double-click any .curt file. uninstall.cmd removes them.

macOS — extract, then bash mac/install.sh (builds ~/Applications/Curt Viewer.app, registers with LaunchServices; with duti installed it becomes the default .curt handler). bash mac/uninstall.sh to remove. Requires python3 (xcode-select --install provides it).

Linux — extract, then sh linux/install.sh (installs to ~/.local/share/curt-openwith/ plus desktop + mime entries, sets the default handler via xdg-mime). sh linux/uninstall.sh to remove. Requires python3.

Point the association at a folder that stays put — it references the extracted path.

Security

Everything is local and offline: the installer touches only your user account (HKCU on Windows, $HOME on macOS/Linux), and the viewer fetches nothing. The generated view-*.html file contains a plain-text copy of the conversation next to the source file — delete it when you're done with a sensitive transcript. Message content can't execute in the viewer: all rendering goes through textContent, and the injected file text is \u003c-escaped so smuggled </script> markup stays inert (tested in CI on real macOS and Linux runners).