<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Judoscale Changelog</title>
    <description>Product updates and new features from Judoscale</description>
    <link>https://judoscale.com/changelog</link>
    <language>en-us</language>
    <item>
      <title>Add roles and require 2FA for your team</title>
      <pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/add-roles-and-require-2fa-for-your-team</link>
      <guid>https://judoscale.com/changelog/add-roles-and-require-2fa-for-your-team</guid>
      <author>Carlos Antonio da Silva</author>
      <content:encoded>
        <![CDATA[<p>Team members now have a role: <strong>Member</strong> or <strong>Admin</strong>. Members get full access to the team&rsquo;s apps and autoscaling. Admins get all that plus managing the team itself — settings, subscription, members, and the new team-wide 2FA requirement.</p>

<p><figure>
  <img alt="team-members-list.png" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/338508-739a2c460cb46082fd6f1cec12c6c13dd5f81b7c/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/338508-739a2c460cb46082fd6f1cec12c6c13dd5f81b7c/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/338508-739a2c460cb46082fd6f1cec12c6c13dd5f81b7c/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>Admins can require two-factor authentication (2FA) for the whole team in one click. Anyone without it will be asked to set it up at their next sign-in.</p>

<p>Read more in our <a href="/docs/managing-your-team">team management docs</a>.</p>
]]>
      </content:encoded>
    </item>
    <item>
      <title>Dyno Sniper is now available on Heroku</title>
      <pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/dyno-sniper-is-now-available-on-heroku</link>
      <guid>https://judoscale.com/changelog/dyno-sniper-is-now-available-on-heroku</guid>
      <author>Carlos Antonio da Silva</author>
      <content:encoded>
        <![CDATA[<p>We&rsquo;re rolling Dyno Sniper out to all customers running on Heroku, after running successfully in early access on our own production apps (and a few customers) for some time.</p>

<p>It complements autoscaling by automatically detecting and restarting poorly performing dynos — the kind that get stuck on <a href="/blog/shared-hardware-how-bad-can-it-get">noisy hardware</a> and drag down your queue time (or response time), even when the rest of your fleet is fine.</p>

<p>Find it under your web process&rsquo;s advanced settings:</p>

<p><figure>
  <img alt="Dyno Sniper setting" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/337218-9856e4f4182b060ab47516973fc2494a44dc0393/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/337218-9856e4f4182b060ab47516973fc2494a44dc0393/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/337218-9856e4f4182b060ab47516973fc2494a44dc0393/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>Restarts show up directly above the scale chart. Hover any marker to see which dyno was sniped:</p>

<p><figure>
  <img alt="Sniping Chart" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/337218-b06ab9a0719b5e8926778188fe72b3db585cb05e/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/337218-b06ab9a0719b5e8926778188fe72b3db585cb05e/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/337218-b06ab9a0719b5e8926778188fe72b3db585cb05e/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p><a href="/docs/sniper">Learn more</a>.</p>
]]>
      </content:encoded>
    </item>
    <item>
      <title>Per-instance breakdown for web queue time and response time charts</title>
      <pubDate>Tue, 5 May 2026 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/per-instance-breakdown-for-web-queue-time-and-response-time-charts</link>
      <guid>https://judoscale.com/changelog/per-instance-breakdown-for-web-queue-time-and-response-time-charts</guid>
      <author>Carlos Antonio da Silva</author>
      <content:encoded>
        <![CDATA[<p>The Queue Time and Response Time charts now have a per-instance view that shows each web dyno / instance individually. Click the chart label to switch between the average view and the per-instance view.</p>

<p><figure>
  <img alt="Per-instance chart breakdown gif" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/336973-ea943fb4f0ef38dd8906fefbcf9ad4fcd160797f/width=96,quality=20,blur=10,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/336973-ea943fb4f0ef38dd8906fefbcf9ad4fcd160797f/width=96,quality=20,blur=10,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/336973-ea943fb4f0ef38dd8906fefbcf9ad4fcd160797f/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>Hover the chart to view each instance&rsquo;s value at that moment in time, sorted highest first — handy for spotting if it&rsquo;s a fleet-wide spike or maybe a specific instance that might be misbehaving.</p>

<p><a href="https://app.judoscale.com/" target="_blank" rel="noopener">Head to the app</a> to view your app&rsquo;s per-instance chart breakdown.</p>
]]>
      </content:encoded>
    </item>
    <item>
      <title>Judoscale now speaks your time zone</title>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/judoscale-now-speaks-your-time-zone</link>
      <guid>https://judoscale.com/changelog/judoscale-now-speaks-your-time-zone</guid>
      <author>Carlos Antonio da Silva</author>
      <content:encoded>
        <![CDATA[<p>Our charts have always shown date/time stamps using your local (browser-based) time zone, but the <a href="/changelog/redesigned-scaling-schedules">schedule has been UTC-based since the beginning</a>. Now both speak the same time zone: yours!</p>

<p>The schedule is now <em>displayed</em> matching the charts time zone, which can be configured in your user settings or directly in the chart overview, so you can choose a specific time zone to see both the charts and schedule across the board. This only affects your view.</p>

<p><figure>
  <img alt="CleanShot 2026-04-14 at 16.08.48@2x.png" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335780-84d500a1cff1bab7212a13441d36739a3abd2d4f/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335780-84d500a1cff1bab7212a13441d36739a3abd2d4f/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335780-84d500a1cff1bab7212a13441d36739a3abd2d4f/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>The schedule can also be <em>anchored</em> to a specific time zone (UTC by default), and is going to be daylight saving time-aware, so it will adjust accordingly as clocks change. The time zone is set is per-process, so you can have a different one on each process if needed.</p>

<p><figure>
  <img alt="public.jpeg" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335780-2fab0ec64ec827a94eaa6c7ce8b1817d8bd97bcd/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335780-2fab0ec64ec827a94eaa6c7ce8b1817d8bd97bcd/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335780-2fab0ec64ec827a94eaa6c7ce8b1817d8bd97bcd/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>Check out the <a href="/docs/leveraging-schedules#time-zones">documentation</a> for more info.</p>
]]>
      </content:encoded>
    </item>
    <item>
      <title>Launch the PaaS Pricing Calculator for your setup</title>
      <pubDate>Tue, 7 Apr 2026 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/launch-the-paas-pricing-calculator-for-your-setup</link>
      <guid>https://judoscale.com/changelog/launch-the-paas-pricing-calculator-for-your-setup</guid>
      <author>Adam McCrea</author>
      <content:encoded>
        <![CDATA[<p>Want to compare hosting costs across PaaS platforms?</p>

<p>If you visit your application settings you&rsquo;ll see a new card near the bottom with a &ldquo;Launch Pricing Calculator&rdquo; button.</p>

<p><figure>
  <img alt="Screenshot_2026-04-06_at_13.12.13.png" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335295-acdcb0227fd8926b1f16b4015824f318d68a7c4e/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335295-acdcb0227fd8926b1f16b4015824f318d68a7c4e/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335295-acdcb0227fd8926b1f16b4015824f318d68a7c4e/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>This launches our <a href="/tools/paas-pricing-calculator">PaaS Pricing Comparison Calculator</a> pre-filled with your app&rsquo;s processes.</p>

<p><figure>
  <img alt="CleanShot 2026-04-07 at 08.52.56@2x.png" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335295-274eb9209e174af815c3f2244a567526d71388a8/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335295-274eb9209e174af815c3f2244a567526d71388a8/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/335295-274eb9209e174af815c3f2244a567526d71388a8/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>
]]>
      </content:encoded>
    </item>
    <item>
      <title>Busy Jobs chart for worker processes</title>
      <pubDate>Mon, 23 Mar 2026 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/busy-jobs-chart-for-worker-processes</link>
      <guid>https://judoscale.com/changelog/busy-jobs-chart-for-worker-processes</guid>
      <author>Carlos Antonio da Silva</author>
      <content:encoded>
        <![CDATA[<p>Worker process scaling charts now include a &ldquo;Busy Jobs&rdquo; row that shows when your background workers had active jobs running.</p>

<p><figure>
  <img alt="Busy Jobs Chart" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/334181-a71c9f9c476a8c614b4ae1c38080df364b33b5c7/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/334181-a71c9f9c476a8c614b4ae1c38080df364b33b5c7/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/334181-a71c9f9c476a8c614b4ae1c38080df364b33b5c7/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>This row appears when you have the <a href="/docs/long-running-jobs">Prevent downscaling when jobs are busy</a> setting enabled, helping you see at a glance when job activity might be preventing downscaling.</p>

<p><figure>
  <img alt="Prevent downscaling when jobs are busy setting" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/334181-7b0fac245326cc47854258ecd7530dd78326beca/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/334181-7b0fac245326cc47854258ecd7530dd78326beca/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/334181-7b0fac245326cc47854258ecd7530dd78326beca/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>
]]>
      </content:encoded>
    </item>
    <item>
      <title>2FA with TOTP</title>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/2fa-with-totp</link>
      <guid>https://judoscale.com/changelog/2fa-with-totp</guid>
      <author>Carlos Antonio da Silva</author>
      <content:encoded>
        <![CDATA[<p>You can enable two-factor authentication using time-based one-time passwords in Judoscale now.</p>

<p><figure>
  <img alt="Screenshot 2026-02-23 at 11.59.50.png" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/332628-ae06a2de42836f5ce072bc9aec56299efc1d360f/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/332628-ae06a2de42836f5ce072bc9aec56299efc1d360f/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/332628-ae06a2de42836f5ce072bc9aec56299efc1d360f/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>Head over to your <a href="https://app.judoscale.com/users/edit" target="_blank" rel="noopener">user settings</a> to enable it.</p>
]]>
      </content:encoded>
    </item>
    <item>
      <title>Support for Python Dramatiq task library</title>
      <pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/support-for-python-dramatiq-task-library</link>
      <guid>https://judoscale.com/changelog/support-for-python-dramatiq-task-library</guid>
      <author>Carlos Antonio da Silva</author>
      <content:encoded>
        <![CDATA[<p>Our <a href="https://github.com/judoscale/judoscale-python?tab=readme-ov-file#using-judoscale-with-dramatiq-and-redis" target="_blank" rel="noopener"><code>judoscale-python</code> package</a> just got native support for the <a href="https://dramatiq.io" target="_blank" rel="noopener">Dramatiq</a> background task processing library.</p>

<p><figure>
  <img alt="Dramatiq Setup" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/332218-14a0dc3f8a29f55c95e20c46447b39b0495e0b4e/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/332218-14a0dc3f8a29f55c95e20c46447b39b0495e0b4e/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/332218-14a0dc3f8a29f55c95e20c46447b39b0495e0b4e/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>It only works with the Redis broker (for now). I&rsquo;s <a href="/docs/installation-dramatiq">fairly simple to setup</a>, and you&rsquo;ll be autoscaling your dramatiq workers in minutes!</p>
]]>
      </content:encoded>
    </item>
    <item>
      <title>Heroku Add-on to Direct migration tool</title>
      <pubDate>Mon, 9 Feb 2026 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/heroku-add-on-to-direct-migration-tool</link>
      <guid>https://judoscale.com/changelog/heroku-add-on-to-direct-migration-tool</guid>
      <author>Carlos Antonio da Silva</author>
      <content:encoded>
        <![CDATA[<p>We&rsquo;ve just released an assistant to help Heroku teams migrate from our Heroku add-on to one of our more economical <a href="/heroku-pricing">Heroku direct</a> plans.</p>

<p><figure>
  <img alt="image.png" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/331747-ef7f0e39db62e089345ae2512afffac8b2223e0e/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/331747-ef7f0e39db62e089345ae2512afffac8b2223e0e/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/331747-ef7f0e39db62e089345ae2512afffac8b2223e0e/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>It will copy over all your processes settings, and guide you to enable autoscaling on the new team. Check out the <a href="/docs/heroku-addon-migration">documentation</a> to get started.</p>
]]>
      </content:encoded>
    </item>
    <item>
      <title>Heroku Direct with team level billing</title>
      <pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate>
      <link>https://judoscale.com/changelog/heroku-direct-with-team-level-billing</link>
      <guid>https://judoscale.com/changelog/heroku-direct-with-team-level-billing</guid>
      <author>Carlos Antonio da Silva</author>
      <content:encoded>
        <![CDATA[<p>You now have the option to integrate with Heroku directly through Judoscale via OAuth, unlocking team level plans &amp; billing, and slightly cheaper plans.</p>

<p><figure>
  <img alt="heroku-direct2.png" loading="lazy" x-init="$el.removeAttribute(&#39;loading&#39;)" src="https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/328594-d8f7dfc3c4eec11dd91b1fbcf2c9ed9085826122/width=96,quality=30,blur=20,format=jpeg" x-data="{&quot;src&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/328594-d8f7dfc3c4eec11dd91b1fbcf2c9ed9085826122/width=96,quality=30,blur=20,format=jpeg&quot;,&quot;fullResSrc&quot;:&quot;https://judoscale.com/cdn-cgi/imagedelivery/g5ziwLsypgTqGag7aYHX0w/changelog/328594-d8f7dfc3c4eec11dd91b1fbcf2c9ed9085826122/public&quot;}" :src="src" x-intersect="src = fullResSrc">
  
</figure>
</p>

<p>Same product, same features, <em>different pricing</em>. Learn how to <a href="/docs/heroku-getting-started">get started with Heroku Direct</a>, and check out our <a href="/docs/pricing-details">pricing docs</a> for more info.</p>
]]>
      </content:encoded>
    </item>
  </channel>
</rss>
