<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kirill Lukyanov</title>
    <description>The latest articles on DEV Community by Kirill Lukyanov (@klukyanov).</description>
    <link>https://dev.to/klukyanov</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4092798%2F719db81c-244e-4965-a433-0662ed094a53.png</url>
      <title>DEV Community: Kirill Lukyanov</title>
      <link>https://dev.to/klukyanov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/klukyanov"/>
    <language>en</language>
    <item>
      <title>iPhone Duo: What Apple's 'Boring' Keynote Actually Means for iOS Developers</title>
      <dc:creator>Kirill Lukyanov</dc:creator>
      <pubDate>Mon, 14 Sep 2026 14:28:34 +0000</pubDate>
      <link>https://dev.to/klukyanov/iphone-duo-what-apples-boring-keynote-actually-means-for-ios-developers-20dp</link>
      <guid>https://dev.to/klukyanov/iphone-duo-what-apples-boring-keynote-actually-means-for-ios-developers-20dp</guid>
      <description>&lt;p&gt;Apple's September keynote felt like "nothing interesting": a slightly faster Pro, a slightly pricier Pro, new watches, new earbuds, and a foldable that looked almost exactly like the leaks. For buyers, that's a fair summary. For iOS developers, it's the opposite — the evening quietly delivered the biggest layout change since the iPhone X notch, and the clock on it runs out on October 23.&lt;/p&gt;

&lt;p&gt;The day before the event I published 13 predictions with probabilities. Here's how they did, what was actually shown, and — the part I really care about — what the iPhone Duo's inner display means for your code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scorecard: 11 out of 13
&lt;/h2&gt;

&lt;p&gt;Probabilities were set on the morning of September 9, before the stream, and haven't been touched since. Anything below 50% means I was betting &lt;em&gt;against&lt;/em&gt; the event.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Prediction&lt;/th&gt;
&lt;th&gt;My odds&lt;/th&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A foldable iPhone is shown&lt;/td&gt;
&lt;td&gt;95%&lt;/td&gt;
&lt;td&gt;Shown — iPhone Duo&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;It's called iPhone Ultra&lt;/td&gt;
&lt;td&gt;55%&lt;/td&gt;
&lt;td&gt;It's called iPhone Duo&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foldable starts at $2,000&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;td&gt;$1,999 for 256 GB&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Touch ID instead of Face ID on the foldable&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;td&gt;Touch ID in the side button&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No telephoto on the foldable&lt;/td&gt;
&lt;td&gt;70%&lt;/td&gt;
&lt;td&gt;Main 48 MP + ultra wide; 2x is a crop of the main sensor&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No base iPhone 18&lt;/td&gt;
&lt;td&gt;90%&lt;/td&gt;
&lt;td&gt;Moved to spring 2027&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A20 Pro on 2 nm in all three iPhones&lt;/td&gt;
&lt;td&gt;90%&lt;/td&gt;
&lt;td&gt;All three&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 18 Pro gets at least $100 pricier&lt;/td&gt;
&lt;td&gt;70%&lt;/td&gt;
&lt;td&gt;$1,199 / $1,299 — exactly +$100&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variable aperture on the Pro main camera&lt;/td&gt;
&lt;td&gt;65%&lt;/td&gt;
&lt;td&gt;Yes, plus manual aperture and shutter&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ceramic Apple Watch Series 12&lt;/td&gt;
&lt;td&gt;70%&lt;/td&gt;
&lt;td&gt;Ceramic finish in the lineup&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AirPods 5 with a new H3 chip&lt;/td&gt;
&lt;td&gt;65%&lt;/td&gt;
&lt;td&gt;H3, $129 / $149 — ANC on both models&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Home hub is shown (bet against)&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;Not shown&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Something not in any leak (bet against)&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;Front camera under the foldable's inner display&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Brier score: &lt;strong&gt;0.118&lt;/strong&gt; (answering 50/50 on everything scores 0.25). I missed exactly where I warned I would: specs leak for months because thousands of factory workers know them, while the name is known by about twenty people who stay quiet. And I got cocky betting against a surprise.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was announced
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Device&lt;/th&gt;
&lt;th&gt;US price&lt;/th&gt;
&lt;th&gt;Pre-order&lt;/th&gt;
&lt;th&gt;Available&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 18 Pro&lt;/td&gt;
&lt;td&gt;from $1,199&lt;/td&gt;
&lt;td&gt;Sep 12&lt;/td&gt;
&lt;td&gt;Sep 18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 18 Pro Max&lt;/td&gt;
&lt;td&gt;from $1,299&lt;/td&gt;
&lt;td&gt;Sep 12&lt;/td&gt;
&lt;td&gt;Sep 18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone Duo&lt;/td&gt;
&lt;td&gt;from $1,999&lt;/td&gt;
&lt;td&gt;Oct 16&lt;/td&gt;
&lt;td&gt;Oct 23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apple Watch Series 12&lt;/td&gt;
&lt;td&gt;from $399&lt;/td&gt;
&lt;td&gt;now&lt;/td&gt;
&lt;td&gt;Sep 18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apple Watch Ultra 4&lt;/td&gt;
&lt;td&gt;from $799&lt;/td&gt;
&lt;td&gt;now&lt;/td&gt;
&lt;td&gt;Sep 18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AirPods 5&lt;/td&gt;
&lt;td&gt;$129 / $149&lt;/td&gt;
&lt;td&gt;now&lt;/td&gt;
&lt;td&gt;Sep 18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iOS 27, macOS Golden Gate &amp;amp; co&lt;/td&gt;
&lt;td&gt;free&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Sep 14&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The good:&lt;/strong&gt; a foldable whose two displays share (almost) the same proportions, so content scales instead of reflowing; Split View on an iPhone for the first time; a real variable aperture; 45 hours of video on the Pro Max; ANC in the $129 AirPods; and Apple Reference Image, which signs sensor data so a photo can later be proven to be a photo — arguably the most underrated announcement of the night.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The not-so-good:&lt;/strong&gt; +$100 on the Pro and +$300 on the 1 TB tier, price bumps on older models; Siri AI ships in beta, English-only, with daily usage limits and "expanded access for a fee in the future" (and not at all on iPhone in the EU or mainland China); the iPhone 18 Pro display is unchanged apart from a narrower Dynamic Island; the Duo is eSIM-only and doesn't support Apple Pencil Pro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not shown:&lt;/strong&gt; the base iPhone 18, the home hub, HomePod mini, Apple TV, any Mac — and, for developers, the iOS 27.1 SDK.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new screen in numbers
&lt;/h2&gt;

&lt;p&gt;For 19 years the iPhone has been a tall, narrow strip: 1.5 on the original, 2.17 on today's Pro Max. Every mobile layout we write grew up inside that strip. The Duo's inner display breaks it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;iPhone 18 Pro Max&lt;/th&gt;
&lt;th&gt;Duo, outer&lt;/th&gt;
&lt;th&gt;Duo, inner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Diagonal&lt;/td&gt;
&lt;td&gt;6.9″&lt;/td&gt;
&lt;td&gt;5.4″&lt;/td&gt;
&lt;td&gt;7.6″&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pixels&lt;/td&gt;
&lt;td&gt;1320 × 2868&lt;/td&gt;
&lt;td&gt;1398 × 2034&lt;/td&gt;
&lt;td&gt;2670 × 1878&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Points (w × h)&lt;/td&gt;
&lt;td&gt;440 × 956&lt;/td&gt;
&lt;td&gt;466 × 678&lt;/td&gt;
&lt;td&gt;890 × 626&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Density&lt;/td&gt;
&lt;td&gt;460 ppi&lt;/td&gt;
&lt;td&gt;460 ppi&lt;/td&gt;
&lt;td&gt;430 ppi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aspect ratio&lt;/td&gt;
&lt;td&gt;2.17&lt;/td&gt;
&lt;td&gt;1.45&lt;/td&gt;
&lt;td&gt;1.42&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Size classes (portrait)&lt;/td&gt;
&lt;td&gt;compact × regular&lt;/td&gt;
&lt;td&gt;compact × regular&lt;/td&gt;
&lt;td&gt;regular × regular&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supported orientations&lt;/td&gt;
&lt;td&gt;honored&lt;/td&gt;
&lt;td&gt;honored&lt;/td&gt;
&lt;td&gt;ignored&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three takeaways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;1.42 is roughly √2 — the A4 paper ratio.&lt;/strong&gt; Fold such a sheet in half and each half keeps the same shape. In Split View the inner display splits into two panes of roughly 445 × 626 points, each almost the shape of the outer display. Two apps side by side each get an "outer screen". That's hardware designed with software in mind.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The open Duo is wider than tall.&lt;/strong&gt; It's not a phone turned sideways — it's the new default posture. The Dynamic Island sits vertically on the side, so safe-area insets are asymmetric, and with the 27.1 SDK vertical bars move to the left edge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;16:9 video loses.&lt;/strong&gt; At 890 points wide a video is 890 × 501, leaving 125 points of black — a fifth of the screen.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How the Duo shows your app if you do nothing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built without the iOS 27 SDK:&lt;/strong&gt; a familiar phone-sized window in the middle of the inner display, surrounded by black. A postcard in a giant frame.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built with the iOS 27 SDK:&lt;/strong&gt; wider, but part of the screen is still empty.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built with the iOS 27.1 SDK:&lt;/strong&gt; edge to edge, toolbars and tab bars move to the left. This is the native look — and the SDK for it isn't even in beta yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to grep for this week
&lt;/h2&gt;

&lt;p&gt;The good news: almost all of this is stuff Apple has asked us to do for years. The bad news: iPhones were always narrow, and plenty of codebases quietly relied on it. The Duo is still an iPhone, but inside it's regular × regular, like an iPad.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;In your code&lt;/th&gt;
&lt;th&gt;Why it breaks on Duo&lt;/th&gt;
&lt;th&gt;Replace with&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;UIScreen.main.bounds&lt;/code&gt;, hardcoded widths&lt;/td&gt;
&lt;td&gt;Two differently shaped screens, the app moves between them live&lt;/td&gt;
&lt;td&gt;Your view's geometry (&lt;code&gt;onGeometryChange&lt;/code&gt;), screen via &lt;code&gt;UIWindowScene&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interface orientation checks&lt;/td&gt;
&lt;td&gt;The inner display ignores supported orientations&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;horizontalSizeClass&lt;/code&gt; / &lt;code&gt;verticalSizeClass&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;userInterfaceIdiom == .phone&lt;/code&gt; as "narrow screen"&lt;/td&gt;
&lt;td&gt;Duo is an iPhone with regular × regular and Split View&lt;/td&gt;
&lt;td&gt;Layout by size class, not by device type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Symmetric safe-area insets&lt;/td&gt;
&lt;td&gt;The Dynamic Island is on the side&lt;/td&gt;
&lt;td&gt;Handle each inset and margin independently&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;UIRequiresFullScreen&lt;/code&gt; in Info.plist&lt;/td&gt;
&lt;td&gt;No longer prevents resizing from iOS 27&lt;/td&gt;
&lt;td&gt;Support live resizing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A hardcoded "Sign in with Face ID" label&lt;/td&gt;
&lt;td&gt;Duo has Touch ID in the side button&lt;/td&gt;
&lt;td&gt;Branch on &lt;code&gt;LAContext.biometryType&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One window per app&lt;/td&gt;
&lt;td&gt;Split View opens multiple scenes, new windows only on the inner display&lt;/td&gt;
&lt;td&gt;Support multiple scenes and handle refused requests&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Biometrics is the easy one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;LocalAuthentication&lt;/span&gt;

&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;biometryLabel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;LAContext&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;canEvaluatePolicy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deviceOwnerAuthentication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;biometryType&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;faceID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="s"&gt;"Sign in with Face ID"&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;touchID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Sign in with Touch ID"&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;opticID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Sign in with Optic ID"&lt;/span&gt;
    &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="s"&gt;"Sign in with passcode"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Layout isn't rocket science either if you're on SwiftUI — &lt;code&gt;NavigationSplitView&lt;/code&gt; collapses to one column in compact width and expands on the inner display:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;RootView&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;View&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;@Environment&lt;/span&gt;&lt;span class="p"&gt;(\&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;horizontalSizeClass&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;hSize&lt;/span&gt;

    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;some&lt;/span&gt; &lt;span class="kt"&gt;View&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;NavigationSplitView&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;SidebarList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nv"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;DetailView&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hSize&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regular&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apple's "Preparing your app for iPhone Duo" material also names foldable-specific APIs: &lt;code&gt;onHingeChange&lt;/code&gt; / &lt;code&gt;UIHingeInteraction&lt;/code&gt; for hinge states and angle, &lt;code&gt;ArrangementView&lt;/code&gt; / &lt;code&gt;UIArrangementViewController&lt;/code&gt; for two-pane layouts around the fold, &lt;code&gt;reservedRegion&lt;/code&gt; on &lt;code&gt;GeometryProxy&lt;/code&gt; / &lt;code&gt;UIView&lt;/code&gt; to keep controls off the fold, &lt;code&gt;CameraCaptureAccessory&lt;/code&gt; for a preview or teleprompter on the outer display, and &lt;code&gt;AVCaptureDeviceDirectionCoordinator&lt;/code&gt; — because camera position is no longer camera direction.&lt;/p&gt;

&lt;p&gt;Two easy-to-miss extras: StandBy on the Duo runs on either display even when not charging, so apps without widgets or Live Activities simply don't exist there. And health apps should expect a lot more data — Series 12 and Ultra 4 sample heart rate every five seconds all day.&lt;/p&gt;

&lt;h3&gt;
  
  
  The next six weeks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sep 14&lt;/strong&gt; — iOS 27 ships. Its SDK (already in RC) decides whether your app resizes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sep 16–17&lt;/strong&gt; — Apple group labs on iPhone Duo; Q&amp;amp;As on Sep 23.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xcode 27.1 beta&lt;/strong&gt; — iOS 27.1 SDK and a Duo simulator you can open, close, rotate and partially fold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oct 23&lt;/strong&gt; — iPhone Duo ships on iOS 27.1, and people who paid $1,999 start opening your app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;If you own an iPhone 16 Pro or 17 Pro, you could have skipped this keynote. If you write iOS apps, this is the busiest autumn since 2017, when the iPhone X taught everyone the words "safe area". This time the lesson is that an iPhone can be wider than it is tall, that size classes on a phone aren't a formality, and that one window per app is no longer a given. The keynote was boring precisely because everything important in it was for Xcode, not for the store window.&lt;/p&gt;

&lt;p&gt;How many &lt;code&gt;UIScreen.main&lt;/code&gt; references are in your project?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://klukyanov.ru/notes/apple-event-september-2026-itogi/" rel="noopener noreferrer"&gt;klukyanov.ru&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swiftui</category>
      <category>apple</category>
      <category>mobile</category>
    </item>
    <item>
      <title>The Keynote Without Tim Cook: My Bets on What Apple Announces Today</title>
      <dc:creator>Kirill Lukyanov</dc:creator>
      <pubDate>Wed, 09 Sep 2026 10:37:49 +0000</pubDate>
      <link>https://dev.to/klukyanov/the-keynote-without-tim-cook-my-bets-on-what-apple-announces-today-50jm</link>
      <guid>https://dev.to/klukyanov/the-keynote-without-tim-cook-my-bets-on-what-apple-announces-today-50jm</guid>
      <description>&lt;p&gt;Today at 8pm Moscow time, Apple is holding its first fall keynote in fifteen years without Tim Cook on stage — and, if the leaks hold up, its first-ever foldable iPhone reveal. I'm writing this before the event starts. Not another leak roundup — there will be a hundred of those today — but my own predictions, with probabilities attached, so I can come back after the dust settles and check where I was wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  A new person on stage — and it matters
&lt;/h2&gt;

&lt;p&gt;On September 1, 2026, Tim Cook moved into the role of Executive Chairman, and John Ternus became Apple's CEO. Cook spent fifteen years in the role and leaves with the company valued around $4.6 trillion. Today's keynote is Ternus's first major public appearance in the new job.&lt;/p&gt;

&lt;p&gt;His background matters here. Ternus has spent twenty-five years at Apple, trained as a mechanical engineer, and most recently ran hardware engineering — Apple Watch, AirPods, Vision Pro, and the Mac's move to Apple silicon all passed through his hands. He's not a finance guy or a marketer; his whole career has been about how the physical object works.&lt;/p&gt;

&lt;p&gt;And here's the coincidence that's hard to ignore: his first keynote is the one where Apple, for the first time in its history, shows a foldable phone. A hinge, a 4.5mm folded body, a panel rated for 200,000 folds — that's exactly the kind of engineering problem Ternus grew up solving. If Apple timed the leadership handoff to land on the most "hardware" launch of the decade, the timing landed well.&lt;/p&gt;

&lt;p&gt;The practical takeaway: expect hardware today, not services. I wouldn't bet on a big subscription or ad-platform announcement closing out the evening.&lt;/p&gt;

&lt;h2&gt;
  
  
  My bets: thirteen predictions with probabilities
&lt;/h2&gt;

&lt;p&gt;This is the part the whole piece was written for. The probabilities are mine — not a betting line, not analyst consensus — based on how many leaks agree, how many independent supply-chain sources confirm a given spec, and Apple's long habit of surprising everyone specifically on names and prices.&lt;/p&gt;

&lt;p&gt;Read it like this: 90%+ is essentially locked in — only a real surprise changes it. 60-80% is likely, but I wouldn't be shocked by the opposite. Below 50% and I'm leaning against it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Prediction&lt;/th&gt;
&lt;th&gt;Probability&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Foldable iPhone is shown today&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;95%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Confirmed across independent supply chains, and the "Surprise and shine" slogan is clearly about this. You don't build hype this size for a camera bump.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;It's called iPhone Ultra&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;55%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The name that shows up most often in leaks, but naming is the one thing Apple keeps secret until the end. "Fold" was on the list too.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foldable starts at $2000+&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;85%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Two OLED panels, a titanium hinge, a new frame. Leaks consistently land on $2000 for the base and $2500+ for higher storage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Touch ID instead of Face ID on the foldable&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;75%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.5mm folded simply doesn't leave room for a TrueDepth module. A side button is the only way out.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No telephoto on the foldable&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;70%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Thickness beats periscope optics. Leaks consistently show two cameras: wide and ultra-wide.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No standard iPhone 18 today&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every major source confirms the affordable line is pushed to spring 2027. Apple is splitting the lineup across two seasons.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A20 Pro on a 2nm process across all three iPhones&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The 2nm jump is the year's biggest hardware story — no reason to split it by model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 18 Pro prices go up at least $100&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;70%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rumored at $1199/$1299. The new process is expensive, but Apple has held Pro pricing before, so a freeze isn't off the table.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variable aperture on the Pro's main camera&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;65%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Long-rumored and fits the "pro" narrative, but a moving mechanical part in a thin body is easy to slip a year.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apple Watch Series 12 gets a ceramic case option&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;70%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;It's been in the lineup before and shows up in leaks, but Apple has delayed such variants to spring before.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AirPods 5 with a new H3 chip&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;65%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Follows the usual refresh cycle, and two versions (with/without ANC) is plausible. Easy to get overshadowed by the foldable though.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A smart home hub with a 7-inch display&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;35%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Delayed twice already, tied to a new Siri. I'm betting against a proper reveal sharing the stage with the foldable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Something not in any leak at all&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Recent years' leaks cover almost everything. But a new CEO's first keynote is exactly the moment to keep one card up your sleeve.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If I had to compress it into one line: I'm nearly certain about the hardware and nearly unsure about names and prices. Specs leak months in advance because thousands of people on factory floors know them. Names and prices are known by maybe twenty people, and they don't talk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The foldable iPhone: the night's biggest bet
&lt;/h2&gt;

&lt;p&gt;For eight years the foldable phone market existed without Apple. Samsung shipped seven generations, Chinese makers got the crease nearly invisible, and Apple stayed silent. Today, apparently, the silence ends.&lt;/p&gt;

&lt;p&gt;What the leaks say: a book-style fold like the Galaxy Z Fold, a ~5.5-inch outer display and ~7.8-inch inner one. 4.5mm unfolded, about 9mm folded. A 5400-5800 mAh battery, A20 Pro chip, 12GB of RAM. Two rear cameras, no telephoto. Two colors: silver-white and deep indigo. MagSafe included. Starting around $2000.&lt;/p&gt;

&lt;p&gt;What interests me most isn't the thinness record — it's the &lt;strong&gt;Face ID compromise&lt;/strong&gt;. If Apple really is going back to a fingerprint sensor in a button, this is the first flagship in eight years where biometrics take a step backward. A company that built half its interface — unlocking, Apple Pay, password autofill — around Face ID is accepting a different method because physics leaves no other option. For a company that usually delays a product rather than back off its own standard, that's a real concession.&lt;/p&gt;

&lt;p&gt;And that's the real question behind the price. Selling a $2000 device with no telephoto and no Face ID is harder than it sounds. The pitch has to be the screen itself — email, a spreadsheet, and a messaging app side by side, real multitasking, unfolding in one motion. If Apple spends today's demo on real use cases instead of millimeters of thickness, the product could take off. If the whole story is a thinness record and hinge materials, it's a very expensive toy for enthusiasts.&lt;/p&gt;

&lt;h2&gt;
  
  
  iPhone 18 Pro: an evolution you'll pay more for
&lt;/h2&gt;

&lt;p&gt;Next to the foldable, the regular Pro models look boring — and that seems deliberate. Design barely changes from the 17 Pro. What changes is what's inside: the A20 Pro on a 2nm process (roughly 18% faster, 30% more efficient), a variable aperture main camera with a Samsung three-layer stacked sensor, LTPO+ display, a bigger battery in the Pro Max (~5567 mAh), new colors (dark cherry, light blue, silver — no black, if the leaks hold), and a $100+ price bump landing around $1199/$1299.&lt;/p&gt;

&lt;p&gt;The variable aperture is the most interesting bit. Every computational trick of recent years — portrait mode, night mode, background blur — has been software compensating for optics too small to fit in a phone. A mechanically variable aperture is a step in the other direction: not estimating a shot, but actually capturing it. For anyone who shoots seriously on a phone, that's a bigger deal than another megapixel bump.&lt;/p&gt;

&lt;h2&gt;
  
  
  What won't be shown today — and why that matters more
&lt;/h2&gt;

&lt;p&gt;The most underrated story of this fall isn't what gets announced, it's what doesn't. There's likely no standard iPhone 18 today — the affordable models are moving to spring 2027.&lt;/p&gt;

&lt;p&gt;That breaks a decade-plus ritual: September used to mean the entire lineup, base to Pro Max, all at once. Now the year splits in two. Expensive models in fall, mass-market ones in spring.&lt;/p&gt;

&lt;p&gt;The logic makes sense. A fall keynote stops being six devices competing for attention — the expensive models get the whole stage and head into holiday sales without internal competition. The mass-market iPhone gets a quiet spring window all to itself with no news cycle competing for headlines.&lt;/p&gt;

&lt;p&gt;For buyers, the downside is real: if you just want a good new iPhone without the "Pro" label, tonight doesn't concern you — wait until spring. And the price gap widens: the cheapest new iPhone now arrives six months after the most expensive one, and September's lineup starts at $1200-plus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watches, earbuds, and the home
&lt;/h2&gt;

&lt;p&gt;Everything else tonight is background noise, and that's telling too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apple Watch Series 12&lt;/strong&gt; — no design change, new processor, a returning ceramic case option, and reportedly continuous heart-rate monitoring throughout the day. That last part is the genuinely interesting one: continuous measurement instead of spot checks is a meaningfully different quality of health data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apple Watch Ultra 4&lt;/strong&gt; — same processor, incremental improvements. An upgrade for first-gen Ultra owners.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AirPods 5&lt;/strong&gt; — H3 chip, better sound, lower latency, in ANC and non-ANC versions. Splitting into two versions is a way to occupy a lower price tier without touching the Pro line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A smart home hub&lt;/strong&gt; with a 7-inch square display, camera, and video calling is the shakiest bet of the night. It's tied to a new Siri, and Siri has been rocky for Apple the last couple of years. I'm betting it doesn't get a proper showing today.&lt;/p&gt;

&lt;p&gt;Separately: iOS 27, iPadOS 27, macOS Golden Gate, watchOS 27, tvOS 27, and visionOS 27 are expected to release September 14. Preorders likely shift from the usual Friday to Saturday, September 12 — September 11 isn't a day Apple opens sales on. Retail availability is expected September 18.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means if you write iOS code
&lt;/h2&gt;

&lt;p&gt;If you build for iOS, tonight leaves you work for the fall. A foldable screen isn't "just another size" — it's several new states your app has to handle honestly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two genuinely different screens in one device.&lt;/strong&gt; 5.5 inches outside and 7.8 inside are different size classes entirely — compact phone outside, near-tablet inside. Anything laid out for a single fixed-width column will look stretched on the inner display. Adaptive size classes — the thing many teams have skipped for years because "iPhone is always compact" — suddenly matter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live transitions between states.&lt;/strong&gt; Users will unfold the device mid-interaction. That's a runtime geometry change with state preservation: unfinished text input, scroll position, an open navigation screen. This is where anything that stores state in the view hierarchy instead of the model breaks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Biometrics.&lt;/strong&gt; If Touch ID really is back, any code or copy that hardcodes Face ID assumptions will show users something untrue. Check the biometry type on-device — never assume it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App Store screenshots.&lt;/strong&gt; A new form factor means a new set of storefront assets. Anyone shipping an app will need another screenshot pass by spring.&lt;/p&gt;

&lt;p&gt;The good news: almost all of this is fixed by doing what was already considered best practice — not nailing your layout to fixed sizes, and keeping state separate from the view. The bad news: far fewer apps do this cleanly than people like to think.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd bet on myself
&lt;/h2&gt;

&lt;p&gt;If I had exactly one bet for tonight, I wouldn't put it on the foldable — that's nearly a lock already. I'd bet that &lt;strong&gt;the real drama turns out to be pricing, not hardware&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Almost everything about tonight's devices is already known technically. What's not known is how much Apple will actually charge for the first foldable, and whether it will simultaneously raise Pro prices. $2000 for the foldable plus $100 on top of Pro would make this the most expensive September in the company's history — and it'll be announced by someone who's run Apple for nine days.&lt;/p&gt;

&lt;p&gt;That's what to watch for at 8pm: not the millimeters of the hinge, but the pricing slide, and how confidently it gets delivered.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;All figures above are rumors and leaks as of the morning of September 9, 2026, and the probabilities are my own personal estimate, not analyst consensus. I'll come back to this piece after the keynote and count how many bets landed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://klukyanov.ru/notes/apple-event-september-2026/" rel="noopener noreferrer"&gt;klukyanov.ru&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>apple</category>
      <category>ios</category>
      <category>tech</category>
      <category>swift</category>
    </item>
    <item>
      <title>The Local LLM Weight Classes, September 2026: What Actually Fits on Your Machine</title>
      <dc:creator>Kirill Lukyanov</dc:creator>
      <pubDate>Sun, 06 Sep 2026 07:17:55 +0000</pubDate>
      <link>https://dev.to/klukyanov/the-local-llm-weight-classes-september-2026-what-actually-fits-on-your-machine-128d</link>
      <guid>https://dev.to/klukyanov/the-local-llm-weight-classes-september-2026-what-actually-fits-on-your-machine-128d</guid>
      <description>&lt;p&gt;A $20,000 Mac Studio buys you the same number of tokens as $20,000 of cloud API credit. The difference is that the cloud hands them over on demand, and the Mac needs fourteen years of uninterrupted generation to produce them.&lt;/p&gt;

&lt;p&gt;That number is the reason I stopped sorting open-weight models by benchmark score and started sorting them by what physically fits. Here is the September 2026 snapshot — with a date stamped on it, because half of these figures will be stale by December.&lt;/p&gt;

&lt;h2&gt;
  
  
  The map changed, and it moved east
&lt;/h2&gt;

&lt;p&gt;By May 2026, Chinese models accounted for roughly &lt;strong&gt;61% of all tokens&lt;/strong&gt; routed through OpenRouter. That share grew on a market that quadrupled in the same period — the router went from about 5 trillion tokens a week in April 2025 to more than 20 trillion by April 2026.&lt;/p&gt;

&lt;p&gt;On Hugging Face the picture is starker. Qwen crossed &lt;strong&gt;one billion cumulative downloads&lt;/strong&gt; and passed Llama. There are over 200,000 Qwen-tagged models on the hub, and roughly &lt;strong&gt;40% of every new LLM derivative&lt;/strong&gt; created there is built on a Qwen base.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Vendor&lt;/th&gt;
&lt;th&gt;Share of routed tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Xiaomi (MiMo)&lt;/td&gt;
&lt;td&gt;~21%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;~17.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;~15.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;~13% (down from 37%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta&lt;/td&gt;
&lt;td&gt;&amp;lt;1%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Meta invented open weights as a competitive strategy in 2023. In September 2026 its routing share is under one percent. More on that below.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ranking, for context
&lt;/h2&gt;

&lt;p&gt;Current aggregate standing of open-weight models (BenchLM, September 2026):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Vendor&lt;/th&gt;
&lt;th&gt;Index&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Qwen3.8 Max&lt;/td&gt;
&lt;td&gt;Alibaba&lt;/td&gt;
&lt;td&gt;72.4&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;GLM-5.3&lt;/td&gt;
&lt;td&gt;Z.ai&lt;/td&gt;
&lt;td&gt;68.5&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Qwen3.8-27B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alibaba&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;68.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;262K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;GLM-5.2&lt;/td&gt;
&lt;td&gt;Z.ai&lt;/td&gt;
&lt;td&gt;68.2&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;GLM-5.3-Flash&lt;/td&gt;
&lt;td&gt;Z.ai&lt;/td&gt;
&lt;td&gt;66.1&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Kimi K2.7 Code&lt;/td&gt;
&lt;td&gt;Moonshot&lt;/td&gt;
&lt;td&gt;65.4&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;MiniMax M3&lt;/td&gt;
&lt;td&gt;MiniMax&lt;/td&gt;
&lt;td&gt;63.9&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Look at row three. &lt;strong&gt;Qwen3.8-27B&lt;/strong&gt; is a dense 27-billion-parameter model under Apache 2.0, and it sits four index points behind the leader. The leader is a 2.4-trillion-parameter network you cannot run anywhere except a server rack. Third place fits inside a single gaming GPU.&lt;/p&gt;

&lt;p&gt;That collapse — from "the good models are unreachable" to "four index points" — is the actual story of the year.&lt;/p&gt;

&lt;h2&gt;
  
  
  Weight class 1: laptop, 8–16 GB
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Weights (Q4)&lt;/th&gt;
&lt;th&gt;Fits in&lt;/th&gt;
&lt;th&gt;Good for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Phi-4-mini&lt;/td&gt;
&lt;td&gt;~3.5 GB&lt;/td&gt;
&lt;td&gt;8 GB, CPU-only&lt;/td&gt;
&lt;td&gt;logic, math, weak machines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 E4B&lt;/td&gt;
&lt;td&gt;~6 GB&lt;/td&gt;
&lt;td&gt;16 GB (~12.5 GB with full 128K context)&lt;/td&gt;
&lt;td&gt;best generalist at 16 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3 8B&lt;/td&gt;
&lt;td&gt;~6 GB&lt;/td&gt;
&lt;td&gt;16 GB comfortably&lt;/td&gt;
&lt;td&gt;chat, document work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3 14B&lt;/td&gt;
&lt;td&gt;~9 GB&lt;/td&gt;
&lt;td&gt;12–16 GB VRAM&lt;/td&gt;
&lt;td&gt;code, refactoring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The trap everyone falls into: &lt;strong&gt;model weight is not total memory use&lt;/strong&gt;. Gemma 4 E4B at full 128K context roughly doubles its footprint, from ~6 GB to ~12.5 GB. If your math says "just barely fits," it doesn't — the KV cache grows with the conversation and you will hit the wall mid-task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Weight class 2: workstation, 24–64 GB
&lt;/h2&gt;

&lt;p&gt;This is where the interesting thing happens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwen3.8-27B&lt;/strong&gt; in Q4_K_M needs 16.5–19.5 GB of weights plus about 1.5 GB of runtime overhead. That fits entirely inside an &lt;strong&gt;RTX 3090 or 4090&lt;/strong&gt; — cards that are plentiful on the used market. Native vision-language, 262K context, Apache 2.0 with no conditions attached. The base repo pulled 415,000 downloads within days of the August 14 release.&lt;/p&gt;

&lt;p&gt;On Apple Silicon, a 64 GB Mac mini M4 runs it at roughly 7 tokens/sec. Not fast, but usable for non-interactive work.&lt;/p&gt;

&lt;p&gt;Also in this class: &lt;strong&gt;Qwen3-Coder-Next 80B-A3B&lt;/strong&gt; (sparse MoE, 3B active — the most realistic self-hosted coding model in the current lineup) and &lt;strong&gt;gpt-oss-120b&lt;/strong&gt; at ~65 GB in MXFP4.&lt;/p&gt;

&lt;p&gt;If you buy one machine for local inference, buy for this class. 32 GB is the floor, 48 GB is the working sweet spot, 64 GB is where you stop negotiating with your own context-length settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Weight class 3: one big machine, 96–512 GB unified
&lt;/h2&gt;

&lt;p&gt;Sparse MoE models need enormous memory but only read a fraction of it per token. That maps almost perfectly onto Apple Silicon: a huge memory pool with bandwidth that is modest by datacenter standards but irrelevant when your bottleneck is capacity.&lt;/p&gt;

&lt;p&gt;Apple refreshed the Mac Studio on August 25: &lt;strong&gt;M5 Ultra, up to 36 CPU cores, 80 GPU cores, and up to 512 GB of unified memory&lt;/strong&gt; (the 512 GB configuration ships in late October). The 96 GB base is $5,499; the 256 GB upgrade adds another $4,000.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash (284B-A13B)&lt;/td&gt;
&lt;td&gt;2-bit&lt;/td&gt;
&lt;td&gt;~39 tok/s&lt;/td&gt;
&lt;td&gt;128 GB (M5 Max)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-120b&lt;/td&gt;
&lt;td&gt;~65 GB MXFP4&lt;/td&gt;
&lt;td&gt;~43 tok/s&lt;/td&gt;
&lt;td&gt;96 GB+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.3 70B&lt;/td&gt;
&lt;td&gt;~42 GB Q4&lt;/td&gt;
&lt;td&gt;~14 tok/s&lt;/td&gt;
&lt;td&gt;96 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 4 Maverick 400B&lt;/td&gt;
&lt;td&gt;~220 GB Q4&lt;/td&gt;
&lt;td&gt;~12 tok/s&lt;/td&gt;
&lt;td&gt;512 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most of those figures are engine estimates — the machines have only just started shipping. The DeepSeek V4 Flash number is the exception: 39 tok/s on a 128 GB M5 Max is community-reported from real hardware. For a 284-billion-parameter model sitting on a desk, that is genuinely good.&lt;/p&gt;

&lt;h2&gt;
  
  
  Weight class 4: rack only
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Kimi K3&lt;/strong&gt; from Moonshot AI: 2.8 trillion parameters, 896 experts with 16 activated per token, 1M context, weights published July 27, 2026. Formally, download and run. Practically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MXFP4 weights are &lt;strong&gt;1.56 TB&lt;/strong&gt; — no single GPU and no single 8-GPU node holds them&lt;/li&gt;
&lt;li&gt;realistic serving is a multi-node cluster with 1.6 TB+ of aggregate GPU memory; production recommendations run to &lt;strong&gt;64+ accelerators&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;the floor for FP8 on 80 GB H100-class cards is about &lt;strong&gt;40 GPUs&lt;/strong&gt;, roughly five nodes&lt;/li&gt;
&lt;li&gt;at $2–4 per GPU-hour, an always-on 40-GPU deployment runs &lt;strong&gt;$60,000–115,000 per month&lt;/strong&gt; in compute alone, before networking, storage, staff, and power&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alongside it sit &lt;strong&gt;Qwen3.8-Max&lt;/strong&gt; (2.4T total, 95B active; text weights opened August 12) and &lt;strong&gt;GLM-5.3&lt;/strong&gt; (753B total, 40B active; released August 14 — same base as GLM-5.2 with scaled-up post-training).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The sparsity trap.&lt;/strong&gt; Kimi K3 activates 104B of 2.8T parameters per token. It is tempting to size your memory for 104B. Don't: the router can call any of the 896 experts at any moment, so the entire model must be resident. Sparsity saves compute, not memory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What the same models cost in the cloud
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;In / out per 1M tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GLM-5.3&lt;/td&gt;
&lt;td&gt;AkashML&lt;/td&gt;
&lt;td&gt;$1.17 / $3.96&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM-5.3&lt;/td&gt;
&lt;td&gt;Together&lt;/td&gt;
&lt;td&gt;$1.40 / $4.40 (149 tok/s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM-5.3&lt;/td&gt;
&lt;td&gt;GMICloud&lt;/td&gt;
&lt;td&gt;$1.40 / $4.40 (29 tok/s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM-5.3&lt;/td&gt;
&lt;td&gt;Venice&lt;/td&gt;
&lt;td&gt;$1.75 / $5.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Makora&lt;/td&gt;
&lt;td&gt;$2.55 / $12.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Together&lt;/td&gt;
&lt;td&gt;$3.00 / $15.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Morph (Fast)&lt;/td&gt;
&lt;td&gt;$6.00 / $22.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.8-Max&lt;/td&gt;
&lt;td&gt;DeepInfra&lt;/td&gt;
&lt;td&gt;$2.00 / $6.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.8-Max&lt;/td&gt;
&lt;td&gt;Together&lt;/td&gt;
&lt;td&gt;$2.50 / $6.25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Pro&lt;/td&gt;
&lt;td&gt;DigitalOcean&lt;/td&gt;
&lt;td&gt;$0.87 / —&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Pro&lt;/td&gt;
&lt;td&gt;Azure (US)&lt;/td&gt;
&lt;td&gt;$1.91 / —&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;DigitalOcean&lt;/td&gt;
&lt;td&gt;$0.068 / —&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;$0.44 / —&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three things in that table cost real money.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identical weights, wildly different prices.&lt;/strong&gt; Kimi K3 spans 2.35× between cheapest and most expensive host. DeepSeek V4 Flash spans 6.5×. Same model, different hardware and margin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identical price, different service.&lt;/strong&gt; Together and GMICloud both sell GLM-5.3 at $1.40/$4.40. Together delivers 149 tok/s; GMICloud delivers 29. That is 5.1× slower for the same money — the difference between "works" and "unusable" in anything interactive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advertised context ≠ served context.&lt;/strong&gt; GLM-5.3 markets a 1,048,576-token window. IO Net and Reka serve it at 262,144 — a quarter. DeepInfra serves Qwen3.8-Max only in its native 262,144 window while Together offers the full 1,010,000. And DeepInfra caps DeepSeek V4 Pro output at 16,384 tokens against an advertised 384,000 — 4.3% of the marketing number. Verify the endpoint before you architect around long context.&lt;/p&gt;

&lt;h2&gt;
  
  
  The break-even math
&lt;/h2&gt;

&lt;p&gt;A 512 GB M5 Ultra Mac Studio runs about &lt;strong&gt;$20,000&lt;/strong&gt; (one top configuration is orderable today at $18,299). Call its throughput 10–15 tok/s on a large MoE model.&lt;/p&gt;

&lt;p&gt;GLM-5.3 costs $4.40 per million output tokens in the cloud. So $20,000 buys &lt;strong&gt;4.5 billion output tokens&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At 10 tok/s running 24/7 with no idle time, the machine produces 864,000 tokens per day. To generate 4.5 billion it needs &lt;strong&gt;more than fourteen years&lt;/strong&gt;. Push it to 40 tok/s and you still need three and a half years of continuous, never-idle generation.&lt;/p&gt;

&lt;p&gt;General break-even estimates converge on 2–3 million tokens per day over a twelve-month horizon. That is a small company's sustained pipeline, not one engineer's usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The rule that follows:&lt;/strong&gt; if you are calculating savings, don't buy. If you are calculating risk — data that cannot leave your perimeter, work without connectivity, the fear that the model your product depends on changes its behavior or price next quarter — buy, and stop running the spreadsheet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five stories from this year
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The one-bit trillion-parameter model
&lt;/h3&gt;

&lt;p&gt;Kimi K3 is 1.56 TB natively. Community dynamic GGUF quantizations got almost comical: the &lt;strong&gt;1-bit build occupies 594 GB and retains 78.9% of quality&lt;/strong&gt;, the 2-bit build (861 GB) reaches 90.4%, and the smallest (TQ1_0) is 509 GB. A 2.8-trillion-parameter model compressed roughly threefold and still working at four-fifths strength.&lt;/p&gt;

&lt;p&gt;Except 509 GB is still a $20,000 machine, to run 79% of a model you can rent for $2.55 per million input tokens. Pure sport — and admirable as such.&lt;/p&gt;

&lt;h3&gt;
  
  
  Meta invented the strategy and lost it
&lt;/h3&gt;

&lt;p&gt;Meta released Llama 5 on June 30 — 600B parameters, 5M context, genuinely competitive at the top for the first time in a while. But three months earlier, on April 8, it shipped &lt;strong&gt;Muse Spark&lt;/strong&gt;, a closed model, and that is the flagship.&lt;/p&gt;

&lt;p&gt;The lesson isn't about Meta. It's that openness stopped being anyone's strategy and became a property of the market: it is now sustained by whoever needs share, not by whoever believes in it.&lt;/p&gt;

&lt;h3&gt;
  
  
  "Open" covers three different legal regimes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Apache 2.0&lt;/strong&gt; — Qwen3.8-27B. Do anything, including commercial. No conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT&lt;/strong&gt; — DeepSeek V4 checkpoints. Same freedom.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditional&lt;/strong&gt; — the Qwen3.8-Max License and Kimi K3's custom license carry conditions for large MaaS operators and commercial products. Read them before signing a customer contract, not after.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And universally: &lt;strong&gt;open weights are not open source&lt;/strong&gt;. None of these vendors ship training data or the training recipe. You get an artifact you can run and fine-tune, not one you can reproduce.&lt;/p&gt;

&lt;h3&gt;
  
  
  An open model beat a closed one on a public benchmark
&lt;/h3&gt;

&lt;p&gt;GLM-5.2 scored 62.1% on SWE-bench Pro against GPT-5.5's 58.6%. Not "nearly caught up" — ahead. With two caveats that matter more than the number.&lt;/p&gt;

&lt;p&gt;Public benchmarks leak. Contamination, metric overfitting, and harness effects are all real, which is why everyone reports &lt;strong&gt;SWE-bench Verified&lt;/strong&gt; (500 hand-curated tasks confirmed solvable with correct tests) and &lt;strong&gt;LiveCodeBench&lt;/strong&gt; (contamination-resistant) in 2026.&lt;/p&gt;

&lt;p&gt;And if the benchmark's harness, timeouts, repo size, and review process don't match yours, the score is a signal, not a decision. Your own eval on your own tasks remains the only ground truth.&lt;/p&gt;

&lt;h3&gt;
  
  
  The bottleneck turned out to be memory, not compute
&lt;/h3&gt;

&lt;p&gt;The usual assumption is that compute is the constraint. In 2026 it's &lt;strong&gt;HBM&lt;/strong&gt;: Chinese domestic output is capped around 250,000–300,000 high-end packages for the year. Logic manufacturing was solved; memory wasn't.&lt;/p&gt;

&lt;p&gt;The same pattern shows up at consumer scale. What's interesting about a 512 GB Mac Studio isn't speed, it's capacity — which is exactly why MoE models landed on it so well.&lt;/p&gt;

&lt;p&gt;And one prediction that aged badly: after DeepSeek-R1 shipped in January 2025, Nvidia dropped 17% and lost roughly $600B in market value, on the thesis that cheap models would crater compute demand. By September 2026 Nvidia is worth $5.14 trillion, up 50% year over year. Cheap tokens didn't reduce demand — they multiplied it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus:&lt;/strong&gt; prices went up for the first time. DeepSeek raised V4 Flash from $0.14/$0.28 to $0.44/$1.32 at peak (half that off-peak). If your unit economics assume today's price, assume it can triple.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would pick
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Laptop:&lt;/strong&gt; Qwen3 8B or Gemma 4 E4B. Private document work, offline, anything that cannot leave the machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One workstation:&lt;/strong&gt; Qwen3.8-27B in Q4_K_M. If you want a single local model for everything, this is it — Apache 2.0, multimodal, third in the world ranking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code and agents:&lt;/strong&gt; GLM-5.3 via API. Best open coding results, sane price, decent throughput on Together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High volume, low cost:&lt;/strong&gt; DeepSeek V4 Flash. Its structural edge is cache pricing — if your pipeline re-reads the same context (RAG, an agent with a fixed system prompt) it wins by a wide margin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximum quality:&lt;/strong&gt; Qwen3.8-Max via cloud. Locally, forget it — that's a rack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One rule on top of all of it: &lt;strong&gt;don't pick a model against a benchmark, pick it against a constraint.&lt;/strong&gt; Answer honestly which binds harder — gigabytes, dollars, latency, or the requirement that data never leaves your perimeter. The model then chooses itself, and it usually isn't the one on the top line.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Open weights stopped being a compromise. They became inventory: a warehouse where everything is free, and the only question is what you can physically carry out.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;All figures as of September 6, 2026. Sources: BenchLM open-weight ranking, the Digital Applied provider census for pricing and served context, Data Gravity for market share, Apple Newsroom for Mac Studio specs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://klukyanov.ru/notes/local-models-september-2026/" rel="noopener noreferrer"&gt;klukyanov.ru&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>hardware</category>
    </item>
    <item>
      <title>Renting GPUs for Crypto: I Did the Math on Self-Hosting GLM-5.2</title>
      <dc:creator>Kirill Lukyanov</dc:creator>
      <pubDate>Sat, 05 Sep 2026 12:35:00 +0000</pubDate>
      <link>https://dev.to/klukyanov/renting-gpus-for-crypto-i-did-the-math-on-self-hosting-glm-52-3dg5</link>
      <guid>https://dev.to/klukyanov/renting-gpus-for-crypto-i-did-the-math-on-self-hosting-glm-52-3dg5</guid>
      <description>&lt;p&gt;The same GPU node, running the same model, will quote you a token price that varies by a factor of 350. What decides it is not the rental rate.&lt;/p&gt;

&lt;p&gt;I went through both sides of the crypto GPU rental market — renting your card out, and renting someone else's to host an open model — and carried the arithmetic all the way to dollars per million tokens. The workload is GLM-5.2: open weights, 753B parameters, released June 2026. Exactly the case decentralized GPU networks exist for.&lt;/p&gt;

&lt;p&gt;All prices are as of September 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side one: renting your card out
&lt;/h2&gt;

&lt;p&gt;A verified RTX 4090 on Vast.ai grosses about &lt;strong&gt;$6/day&lt;/strong&gt;. That looks great — $180/month from a card that would otherwise gather dust.&lt;/p&gt;

&lt;p&gt;Then the deductions start. The card draws 450W, which is 10.8 kWh/day around the clock:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Electricity rate&lt;/th&gt;
&lt;th&gt;Per day&lt;/th&gt;
&lt;th&gt;Gross minus power&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$0.06/kWh&lt;/td&gt;
&lt;td&gt;$0.65&lt;/td&gt;
&lt;td&gt;$5.35/day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$0.08/kWh (Texas, Midwest)&lt;/td&gt;
&lt;td&gt;$0.86&lt;/td&gt;
&lt;td&gt;$5.14/day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$0.15/kWh&lt;/td&gt;
&lt;td&gt;$1.62&lt;/td&gt;
&lt;td&gt;$4.38/day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$0.30/kWh (Germany, UK)&lt;/td&gt;
&lt;td&gt;$3.24&lt;/td&gt;
&lt;td&gt;$2.76/day&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Still respectable — but only because that table quietly assumes 100% utilization. It doesn't work that way.&lt;/p&gt;

&lt;p&gt;Published reviews converge on a different figure: &lt;strong&gt;about $52/month net&lt;/strong&gt;, after electricity, depreciation and platform fees, at typical load. Work that backwards and real utilization is around &lt;strong&gt;40%&lt;/strong&gt;, not 100. Two thirds of the time the card sits waiting for a tenant while continuing to age in your apartment.&lt;/p&gt;

&lt;p&gt;The demand side is the actual risk here. In Q1 2026 Akash averaged 334 GPUs on the network with &lt;strong&gt;84 actually working&lt;/strong&gt;, and available capacity contracted by more than 57% quarter over quarter.&lt;/p&gt;

&lt;p&gt;Payback: an RTX 4090 costs roughly $1,800. At $52/month net it pays for itself in &lt;strong&gt;35 months&lt;/strong&gt; — longer than the card survives in sellable condition under round-the-clock load.&lt;/p&gt;

&lt;p&gt;So renting your GPU out is not passive income. It is &lt;strong&gt;converting depreciation into cash&lt;/strong&gt;. The card loses value either way; the only question is whether it does so silently or hands you fifty dollars a month on the way down. Buying hardware specifically to rent it out is close to guaranteed loss. Renting out hardware you already own, on a 6–8 cent tariff, is reasonable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side two: renting someone else's to host GLM-5.2
&lt;/h2&gt;

&lt;p&gt;GLM-5.2 is a 753B-parameter Mixture-of-Experts model, ~40B active per token, 78 layers, native 1M-token context. Open weights — that's the whole point of the exercise.&lt;/p&gt;

&lt;p&gt;"Open weights" does not mean "fits anywhere":&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Precision&lt;/th&gt;
&lt;th&gt;VRAM needed&lt;/th&gt;
&lt;th&gt;What that means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FP16/BF16&lt;/td&gt;
&lt;td&gt;1,488–1,642 GB&lt;/td&gt;
&lt;td&gt;two 8-GPU nodes minimum&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FP8&lt;/td&gt;
&lt;td&gt;~744 GB&lt;/td&gt;
&lt;td&gt;8×H200 (1,128 GB) — production config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INT4 / Q4&lt;/td&gt;
&lt;td&gt;372–411 GB&lt;/td&gt;
&lt;td&gt;8×H100 80GB (640 GB) with KV headroom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2-bit dynamic&lt;/td&gt;
&lt;td&gt;239–241 GB&lt;/td&gt;
&lt;td&gt;quality tradeoff, experiments only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Renting a whole node:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Per hour&lt;/th&gt;
&lt;th&gt;Per month 24/7&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8×H200, conventional cloud&lt;/td&gt;
&lt;td&gt;$26.48&lt;/td&gt;
&lt;td&gt;$19,330&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8×H100 PCIe, conventional cloud&lt;/td&gt;
&lt;td&gt;$23.12&lt;/td&gt;
&lt;td&gt;$16,878&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8×H100 on Akash ($2.09/card)&lt;/td&gt;
&lt;td&gt;$16.72&lt;/td&gt;
&lt;td&gt;$12,206&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8×H100 at spot ($1.49/card)&lt;/td&gt;
&lt;td&gt;$11.92&lt;/td&gt;
&lt;td&gt;$8,702&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The savings are real, and worth stating plainly: &lt;strong&gt;decentralized networks genuinely run 55–70% below the hyperscalers&lt;/strong&gt;. The same H100 that Azure charges $6.98/hr for on-demand goes for $1.47–1.49 at io.net and Vast.ai. Akash lists H100 PCIe at $2.09, SXM5 at $2.69.&lt;/p&gt;

&lt;p&gt;Case closed, seemingly. Except we haven't reached the token yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Token price: where it all flips
&lt;/h2&gt;

&lt;p&gt;The hourly rate tells you nothing about the cost of work. Only one thing matters: &lt;strong&gt;how many tokens the node emits per hour&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For speed I use vLLM's benchmarks: a DeepSeek-class MoE (671B total, 37B active — nearly GLM-5.2's twin in shape) sustains &lt;strong&gt;2.2k tokens/second per H200&lt;/strong&gt; in a production-like deployment. That's the best published result, after kernel work and Dual Batch Overlap; a year earlier it was around 1.5k.&lt;/p&gt;

&lt;p&gt;Here's the caveat that headlines drop: &lt;strong&gt;that is aggregate throughput under high concurrency&lt;/strong&gt;, not one user's response speed. vLLM publishes no per-user metric in that post.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Regime&lt;/th&gt;
&lt;th&gt;Tokens/s&lt;/th&gt;
&lt;th&gt;8×H200&lt;/th&gt;
&lt;th&gt;8×H100 Akash&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Node fully saturated&lt;/td&gt;
&lt;td&gt;17,600&lt;/td&gt;
&lt;td&gt;$0.42 / M&lt;/td&gt;
&lt;td&gt;$0.26 / M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single user, batch 1–2&lt;/td&gt;
&lt;td&gt;~50&lt;/td&gt;
&lt;td&gt;$147 / M&lt;/td&gt;
&lt;td&gt;$93 / M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For comparison, Z.ai's official API for the same model: &lt;strong&gt;$1.40 per million input tokens, $0.26 cached input, $4.40 per million output&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So a saturated node delivers tokens &lt;strong&gt;10× cheaper than the API&lt;/strong&gt; — that's where the triumphant headlines come from, and they aren't lying. The same node under a single developer delivers tokens &lt;strong&gt;15–33× more expensive than the API&lt;/strong&gt;. The gap between two rows of one table is &lt;strong&gt;350×&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Break-even: how many agents it takes
&lt;/h2&gt;

&lt;p&gt;Working back from $4.40 per million output tokens:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Must sustain&lt;/th&gt;
&lt;th&gt;Roughly&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8×H200 ($26.48/hr)&lt;/td&gt;
&lt;td&gt;1,672 tok/s&lt;/td&gt;
&lt;td&gt;~33 continuous streams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8×H100 Akash ($16.72/hr)&lt;/td&gt;
&lt;td&gt;1,056 tok/s&lt;/td&gt;
&lt;td&gt;~21 continuous streams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8×H100 spot ($11.92/hr)&lt;/td&gt;
&lt;td&gt;753 tok/s&lt;/td&gt;
&lt;td&gt;~15 continuous streams&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And that is &lt;strong&gt;around the clock, no weekends&lt;/strong&gt;. A node you shut down at night loses two thirds of its output.&lt;/p&gt;

&lt;p&gt;Apply that to a solo developer. Even with heavy agentic work you land near 5M output tokens and a few hundred million input tokens a month. On the API with caching: &lt;strong&gt;about $82/month&lt;/strong&gt;. Your own node on Akash for the same month: &lt;strong&gt;$12,206&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's roughly &lt;strong&gt;150×&lt;/strong&gt;. No DePIN discount closes a gap like that, because the gap isn't about discounts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The circle closes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Rent out an RTX 4090: &lt;strong&gt;$52/month&lt;/strong&gt; net at realistic load.&lt;/li&gt;
&lt;li&gt;Rent a 8×H100 node for GLM-5.2: &lt;strong&gt;$12,206/month&lt;/strong&gt; at Akash pricing.&lt;/li&gt;
&lt;li&gt;To fund &lt;strong&gt;one&lt;/strong&gt; rented node you would need to rent out &lt;strong&gt;235 RTX 4090s&lt;/strong&gt; — about $420,000 of hardware, in your apartment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The market looks symmetric: supply on one side, demand on the other, a token in between. In practice the two sides are three orders of magnitude apart.&lt;/p&gt;

&lt;h2&gt;
  
  
  What crypto actually changes here
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it genuinely gives you.&lt;/strong&gt; Access to hardware with no contract, no legal entity, no KYC. Per-minute billing with no quarterly prepayment. A supplier stake instead of a reputation system — those 200 IO per chip that burn on misbehavior. Geographic spread that three hyperscalers don't offer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it doesn't.&lt;/strong&gt; No SLA. No guarantee the 8×H200 you need is free at the moment you need it — remember Akash's 84 working GPUs and −57% capacity in a quarter. And critically, no &lt;strong&gt;fast interconnect&lt;/strong&gt;. That 2.2k tokens/s per card was measured on an InfiniBand cluster. Sharding an MoE model across heterogeneous machines over ordinary internet is not remotely the same regime — and multi-node serving is the one scenario where self-hosting beats the API at all.&lt;/p&gt;

&lt;p&gt;The uncomfortable part: the DePIN discount does &lt;strong&gt;not&lt;/strong&gt; come from the token. It comes from the hardware being someone else's, already depreciated, sitting in a cheap electrical socket. Vast.ai delivers exactly that with no blockchain at all — and in these tables its $1.49 spot H100 came in &lt;strong&gt;below&lt;/strong&gt; Akash's $2.09. The token is a settlement and collateral mechanism, not a source of savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to actually do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;You're solo or a small team.&lt;/strong&gt; Use the API. $82/month versus $12,000 is not a case that rewards optimization. Self-hosting is justified by exactly one argument here, and it isn't economic: data that must not leave your perimeter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You run 20–35 agents around the clock.&lt;/strong&gt; Now the math is worth doing seriously, and DePIN pricing genuinely moves break-even down — from 33 streams to 21. Verify two things before committing: actual availability of the configuration &lt;em&gt;at that moment&lt;/em&gt;, and the interconnect between nodes. Without InfiniBand or equivalent, the economics you came for fall apart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You have idle hardware and a cheap socket.&lt;/strong&gt; Rent it out. Just model 40% utilization rather than 100%, and treat the result as recovered depreciation, not income.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you need privacy specifically.&lt;/strong&gt; A Mac Studio M3 Ultra with 512 GB of unified memory ($10–15k) runs GLM-5.2 at &lt;strong&gt;6.5–9.5 tokens/second&lt;/strong&gt;. That's indecently slow, but it is the only way to hold a model this size in one box, with no rentals and no one else's data center. Workable for background processing under NDA; not for interactive work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;Decentralized GPU networks are neither a bubble nor a revolution. They're a working, fairly narrow tool with an honest 55–70% discount to hyperscalers and equally honest problems: unstable capacity, no SLA, slow interconnect.&lt;/p&gt;

&lt;p&gt;But the main conclusion of this arithmetic isn't about crypto at all. It's that &lt;strong&gt;inference cost is determined by utilization, not by hardware price&lt;/strong&gt;. Until that lands, any "rent vs API" comparison returns a random answer — you can demonstrate a 10× saving and a 30× overspend from the same price list with equal honesty.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A cheap GPU doesn't make a token cheap. What makes a token cheap is a queue of work for that GPU — and you still have to get the queue from somewhere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://klukyanov.ru/notes/gpu-depin-economics/" rel="noopener noreferrer"&gt;klukyanov.ru&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Battery-Free Wi-Fi Button: How Backscatter Radio Actually Works</title>
      <dc:creator>Kirill Lukyanov</dc:creator>
      <pubDate>Tue, 01 Sep 2026 19:04:48 +0000</pubDate>
      <link>https://dev.to/klukyanov/the-battery-free-wi-fi-button-how-backscatter-radio-actually-works-28d9</link>
      <guid>https://dev.to/klukyanov/the-battery-free-wi-fi-button-how-backscatter-radio-actually-works-28d9</guid>
      <description>&lt;p&gt;A light switch with no battery, no wires, and no conventional electronics inside — just plastic, a gear, and Wi-Fi. It sounds like a pitch deck slide. It isn't.&lt;/p&gt;

&lt;p&gt;The technology is called &lt;strong&gt;backscatter&lt;/strong&gt;, it's twelve years old, it has measured numbers and shipping silicon, and this month the IEEE working group standardizing it puts its first draft to a vote. Here's how a device transmits data without having a transmitter — and the one detail that almost every popular explanation of this gets wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why ordinary Wi-Fi needs a battery
&lt;/h2&gt;

&lt;p&gt;Start with a question that sounds trivial: why is Wi-Fi so power-hungry in the first place?&lt;/p&gt;

&lt;p&gt;Moore's law has squeezed digital logic to absurdity. A microcontroller that counts button presses draws nanoamps and costs pennies. But a radio is not just digital. To get on the air, a device needs an analog chain: a &lt;strong&gt;frequency synthesizer&lt;/strong&gt; to generate the 2.4 GHz carrier, and a &lt;strong&gt;power amplifier&lt;/strong&gt; to push the signal into the antenna.&lt;/p&gt;

&lt;p&gt;Those two blocks do not scale with Moore's law. Analog RF has barely gotten cheaper in energy terms over the same decades that digital got millions of times cheaper. That's why transmitting over Wi-Fi from a sensor still costs &lt;strong&gt;hundreds of milliwatts&lt;/strong&gt; — and that, not some inefficiency in the protocol, is what keeps Wi-Fi out of the world of tiny sensors. BLE and ZigBee are thriftier, but they hit the same wall: they need their own oscillator too.&lt;/p&gt;

&lt;p&gt;Which leads to the obvious question: what if you didn't generate a carrier at all?&lt;/p&gt;

&lt;h2&gt;
  
  
  A mirror, not a flashlight
&lt;/h2&gt;

&lt;p&gt;The analogy that explains backscatter best is a signal mirror.&lt;/p&gt;

&lt;p&gt;To send a light signal at night you need a flashlight: power source, lamp, the whole apparatus. In daylight, a small mirror is enough. It produces zero photons of its own; it only redirects someone else's light. A heliograph works exactly this way — the sun does the shining, the operator only changes the angle. The energy cost of "transmitting" is whatever it takes to move your wrist.&lt;/p&gt;

&lt;p&gt;Radio works the same way. The air around us is full of other people's waves. Every object reflects them. The only question is whether you can &lt;em&gt;control&lt;/em&gt; how it reflects — and turn that into data.&lt;/p&gt;

&lt;p&gt;You can. An antenna reflects an incident wave differently depending on what's connected to it: shorted or open, impedance-matched or not. Put a single transistor switch between the antenna and ground, toggle it, and the reflected wave becomes modulated. One means reflect, zero means absorb. This is how passive RFID tags in badges and anti-theft labels work; backscatter is their direct descendant that learned to speak Wi-Fi.&lt;/p&gt;

&lt;p&gt;The key point: what toggles is a &lt;strong&gt;digital switch at baseband&lt;/strong&gt;, not an analog oscillator at 2.4 GHz. Somebody else makes the carrier. You only pay for the switching — and that's microwatts instead of milliwatts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three generations in three years
&lt;/h2&gt;

&lt;p&gt;The technology came out of Shyam Gollakota's and Joshua Smith's lab at the University of Washington, and its history is a fight for range and throughput.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2013 — Ambient Backscatter.&lt;/strong&gt; First demonstration of the principle: two devices talk to each other by parasitizing TV tower signals. No power source of any kind. It worked, slowly and at arm's length.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2014 — Wi-Fi Backscatter.&lt;/strong&gt; First time a battery-free device connected to ordinary Wi-Fi infrastructure. Conceptually a breakthrough; practically modest: &lt;strong&gt;hundreds of bits per second at 2–4 feet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2016 — Passive Wi-Fi.&lt;/strong&gt; This is where it broke open. Instead of riding a narrowband side channel on top of someone else's Wi-Fi signal, Bryce Kellogg, Vamsi Talla, Gollakota and Smith figured out how to &lt;em&gt;generate full 802.11b packets by reflection&lt;/em&gt; — packets that any existing receiver decodes. Any router, laptop, phone. No modifications on the receiving side.&lt;/p&gt;

&lt;p&gt;Measured on their fabricated IC:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Power at 1 Mbps&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;14.5 µW&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power at 11 Mbps&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;59.2 µW&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Range&lt;/td&gt;
&lt;td&gt;30–100 feet, including through walls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vs. existing Wi-Fi chipsets&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10,000× lower&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vs. Bluetooth LE and ZigBee&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1,000× lower&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;To feel the scale: 14.5 microwatts is a level you can harvest out of thin air. Not figuratively — literally: that's roughly what you can pull off an antenna collecting ambient RF, or off a tiny photovoltaic cell under indoor lighting. The battery becomes unnecessary not because it was stretched thin, but because the energy required is now less than what's lying around for free.&lt;/p&gt;

&lt;p&gt;The work was named one of MIT Technology Review's 10 Breakthrough Technologies of 2016 and took best paper awards at NSDI and SIGCOMM.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part popular explanations get wrong
&lt;/h2&gt;

&lt;p&gt;Here's the detail worth going to the primary source for.&lt;/p&gt;

&lt;p&gt;Nearly every popular write-up describes the setup like this: "the router constantly emits radio waves, and the object reflects them differently." Intuitive, tidy, and &lt;strong&gt;wrong&lt;/strong&gt; for Passive Wi-Fi.&lt;/p&gt;

&lt;p&gt;The real architecture splits in two. The passive device handles only the digital baseband: coding, modulation, toggling the switch. Everything expensive in energy terms — the frequency synthesizer and the amplifier — is &lt;em&gt;moved off the device&lt;/em&gt; onto a separate, plugged-in unit. That unit doesn't transmit data. Its only job is to radiate a &lt;strong&gt;single-frequency tone&lt;/strong&gt;, a flat unmodulated signal that nearby passive tags reflect.&lt;/p&gt;

&lt;p&gt;So there are three participants, not two: a plugged-in tone source, the passive tag, and an ordinary receiver (router or phone) that ends up reading the packet. One source serves every tag in range, so the economics work — but nothing works without it. The router sitting on your shelf today does not emit that tone.&lt;/p&gt;

&lt;p&gt;This isn't pedantry about wording. That requirement for a dedicated tone source is exactly what kept the technology in labs for twelve years: it demands special equipment pre-installed in the room. As long as that's true, the story is about warehouses and industrial sites, not a button in your bedroom.&lt;/p&gt;

&lt;p&gt;And that is precisely what's changing now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where things stand in 2026
&lt;/h2&gt;

&lt;p&gt;Three separate threads converged over the past year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Silicon.&lt;/strong&gt; Canada's HaiLa shipped the BSC2000, a Wi-Fi-compatible connectivity RFIC operating in the &lt;strong&gt;~40 microwatt&lt;/strong&gt; range. The company's engineers are targeting single-digit microwatts for the third generation. That's a part you can design into a product, not an FPGA on a lab bench.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Research.&lt;/strong&gt; In August 2025, Privitera, Ballo, Ahmed, Grasso and Alioto published a transmitter with neither a battery nor its own oscillator: it extracts the frequency directly from the incident wave through second-order intermodulation of a two-tone signal. The same incoming wave does three jobs at once — energy harvesting, data transmission, and motion detection. Reported sensitivity down to −19 dBm, consumption &lt;strong&gt;below one microwatt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standardization.&lt;/strong&gt; The important one. Since March 2024, IEEE 802.11 has had &lt;strong&gt;Task Group bp&lt;/strong&gt; writing an amendment called Ambient Power (AMP) — communication for devices running on harvested energy. This is not a hobbyist effort: chair from Sanechips, vice chairs from Qualcomm and Infineon, secretary from Ericsson, technical editor from OPPO.&lt;/p&gt;

&lt;p&gt;The group's official milestones:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Milestone&lt;/th&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;D1.0 ready for WG letter ballot&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Sep 2026&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D2.0 WG LB recirculation&lt;/td&gt;
&lt;td&gt;Mar 2027&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Initial SA ballot (D4.0)&lt;/td&gt;
&lt;td&gt;Jul 2027&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final 802.11 WG approval&lt;/td&gt;
&lt;td&gt;Jan 2028&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RevCom and SASB approval&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;May 2028&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That first row is this month. And at the July plenary the group demonstrated a Wi-Fi device communicating with an ambient power tag powered solely by that device's own RF emissions — the missing piece, with the tone source built into the access point itself.&lt;/p&gt;

&lt;p&gt;In parallel, the cellular world is doing the same thing: 3GPP Release 19 standardizes Ambient IoT, where a "device 1" is a tag with roughly &lt;strong&gt;1 µW peak consumption&lt;/strong&gt;, backscattering a carrier wave supplied externally. OOK and BPSK modulation, indoor inventory and command use cases.&lt;/p&gt;

&lt;p&gt;When both major wireless ecosystems independently write backscatter into their standards, it stops being a lab curiosity.&lt;/p&gt;

&lt;h2&gt;
  
  
  About that gear
&lt;/h2&gt;

&lt;p&gt;One detail from the original demo still looks strange against all of the above: the mechanics. A tooth touches a contact, the signal distorts; no contact, no change.&lt;/p&gt;

&lt;p&gt;It's honest, and rather elegant. Since transmission reduces to toggling a switch, the &lt;em&gt;source&lt;/em&gt; of those toggles can be anything that opens and closes a circuit. A chip is optional. A gear turned by a finger closes a contact in a specific rhythm, and an encoded sequence goes out over the air. Not "Morse code for Wi-Fi" as a metaphor — a literal mechanical encoder.&lt;/p&gt;

&lt;p&gt;Which generalizes nicely: the mechanism becomes the sensor. Water flow spins an impeller, so water is flowing. Wind turns a vane, so there's wind. A lid rotates, so the jar was opened. No electronics in the measurement path at all, energy from motion, communication from reflection.&lt;/p&gt;

&lt;h2&gt;
  
  
  So why isn't it in your house yet
&lt;/h2&gt;

&lt;p&gt;The honest answer: the problem isn't physics, it's infrastructure and economics.&lt;/p&gt;

&lt;p&gt;The physics was solved a decade ago and has only improved since. But for a battery-free button to work in an ordinary apartment, the access point itself has to supply the tone — which means it has to be in the standard and in the firmware of routers people actually buy. That's what 802.11bp is for, and that's why the date in its plan is &lt;strong&gt;May 2028&lt;/strong&gt;, not "already".&lt;/p&gt;

&lt;p&gt;Plus the unglamorous open questions: collision handling when there are hundreds of tags in a room; interference in an already-crowded 2.4 GHz band; how much range degrades in a real apartment with concrete and furniture rather than a lab hallway.&lt;/p&gt;

&lt;p&gt;But the trajectory is clear. In twelve years this went from hundreds of bits per second at arm's length to shipping silicon and a draft standard. If IEEE holds its schedule, the first devices carrying a Wi-Fi logo and no battery compartment show up around 2028–2029 — not a revolution in a day, but a very quiet replacement of billions of batteries with nothing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://klukyanov.ru/notes/wifi-backscatter/" rel="noopener noreferrer"&gt;klukyanov.ru&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>iot</category>
      <category>hardware</category>
      <category>wireless</category>
      <category>embedded</category>
    </item>
    <item>
      <title>I embedded an MCP server inside my macOS app so agents could talk back</title>
      <dc:creator>Kirill Lukyanov</dc:creator>
      <pubDate>Mon, 31 Aug 2026 17:51:25 +0000</pubDate>
      <link>https://dev.to/klukyanov/i-embedded-an-mcp-server-inside-my-macos-app-so-agents-could-talk-back-1fda</link>
      <guid>https://dev.to/klukyanov/i-embedded-an-mcp-server-inside-my-macos-app-so-agents-could-talk-back-1fda</guid>
      <description>&lt;p&gt;My dictation app for macOS was one-way. I would speak a thought into it, it would clean up the text, add the role and project context, and drop a polished prompt into the clipboard. Then came the humiliating part of the loop: switch to the terminal, paste, hit Enter, and read the output in small type.&lt;/p&gt;

&lt;p&gt;The asymmetry was obvious from day one. Outbound: voice. Inbound: a wall of text. The app could talk to a human but couldn't listen to an agent; the agent could do the work but had no way to say anything back except print it.&lt;/p&gt;

&lt;p&gt;That loop is closed now. The app runs its own MCP server inside itself, and Claude Code or OpenCode connect to it like any other tool. I dictate a task and it lands in the agent's session on its own. The agent works, and along the way it can ask me something &lt;strong&gt;out loud&lt;/strong&gt; and wait for a spoken answer — and when it's done, it reads the summary aloud. Hands on the coffee, eyes anywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the server lives inside the app
&lt;/h2&gt;

&lt;p&gt;The obvious first design is the other way around: let the app spawn &lt;code&gt;claude&lt;/code&gt; as a child process, write to stdin, read stdout. That's how dozens of CLI wrappers work.&lt;/p&gt;

&lt;p&gt;That path is closed for me. PromtsMaker ships on the Mac App Store, which means App Sandbox, where &lt;code&gt;Process&lt;/code&gt; and &lt;code&gt;NSTask&lt;/code&gt; are forbidden outright. A sandboxed app cannot launch someone else's binary, and there is no entitlement that buys you out of it.&lt;/p&gt;

&lt;p&gt;So the initiative in the protocol is inverted. The app stands up a local HTTP server on &lt;code&gt;127.0.0.1&lt;/code&gt; and speaks MCP. The agent connects to it like it would to any MCP server and &lt;em&gt;asks&lt;/em&gt;, on its own: "got a task for me?" One line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http promtsmaker http://127.0.0.1:8765/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The app probes ports upward from 8765 and takes the first free one. A &lt;code&gt;Network.framework&lt;/code&gt; subtlety worth knowing: &lt;code&gt;NWListener&lt;/code&gt; only reports a busy port asynchronously through &lt;code&gt;stateUpdateHandler&lt;/code&gt;, so starting the server has to be &lt;code&gt;async throws&lt;/code&gt; rather than a quick synchronous check.&lt;/p&gt;

&lt;p&gt;To the user none of this is visible — they dictate and press a button. But in the protocol it's the agent that asks and the app that answers, and the entire design downstream grows out of that inversion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four tools, and that's it
&lt;/h2&gt;

&lt;p&gt;The temptation was to ship twenty. I resisted: the fewer tools you expose, the more reliably a model picks the right one.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wait_for_prompt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Long-poll for the next dictated task. Hangs up to 300s (55 by default), then returns &lt;code&gt;timeout&lt;/code&gt; and the agent calls again. This is the heart of the loop.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;say&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Speak a short line out loud mid-task: "starting", "tests are green". Always audible — there is no toggle, that's the entire point of the tool.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ask_user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ask a question by voice and wait for a spoken answer, up to three minutes. The app starts dictation, transcribes, and hands the answer back as a string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;report_result&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The outcome: a short &lt;code&gt;summary&lt;/code&gt; (read aloud) plus optional &lt;code&gt;details&lt;/code&gt; — the full text that stays on screen.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No "read file" or "run command" tools — the agent already has those, and the app has no business duplicating them. In this design the app isn't the agent's assistant. It's the agent's mouth and ears.&lt;/p&gt;

&lt;h2&gt;
  
  
  Long-polling instead of a "check" button
&lt;/h2&gt;

&lt;p&gt;The most interesting mechanic in the module lives inside &lt;code&gt;wait_for_prompt&lt;/code&gt;. When the agent calls it and the prompt queue is empty, no HTTP response is written: the call suspends on a &lt;code&gt;CheckedContinuation&lt;/code&gt; that goes into a dictionary of waiters. The moment I press "Send to agent," the action reaches the store, the store pulls the right waiter out and resumes it — and the dictated text flies out through that very HTTP request still hanging open.&lt;/p&gt;

&lt;p&gt;If nothing happens within 55 seconds, the waiter resolves with &lt;code&gt;timeout&lt;/code&gt;, the connection closes, and the agent immediately calls again. Turning the bridge off needed explicit care: &lt;code&gt;bridgeToggled(false)&lt;/code&gt; has to resume every pending waiter across every project at once, or flipping the switch leaves agent sessions hanging forever.&lt;/p&gt;

&lt;p&gt;The same construct backs &lt;code&gt;ask_user&lt;/code&gt; — except it resolves on my spoken answer, or on cancel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who trusts whom
&lt;/h2&gt;

&lt;p&gt;A server inside your app is a hole exactly as big as you make it. What stands between it and the world:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Loopback only.&lt;/strong&gt; The listener comes up with &lt;code&gt;requiredInterfaceType = .loopback&lt;/code&gt;; the port is never exposed outward. Exactly one new entitlement was needed: &lt;code&gt;com.apple.security.network.server&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bearer token.&lt;/strong&gt; On first enable, 32 bytes from &lt;code&gt;SecRandomCopyBytes&lt;/code&gt;, base64url-encoded, stored in &lt;code&gt;UserDefaults&lt;/code&gt;. Without the &lt;code&gt;Authorization&lt;/code&gt; header the server returns 401 even for &lt;code&gt;tools/list&lt;/code&gt;. Rotation is a button, with confirmation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Origin&lt;/code&gt; check.&lt;/strong&gt; An empty header (a plain HTTP client, which is what agents are) passes; a non-empty one must start with &lt;code&gt;http://127.0.0.1&lt;/code&gt; or &lt;code&gt;localhost&lt;/code&gt;, otherwise 403. That's the MCP spec's requirement for local servers — protection against DNS rebinding, where a page in your browser tries to reach your local port.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The rule that isn't in the code
&lt;/h2&gt;

&lt;p&gt;The first live version of the bridge was unbearable. The agent dutifully called &lt;code&gt;say&lt;/code&gt; — and started reading the output of &lt;code&gt;git diff&lt;/code&gt; out loud. All of it. A speech synthesizer cannot skim.&lt;/p&gt;

&lt;p&gt;The fix isn't code. The &lt;code&gt;instructions&lt;/code&gt; string the server returns from &lt;code&gt;initialize&lt;/code&gt; spells out an explicit policy: keep anything spoken to one or two sentences — a longer text is faster to read than to sit through. If the result is bulky, keep &lt;code&gt;summary&lt;/code&gt; to one line, put the full text in &lt;code&gt;details&lt;/code&gt;, and only read the details after asking via &lt;code&gt;ask_user&lt;/code&gt;: "the result is long — read it all out?"&lt;/p&gt;

&lt;p&gt;The code neither checks nor truncates any of this. It relies on the agent following the system text — and the agent does. That's a genuinely odd shift in engineering practice: part of the system's behavior now lives in an English paragraph rather than in branches, and you debug it by rewriting sentences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Several projects at once
&lt;/h2&gt;

&lt;p&gt;The first version kept a single state for the whole app — and fell apart the moment I opened two project tabs with an agent session attached to each: the second session clobbered the first one's prompt, question and result.&lt;/p&gt;

&lt;p&gt;The routing key became &lt;code&gt;project_path&lt;/code&gt;, the agent's working directory — the same identifier the app already uses to tell its own tabs apart. All four tools take it as an optional argument, and the prompt queue, in-flight prompt, pending questions and last result all split into dictionaries under that key. The conversation feed stayed shared across projects; each message just carries the folder name as a label.&lt;/p&gt;

&lt;h2&gt;
  
  
  Onboarding through the agent's memory, not a project file
&lt;/h2&gt;

&lt;p&gt;One awkward seam remained: the agent has to know the rules of the loop — live inside &lt;code&gt;wait_for_prompt&lt;/code&gt;, always pass &lt;code&gt;project_path&lt;/code&gt;, don't read walls of text aloud. The obvious solution is to have the user paste an instruction block into &lt;code&gt;CLAUDE.md&lt;/code&gt; or &lt;code&gt;AGENTS.md&lt;/code&gt;. That is, redo it by hand in every new project.&lt;/p&gt;

&lt;p&gt;Instead, &lt;code&gt;instructions&lt;/code&gt; asks the agent, on first connect, to &lt;em&gt;save that note into its own persistent memory&lt;/em&gt; — the loop, the &lt;code&gt;project_path&lt;/code&gt; requirement, the speech-length rule. The next session in the same project already knows the rules, nothing needs pasting, and the project's own files stay clean of clutter about a tool only one developer uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  What broke during live acceptance
&lt;/h2&gt;

&lt;p&gt;452 unit tests being green (about forty-five of them written specifically for the bridge: HTTP byte parsing, the JSON-RPC router, the reducer, side effects) guarantees nothing about a live run. Acceptance against a real Claude Code produced a plot twist you don't invent at a desk.&lt;/p&gt;

&lt;p&gt;The very first &lt;code&gt;ask_user&lt;/code&gt; on a fresh machine starts dictation — and runs straight into the macOS system alert "Allow access to speech recognition". While that alert sits there waiting for a human, the question's timeout is ticking. The agent, meanwhile, is patiently waiting for an answer that physically cannot arrive. It's a one-time story — the permission is granted once and forever — but on a clean machine your first encounter with the feature looks like "it doesn't work".&lt;/p&gt;

&lt;h2&gt;
  
  
  The bridge that finished writing itself
&lt;/h2&gt;

&lt;p&gt;The best part is the one I didn't plan. The last round of work on this bridge was dictated &lt;em&gt;through the bridge itself&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I was sitting there using the app, noticing rough edges, and saying them out loud: "the screen has grown, let me hide the panels I don't use" — and the agent built a settings window with four checkboxes. "The environment grid is truncating labels, move it to its own row" — and the agent reworked the layout. "I've got two tabs and two sessions and they're fighting" — and &lt;code&gt;project_path&lt;/code&gt; routing appeared, the thing described above.&lt;/p&gt;

&lt;p&gt;None of these were on a roadmap. All of them came out of live use, and every one reached the code by voice, without a single switch to the terminal. A tool that grows far enough to take part in its own development is a rare feeling, and in hindsight that's what the whole thing was for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to try it
&lt;/h2&gt;

&lt;p&gt;The bridge runs on my machine every day, but it isn't in the Mac App Store yet: the latest published version of PromtsMaker is 1.3, which shipped before this story. The bridge goes out in the next update, 1.4. I won't promise a date — Apple's review queue has been noticeably longer lately, and that part isn't up to me.&lt;/p&gt;

&lt;p&gt;The app itself is &lt;a href="https://apps.apple.com/kz/app/promtsmaker/id6786639355?mt=12" rel="noopener noreferrer"&gt;free on the Mac App Store&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://klukyanov.ru/notes/promtsmaker-mcp-voice-bridge/" rel="noopener noreferrer"&gt;klukyanov.ru&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>macos</category>
      <category>swift</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why Your Eyes Burn by Evening: Digital Eye Strain and the 20-20-20 Rule</title>
      <dc:creator>Kirill Lukyanov</dc:creator>
      <pubDate>Mon, 24 Aug 2026 18:19:14 +0000</pubDate>
      <link>https://dev.to/klukyanov/why-your-eyes-burn-by-evening-digital-eye-strain-and-the-20-20-20-rule-53o8</link>
      <guid>https://dev.to/klukyanov/why-your-eyes-burn-by-evening-digital-eye-strain-and-the-20-20-20-rule-53o8</guid>
      <description>&lt;p&gt;By the end of the day my eyes burn. The screen goes fuzzy for a second when I look up, focusing on something across the room takes longer than it should, and a dull headache creeps in around the temples. I used to write this off as "just tired." Turns out it has a name and a fairly simple mechanism behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What computer vision syndrome actually is
&lt;/h2&gt;

&lt;p&gt;Computer vision syndrome — digital eye strain, if you prefer the plainer name — isn't a diagnosis in the sense of "something broke." It's a cluster of symptoms that shows up after prolonged close-range screen work: dryness and burning, blurred focus when you shift your gaze to something far away, light sensitivity, headaches, and often neck and shoulder pain, because we unconsciously lean toward the screen and freeze in one position for hours.&lt;/p&gt;

&lt;p&gt;Two things happen at once. First, your eyes hold focus on a near object for a long stretch — the ciliary muscle, which controls how the lens changes shape for near vision, stays tensed the whole time instead of periodically relaxing the way it would if your gaze wandered farther away now and then. Second, you blink noticeably less often while concentrating, so the tear film that keeps your eyes moist doesn't get replenished as frequently — hence the dryness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a screen and not a book
&lt;/h2&gt;

&lt;p&gt;Reading a book for hours also holds your focus at close range, but it strains your eyes less, and there's a reason for that. A screen emits light rather than reflecting it the way paper does, which creates more contrast against the room's ambient lighting, especially if the room is dimmer than the display. Glare from windows and lamps forces you to squint and refocus. And a laptop or phone tends to sit closer to your face than a book or a printed document would, simply because the screen is smaller.&lt;/p&gt;

&lt;p&gt;There's also the nature of the work itself. Reading a book is a steady stream; working with software is a constant series of micro-refocuses between windows, tabs, and notifications. Your eyes keep re-adjusting, with almost no rest in between.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 20-20-20 rule
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Every 20 minutes of screen work, look at something roughly 20 feet (about 6 meters) away for 20 seconds.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The logic is simple: shifting your gaze to a distant object lets the ciliary muscle relax — it defaults to distance vision and only tenses up when focusing close. Twenty seconds is usually enough to release that tension without derailing your work for long. Ophthalmologists and optometrists like this rule specifically because it's so low-friction: no closing your eyes, no stepping away from the computer, no time cost — just look out a window or across the room.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else actually helps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blink rate.&lt;/strong&gt; Blink frequency drops noticeably during focused work. Consciously blinking more often, especially while reading or typing, helps keep the tear film intact and prevents dryness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distance.&lt;/strong&gt; Your monitor should sit an arm's length away, top edge at or slightly below eye level. A screen positioned too close keeps the ciliary muscle under constant tension.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lighting.&lt;/strong&gt; Screen brightness should roughly match the room's ambient light — not much brighter or dimmer, since either forces your eyes to keep readjusting. Glare from windows and lamps is worth eliminating before it becomes a problem, not after.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text scale.&lt;/strong&gt; If you're squinting to read something, that's extra strain you don't need. Bumping up the font size or interface scale is almost always cheaper than living with it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Periodic vision checks.&lt;/strong&gt; If you spend long hours at a screen, it's worth tracking your visual acuity and a few other basic metrics over time — not as a substitute for an actual eye doctor, but to catch a trend early and bring it up at your next appointment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this is hard to keep up manually
&lt;/h2&gt;

&lt;p&gt;Everything above sounds simple, and that's exactly the trap. The 20-20-20 rule only works if you actually follow it — and in the middle of a work session, 20 minutes disappears fast; you remember the break only after your eyes are already tired. Screen distance and room lighting are just as hard to self-monitor: you don't notice that you've drifted closer to the monitor over the last hour, and nobody's measuring lux with a light meter mid-sprint. And without a history of measurements, there's no way to tell whether the habits you're trying to keep are actually helping — there's simply nothing to compare against.&lt;/p&gt;

&lt;p&gt;That gap — not "what to do" but "how to do it without constant self-monitoring" — is what pushed me to build an app instead of just setting a recurring alarm.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I automated it in SafeYourEye
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apps.apple.com/us/app/safeyoureye-eye-care-timer/id6770624870?mt=12" rel="noopener noreferrer"&gt;SafeYourEye&lt;/a&gt; is my macOS app, and it takes over exactly the manual parts from the list above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Timer&lt;/strong&gt; — the 20-20-20 rule with a configurable session length and idle detection, so the countdown doesn't keep running if you've stepped away from the computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distance and light&lt;/strong&gt; — the camera tracks how far you are from the screen and the room's ambient light level, and nudges you if you've sat too close or the room has gotten too dark.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blink rate&lt;/strong&gt; — a five-minute camera-based blink rate measurement, with a history across the day and a trend, not just a one-off number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-check for vision&lt;/strong&gt; — four checks on one screen: visual acuity via Landolt rings, contrast sensitivity, an astigmatism fan, and an Amsler grid, with a result history, trend, and PDF export to bring to an eye doctor. There's also a 90-second express mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All camera frame processing happens locally on the Mac through the system Vision framework — nothing is recorded or sent anywhere. The only things that leave the device are derived numbers, like a measurement timestamp and a blink-rate-per-minute figure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; a 20-20-20 timer with camera-based distance, light, and blink monitoring, plus a vision self-check.&lt;br&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; macOS 13+, interface in Russian, English, German, and Chinese.&lt;br&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; all camera processing happens on-device; nothing leaves the Mac.&lt;br&gt;
&lt;strong&gt;Where to get it:&lt;/strong&gt; &lt;a href="https://apps.apple.com/us/app/safeyoureye-eye-care-timer/id6770624870?mt=12" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;, $2.99.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://klukyanov.ru/notes/eye-strain-20-20-20/" rel="noopener noreferrer"&gt;klukyanov.ru&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>health</category>
      <category>macos</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
