<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>KAERIS changelog</title>
    <link>https://kaeris.dev/changelog.html</link>
    <description>Releases of the kaeris command-line tool and of the kaeris.dev website, newest first.</description>
    <language>en</language>
    <lastBuildDate>Sun, 01 Nov 2026 02:58:19 +0200</lastBuildDate>
    <atom:link href="https://kaeris.dev/changelog.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Website release 1038</title>
      <link>https://kaeris.dev/changelog.html#site-1038</link>
      <guid isPermaLink="false">kaeris-changelog-site-1038</guid>
      <pubDate>Sun, 01 Nov 2026 02:58:19 +0200</pubDate>
      <category>Website</category>
      <description>&lt;ul&gt;&lt;li&gt;&lt;code&gt;/api/health&lt;/code&gt; and &lt;code&gt;/api/health/ready&lt;/code&gt; answer HEAD requests. Uptime monitors that probe with HEAD used to get HTTP 405, which they read as down.&lt;/li&gt;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Website release 1037</title>
      <link>https://kaeris.dev/changelog.html#site-1037</link>
      <guid isPermaLink="false">kaeris-changelog-site-1037</guid>
      <pubDate>Sat, 31 Oct 2026 11:46:36 +0200</pubDate>
      <category>Website</category>
      <description>&lt;ul&gt;&lt;li&gt;Benchmark re-run on 30 Oct 2026 with the production models: 25 of 27 planted meaning errors caught in each of two runs, 38 of 1,846 control lines flagged (2.1%). The July figures were replaced, with a note on what changed.&lt;/li&gt;&lt;li&gt;The /why page is available in all 10 site languages.&lt;/li&gt;&lt;li&gt;Plan cards on /pricing and the home page are built from one data file, so both show the same limits.&lt;/li&gt;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Website release 1036</title>
      <link>https://kaeris.dev/changelog.html#site-1036</link>
      <guid isPermaLink="false">kaeris-changelog-site-1036</guid>
      <pubDate>Fri, 30 Oct 2026 18:29:31 +0200</pubDate>
      <category>Website</category>
      <description>&lt;ul&gt;&lt;li&gt;Verify: an HTTP 429 from the model provider is retried with exponential backoff and jitter. A backup model reads the back-translation when the main one does not answer, and the report names the model that read it.&lt;/li&gt;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Website release 1035</title>
      <link>https://kaeris.dev/changelog.html#site-1035</link>
      <guid isPermaLink="false">kaeris-changelog-site-1035</guid>
      <pubDate>Fri, 30 Oct 2026 17:49:20 +0200</pubDate>
      <category>Website</category>
      <description>&lt;ul&gt;&lt;li&gt;New /success page: activates the key and shows the limits of the plan you bought.&lt;/li&gt;&lt;li&gt;New /subscription page with both Creem cancel options: "Cancel at end of period" keeps access until the paid period ends, "Cancel Immediately" ends it at once.&lt;/li&gt;&lt;li&gt;The key field shows "Active" or the reason a key does not work, can remember the key and has "Forget key". Team/API keys are shown as Team/API.&lt;/li&gt;&lt;li&gt;Webhooks are listed for Lifetime as well as Team/API, as the server already allowed: pricing table, terms and API docs.&lt;/li&gt;&lt;li&gt;The pricing page states that a screenshot adds 6,000 characters per language to the metered volume.&lt;/li&gt;&lt;li&gt;One age rule, 18+, in the footer, the privacy policy and the terms.&lt;/li&gt;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>kaeris 0.2.40</title>
      <link>https://kaeris.dev/changelog.html#cli-0.2.40</link>
      <guid isPermaLink="false">kaeris-changelog-cli-0.2.40</guid>
      <pubDate>Thu, 29 Oct 2026 23:16:49 +0200</pubDate>
      <category>CLI</category>
      <description>&lt;ul&gt;&lt;li&gt;&lt;code&gt;kaeris translate --dry-run&lt;/code&gt; prices a run before it starts, per file and per language; with &lt;code&gt;--json&lt;/code&gt; it prints the same as JSON.&lt;/li&gt;&lt;li&gt;The estimate counts only what a real run would send: lines covered by the lock file, &lt;code&gt;--only-new&lt;/code&gt; and project memory are left out.&lt;/li&gt;&lt;li&gt;The repository has SECURITY.md, CONTRIBUTING.md, a code of conduct and issue forms.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="https://github.com/kaeris-io/kaeris-cli/tree/v0.2.40"&gt;Source at v0.2.40&lt;/a&gt; · &lt;a href="https://pypi.org/project/kaeris/0.2.40/"&gt;PyPI&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Website release 1030</title>
      <link>https://kaeris.dev/changelog.html#site-1030</link>
      <guid isPermaLink="false">kaeris-changelog-site-1030</guid>
      <pubDate>Thu, 29 Oct 2026 14:59:18 +0200</pubDate>
      <category>Website</category>
      <description>&lt;ul&gt;&lt;li&gt;New plan limits: Pro 12M characters a month; Team/API $79 a month or $790 a year with 60M characters a month.&lt;/li&gt;&lt;li&gt;&lt;code&gt;/en&lt;/code&gt; and &lt;code&gt;/en/...&lt;/code&gt; redirect (301) to the same page on the root: English pages live on the root.&lt;/li&gt;&lt;li&gt;The theme toggle sits next to the language picker at every screen width.&lt;/li&gt;&lt;li&gt;Chat widget: names in 10 languages, a "Write to us" mail link and long answers folded.&lt;/li&gt;&lt;li&gt;Terms, privacy policy and security page proofread in 9 languages.&lt;/li&gt;&lt;li&gt;Fix: the translate result no longer shows "+undefined%" rows when every language failed.&lt;/li&gt;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>kaeris 0.2.39</title>
      <link>https://kaeris.dev/changelog.html#cli-0.2.39</link>
      <guid isPermaLink="false">kaeris-changelog-cli-0.2.39</guid>
      <pubDate>Thu, 29 Oct 2026 11:37:06 +0200</pubDate>
      <category>CLI</category>
      <description>&lt;ul&gt;&lt;li&gt;With &lt;code&gt;--verify&lt;/code&gt; and reused lines the client always sends &lt;code&gt;verify_reused&lt;/code&gt; (&lt;code&gt;{}&lt;/code&gt; when nothing is reused). Without it the server took the request for an old client and verified and charged the whole file.&lt;/li&gt;&lt;li&gt;Requests carry &lt;code&gt;User-Agent: kaeris-cli/&amp;lt;version&amp;gt;&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="https://github.com/kaeris-io/kaeris-cli/tree/v0.2.39"&gt;Source at v0.2.39&lt;/a&gt; · &lt;a href="https://pypi.org/project/kaeris/0.2.39/"&gt;PyPI&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/kaeris/v/0.2.39"&gt;npm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>kaeris 0.2.38</title>
      <link>https://kaeris.dev/changelog.html#cli-0.2.38</link>
      <guid isPermaLink="false">kaeris-changelog-cli-0.2.38</guid>
      <pubDate>Wed, 28 Oct 2026 20:34:00 +0200</pubDate>
      <category>CLI</category>
      <description>&lt;ul&gt;&lt;li&gt;&lt;code&gt;--verify&lt;/code&gt; checks what changed: a line remembered from an earlier run is verified once, then trusted.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="https://github.com/kaeris-io/kaeris-cli/tree/v0.2.38"&gt;Source at v0.2.38&lt;/a&gt; · &lt;a href="https://pypi.org/project/kaeris/0.2.38/"&gt;PyPI&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/kaeris/v/0.2.38"&gt;npm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>kaeris 0.2.36</title>
      <link>https://kaeris.dev/changelog.html#cli-0.2.36</link>
      <guid isPermaLink="false">kaeris-changelog-cli-0.2.36</guid>
      <pubDate>Tue, 27 Oct 2026 13:36:19 +0200</pubDate>
      <category>CLI</category>
      <description>&lt;ul&gt;&lt;li&gt;&lt;code&gt;--model&lt;/code&gt; per language, and &lt;code&gt;"models"&lt;/code&gt; per language in &lt;code&gt;kaeris.json&lt;/code&gt; (Lifetime, your own key). The chosen model is part of the lock and the translation memory settings.&lt;/li&gt;&lt;li&gt;Glossary file &lt;code&gt;kaeris-glossary.json&lt;/code&gt;: a term and the word each language must use. &lt;code&gt;kaeris check&lt;/code&gt; fails a term translated another way (a warning in languages where words inflect), &lt;code&gt;translate&lt;/code&gt; sends the terms, and a changed term re-translates only the strings that use it.&lt;/li&gt;&lt;li&gt;Text files keep their line endings on Windows (LF when new): translation memory, lock, &lt;code&gt;kaeris.json&lt;/code&gt;, receipt, SARIF.&lt;/li&gt;&lt;li&gt;The &lt;code&gt;Run:&lt;/code&gt; line marks a backup model as &lt;code&gt;(backup)&lt;/code&gt; and prints why it answered.&lt;/li&gt;&lt;li&gt;&lt;code&gt;kaeris check&lt;/code&gt; ported to Node and published on npm as &lt;code&gt;kaeris&lt;/code&gt;, with no dependencies.&lt;/li&gt;&lt;li&gt;GitHub Action: translate can open the pull request itself, with a quality report and the fixes it applied.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="https://github.com/kaeris-io/kaeris-cli/tree/v0.2.36"&gt;Source at v0.2.36&lt;/a&gt; · &lt;a href="https://pypi.org/project/kaeris/0.2.36/"&gt;PyPI&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/kaeris/v/0.2.36"&gt;npm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>kaeris 0.2.35</title>
      <link>https://kaeris.dev/changelog.html#cli-0.2.35</link>
      <guid isPermaLink="false">kaeris-changelog-cli-0.2.35</guid>
      <pubDate>Mon, 26 Oct 2026 21:46:55 +0200</pubDate>
      <category>CLI</category>
      <description>&lt;ul&gt;&lt;li&gt;Language codes are accepted in any case, and &lt;code&gt;--lang-case&lt;/code&gt; applies to every file written.&lt;/li&gt;&lt;li&gt;Dropped connections are retried.&lt;/li&gt;&lt;li&gt;&lt;code&gt;kaeris check&lt;/code&gt; reads every supported format.&lt;/li&gt;&lt;li&gt;A fix to &lt;code&gt;--json&lt;/code&gt; output.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="https://github.com/kaeris-io/kaeris-cli/tree/v0.2.35"&gt;Source at v0.2.35&lt;/a&gt; · &lt;a href="https://pypi.org/project/kaeris/0.2.35/"&gt;PyPI&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
