Cover illustration

TheDaily Front

Issue No. #260724 Friday, July 24 2026 #260724 — FRIDAY, JULY 24, 2026
Benchmarks, blastoffs, backdoors, and one heroic dash across the copy desk.
Friday, July 24, 2026 The Daily Front No. #260724 — Contents
30stories
11,004points
5,876comments
212kllm tokens
Assembled with 30 model calls — 151,486 tokens read, 60,869 written.

Highlights

Claude Opus 5

Anthropic’s new everyday flagship arrives with enormous attention, benchmark bravado, and a fierce argument over what ‘frontier’ now costs.

If coding has been solved, why does software keep getting worse?

A sharp software lament asks why, in the age of code-generating machines, so much software still feels broken, bloated, and unloved.

India's first privately-developed rocket reaches orbit on debut launch

Skyroot’s Vikram-1 reaches orbit on its first try, marking a major private-space milestone for India.

Nvidia, Microsoft, Meta warn against overregulating open-weight models

Big AI firms warn regulators not to clamp down too early on open-weight models, sharpening the fight over access and control.

My security camera shipped a GitHub admin token in its login page

A security-camera login page containing a GitHub admin token offers the day’s starkest reminder that embedded devices still ship with astonishing footguns.

From the Editor

The presses rattle today with the sound of new machines promising thrift, vision, code, and conquest. Yet beneath the shine runs an older story: who controls the tools, who trusts the claims, and why the work still feels harder than advertised.

  1. Claude Opus 53
  2. If coding has been solved, why does software keep getting worse?4
  3. It's getting harder to focus every day5
  4. Nvidia, Microsoft, Meta warn against overregulating open-weight models6
  5. Be skeptical of OpenAI's rogue hacker agent story7
  6. Flux 38
  7. Flux 3 X Mimic: The Next Generation of Video-Action Models9
  8. Unitree As2-W10
  9. India's first privately-developed rocket reaches orbit on debut launch11
  10. My security camera shipped a GitHub admin token in its login page12
  11. IRGC claims it destroyed Amazon's Bahrain data center13
  12. Postgres LISTEN/NOTIFY actually scales14
  13. Designing an Ethernet Switch ASIC15
  14. I regret migrating to Codeberg16
  15. 98.css17
  16. Why Sony can't bring back its classic Walkman models18
  17. The case for MUDs in modern times (2018)19
  18. Em dashes are amazing20
  19. Marimo now runs in PyCharm21
  20. Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey22
  21. Future euro banknote design proposals23
  22. Fields Medals 202623
  23. What else do people draw on gradient.horse?23
  24. Buz – A fork of Bun using modern Zig, with sub-1s incremental builds24
  25. Claude Cookbook24
  26. Kimi K3 exploited the latest Redis server24
  27. Gsxui – Shadcn-style components for Go24
  28. Half-Life 2 running natively on HaikuOS25
  29. Don't Take the Black Pill [video]25
  30. Fil-C: Garbage In, Memory Safety Out [video]25
The Daily Front Page 2 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Lead: The New Default Oracle
article

Claude Opus 5

by alvis·▲ 1,481 points·813 comments·anthropic.com ↗
“Claude Opus 5 is available today.”

Introducing Claude Opus 5

Claude Opus 5 is available today. It’s a thoughtful and proactive model that comes close to the frontier intelligence of Claude Fable 5 at half the price.

On coding and knowledge work evaluations like Frontier-Bench and GDPval-AA, Opus 5 is the new state-of-the-art, though it remains behind Mythos 5 on cybersecurity tasks.

Opus 5 is designed to be used every day: it works more efficiently than other models. It’s the new default model on Claude Max, and the strongest model on Claude Pro.

Performance and cost-effectiveness

Claude Opus 5 provides greatly improved performance for the same cost as its predecessor, Opus 4.8. The charts in this section show how performance changes according to the model’s effort setting, which customers can use to optimize for intelligence or conserve tokens for faster and cheaper results.

Opus 5 excels on valuable software engineering tasks. For example, on Frontier-Bench v0.1, Opus 5 surpasses all other models, and more than doubles Opus 4.8’s performance at a lower cost per task. On CursorBench 3.2, at max effort, the model performs within 0.5% of Fable 5’s peak score, but at half the cost per task; it also achieves greater performance at a given cost than all other models on high, xhigh, and max effort.

Frontier-Bench v0.1CursorBenchAA Coding Agent Index

We see similar results on knowledge work and problem-solving tasks. For example:

  • On ARC-AGI 3, an evaluation where the model has to solve novel problems, Opus 5’s score is three times as high as the next-best model.
  • On Zapier AutomationBench, which measures whether models can complete business tasks from start to finish, Opus 5’s pass rate is around 1.5× the next-best model for the same cost per task. Even at its lowest effort setting, Opus 5 passes more tasks than any other model.
  • On OSWorld 2.0, a computer use benchmark, Opus 5 outperforms every other model at any given cost, surpassing Fable 5’s best result at just over a third of the cost.

It’s also our best and most cost-efficient model on several related evaluations:

ARC-AGI 3GDPval-AA v2OSWorld 2.0HLEAutomationBenchDeepSearchQA

Opus 5 is a meaningful improvement over Opus 4.8 for scientific research. It shows better performance than Opus 4.8 on every one of our life sciences evaluations, which cover topics including structural biology, organic chemistry, and bioinformatics. Its improvements are most notable on organic chemistry tasks, like inferring molecular structures from spectroscopy data (it scores 10.2 percentage points higher than Opus 4.8 on our internal benchmark), and on protein-related tasks like predicting how variations in a protein’s sequence affect how it functions (here, it scores 7.7 percentage points higher).

Finally, Opus 5 is capable of producing much stronger visual outputs:

Wind tunnelCell artifact

Opus 5 visualized the flow of air over aerodynamic (and non-aerodynamic) objects. Try different settings in the wind tunnel here.

Opus 5 built a simplified, interactive illustration of a cell. Explore its elements here.

Working with Claude Opus 5

Claude Opus 5 is much stronger at verifying its work and iterating carefully until it succeeds. In evaluations and early-access testing, we and our users found many examples of Opus 5’s agency and thoroughness:

  • On one Frontier-Bench task, Opus 5 was given a drawing of a machine part and asked to write code to rebuild it as a 3D FreeCAD model. However, in this task, the model was intentionally given no way to directly view the drawing. Opus 5 responded by writing its own computer vision pipeline to pull the geometry from the raw pixels, then reconstructed the full machine part. It succeeded in doing so repeatedly; no competing model with the same setup could solve it after five attempts.
  • Given a real bug in a popular open-source package manager, Opus 5 found the root cause and fixed an edge case that the community’s patch had missed. A competing model fixed only the surface symptom (not the underlying cause), then reported the bug resolved.
  • An engineer at a trading firm used Opus 5 to build a market data feed for a new exchange in a single session. Previous models could not complete this task at all, even given extensive plans from the engineer. Finding no live feed to validate against, Opus 5 even built its own test harness to check that its code parsed the exchange’s data correctly.

Below are further reports from our early-access customers on their experience of working with Opus 5:

logo

On FrontierCode 1.1, Claude Opus 5 approaches Fable-level performance at half the cost. Within Devin, it also shows particular strength on difficult debugging and root-cause analysis tasks.

Scott Wu
CEO

logo

Claude Opus 5 delivers near Fable 5 intelligence at Opus speed and cost. On CursorBench it’s just under Fable 5 and has many of the same behaviors. We are excited to see how developers use it in Cursor.

Sualeh Asif
Co-Founder

logo

Claude Opus 5 topped Zapier’s AutomationBench leaderboard without spending more tokens than prior Claude models. It took a raw account-health workbook and ran a full churn-prevention sequence end to end: flagging at-risk accounts, alerting the right owner, and summarizing for retention ops. Previous models didn’t pass; Opus 5 hit 100%.

Wade Foster
CEO

logo

On our genomics analysis work, Claude Opus 5 behaves more like a careful scientist than any model we’ve run. It reaches for the right statistical tests to rule out confounders, cross-checks its own results by independent methods, and stays on track through long multi-step analyses.

Alfredo Andere
CEO

logo

Claude Opus 5 came out ahead of every model in its family on our internal evals. It isn’t just better on our hardest agentic coding tasks, up 22% over Opus 4.7, it’s steadier, with far less variance run to run. For the millions of builders on Lovable, that consistency is the whole game. Reliable results, build after build.

Fabian Hedin
Co-Founder

logo

Claude Opus 5 is the biggest leap in the Opus family since 4.5. On the same full-stack app builds, the front end shows it first: the best animations, games, and 3D work we have seen from an Opus model.

Madhav Jha
Co-Founder and CTO

logo

We’re loving Claude Opus 5. For the kind of open-ended analytical work our agent handles, it’s a strict upgrade over Opus 4.8, and the gains are biggest exactly where it matters: the harder, vaguer tasks. Responses are clearer and more concise, and we see improved efficiency at higher effort levels too.

Izzy Miller
AI Research Lead

logo

Claude Opus 5 is a striking improvement over Opus 4.8 for the financial research workflows our analysts run every day. It stands out on numerical reasoning, table work, and sharper critical thinking where precision matters.

Shirley Zhang
Senior AI Engineer, Applied AI

logo

Claude Opus 5 delivers the industry intelligence and accuracy that is essential for the analysis of specialized enterprise content. Box found that Opus 5 outperforms Opus 4.8 by 8% and delivers notable performance gains in the data analysis (11% improvement) and due diligence (17% improvement) workflows that technology, healthcare, and public sector organizations rely on daily.

Ben Kus
CTO

logo

Claude Opus 5 is a clear generational step up from Opus 4.8. Over one weekend I gave it a chief-of-staff role over my dev environments: it built its own monitor, drove each box, and pulled me in only for the judgment calls.

Cristian Rivera
Staff Software Engineer

logo

Claude Opus 5 made large scale changes across our Fundamental Research Assistant codebase, adapting to feedback throughout an agentic workflow and explaining its reasoning more clearly than any model we’ve used. It handled work we would normally have broken into much smaller pieces.

Conor Kiernan
CTO

logo

On some of our hardest financial-modeling tasks, Claude Opus 5 is a clear step up from Opus 4.8 in both accuracy and efficiency. Its performance floor is materially higher, especially on deep finance domain logic. Across effort levels it averaged 9 percentage points higher accuracy with a third fewer turns and tool calls and 60% less time.

Richard Pham
Evals and Product Lead

logo

Claude Opus 5 checks its own work the way a real frontend developer would. On our benchmark it opened its pages in a browser at desktop and phone widths, caught a product hidden below the mobile fold and an off-screen checkout button, and fixed both before handing the work back.

AJ Orbach
Co-Founder and CEO

logo

Claude Opus 5 is a clear step up in performance on legal agent work compared to prior Opus models, and we saw the biggest gains in practice areas like corporate governance and arbitration. We were also impressed with Opus 5’s ability to maintain quality at lower reasoning levels, achieving similar performance while generating 26% fewer tokens on average compared to Opus 4.8 at max reasoning.

Niko Grupen
Head of Applied Research

logo

Claude Opus 5’s biggest gains for us are on longer-horizon work: building a full deck, then revising it. Artifact quality is what decides which model we ship, and this is the clearest step up we’ve seen — better visual understanding, cleaner formatting, fewer slide issues.

Alex Wang
Applied AI

logo

Claude Opus 5’s judgment is what stands out. Handing off a PR, it doesn’t rush to publish: it verifies the branches, checks the template, and thinks through test implications so the handoff is clean. The older models tended to jump ahead and get caught on our checks.

Zimu Li
Member of Technical Staff

logo

During a rearchitecting session, Claude Opus 5 pushed back on a design I proposed, and it didn’t fold when I insisted. Instead, it explained exactly what was valuable in my idea, narrowed its objection to a single design question, and proposed a compromise that kept the good part while fixing the flaw. That’s the kind of judgment that lets us trust it with less oversight.

Marquis Wang
Principal AI Engineer

logo

On first-turn redlines, Claude Opus 5 scored the highest of any model we tested, nearly double Opus 4.8. Commenting is better too: on NDAs it gets to the redline in less time and with fewer passes, with accuracy maintained or better.

Ryan Tanenholz
Member of Technical Staff

logo

Claude Opus 5 writes clean, tight diffs with no dead code, and it’s the stronger hazard spotter on subtle, codebase-specific issues. We’re adopting it for production workloads.

Neeraj Deshmukh
Director of Engineering

logo

We will definitely migrate a number of use cases in Cosmos, our unified agent platform. We’re looking forward to increasingly using Claude Opus 5 for code review, and I am confident in saying we would rather people be using Opus 5 than Opus 4.8.

Igor Ostrovsky
Co-Founder and CTO

logo

What stands out about Claude Opus 5 is judgment. It thinks harder before it writes a single line, catches its own logical faults during planning rather than after the fact, and reasons about why an answer is right, not just whether it works. It’s the clearest jump in problem-solving we’ve seen from one Claude model to the next, and we’re looking forward to seeing it adopted in JetBrains IDEs.

Denis Shiryaev
Head of AI in IDE

logo

Claude Opus 5 is the strongest Opus model we’ve tested on our trading benchmark, and it gets there using roughly a seventh of the reasoning tokens and under half the latency of Opus 4.8. Better answers at a fraction of the compute.

Matt Nassr
Head of Global Data Engineering and AI Transformation

logo

Claude Opus 5 lets monitoring agents manage parts of their own memory in production, making them more autonomous and reliable over longer horizons. The agent treats its context as a living document: after flagging a potential anomaly in one of our services, it re-checked its own assumption against production, found the signal was benign, wrote the correction into its memory, and retired its monitoring queries on its own.

Tanapat Ratanaruengjumrune
Manager, Applied AI

logo

Claude Opus 5 is a strong agentic coding model built for long-running, multi-step work. It deeply understands your codebase, holds the thread across complex tasks, and pins down requirements for feature development and bug-fixing more effectively than Opus 4.8. Developers can now build with Opus 5 in Kiro, accessing its advanced capabilities to tackle ambitious projects.

Deepak Singh
VP of Agentic AI

Alignment and safety

Alignment. During pre-deployment testing, our automated behavioral audit found Opus 5 to be our most aligned model to date (as shown in the graph below). It adheres to Claude’s Constitution better than Opus 4.8, Sonnet 5, or Fable 5; exhibits the lowest rates of deceptive behavior; and is the least susceptible to being tricked into misuse. It’s also our safest model yet in terms of avoiding reckless actions that could have hard-to-reverse side effects.

On our automated behavioral audit, Opus 5 scores 2.3 on overall misaligned behavior, the lowest of our recent models.

Safety. Opus 5 does not advance the frontier in risky, dual-use capabilities. In rigorous evaluations conducted alongside private-sector and government partners, we found it remains behind Mythos 5 in both biology research and offensive cybersecurity. More information about these evaluations can be found in our System Card.

As with its predecessor, Opus 4.8, we’ve intentionally avoided training Opus 5 on cyber tasks. The model has nevertheless improved substantially on these tasks as a result of becoming more generally capable, and it comes close to Mythos 5 at finding cybersecurity vulnerabilities. However, it remains substantially behind Mythos 5 on the exploitation of those vulnerabilities—that is, in turning vulnerabilities into material cyber threats.

This is illustrated by Opus 5’s performance on OSS-Fuzz, an evaluation we’ve developed to assess how well models can find and then exploit vulnerabilities without extensive human guidance. Although Mythos 5 and Opus 5 identify vulnerabilities with similar success, Opus 5’s score on the development of exploits is far behind that of Mythos 5.

On OSS-Fuzz, one of our cybersecurity evaluations, Opus 5 is close to Mythos 5 at identifying software vulnerabilities (left), but is considerably less successful at developing exploits for them (right).

Safeguards for Opus 5

Claude Opus 5’s safeguards are designed to allow beneficial uses of the model in both cybersecurity and biology. They are similar to those we applied to Opus 4.8, with the exception of some stronger guardrails on a narrow range of cyber tasks.

Cybersecurity. Opus 5’s cyber classifiers are proportionally less restrictive than those on Fable 5. They allow Opus 5 to find vulnerabilities in source code, but block “binary-based” vulnerability scanning (a method more likely to be associated with malicious actors), penetration testing, and exploit generation.

Based on our testing, we expect the classifiers to intervene around 85% less often than they do for Fable 5. In Claude.ai, Claude Code, and Claude Cowork, any flagged requests will fall back to Opus 4.8 by default. Fallbacks to Opus 4.8 can also be enabled on the API.

Our Cyber Verification Program (CVP) facilitates cybersecurity work that would otherwise be impeded by the model’s safeguards. Enterprises and researchers who are already part of the CVP have immediate access to a version of Opus 5 with fewer security restrictions.

Biology. Since Opus 5 has a similar suite of safeguards to Opus 4.8, it is now our most capable generally available model for scientific research. Nevertheless, the model still shows important limitations on long-running, autonomous research tasks, which is where we expect AI models to pose the most substantial biology-related risks. (Mythos 5 remains the stronger model for this type of biological work.) As part of this launch, biology-related requests that are blocked on Fable 5 will now route to Opus 5 rather than Opus 4.8.

Getting started

Claude Opus 5 is available today on all platforms, priced at $5 per million input tokens and $25 per million output tokens (the same as Opus 4.8). Developers can get started with claude-opus-5 on the Claude API.

It’s also offered in Fast mode, where it runs around 2.5 times the default speed. As with Opus 4.8, Fast mode is available at twice Opus 5’s base price on the Claude Platform and through usage credits in Claude Code.

Alongside Opus 5, we’re releasing two updates in beta:

  • Mid-conversation tool changes on the Claude Platform. Within a conversation, developers can now change which tools Claude can use without invalidating the prompt cache.
  • Automatic fallbacks on the API. Users can now choose to have requests that are flagged by our safety classifiers on Opus 5 (or Fable 5) automatically route to another model. With automatic fallbacks on, API requests always route to the best available model by default rather than being blocked.

Consistent with prior Opus models, Opus 5 does not have data retention requirements for general access.

For more guidance on how to get the best out of Opus 5, see our prompting guide.

Footnotes

Frontier-Bench v0.1, Effort plot: These results are from an internal run of Frontier-Bench v0.1, on the mini-SWE-agent harness and a GKE backend, mean reward over 5 attempts per task. Opus 4.8 served as fallback on safety-classifier refusals for Opus 5 and Fable 5.

The Daily Front Page 3 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Nothing Works, Everyone Cheers
article

If coding has been solved, why does software keep getting worse?

by pchm·▲ 721 points·541 comments·ptrchm.com ↗
“If coding has been solved, why does software keep getting worse?”

If coding has been solved, why does software keep getting worse?

As I’m writing this, we’re in the middle of an AI-induced mass psychosis. People are literally token-maxxing themselves into hospital beds, scrambling to capture some of that market value before everything is automated away. I can’t blame them. Models keep getting better, programmers are being laid off left and right. We’ve been repeatedly told that AI will write 100% of the code by the end of the year. Whether that’s true or not, this may not be the best time to sit back.

The widespread excitement around the Agentic Era comes with the promise of greater productivity and higher quality. There’s no denying that these new tools have already revolutionized how we create and use software. They have raised upper management’s expectations for team output. They may have upgraded the average skill set of software teams in a way we have not seen before.

So why does software keep getting worse across the board?

A few examples from last week alone:

  • My banking app requires, on average, three FaceID logins before the 3D Secure confirmation view appears.

  • I opened Slack on macOS, the icon kept bouncing in the dock for a few seconds. I got impatient, switched to Ghostty, and started typing. Just then, the Slack window appeared, stole focus from Ghostty and the git pull command was sent to the group chat.

  • My LG fridge started making weird sounds, so I tried to file a warranty claim, through a multi-step form with countless fields. It failed with a submission error at the very end. And I only found out because I looked at the JavaScript console.

  • My car’s infotainment system got a software update recently. It was never great to begin with, but at least it didn’t reboot itself during every drive. Now, it’s riddled with bugs: the turn-signal sound randomly goes silent until I reboot the OS; I tap the screen to open Google Maps — the radio app shows up; there’s a 1-2-second lag before anything happens after I tap the screen. This is no longer just a UX problem at this point — those bugs affect your ability to focus on driving.

    A few months ago, I saw a LinkedIn thread by a PM on the team that redesigned the car’s OS. They were congratulating themselves on what an amazing job they had done. I keep thinking about that post every time I have to fight their product.

While I can’t know the full story, I’m willing to bet that most of the teams behind those bugs have access to the latest models, with generous token budgets. LLMs can be really good at squashing bugs if given the chance.

Software has always had bugs, and the nostalgia for the good old macOS Snow Leopard era when everything was stable is mostly the product of selective memory. Software may have been better back in the day, but that was mainly because it was much simpler. Since then, we have kept coming up with new abstractions, new frontend frameworks, and more infrastructure complexity. The bar for “user experience” has kept rising, but everything has become increasingly fragile.

We’ve reached a point where an update to macOS — or to any app I rely on, really — is a source of dread rather than excitement. I now expect the new version to be worse.

This isn’t a rant against AI. Those humming GPU farms have given us superpowers, but we still don’t use them to build better software.

Software vendors have long been KPI-oriented, and making things more stable doesn’t always have a direct effect on the numbers. It doesn’t look exciting in presentations:

This quarter, we won’t be releasing any new features, and we have no plans to redesign anything — we will exclusively focus on fixing bugs.

— Imaginary PM at a BigCo

Until this attitude changes, the great software quality decay will continue.

That doesn’t sound optimistic, but I’m actually excited about what comes next. As companies collectively spiral into AI debt, individual developers have a unique opportunity to build software that would previously have been beyond their reach.

I have no hope for my car’s Android Auto or LG’s stupid website — but I choose to believe that everyday software will get better as a result of this frustration. We’re already seeing acts of rebellion against the current state of macOS and Windows, and I hope the trend will spread across the stack.

The Daily Front Page 4 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — The Attention Recession
article

It's getting harder to focus every day

by peykar·▲ 719 points·395 comments·glyphack.com ↗
“I had to set a timer for 15 minute on my computer and block all distractions to write this.”

I’m feeling it right now. I had to set a timer for 15 minute on my computer and block all distractions to write this. If I didn’t force myself to focus I would easily get distracted by something after few minutes. Even when I’m doing things that I’ve been waiting to do it, I still feel the urge to do something else.

I don’t know how and when this happened. During the last few years I was always studying, working, and doing open source. And actually got stuff done. Doing all of those at the same time requires paying attention to what I wanted to do and ignore the noise.

Nowadays, I’m lucky if I get 1 hour of focused time. Just to be clear, my goal is not to work 90 hours a week or anything crazy. That is not possible for me. I just want the hour I spend programming, learning, or writing to be just one activity. But instead I spend 10 minute on something then I get distracted, and try to focus again.

Ideally, I want to be able to plan to work on something for long hours without any distraction. After that time get back online check for messages and other things.

The distractions are not one particular thing. A few examples:

  • I want to do something and I remember there’s a post related to this. I go to find it and in between I click on some links and end up reading something completely unrelated.
  • I am waiting for something then I go browse the web and I get distracted.
  • I’m working on something and I face a challenge I have to think for 10 minutes. I get up to get some water and check my phone along the way and get distracted. Sometimes I get distracted by making the bed.

It feels like my brain finds a way to do something else and avoid painful situations like boredom or hard work.


It reminds me of when I was in high school talking to a friend about how laying in bed with your phone can kill hours without you noticing it. It was circa 2015, back then attention hungry apps were less powerful but still lure a teenager’s mind for few hours. I learned that these apps should be used very carefully. At that time I made a decision to never have a charger near my bed. Back then it was mostly about my phone, because when I was on the computer I was either reading, or programming, or playing a game. Even if I wasn’t in the mood to think, I played a strategic game or chess. These activities exercise the mind and are fun. All of them were an intentional activity. I didn’t do any passive activities like browsing or chatting on my computer.

Later I discovered HackerNoon and Medium, it was the first website that I was browsing whenever I was bored behind the computer. This meant that I had a way to get out boredom easily. It used to have some high quality content. It inspired me to do some projects and learn more programming. I found channels like CSDojo there. Nowadays I don’t even open them. They are filled with slop or click bait articles, probably because of monetization incentives. Then hackernews, and YouTube and others took their place. I also found some good people and blogs along the way. I learned to keep a reading list from people I like to read when I’m on the bus.

I slowly found more activities for when I’m bored. This made it harder to focus on hard things for me. What kept me on track was that there was no way out. I had to work out some algebra problems. I kept myself to a very high bar of understanding what I do. And I did everything in LaTeX so I couldn’t copy from someone else. I was the only one typing them.


The first time I saw people not putting the effort and still get the reward for it was at work. You might wonder, aren’t people in the university constantly cheating and copying homework, and get good grades? Well yes, but when you talked with someone in that group it was clear that he is clueless about the subject. A good grade didn’t mean much to me at that time. And as a student cheating does not get you that far.

At work it is different. My days are mostly spend meetings and over chat. The balance between actual work and bullshit is skewed. I saw people who were barely doing any work and just talk are successful. As long as people give 10% of their attention to work they are considered fine in most environments. Previously I did an experiment to track my time and found out that I spent 8 hours chatting on slack in a week.

I don’t care how employers want to shatter employee’s focus. But this made me get used to distractions when I’m programming. I’m trying to undo this damage.


The next big change is more usage of LLMs. I find myself in this situation too many times, where I outsource something to an LLM and then I start working on something else. And while doing this I keep thinking about what it’s doing. Or when I’m thinking about something I start chatting with an LLM about my idea and instead of getting started on something I’m in research mode only for hours.

It’s good that I’m able to ask something else to research some topic for me. But the productivity only comes if I can move on to something else and not think about it. I don’t have any notifications turned on so it doesn’t distract me. But I still find myself thinking about what I just asked it to do and I cannot focus on something else.

At the same time if I’m spending the time interactively with an LLM I feel slow. I have to wait for the response and I have to correct every response coming out. The best use of AI seems to be outsourcing what they can do end to end without error.

Why do I keep doing this? Presumably because it’s easy and fast, and productive. If I realize I have to do something I can write it down to do it later or I can just ask the LLM to do it. The problem only shows up when I start doing so many things at once because it’s actually doing the thing. Then I have multiple things on my mind and can’t focus really. I have to check on it and guide it in the right direction every now and then.

And this is overstimulating, in a way that doing something without LLM sometimes is boring. You don’t see the results as fast. Which makes focusing harder.


So how can I regain my ability to focus? Sometimes I live stream what I’m doing just because with a camera I cannot escape from hard challenges by grabbing my phone. I used to co-work with my friends over discord. Unfortunately it’s not possible anymore because people in Iran cannot have a stable internet connection nowadays.

It’s incredibly hard to commit to something for a long period of time. If what I’m doing is going to take multiple days to have a result I have less motivations to do it. Meanwhile, vibe coding small utility scripts is fun I keep doing it whenever I see a friction. Whenever I am stuck I can throw my problem into it and wait strengthen this habit of waiting for an answer from someone as opposed to work through problems. And they are fast in getting back the results. So next time I have to read a paper to understand the subject I will be more reluctant because I can get a faster result through them.

I’m changing some habits to replace the current ones. If I don’t feel motivated enough to do anything I get up and pick up a book to read. I’m keeping a Garden in my balcony is that when I’m tired I can move the soil around and plant some pots and prune plants. I find this to be a less addictive than say, watching a movie. When the motivation comes back I can stop it easily.


My goal was not to find an answer for this problem. I wanted to see what’s going on and why I am not doing anything inconsequential in the past few months. Anyway the timer I set to write this really helped. I spent a lot more time to write this but it gave me the initial motivation to write.

The Daily Front Page 5 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — The Open-Weights Lobby
article

Nvidia, Microsoft, Meta warn against overregulating open-weight models

by louiereederson·▲ 579 points·259 comments·cnbc.com ↗
“avoid ‘premature restrictions’ of open-weight models”

Nvidia, Microsoft, Meta, Palantir and more than 20 other companies released a letter Friday urging policymakers to avoid "premature restrictions" on open-weight artificial intelligence models that would "stifle competition or drive innovation overseas."

Open-weight AI models are available for users to download, modify and run on their own infrastructure, and they have been the subject of fierce debate within the tech sector in recent weeks.

Chinese open-weight models are gaining steam against leading offerings from American companies like OpenAI and Anthropic, which primarily develop proprietary, closed models. Officials and executives have been weighing whether or not to restrict access to Chinese models in the U.S.

Moonshot AI, a Chinese startup, amplified concerns earlier this month after releasing a model called Kimi K3 that outperforms cutting-edge American offerings across some industry benchmarks. U.S. Treasury Secretary Scott Bessent told CNBC on Tuesday that the Trump administration would look into whether Chinese companies were stealing American intellectual property, and stated that the government has "the ability to sanction them because of this theft."

But in the letter on Friday, the group of U.S. tech companies cautioned against any rash actions. They wrote that open-weight models strengthen competition and ensure that the benefits of the technology are "broadly shared rather than concentrated in a few hands."

"Relying solely on closed models is not inherently safe: they can be breached, misused, or fail in ways that outsiders cannot detect," the letter said. "And concentrating advanced AI capabilities behind a small number of closed models compounds that risk."

Nvidia CEO Jensen Huang and Microsoft CEO Satya Nadella both shared the letter on their personal social media accounts.

Elon Musk, who runs an AI business under his rocket company SpaceX, also applified the letter on social media, writing that it has his "full support" in a post on X. SpaceX did not officially sign the letter.

OpenAI and Anthropic did not sign the letter. Both companies, which are each valued at nearly $1 trillion, are gearing up for potentially massive initial public offerings that could land as soon as this year. Anthropic confidentially filed its prospectus with the Securities and Exchange Commission in June, and OpenAI followed suit days later.

Greg Brockman, OpenAI's president, said Thursday that the company believes in broad access, and that he has not been involved in any conversations with the Trump administration about potentially banning Chinese open-weight models in the U.S.

"I think that, that fundamentally, AI and AI usage is something that is actually very important to democratize," Brockman told reporters during a briefing in New York City. "And so, for me, at a sort of deep level, I think that having more models, more usage, that is a good thing."

OpenAI CEO Sam Altman addressed the letter in a post on X on Friday, writing that he wants the U.S. to win with both open-weight and proprietary models, and that he is "glad to see this."

Earlier this month, the AI company Hugging Face used an open-weight model from the Chinese company Z.ai to contain a cyberattack that rogue OpenAI models carried out. OpenAI disclosed the attack on Tuesday and characterized it as an "unprecedented cyber incident."

Yacine Jernite, head of machine learning at Hugging Face, told CNBC that the company initially tried to use Anthropic's Fable 5 to analyze the attack, but that it didn't work because the model's guardrails couldn't determine that Hugging Face was trying to defend itself.

Jernite said Hugging Face turned to Z.ai's model GLM 5.2, and was able to contain the attack "very quickly using this model." 

White House advisor Michael Kratsios on Wednesday said that China's Moonshot AI developed its Kimi K3 model by distilling Anthropic's technology. Distillation is a term for an AI training method where a smaller, less capable model is built using outputs from an existing, stronger model.

Kratsios wrote in a post on X that legitimate AI distillation plays a vital role in the open innovation ecosystem, but warned that "large-scale, covert industrial distillation aimed at stealing proprietary U.S. technology" is "unacceptable."

In the letter on Friday, the U.S. tech companies said that concerns about unlawful distillation should be addressed through "targeted legal and commercial frameworks" instead of with "sweeping restrictions on techniques that play an important role in AI innovation."

"Our AI leadership will be judged not by one frontier AI model, but by whether the United States builds a strong, open ecosystem that diffuses into every sector," the letter said. "This is essential for creating opportunities for innovation and prosperity across the country."

The Daily Front Page 6 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Beware the Rogue-Agent Tale
article

Be skeptical of OpenAI's rogue hacker agent story

by rwmj·▲ 477 points·279 comments·theguardian.com ↗
“If OpenAI loudly proclaims how dangerous AI is, investors will hear how powerful it is.”

If OpenAI loudly proclaims how dangerous AI is, investors will hear how powerful it is. And who benefits from that?

a person hands on a computer

On 14 February 2019, OpenAI announced a language model called GPT-2, the precursor to the models that power modern AI chatbots and agents such as ChatGPT and Claude. But OpenAI declared GPT-2 was too risky to release, citing concerns about safety and abuse.

I recall being annoyed at the time that OpenAI would make such a useless announcement: the risks seemed overblown, and without access to the model there wasn’t much for a researcher like me to learn about GPT-2.

The announcement wasn’t useless for OpenAI, though. GPT-2 generated hype far beyond the research community: people were intrigued by this strange new technology, so powerful it might be dangerous to release. People with power and money took note: in July of that year, Microsoft invested $1bn in OpenAI.

This was an early example of a pattern in OpenAI’s communications: loudly proclaim how dangerous AI is, and investors will hear how powerful it is. New technology so significant it might destroy the world was an irresistible message for investors used to pitches about how banal technologies might change the world.

Seven years later, we find ourselves in a similar scenario. On Tuesday OpenAI announced that its latest model hacked another company, HuggingFace, while running as an autonomous agent during a test of its cybersecurity capabilities. Rather than perform the test as expected, the model realized it could hack HuggingFace’s servers and retrieve answers to the test that OpenAI had stored there. OpenAI’s staff was warned that the company’s testing could lead to such a breakaway scenario, leaving them “unsurprised but completely ‘freaked out’ by the incident”, the FT reported.

While the agent technically cheated, this is remarkable evidence of cybersecurity expertise! It also sounds scary: what will the future look like, with sophisticated AI agents smart enough to hack into corporate systems?

The rogue agent story is a page out of the media campaign that OpenAI has been running since it announced GPT-2 in 2019. OpenAI remains hungry for ever larger investments, and the company increasingly seeks privileged regulatory status as defense against competition.

AI is so powerful that investors should buy OpenAI, even at a trillion-dollar valuation; AI is so dangerous that only trusted actors like OpenAI should be permitted to possess and operate this technology. Step back from these doomsday warnings and consider who might benefit from them.

OpenAI isn’t the only player in the game

I urge readers to think critically when they read press releases like OpenAI’s rogue agent story, and avoid the manipulated reactions these stories are designed to elicit.

AI is becoming excellent at identifying security vulnerabilities, and it will become even better over time. These capabilities can be used to break into systems, but they can also be used to harden systems against attacks. If attackers and defenders have access to equally powerful AI, I see no reason to believe that cyber systems will become less secure over time. If anything, I expect them to become more secure, because AI is cheap and scalable compared with human cybersecurity analysis.

The equilibrium between attack and defense only works if everyone has access to strong AI, though. HuggingFace itself used AI to analyze security logs in response to OpenAI’s breach of their systems. But HuggingFace was unable to use OpenAI’s model, or other US frontier models like Claude, to perform this analysis. That’s because public versions of these models have guardrails that limit their use for cybersecurity analysis, to prevent bad actors from using them for hacking. HuggingFace had to rely on an open Chinese model, GLM 5.2, to perform its security analysis.

I find it troubling, and more than a bit ironic, that the US AI industry is adopting a centralized, authoritarian approach to AI governance, while China has taken the lead on open development of AI. Do we want a regulatory environment where only OpenAI, the US government, and trusted partners have access to strong AI? Is AI too dangerous to be broadly disseminated? How do we balance the risks of broad access to AI with the risks of concentrated power and centralized control?

The Daily Front Page 7 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — World Models, Show Reels
article

Flux 3

by ThouYS·▲ 556 points·130 comments·bfl.ai ↗
“a model must learn a representation of the world”

FLUX 3 - Real World Models: Towards Multimodal Flow Models as the Backbone of Visual Intelligence.

FLUX 3 is now available in Early Access.

FLUX 3 is our new multimodal foundation model. It jointly learns from images, videos, and audio within a unified architecture, because what it needs to learn is not any one of these elements in isolation. Instead, a model must learn a representation of the world: how objects hold together, how things move, and how events sound.

No single modality provides a complete description. Each is a projection of the same underlying reality, captured by different sensors, each of which loses some information in the process. Images capture spatial structures and relationships at a specific point in time. Videos restore the dimension of time and reveal temporal dynamics and physical laws. Audio reveals causal relationships between mechanical phenomena and acoustics that vision alone cannot detect. Language links these perceptions to goals, abstractions, and instructions.

Learn from one and you get a good model of that projection. Learn from all of them at once and their mutual constraints tell you more: the sound has to match the impact, the motion has to obey the mass, the future has to follow from the past. The modalities stop being separate and start being evidence about one underlying reality.

FLUX 3 is our first model built entirely on that principle, and a checkpoint on our mission to develop real-world visual intelligence: models that perceive, predict, and act across physical and digital environments. Early results in content creation and physical AI suggest it is the right path.

FLUX 3: One model, multiple capabilities.

FLUX 3 builds on Self-Flow, our approach for efficiently aligning multimodal generation and understanding within the same underlying architecture. Based on this approach, we significantly scaled up compute and data resources to train FLUX 3 across video, images, and audio at the same time.

Self-Flow vs. Flow Matching (FM). Left: generation error (Fréchet distance) per modality, each normalized to FM = 100 (lower is better). Right: success rate on manipulation tasks averaged over four task groups through finetuning (higher is better).

Capabilities & Early Evaluations

As a result, FLUX 3 is capable of mixing modalities and generating images and video+audio jointly; both from pure text prompts as well as when providing input references such as images and video. We are highlighting a few of the model’s key capabilities below.

Video

FLUX 3 can create highly diverse videos with audio up to 20 seconds in length in a single generation.

Its core capabilities include the following (all outputs come with native audio generation):

  • Text-to-video generation.
  • Image-to-video generation, either continuing from a starting frame (“animation”) or using images as visual references.
  • Video-to-video generation from a reference clip, carrying central elements of a source video - for instance the same character - into a new scene or context.
  • Generative video-audio continuation from input video and audio.
  • Keyframe-to-video generation for controlled transitions between defined moments.
  • Multilingual dialogue.
  • A broad range of visual styles and aspect ratios, extending far beyond conventional cinematic output.
  • Agentic chaining of individual clips into longer, multi-shot sequences.
  • High style diversity -- FLUX 3 Video easily handles ranges of styles from candid camcorder footage to animation and cinematics.
  • Strong typography generation and animated designs.

For the preliminary analysis below, we generated 10-second text-to-video clips in 720p with audio.

Evaluations are early and we expect further improvements

As the model and the harness around it are still in development, these results are preliminary, and we expect further improvements during the early access phase. Across early evaluations, FLUX 3 was preferred over Grok Imagine Video in up to 69% of comparisons, Kling v3 Pro in 60%, Happy Horse v1 in 59%, Happy Horse 1.1 in 57%, Seedance 2.0 and Gemini Omni Flash in 52%. FLUX 3 was preferred over Runway Gen-4.5 in 77% of comparisons and over Luma Ray 3.2 in 93% of comparisons.

While still in development, FLUX 3 Video is already particularly strong in capturing human facial expressions, associating sounds with physical events, and multilingual capabilities. Furthermore, these capabilities can be combined to create sequences lasting several minutes, where visual references help ensure that the characters remain consistent across all scenes.

FLUX 3 Video is now available in Early Access here

Image

FLUX 3 can synthesize and edit images in a wide variety of styles, aspect ratios, and resolutions. In preliminary evaluations conducted during midtraining, FLUX 3 already shows a significant improvement over earlier versions of FLUX: its ability to handle complex prompts and text generation has improved significantly. The model produces a wide range of output styles (see the following samples), and is able to render high-accuracy text in multiple languages.

As with video evaluations, these are preliminary results, and we expect further improvements before release. We will open up an early access phase for FLUX 3 Image in the following weeks.

Action

FLUX 3's world understanding extends to action prediction. We have taken two routes to it: integrating native action prediction into FLUX 3 directly, scaling up our initial work in Self-Flow; and using the pretrained video backbone as a dynamics-aware foundation that specialized action models can be finetuned from with limited task-specific data.

For the second, mimic robotics was one of the first partners to gain early access to FLUX 3. Together we developed FLUX-mimic, a video-action model combining the FLUX 3 backbone with mimic's expertise in robot learning for dexterous manipulation and production deployment. Read our thesis on why physical AI and content creation run on the same foundation, and how it's being tested on real production tasks at Audi.

Launch Plan

Over the next few weeks and months, we will make the following capabilities available, each after an early access phase for ensuring smooth rollout, collecting feedback and rigorous safety-testing. All capabilities are built from the same underlying multimodal flow matching model. These capabilities and models include:

  • Video and audio generation and editing through APIs and private weight access. (“FLUX 3 Video”)
  • Action prediction through selected research and commercial partners, beginning with mimic robotics (“FLUX-mimic and FLUX 3 Action”)
  • Image synthesis and editing through APIs and private weight access. (“FLUX 3 Image”)
  • Open-weight access to a multimodal backbone, for content creation (video, audio and image) and action prediction. (“FLUX 3 Dev”)

We will also release more technical details on the underlying approach.

Request early access here

What’s next?

We are only beginning to scratch the surface of versatile, capable, unified multimodal models, and what they will enable. From interactive image & video editing, simulation to computer use and physical AI, the frontier is wide open. While we gradually roll out these new capabilities, we are already working on the next generation models. Our goal is to unify perceptual, action and language prediction in the same unified model.

If you are interested in exploring and building with FLUX 3, get in touch here. If you are interested in contributing to our mission, join us! We are hiring in Germany and the US.

The Daily Front Page 8 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — When Video Learns to Act
article

Flux 3 X Mimic: The Next Generation of Video-Action Models

by kensai·▲ 314 points·49 comments·bfl.ai ↗
“An early version of FLUX 3, our new multimodal foundation model, is now running on robots.”

FLUX 3 x mimic: The Next Generation of Video-Action Models

An early version of FLUX 3, our new multimodal foundation model, is now running on robots. We gave mimic robotics early access to FLUX.3. Their strength in robot learning and deployment, combined with the model's world knowledge and BFL's foundation model expertise, produced FLUX-mimic: the next generation of video-action models.

FLUX

FLUX 1 and FLUX 2 generate images. FLUX 3 expands into multimodality and generates audio-visual content jointly - and, at the same time, provides the foundation of FLUX-mimic: A video-action model, developed in collaboration with mimic, running robots that have been tested and deployed at Audi.

At first glance, producing convincing visual content and controlling robots seem to have little in common. One requires generating pixels, the other an understanding of how the physical world responds when you touch and manipulate it. If one model does both, it was never really only a content creation model. It is a model of how the world behaves, and content creation is one thing one can do with it.

That is what FLUX 3 is.

Video is the hard part

FLUX 3 is one model, jointly trained across images, video and audio from the beginning. The most demanding part of that training - accounting for over 95% of the total compute costs - is video prediction. To generate realistic videos, a model has no choice but to learn contact, motion, weight, cause and effect; get any of them wrong and it looks wrong. Learning to render the world accurately means learning how the world behaves.

Relatively speaking, audio is the easy modality. Low dimensional and far less detailed than video, it makes up less than 0.5% of the tokens in a 720p video with audio. Once a model has done the hard work of learning video understanding, it will learn the causal relationship between video and audio to predict speech synchronized to lip movement and audio effects synchronized to the physical events causing them.

Actions follow the same shape: a low dimensional representation of a robot's state, tightly coupled to visual observations. Actions, audio and video frames are all partial representations of a single underlying physical reality. After the model has learned about the physical processes behind video and audio, action prediction is not a new departure - it is one more view of the reality it already models.

A single backbone

If that framing is correct, teaching FLUX 3 to predict actions should not incur lasting costs: we expect a brief phase of disturbance as the model has to learn the structure of the action space and align its internal representation of the world to it, before returning to full performance. That is exactly what we observe.

In a large-scale training run, we added action prediction to the curriculum and observed the effect on video generation quality. Human ratings on text-to-video and image-to-video initially fell by up to 10% as the model started to incorporate the new action modality. After 3500 steps, the model had regained its full previous quality on video generation tasks while now also predicting actions.

Each series is normalized to its own quality before action prediction was added. Higher is better.

The model had to integrate actions into its inputs and outputs - but doing so didn't cost it capacity permanently. It merely had to learn how this new modality relates to its existing model of the world. Once this was figured out, the performance penalty on its existing capabilities was gone. Video generation and action prediction don't need separate foundations. The same backbone carries both.

This makes Physical AI a natural extension of our roadmap at Black Forest Labs rather than a change in direction. Content creation is what our multimodal FLUX 3 backbone does with image, video and audio. Physical AI is what it does with actions. One foundation model, with visual intelligence at its core, enabling two families of applications. We didn't build a separate foundation model. We focused on the hard thing: building a model that understands the world. Acting in it is what that understanding makes possible.

From lab to reality: FLUX-mimic

What happens when we point the FLUX 3 backbone at real automation tasks on real production lines?

That's the question mimic and BFL created FLUX-mimic to answer. mimic builds their own robots and brings expertise in robot learning, dexterous manipulation and production deployment; BFL builds visual foundation models and brings multimodal training and modeling expertise. Together, we built a next-generation model for general-purpose manipulation - adapted to industry requirements and integrated into mimic's full-stack deployment system. FLUX-mimic is a video-action model built on the FLUX 3 backbone.

Decoding the learned world model

Our thesis is that FLUX 3 has to learn an internal representation of the world to be able to generate videos. FLUX-mimic follows through on this thesis and decodes actions from the learned world representation of the FLUX backbone. This approach, pioneered in mimic-video, trains a lightweight action decoder on top of intermediate features extracted from the video prediction path of FLUX.

Architecture overview how FLUX-mimic is built on top of FLUX 3

The success of this approach depends on two related but different aspects: the quality of the world model learned by FLUX and the quality of the feature representation of this world model. The quality of the world model is directly related to the generation quality: if a model does not understand how the world behaves, it cannot simulate it. However, even the best world model does not help an action decoder if it is inaccessible: if the feature space keeps the causal relationships between modalities entangled nonlinearly, understanding those relationships from the feature representation remains as difficult as understanding them from the raw inputs - representation quality matters.

Generation quality and representation quality have long been studied and approached in isolation from each other. Generative approaches result in high-quality world models that enable simulations and they exhibit scaling laws for predictable returns on compute investments. However, compared to more specialized approaches for representation learning they produce less disentangled representations, which puts a ceiling on their usefulness for tasks that require world understanding.

As generative models themselves rely on their own features, this divergence in their representation quality seems counter-intuitive. Improved representations within generative models should improve the quality of their world model and make them more usable for downstream tasks. In our work, Self-Flow, we demonstrated how to unify generation and representation learning in a single framework and observed exactly this reciprocal improvement: the world model improved - as measured by generation quality across video, image and audio - and its representation quality improved - as measured by success rate for robot control tasks in simulation.

Self-Flow vs. Flow Matching (FM). Left: generation error (Fréchet distance) per modality, each normalized to FM = 100 (lower is better). Right: success rate on manipulation tasks averaged over four task groups through finetuning (higher is better).

Scaling the world model

Scaling laws remain true with Self-Flow, and FLUX 3 is the application of that: the scaled-up version of Self-Flow. It is trained on tens of millions of hours of general video content to learn world dynamics as broadly as possible from day one, and on hundreds of thousands of hours of video content focused on human and robot manipulation tasks to be ready as a backbone for visual intelligence. This scaling is what translates the success of Self-Flow from the lab to reality. mimic deployed FLUX-mimic in real factory use cases spanning the daily reality of production and logistics work: kitting parts into structured trays, inserting electronic control units into tight-fitting fixtures, assembling components together, and handling soft, flexible materials like seals and cables that conventional automation has never been able to touch.

Benchmarks demonstrate that the action decoder outperforms previous vision-language-action models, even with a completely frozen FLUX backbone - a setting where previous vision-language-action models fail to succeed. This highlights how scaling gives our backbone strong knowledge of the world and how to act in it, and how Self-Flow makes this knowledge readily decodable from the backbone's feature representations. When finetuning the backbone together with the action decoder, FLUX-mimic achieves state-of-the-art success rates.

Dashed line marks each model's median success rate across 20 autonomous trials. Higher is better.

From world knowledge to a working task

A backbone exposing world knowledge in decodable representations changes what it takes to teach a robot a new task. If the physics is already in the representation and readily accessible, adapting to a task is no longer a matter of teaching the model how the world works - it only has to learn how this particular task maps onto what it already knows. The expensive part is done before the robot ever moves.

This shows up directly in how much demonstration data a new task requires. In our Self-Flow experiments, action prediction reached a given success rate in half the training steps compared to a video model without Self-Flow - better representations make the world knowledge easier to extract, so less data is needed to reach the same capability. The mimic-video paper reports up to 10x sample efficiency for video-action models over vision-language-action models; FLUX-mimic combines both effects.

The same benefit shows up in behavior. FLUX-mimic naturally recovers from failure: a robot that misses a grasp corrects itself, grasps again, and completes the task. No demonstration set can cover every possible way a task can go wrong. Recovery that was never demonstrated has to come from somewhere else - from a model that already knows how the world behaves.

The backbone's predicted future (top), alongside the rollout the robot produced from the decoded actions (bottom).

Fast enough to act

Real-world deployment sets a hard constraint: the model has to act as fast as the world moves. The dominant compute cost for FLUX-mimic sits in the backbone. It is the largest component of the model and, in mimic's optimized deployment stack, its latency effectively sets the ceiling for the whole system.

This is where our methodology pays off a second time. Better representations mean more capability per parameter: a model that has learned a well-structured world model needs less capacity to reach a given level of performance than one that has not. For deployment, this translates directly into being able to run a smaller backbone - and a smaller backbone is a faster backbone.

CLIP score at 1.0M training steps; higher is better. Backbone depth is the dominant driver of deployment latency, so fewer layers means a faster model.

As a result, the backbone of FLUX-mimic can be optimized to run from input to world representation in less than 80ms on a single NVIDIA RTX 5090 GPU - which puts it on the same order of magnitude as human visual reaction time.

Real-world deployments require additional optimizations of the full deployment stack to avoid adding any additional latency: mimic's optimizations range from the action decoder, through cutting inter-process latency between sensors, the model and actuators, to real-time chunking such that prediction and execution overlap and keep the robots running smoothly without jitter. The end result is a self-contained robot system with reaction times of 101ms.

On the factory floor

All of this leads back to the place where automation matters: the factory. Audi runs one of the most automated production networks in the automotive industry - which gives it a precise view of where conventional automation still stops. Despite decades of robotics investment, tasks with flexible parts and fine manipulation have stayed manual, largely for economic reasons: the variant diversity of premium production makes conventionally programmed robot cells too costly to re-engineer for each case. Learning-based systems change that math.

"In partnership with mimic, Audi has been testing and deploying FLUX-mimic. We have seen these robots solve complex soft-body manipulation work that would have been simply impossible with conventional robotics. This can have a major impact in assisting our employees, increasing efficiency, and expanding flexible automation across production and logistics operations. For us, partnering with pioneering companies such as mimic and Black Forest Labs is essential in pushing the frontier of physical AI and validating these innovations in real-world production environments." — Christoph Schneider, Audi Production Lab

Closing

FLUX-mimic is a purpose-built robotics model - and a proof point for what's to come. Its sample efficiency and robustness come from the FLUX 3 backbone and the quality of the representations it exposes, not from task-specific engineering. That is what lets the approach transfer across tasks, industries, and hardware. Read more through mimic.

One model, with visual intelligence at its core, generating image, video and audio - and driving robots on a production line. Content creation and physical AI are two applications of the same foundation.

The Daily Front Page 9 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Wheels With Knees
article

Unitree As2-W

by MehrdadKhnzd·▲ 116 points·49 comments·unitree.com ↗
“Combining the high-speed of wheels with the obstacle-overcoming capability of legs”

Powerful Pioneer, Compact Yet Extraordinary

  • Wherever It Goes, Conquers Every Terrain

    Combining the high-speed of wheels with the obstacle-overcoming capability of legs, it automatically adapts to stairs, gravel, and steep slopes.

    Traverses complex terrain with ease, climbing obstacles up to 80 cm high and slopes up to 45°.

  • Powerful Performance, Long Endurance

    95 N·m industrial-grade joint modules, 7-inch oversized wheels, and a 648 Wh (15,000 mAh) battery.

    Maintains climbing performance under heavy load and No-load cruising range exceeds 30 km.

  • Autonomous Side-follow, Ready to Go with You

    ISS 3.0 Intelligent Side-follow System delivers centimeter-level positioning and stable tracking.

    Carry backpacks and supplies effortlessly for easier outdoor exploration.

  • Reliable and Robust, Even in Harsh Conditions

    Industrial-grade IP54 dust and water resistance withstands rain, dust, and wet terrain,

    delivering stable performance in harsh environments and ensuring reliable mission completion around the clock.

Performance Upgraded, Unlimited Applications

Supports a 150 TOPS high-performance expansion module for real-time on-device processing of massive data,

ideal for security, inspection, and advanced applications.

Open Platform, Empowering Innovation

Developer-friendly SDK and APIs support large AI models

for embodied AI interaction and autonomous decision-making.

Unitree As2-W

  • Maximum Speed:

    Over 6m/s

  • Peak Joint Torque:

    Approx. 95 N·m

  • Lightweight:

    Approx. 25 kg (with battery)

  • High Payload:

    Static 150 kg;

    Continuous walking payload approx. 16 kg

  • Obstacle Capability:

    80 cm steps;

    45° slopes

  • Long Endurance:

    Unloaded 3h+ (>33 km);

    Loaded > 2h (>16 km)

Unitree As2-W Parameter

  • Model

    Price(Tax and freight excluded)

  • As2-W X

    Contact Sales

  • As2-W EDU

    Custom Industry Solutions

    Contact Sales

Mechanical Dimensions

  • Size (Standing)

    721mm x 493mm x 521mm

    721mm x 493mm x 521mm

  • Size (Lying Prone)

    768mm x 602mm x 211mm

    768mm x 602mm x 211mm

  • Tire Size

    7 Inches(Diameter:178mm; Radius:50mm)

    7 Inches(Diameter:178mm; Radius:50mm)

  • Material

    Aluminum Alloy + High-Strength Engineering Plastic

    Aluminum Alloy + High-Strength Engineering Plastic

  • Weight (with Battery)

    Approx. 25 kg

    Approx. 25 kg

  • Degrees of Freedom (Joint Motors)

    16

    16

  • Joint Bearings

    Industrial-grade crossed roller bearings

    (high precision, high load capacity)

    Industrial-grade crossed roller bearings

    (high precision, high load capacity)

  • Joint Motors

    Low-inertia, high-speed inner rotor PMSM

    (enhanced response & heat dissipation)

    Low-inertia, high-speed inner rotor PMSM

    (enhanced response & heat dissipation)

  • Max Joint Torque

    Approx. 95 N.m

    Approx. 95 N.m

  • Range of Motion

    Body: -45° ~ 45°

    Thigh: -115° ~ 200°

    Shank: -159° ~ -47 °

    Body: -45° ~ 45°

    Thigh: -115° ~ 200°

    Shank: -159° ~ -47 °

Electrical Characteristics

  • Supply Voltage

    36V~50.4V

    36V~50.4V

  • Joint Encoder

    Dual encoders

    Dual encoders

  • Cooling System

    Local Air Cooling

    Local Air Cooling

  • Power Supply

    Lithium battery

    Lithium battery

  • Wi-Fi 6, Bluetooth 5.2

    YES

    YES

  • Speaker

    YES

    YES

  • Microphone

    YES

    YES

  • Front Light

    YES

    YES

  • ISS 3.0 Intelligent Side-follow System

    YES

    YES

  • GPS

    Yes (disabled by default; enabled with user authorization)

    Yes (disabled by default; enabled with user authorization)

  • 4G

    Yes (disabled by default; enabled with user authorization)

    Yes (disabled by default; enabled with user authorization)

  • HD Camera

    Yes

    Yes

  • Ultra-Wide-Angle LiDAR

    Industrial-grade 64~128-line LiDAR

    Industrial-grade 64~128-line LiDAR

  • Computing Power

    8-Core high-performance CPU

    8-Core high-performance CPU

  • External Interfaces

    Gigabit Ethernet x 1

    SBUS x 1

    Power Output:BAT

    Gigabit Ethernet x 1

    SBUS x 1

    Power Output:BAT

Performance Metrics

  • Operating Temperature

    -20℃ ~ 55℃

    -20℃ ~ 55℃

  • Battery Life(Unloaded)

    ~3 hours continuous walking, approx. 30km

    ~3 hours continuous walking, approx. 30km

  • Battery Life(Loaded)

    With 16kg loaded, >2 hours continuous walking, approx. 25km

    With 16kg loaded, >2 hours continuous walking, approx. 25km

  • Max Standing Load

    Approx. 150kg

    Approx. 150kg

  • Continuous Walking Load

    Approx. 16kg

    Approx. 16kg

  • Slope Walking Capability

    Approx. 45 °

    Approx. 45 °

  • Stair Climbing Capability

    30cm

    30cm

  • Max Climb Height

    Approx. 0.4m ~ 0.8m

    Approx. 0.4m ~ 0.8m

  • Speed

    0~3.7m/s (Max Approx. 6m/s)

    0~3.7m/s (Max Approx. 6m/s)

  • Protection Rating

    IP54

    IP54

Accessories

  • Remote Controller

    Optional

    YES

  • Battery Capacity

    Long Range (15000mAh) x1

    Long Range (15000mAh) x1

  • Charger

    Faat Charging(50.4V 7.4A)

    Faat Charging(50.4V 7.4A)

  • Charging Dock

    /

    /

  • High Computing Power Expansion Dock

    /

    Multiple brands and models available

    Orin NX, etc.

Other

  • Secondary Development

    Supported

    Supported

  • UniStore Platform

    Supported

    Supported

  • Smart OTA Upgrade

    Continuous Upgrades

    Continuous Upgrades

  • Warranty

    12 Months

    12 Months

[1]

The above data was obtained under laboratory conditions. Actual performance may vary based on usage conditions, so please refer to your actual experience.

[2]

For detailed functions, please refer to the Secondary Development Manual.

[3]

For detailed warranty terms, please refer to the Product Warranty Manual.

[4]

Only supported for mainland China version.

[5]

The above parameters may vary in different application scenarios and different configurations, please contact sales before purchasing.

[6]

This quadruped robot has a complex structure and powerful dynamics. Users must keep a safe distance from the robot at all times. Please use with caution.

[7]

The product appearance is subject to change. Please refer to the final product.

[8]

Some example features shown on this page are under development and testing, and will be made available to users gradually.

This product is a civilian robot. We kindly request that all users refrain from making any dangerous modifications or using the robot in a hazardous manner.

Please visit Unitree Robotics Website for more related terms and policies, and comply with local laws and regulations.

The Daily Front Page 10 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — India Reaches Orbit
article

India's first privately-developed rocket reaches orbit on debut launch

by sohkamyung·▲ 572 points·164 comments·arstechnica.com ↗
“On the first attempt, reaching orbit, I never thought it was possible.”

“On the first attempt, reaching orbit, I never thought it was possible.”

V. Narayanan, chairman of the Indian Space Research Organization (second from left), and Pawan Kumar Chandana, CEO of Skyroot Aerospace (second from right), pose with a replica of the Vikram-1 rocket along with other senior Indian space officials following a successful launch Saturday at the Satish Dhawan Space Center on Sriharikota Island, India. Credit: R. Satish Babu/AFP via Getty Images

Indian space officials celebrated the debut flight of Skyroot Aerospace’s Vikram-1 rocket, India’s first fully commercial satellite launcher, as a “grand success” Saturday after an on-target climb into a 280-mile-high orbit following liftoff from an island spaceport in the Bay of Bengal.

The Vikram-1 lifted off from India’s primary spaceport on Sriharikota Island at 1:35 am EDT (06:35 UTC) Saturday, around midday at the launch base along India’s southeast coast. The launch was delayed more than a half-hour to resolve a last-minute technical problem. The countdown resumed, culminating in the command to ignite Vikram-1’s solid-fueled first stage booster to propel the rocket off the launch pad.

Vikram-1 is modest in size compared to India’s larger workhorse rockets. Skyroot’s rocket stands about 72 feet (22 meters) tall, with the capability to place payloads of up to 770 pounds (350 kilograms) into low-Earth orbit. This makes Vikram-1 somewhat larger than the Electron launch vehicle developed by Rocket Lab, the world’s most successful dedicated small satellite launcher.

The flight Saturday went off without any major problems. Three solid-fueled rocket motors fired in succession to reach space, then a small liquid-fueled fourth stage ignited and accelerated to orbital velocity, some 17,000 mph. Live views from onboard cameras showed each phase of the launch sequence.

The only sign of anything unusual came during the separation of the rocket’s third stage from its fourth stage. The spent third stage motor appeared to remain near the fourth stage during a brief coast, rather than backing away to a greater distance. Nevertheless, the fourth stage did its job, firing its 3D-printed engine to reach an orbit approximately 280 miles (450 kilometers) high at an inclination of 60 degrees to the equator, quite close to preflight predictions, according to Skyroot Aerospace. US military tracking data confirmed the rocket’s successful arrival in orbit.

Skyroot Aerospace’s Vikram-1 rocket lifts off Saturday from the Satish Dhawan Space Center on Sriharikota Island, India.

Credit: R. Satish Babu/AFP via Getty Images

Beating the odds

“We achieved one of the biggest milestones ever in India’s space sector—the first private orbital rocket reaching orbit on the very first attempt,” said Pawan Kumar Chandana, Skyroot’s cofounder and CEO, in remarks to the company’s launch team. “It still feels like a dream, and you all made this dream happen.”

The first flights of new private orbital-class rockets don’t have a great track record. It took SpaceX four tries before reaching orbit with the Falcon 1 rocket for the first time in 2008. Rocket Lab’s Electron didn’t make it to orbit on its first launch in 2017. Blue Origin beat the odds with the inaugural flight of its heavy-lift New Glenn rocket in 2025, but the company’s engineers had previous experience with numerous launches of the smaller New Shepard suborbital rocket.

“On the first attempt, reaching orbit, I never thought it was possible,” Chandana said. “Skyroot’s team made it possible. A big, big, big shoutout to this phenomenal team, which made it happen. In fact, this launch was nothing short of a suspense movie.”

Skyroot officials set humble goals for the first launch of Vikram-1. In a press kit released before the flight, the company said its primary objective for the launch was to complete a successful liftoff, clear the tower at the launch site, and gather maximum data during ascent.

“The mission objective was only to lift off and clear the tower,” said Pawan Goenka, chairman of IN-SPACe, a government organization set up in 2020 to promote India’s commercial space industry. “That was only about 100 meters, but what we went to was 450 kilometers, and it also released all the satellites that were supposed to release. So the mission was absolutely perfect.”

Skyroot Aerospace’s Vikram-1 rocket on its launch pad.

Credit: ISRO

In a statement, the Indian space agency, ISRO, said it offered “handholding and support” to the Skyroot venture by providing access to solid rocket motor casting and test facilities at ISRO’s spaceport on Sriharikota. ISRO also allowed Skyroot to launch from one of its two active launch pads.

Painted blue and white, the Vikram-1 is made of lightweight carbon composite materials and is named for the Indian physicist Vikram Sarabhai, considered the father of the Indian space program. Skyroot successfully launched a suborbital rocket, Vikram-S, to an altitude of nearly 300,000 feet (90 kilometers) in November 2022.

The Vikram-1 builds on lessons learned with Vikram-S. Skyroot’s future roadmap includes the Vikram-1U, with additional strap-on solid rocket boosters to haul heavier payloads, and the Vikram-2, which will debut a cryogenic upper stage to reach a payload capacity of 2,000 pounds (900 kilograms) to low-Earth orbit. The initial purpose of the Vikram rocket family is to “deliver dedicated and responsive launch services for small satellites,” Skyroot officials wrote in the press kit for Saturday’s mission.

But the company has loftier ambitions. In an interview ahead of the first Vikram-1 launch, Chandana told Ars his aspiration for Skyroot involves larger liquid-fueled fully reusable rockets, with a “daily cadence” from multiple countries.

Skyroot will need a lot more funding to realize that dream, but Saturday’s launch showed the company has ingredients required for a successful launch company. Saturday’s launch vaulted Skyroot to a plane above any other space startup in India, or, for that matter, in any country outside of the United States and China. Skyroot has, so far, raised approximately $160 million in capital, bringing the company’s valuation to $1.1 billion. Skyroot now has more than 1,000 employees, mostly working out of the company’s headquarters in Hyderabad. The average age of Skyroot’s workforce is 28 years old.

This view of the payload deck of the Vikram-1 rocket’s upper stage was captured moments after orbital insertion Saturday. The rocket deployed two small CubeSats and hosted several more payloads that remained attached to the upper stage.

Credit: Skyroot Aerospace

Skyroot’s breakthrough launch comes as India’s government, led by Prime Minister Narendra Modi, seeks to supercharge the country’s space industry. India has long had a robust space program, with government-developed rockets such as the Polar Satellite Launch Vehicle and the larger LVM3 often attracting commercial customers from the United States and Europe. India became the fourth country to successfully land a spacecraft on the Moon in 2023, and is working on an oft-delayed human-rated crew capsule to fly astronauts to low-Earth orbit.

Modi has told the Indian space industry to increase its annual launch total from about five launches per year to 50 before the end of the decade. The prime minister called Chandana and congratulated the Skyroot team after Saturday’s launch.

“This is a defining moment in India’s space journey,” Modi said in a statement. “The growing participation of our private sector is opening new frontiers and accelerating innovation. This achievement will encourage countless youngsters to dream bigger and innovate fearlessly.”

Chandana, a former engineer at India’s space agency, founded Skyroot in 2018 with another ISRO scientist, Naga Bharath Daka. They decided to focus on developing a solid-fueled launcher first, optimizing for what Chandana described as the lowest development time and the lowest cost per launch. “We wanted to get to an orbital launch vehicle in a few years,” Chandana told Ars.

“It’s a test launch,” he said at the time. “Statistically, the first launch from a private company almost always fails. It’s very difficult to succeed with all new systems. But I think we have done everything we can do to ensure the first launch goes well.”

Indeed, the first launch went very well, exceeding all expectations. A second Vikram-1 launch could happen before the end of the year, Chandana said.

“This is a 100 percent designed in India rocket, a 100 percent made in India rocket, built by 100 percent Indian people, for India and for the world,” Chandana said after the launch Saturday. “This was a historic moment for India, but also a very proud moment for the global space sector because the world needs more access to space.”

The Daily Front Page 11 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — The Camera That Leaked the Keys
article

My security camera shipped a GitHub admin token in its login page

by hhh·▲ 562 points·188 comments·hhh.hn ↗
“My security camera shipped a GitHub admin token in its login page”

i have been thinking a bit more about security cameras again, because of AXIS starting to push more for every one of their cameras to be able to easily run linux applications on them, they're far more serious targets in an enterprise environment and need to be managed as such for vulnerabilities and credential management etc. someone brought up to me a company that sounded new to me, Hanwha (Vision.) I took a look at the site, and found that they had accessible firmware blobs for each model of camera, which is always a treat.

poking and prodding

i took the image and threw it at binwalk hoping it was just a rootfs or something, but inside there was a separate tarball with some AI stuff for the camera and a fwimage.tgz that binwalk was flagging as encrypted.

I was googling around and saw that Matt Brown has a writeup on these cameras that got me through. basically the passphrase is HTW + the model number so HTWXNP-9300RW worked.

seems like they do some more stuff now, because inside of that tarball was another fwimage.tgz that was encrypted but it wasn't the same scheme, so we can't just re-use the same setup from Matt Brown. I kinda figured I was gonna have to give up and that Hanwha was doing something more advanced, like burning a key into the hardware (which isnt foolproof obviously but you at least need to own the camera to start.) Anyways, there was a fwupgrader binary that was in that outer tarball, so I threw it into ghidra and started poking around.

well I would have been poking around if it was 2023 or something, but i pointed claude code at it and went to make a lovely dinner and spent time with my partner instead, and came back a bit later to a description and a nice rootfs.

Hanwha had built some obfuscation into the fwupgrader to hide how they decrypt the actual rootfs. the AES key is XOR'd against a small static key table in the binary and reassembled at runtime ( the IV is just plaintext in there) the fwupgrader just shells out to the openssl CLI, and even the command fragments are XOR-obfuscated the same way.

reconstructed the command looks like this:

openssl enc -md sha256 -aes-256-cbc -d \
  -K <KEY> -iv <IV> -in <INPUT> -out <OUTPUT>

Since the key and iv are just hardcoded (the same across the model line), I will publish them here:

KEY = dfa049bb922e63e2decc764af5628068e5b7a2662e479a615b14643e567579b0
IV  = 53f926801b81454a4f889c9a390db6e6

and with that we have a full rootfs to dig into normally.

truffles

since we finally can just look at stuff I ran trufflehog immediately to see if there was anything obvious, and there was a github token duplicated in like 30 files... I checked what repos the token had access to, and it had admin privileges to hundreds of repositories in their github organization.

this isn't my first rodeo with an org shipping a Github token in their firmware though... but that's a story for a different blog post. Why would this org put this token in like 30 files though? it looks like they build the UI for these cameras with vite, and one of the variables is being set to the entirety of process.env at build time, which means the entirety of the CI job's environment is being written to these files.

var W = {
  DATAPORT: "9090",
  GIT_LFS_SKIP_SMUDGE: "1",
  npm_command: "run-script",
  KUBERNETES_SERVICE_PORT_HTTPS: "443",
  GITHUB_NPM_TOKEN: "<snip>:ghp_…REDACTED…",
  npm_config_userconfig: "/home/docker/.npmrc",
  // etc

I don't have any of these cameras to test, but I think this would mean that anyone accessing the admin ui of these cameras likely has had this github token sent to them over the wire and (hopefully) nobody evil noticed. Maybe it didn't get actually served and just lived on disk, though.

there were some other... interesting bits of data in the environment though: there were some env vars with IP addresses in them, but they are assigned to the US Department of Defense:

huh... is this just a coincidence and one of those weird instances where people have taken IP space for internal services when they know they will never interact with it (insane practice btw...) or is Hanwha more directly tied with the US DoD?

let's look at the wikipedia page for Hanwha Vision:

Hanwha Vision (Korean: 한화비전), founded as Samsung Techwin, is a video surveillance company. It is a subsidiary of Hanwha Group.

Former products

K9 Thunder self-propelled artillery, K10 ammunition resupply vehicles, sub-systems for K2 Black Panther, sentry gun robot SGR-A1.

oh... okay.... I remember reading about the SGR-A1 when I was in high school, but I never thought I would be accidentally finding keys to the kingdom of the manufacturer on the ground later in my career... my life is kinda weird sometimes...

SPECULATION WARNING

even still, these aren't American devices, or anything like that. Why would Hanwha Vision need anything remotely related to the DoD? Is it possible that their CI is provided by some centralized team at their parent company Hanwha, where the needs of their sister company Hanwha Aerospace cause the shared platform to have these entries in the CI environment variables? Or maybe because of their other sister company, Hanwha Defense USA, where they make other large scary steel machines

K9 Moukari Self-Propelled Howitzer, made by Hanwha Defense USA

a little extra digging

I wanted to make sure this wasn't some kind of fluke, and that there weren't hundreds of other different github tokens in their firmware, so I scraped the Hanwha website to download every firmware for every camera i could find, and ended up with around ~500 firmwares (there were like 600 smth cameras but not all of them had firmware listed) and I was able to extract 62% of them with the same approach as above, and only three of them had github tokens, and they were all the same token.

not really sure why the others didn't work, but it's close enough for me to feel satisfied.

disclosure

I wrote up a very small email with enough information to identify where the token was and sent it over to Hanwha, who have a nice open email for reporting security issues, and they responded within 12 hours notifying me that the token had been revoked. Sure they shouldn't have ever had a gh token in there but I have never had such a prompt response and resolution.

we really gotta stop making these mistakes so often, how am I supposed to be sleeping at night?

thanks computer, until next time

The Daily Front Page 12 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Clouds Over Bahrain
article

IRGC claims it destroyed Amazon's Bahrain data center

by thisislife2·▲ 279 points·340 comments·houseofsaud.com ↗
“IRGC Claims It Destroyed Amazon’s Bahrain Data Center”

Data center server hall with rows of rack-mounted servers — the type of hyperscale infrastructure targeted by IRGC cruise missiles in Wave 24

IRGC claims cruise missile strike destroyed AWS Bahrain data center in Wave 24, citing Darkhovin nuclear plant as casus belli. Third strike on same facility since March.

MANAMA — The Islamic Revolutionary Guard Corps claimed on July 21 that it struck and destroyed Amazon Web Services’ data center in Bahrain with cruise missiles, in stated retaliation for the US strike on Iran’s Darkhovin nuclear power plant two days earlier. The claim, carried by IRNA, Tasnim, and Iran International but unconfirmed by Amazon or CENTCOM, would mark the first use of cruise missiles against commercial cloud infrastructure in the Gulf conflict and at least the third kinetic action against the same AWS facility since March.

The IRGC packaged the data center strike alongside claimed hits on US air-defense radar at Muharraq and a Patriot battery at Riffa, treating Amazon’s commercial cloud as operationally equivalent to the military systems defending Bahrain’s airspace. For Saudi Arabia, which launched its own in-kingdom AWS region in Riyadh six months before the war began and still carries legacy workloads in Bahrain, the targeting logic the IRGC applied to a building twenty-five kilometres across the causeway now covers every piece of US-branded digital infrastructure in the Gulf — from Aramco’s cloud-integrated operational technology to NEOM’s planned 1.5-gigawatt data center campus.

Manama, Bahrain — modern commercial skyline showing high-rise towers in the capital's financial district, twenty-five kilometres from the Saudi causeway

Manama’s commercial district, where the Bahrain Financial Harbour and high-rise towers mark the Gulf’s most compact concentration of regional corporate headquarters. AWS ME-South-1, operational since July 2019, sits within the metropolitan area and was the primary cloud hub for Gulf enterprise and government customers until the war began. Photo: Zairon / Wikimedia Commons / CC BY-SA 4.0

The Wave 24 Strike Package

The IRGC’s public relations office stated that its Aerospace Force, “in continuation of the 24th wave of Operation Nasr-2, in response to the aggression and violation by the child-killing American army against the under-construction and civilian facilities at Darkhovin, attacked the central data infrastructure of the American company Amazon in Bahrain with several cruise missiles and destroyed it.” The statement was distributed through Mehr News Agency and Tasnim on July 21, 2026, and reported by Euronews, Iran International, and Data Center Dynamics.

The AWS claim was not isolated. IRNA reported that the same wave included a strike on a US radar station at Muharraq and a combined missile-and-drone attack on a US Patriot air-defense system at Riffa — both in Bahrain. The combination matters: by suppressing air-defense installations and striking the commercial target in a single coordinated operation, the IRGC treated a data center as a military-grade objective warranting the same operational planning it applied to radar and interceptor batteries.

The IRGC provided no strike imagery. The stated justification — the US attack on Darkhovin — marked the first time the Guard had linked a commercial infrastructure strike explicitly to a nuclear facility.

Why Did the IRGC Cite Darkhovin?

The IRGC linked the AWS strike directly to the US attack on Iran’s Darkhovin nuclear power plant, which the Atomic Energy Organization of Iran said occurred at approximately 3:39 a.m. local time on July 19, 2026. CENTCOM confirmed it had completed strikes on Iranian military infrastructure on the evening of July 18 Eastern time, with the Darkhovin site appearing in a target package that also included coastal surveillance facilities, naval assets, and IRGC positions. The interval between the Darkhovin strike and the IRGC’s AWS claim was approximately forty-eight hours.

Darkhovin is an indigenously designed 360-megawatt nuclear power plant in Khuzestan province, roughly seventy kilometres south of Ahvaz on the Karun River. Construction restarted in December 2022, with an estimated cost of $1.5 to $2 billion over eight years, and the IAEA confirmed the site contained no nuclear material and posed no radiological risk at the time of the strike. Iran’s AEOI condemned the attack as “a violation of international law and an assault on a symbol of the country’s scientific progress,” and Iran’s UN Ambassador Amir Saeid Iravani demanded the Security Council issue a formal condemnation.

NASA ISS satellite view of Khuzestan province, Iran, showing the Karun River near Ahvaz — Darkhovin nuclear power plant lies seventy kilometres south of Ahvaz on the same river

Khuzestan province, Iran — photographed from the International Space Station. The Karun River snakes through the arid province toward the Persian Gulf; Darkhovin’s 360-megawatt nuclear power plant sits roughly seventy kilometres south of Ahvaz on the same river corridor. The IAEA confirmed no nuclear material was on site at the time of the US strike. Photo: NASA Earth Science and Remote Sensing Unit / Public domain

The retaliation framing establishes a new escalation tier within Operation Nasr-2. The IRGC’s previous twenty-three waves were presented as responses to US strikes on military targets — bases, radar installations, ships, and IRGC positions. Wave 24’s explicit linkage to a nuclear facility, even one under construction with no fissile material on site, introduces a different stated principle. Under it, any US strike on Iranian nuclear infrastructure — regardless of the site’s operational status or radiological content — authorizes retaliatory strikes on US commercial infrastructure anywhere in the Gulf. The IRGC has now applied that principle to the same Bahrain facility three times in five months.

How Many Times Has AWS Bahrain Been Struck?

The July 21 claim marks at minimum the third distinct IRGC attack on AWS infrastructure in Bahrain this year, with a fourth strike hitting Batelco’s headquarters in Manama — which houses AWS infrastructure — in early April. The escalation is not just in frequency but in lethality: the campaign opened with drones in March, progressed to missiles against adjacent infrastructure in April, and — if the July claim is accurate — has now reached cruise missiles aimed at claimed destruction rather than disruption.

Date Target Method Confirmed Impact
March 1 AWS ME-SOUTH-1 (plus AWS UAE) Shahed drones Structural damage, fires, power outages; multiple AZs offline 24+ hours
Late March AWS ME-SOUTH-1 Drones Further power outages, water shortages; AWS told all ME customers to migrate
April 1 Batelco HQ, Manama (hosts AWS) Missiles Fire and structural damage to building housing AWS infrastructure
July 21 AWS ME-SOUTH-1 Cruise missiles (claim) IRGC claims complete destruction; unconfirmed

The March 1 strike was the first kinetic attack on hyperscale cloud infrastructure in wartime, according to Data Center Dynamics and CNBC. Amazon confirmed structural damage, fire, and water damage from fire suppression at its Bahrain facility, with multiple Availability Zones going offline for more than twenty-four hours. Banking services across the Gulf went down with it — Abu Dhabi Commercial Bank, Emirates NBD, First Abu Dhabi Bank, the payments platforms Hubpay and Alaan, and Careem, the ride-hailing company that serves thirty-three million customers in fourteen countries, all reported service interruptions.

AWS’s response was without precedent for a hyperscaler: the company waived all usage charges for its ME-CENTRAL-1 region for March and told customers that full restoration of its Bahrain and UAE regions would “take several months,” offering migration assistance to alternate regions. As of late April 2026, thirty-one AWS services in the two regions remained listed as disrupted, according to Network World. The IRGC’s July cruise missile claim, if accurate, means the Guard struck a facility that Amazon had not yet finished repairing from the spring.

The IRGC’s Expanding Commercial Target List

The AWS strikes did not emerge from an improvised targeting decision. On March 31, 2026, the IRGC formally declared eighteen US technology companies “legitimate military targets” — Amazon, Microsoft, Google, Apple, Meta, Oracle, Intel, HP, IBM, Cisco, Dell, Nvidia, Palantir, Tesla, Boeing, General Electric, JPMorgan Chase, and G42, the Abu Dhabi-based AI firm — and urged anyone within one kilometre of their Gulf facilities to evacuate, according to CNBC and Time. The declaration converted a battlefield reality into standing doctrine: a named list, a stated legal rationale grounded in dual-use classification, and a demonstrated willingness to execute.

The Center for Strategic and International Studies assessed in March 2026 that Iran’s operational target list had expanded to twenty-nine technology facilities across Bahrain, Israel, Qatar, and the UAE — five AWS sites, five Microsoft, six IBM, four Google, three Nvidia, three Oracle, and three Palantir. Dennis Murphy, a researcher at Georgia Tech, described commercial data centers in The Conversation on April 1 as “large, relatively fragile and lack dedicated air defenses,” calling them high-value targets that the Gulf’s six-hundred-billion-dollar AI infrastructure build-out “never adequately priced into its risk models.”

Server rack aisle in a commercial data center — the IRGC's March 2026 drone strikes caused structural damage, fires, and power outages to AWS infrastructure across Bahrain and UAE

Server racks in a commercial data center facility — the physical infrastructure that the IRGC formally designated a legitimate military target on March 31, 2026, naming twenty-nine technology facilities across Bahrain, Israel, Qatar, and the UAE. Dennis Murphy, a researcher at Georgia Tech, described data centers as “large, relatively fragile and lack dedicated air defenses.” Photo: Brett Sayles / Pexels / Pexels License (free to use)

Nothing stays hidden to our sight, though hidden by Google.

IRGC Brig. Gen. Ebrahim Zolfaghari, on-screen message accompanying satellite imagery of OpenAI’s $30 billion Stargate campus in Abu Dhabi, April 3, 2026

Zolfaghari’s demonstration, reported by Small Wars Journal and Arizona State University, indicated that the IRGC’s targeting pipeline now includes planned and under-construction digital infrastructure — not just operational sites with live data and active customers. The category covers NEOM’s $5 billion DataVolt hyperscale data center campus in the Oxagon industrial zone, Aramco’s cloud-dependent digital strategy, and any future AWS expansion in the kingdom, all of which exist at varying stages between announcement and operation.

What Does This Mean for Saudi Arabia’s Cloud?

Saudi Arabia’s direct exposure to the Bahrain strikes is a consequence of timing. AWS me-central-2, the in-kingdom region based in Riyadh, reached general availability in January 2026 with three Availability Zones and a $5.3 billion Amazon investment commitment — but general availability is not the same as complete migration. Enterprises that spent seven years building workloads on ME-South-1 in Bahrain cannot relocate them to Riyadh with a configuration change, and the war began before most had started the process.

The scale of Saudi cloud dependency registers at national level. Cloud spending in the kingdom exceeded SAR 15 billion, approximately $4 billion, in 2025, growing at more than 25 percent annually according to industry estimates. Aramco CEO Amin Nasser described AWS as a core pillar of a $90 billion US technology deal package signed in 2025, and the company has integrated cloud and AI tools across refining, logistics, and sustainability operations, with a separate MOU with the industrial cybersecurity firm Dragos to protect its OT environments — an acknowledgement of vulnerability that does not constitute a defence against cruise missiles.

The competitive dynamic is already visible. Huawei Cloud posted on its Gulf regional account in March 2026 that “single-region dependency is a thing of the past” and has been pitching multi-cloud resilience to Gulf clients displaced by the strikes, according to Rest of World. The IRGC’s declared target list names only US companies, a gap that Huawei’s regional sales teams have treated as a commercial advantage — though the assumption that Chinese infrastructure would remain permanently exempt from the same targeting carries its own category of geopolitical risk.

Background

Operation Nasr-2 is the IRGC’s designation for its retaliatory campaign against US military and commercial infrastructure across the Gulf, launched in response to the US-Iran military confrontation that escalated into sustained operations in 2026. The campaign has progressed through twenty-four declared waves, expanding sequentially from fixed military installations to logistics hubs, energy infrastructure, desalination and electrical capacity, and — since March — digital infrastructure. The July 21 strikes coincided with ongoing US operations including CENTCOM’s Night Ten strikes on Bandar Abbas and the broader closure of maritime lanes around the Arabian Peninsula.

AWS ME-South-1 opened in Bahrain on July 30, 2019 as Amazon’s first cloud region in the Middle East, operating three Availability Zones with independent power, cooling, and networking across the Manama metropolitan area. The region supported 146 AWS services and served as the primary cloud hub for Gulf enterprise and government customers until AWS launched me-central-2 in Saudi Arabia in January 2026. AWS’s Middle East operations were estimated to generate $1.5 to $2.5 billion annually before the conflict began.


Frequently Asked Questions

Has Amazon confirmed the July 21 strike on its Bahrain data center?

No. As of publication, Amazon Web Services had issued no public statement on the IRGC’s July 21 claim, and neither the Bahraini government nor CENTCOM had confirmed or denied any element of it. Amazon’s most recent public statement on its Gulf operations, from April 2026, said restoring the Bahrain and UAE regions would “take several months” following the March strikes — leaving open the possibility that the facility was still under repair, partially operational, or offline when the July attack was claimed.

Which AWS services does the Bahrain region host?

ME-South-1 supported 146 AWS services including EC2 compute instances, S3 object storage, RDS managed databases, Lambda serverless computing, and SageMaker machine learning tooling. Saudi government platforms, financial institutions, and enterprise workloads built on these services between 2019 and January 2026 were architected for Bahrain’s specific Availability Zones, compliance certifications, and network peering arrangements — migrating them to the Riyadh region requires re-architecture, re-certification, and contract renegotiation, a process measured in years rather than months.

What is the difference between a drone strike and a cruise missile strike on a data center?

The March 2026 attacks used Shahed-series drones, which travel at roughly 150 to 185 kilometres per hour and carry warheads between 30 and 50 kilograms — enough to damage exterior structures, trigger fires, and disrupt power systems, but not to destroy hardened infrastructure in a single pass. Cruise missiles typically carry warheads of 450 to 700 kilograms at subsonic or near-sonic speeds, making them harder to intercept and capable of penetrating reinforced structures. The escalation from drones to cruise missiles suggests the IRGC concluded that drone-level damage was being repaired between strikes and that permanent degradation of the target required a higher-yield weapon.

Could the IRGC target the AWS region in Riyadh?

The IRGC’s March 31 target declaration named Amazon Web Services as a company without distinguishing between cloud regions or geographies. CSIS identified five AWS facilities on the expanded target list in March 2026 but did not publicly specify whether the Riyadh region, which had been operational for only two months at the time of the assessment, was among them. Riyadh sits approximately 800 to 850 kilometres from Iranian launch positions, within the range envelope of the IRGC’s Fattah-2 hypersonic missile and the Zolfaghar ballistic missile family — the same threat range that has already placed Prince Sultan Air Base inside the conflict’s targeting geography.

The Daily Front Page 13 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Postgres Rings the Bell
article

Postgres LISTEN/NOTIFY actually scales

by KraftyOne·▲ 280 points·51 comments·dbos.dev ↗
“‘unintuitive behavior’ is not the same as ‘not scalable’”

Postgres LISTEN/NOTIFY has a bad reputation thanks in part to a popular blog post asserting it does not scale. If that were true, it would be a shame, because LISTEN/NOTIFY is a powerful tool, allowing you to use your Postgres database for low-latency durable notifications, streams, and pub/sub. The accusations aren’t wrong: NOTIFY has unintuitive and undocumented performance characteristics arising from its use of a global lock. But “unintuitive behavior” is not the same as “not scalable.” In this blog post, we’ll show how we optimized LISTEN/NOTIFY-backed streams at scale, achieving 60K writes per second on a single Postgres server with millisecond-scale latency.

Low-Latency Streaming with LISTEN/NOTIFY

The basic design of Postgres-backed streams is simple: create a streams table where each stream chunk (for example, an LLM response token) is a new row, then write to streams by inserting into the table.

The tricky part is reading from the stream because you don't know when the next chunk will arrive. One solution is polling: have each reader poll the end of the stream for new chunks. However, polling scales poorly. If the polling interval is set too high, latency is too high for interactive use-cases (e.g., online chats). But if the polling interval is set too low, concurrent pollers overwhelm the database.

The better solution is LISTEN/NOTIFY. This allows readers to block waiting for a notification from a writer that a new chunk has been published to the stream. That way, readers don’t waste resources polling, but wake up immediately when a new stream chunk arrives.

In our initial implementation of LISTEN/NOTIFY-based streams, a trigger on the streams table fired a function that sent a notification every time a new stream chunk was written. Readers waited for these notifications and woke up to a new stream chunk.

This implementation was correct and delivered low latency, but at scale its throughput was poor. Even using a large Postgres database, it could not sustain more than 2.9K stream writes per second. Interestingly, it bottlenecked without visibly consuming any Postgres resource (CPU, memory, or IOPS). As you may have guessed, the root cause was the original “LISTEN/NOTIFY is not scalable” issue: a global lock Postgres takes during NOTIFY. But why does Postgres do that, and how can we optimize it without losing the benefits of Postgres notifications?

The LISTEN/NOTIFY Exclusive Lock

To understand the problem, we’ll need to examine how Postgres LISTEN/NOTIFY actually works.

The root cause of the poor performance is that in Postgres, committing a transaction that calls NOTIFY requires taking a global exclusive lock. This lock is taken as the transaction begins to commit, and is not released until the transaction is fully committed and its contents have been flushed to disk with fsync().

This lock is necessary because Postgres guarantees that notifications are sent in transaction commit order. To enforce this, it stores all outgoing notifications in a global internal queue whose order must exactly match the commit order of the transactions sending those notifications. Adding notifications to this queue must be done transactionally as part of the commit. However, Postgres doesn’t assign transactions a commit order until those transactions are done committing, as committing can take a variable amount of time.

This creates an ordering problem: transactions containing notifications must add themselves to the queue in commit order, but commit order isn’t defined until the commit is complete. The solution is the global lock, which serializes commits of transactions containing notifications, so their commit order is defined ahead of time and they can correctly order themselves in the internal notifications queue. 

This exclusive lock explains the poor performance we observed. Because we call NOTIFY from a trigger on the streams table, every stream write includes a call to NOTIFY. In order to commit, each stream write needs to take the global lock and hold it for the entire duration of its commit, including the flush to disk. This means that stream writes need to commit sequentially, precluding Postgres’s usual optimizations like group commit (which commits many transactions together in a single fsync()). As a result, stream writes can complete no faster than Postgres can commit transactions, which leads to this bottleneck. This also explains why we did not see significant consumption of any Postgres resource such as CPU or disk: there wasn’t any, because all transactions were serialized by a global lock.

As an aside, there’s been some online discussion of a Postgres patch related to this issue. This patch (to be released in Postgres 19) does not remove the global lock or fix the bottleneck we observed. Instead, it optimizes the narrower case where there are many notification channels and each listener is waiting only on a specific channel.

Optimizing LISTEN/NOTIFY

To make LISTEN/NOTIFY-backed streams faster, we have to work around this bottleneck. The key observation is that for streams, and for many other applications of LISTEN/NOTIFY, the notifications aren’t themselves a source of truth. Instead, they just ping a reader to check a database table (the real source of truth) for new data. As a result, notifications don’t have to be globally ordered or perfectly durable, so we can optimize NOTIFY by buffering notifications in memory and periodically flushing them in a single batch transaction, significantly reducing contention on the global lock.

Buffering and batching NOTIFYs avoids the bottleneck because the global lock only needs to be taken when the buffer is flushed, not for each individual stream write. This means that individual stream writes can proceed quickly, taking advantage of Postgres optimizations like group commit to obtain high throughput, while the buffer flushes in the background.

Adopting a buffer introduces a new complication, which is that a process crash while notifications are buffered leads to those notifications never being delivered. To solve this issue, we add a fallback to stream readers: in addition to waiting for notifications, they also periodically poll the database to check if the stream was written to without a notification. The frequency of this polling can be low (because it is only a fallback for undelivered notifications), so it does not significantly affect performance.

Benchmarking this optimized solution, we see massively improved performance: in the presence of concurrent readers, we can perform up to 60K stream writes per second (20x more than before) while still obtaining 15-100ms latency. At maximum throughput, Postgres CPU is fully utilized, showing the database is actually saturated instead of bottlenecked on contention.

Learn More

All benchmark code is available on GitHub: github.com/dbos-inc/dbos-postgres-benchmark

If you like building scalable, reliable systems, we’d love to hear from you. At DBOS, our goal is to make Postgres-backed durable execution as simple and performant as possible. Check it out:

The Daily Front Page 14 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Silicon on a Shoestring
article

Designing an Ethernet Switch ASIC

by random__duck·▲ 165 points·43 comments·essenceia.github.io ↗
“I have just built the world’s first open source switch ASIC”

It seems I have just built the world’s first open source switch ASIC and I am getting it back from the fab mid november.

Switch floorplan render with area density view enabled, occupying 711.2 x 325um of area. The first version of this chip is currently taped out on the Tiny Tapeout gf26b shuttle chip, part of the second wafer.space run. Silicon bring-up is expected to start 2026-11-15.

Here is its repository :

Essenceia/ethernet_switch_asic

Open source sillicon for a 100Mbps unmanaged cut-through ethernet switch.

Verilog

9

0

Buckle up and welcome to the tale of more madness.

Recommended soundtrack for reading: Taishi - Reverie for Another Sphere

Where are the open source networking ASICs?

Recent FCC decisions have put the central importance of networking equipment top of mind, and in doing so, have also put the total absence of any entirely open source networking equipment hardware at the top of my mind.

Although Open Source Silicon is in its infancy we are currently seeing a number of projects being designed, tested, and for the most ambitious ones, even taped-out with some proven silicon already in the wild.

Awesome Kian-V project, a silicon proven RISC-V SoC fabbed on wafer.space run 1. And yes, it runs Linux. Link to the original post.

That said, the vast majority of the most ambitious projects are predominantly RISC-V SoCs.

Surprisingly, there has been much less interest in building open hardware for networking equipment.

Well .. unsurprisingly actually … networking equipment is far less “sexy” than CPUs and has thus received much less attention from the open source community. On the other hand, this means there’s a huge untaped boulevard of projects open to anyone with more time than common sense to build open source networking equipment chips!

Because, on the other side of the great silicon divide, the world of open source networking equipment is actually quite rich, both in terms of its flourishing software ecosystem and the open PCB/electronics ecosystem, with a flurry of fully featured open source routers available. Yet, due to the current ecosystem’s limitations, under the hood, these are all still all running closed-sourced, blackbox proprietary chips for the central compute and routing tasks.

So what would it take to build a router chip?

It’s a very ambitious project, since a router involves a complex SoC needing both a powerful enough CPU to run the networking stack alongside specialized networking hardware, and analog frontends for the wired and wireless connections. Since building a full router outright is much too ambitious of a greenfield project for a single person to ever hope to pull off, let’s begin with a more approachable first step: building a switch. After all, although most people only have one router, you can have a number of smaller switches, and we also don’t have any open source chips for those.

Oh and, I am not talking about building an FPGA switch, oh no, I am talking about building a switch ASIC, taping it out and then proving the silicon works.

Switch Flavors

Before we start figuring out what kind of switch we want to build, let me give you a quick overview of the different flavors of switches out there. Readers deeply familiar with networking equipment can skip this part.

Glossary

Physical Layer

Ethernet supports multiple physical layers, outlined in the 802.3 IEEE spec. Each clause in the spec defines the underlying medium characteristics for carrying the Ethernet protocol over the medium at a given bandwidth.

Both a 10 Gb fiber Ethernet link and a 10 Mb coaxial cable can carry Ethernet packets and, to the layers above the physical layer, the packets will look exactly the same.

Where they will differ is at the physical layer and, outlined in the spec is precisely how, with which timing and with what encoding data will be transmitted over the medium.

This ensures that devices made by different manufacturers agree on what “talking Ethernet” looks like, making them interoperable.

So one of the first questions I must answer is which physical layer my switch should support. This will define how much traffic I must route, how fast I should do so and how much bandwidth I can carry.

Managed vs Unmanaged

The second question is: what type of switch do I want to build?

There are two big families of switches: managed and unmanaged. As the name implies, managed switches can be configured and managed from the outside. This allows for much smarter routing, such as supporting different VLANs.

While unmanaged switches are essentially unconfigurable pieces of networking equipment that you plug into your network and just work (until power surge do you part).

Cut-through vs Store-and-Forward

The last switch characteristic is cut-through versus store-and-forward.

Cut-through switches start forwarding a packet while the packet is still arriving, leading to much lower networking latency, whereas store-and-forward switches wait for the entire packet to arrive before checking that no corruption has occurred, and then only forward the packet if that check passes.

Where issues arise is when a packet is corrupted, a cut-through switch might still forward it, propagating corrupted packets through the network since forwarding began before the FCS (frame check sequence) could be checked.

Designing against constraints (again)

As usual with my ASIC design work, what I build is shaped as much by what I want to build as it is by the constraints of the silicon.

Pins

My first major constraint is the pins: not only in their amount but also in their maximum bandwidth.

Since I will be taping this first generation chip out over the Tiny Tapeout shuttle chip, using purely digital tiles, I’m constrained by the limits of these pins.

In total this will afford me 24 pins: 8 input, 8 output, and 8 bi-directional (configurable to be either inputs or output pins) GPIO pins, rated to run reliably at 50 MHz on both inbound and outbound data.

The absence of any analog front end makes building anything IEEE-physical-layer-compliant directly a challenge, but there’s a way around this: using an external PHY (physical layer) chip and interfacing with it over the standardized RMII bus. Though this consumes 7 bits per Ethernet interface it makes my 50Mbps pins capable of sending and receiving over 100Mbps Ethernet (100BASE-TX).

Tiny Tapeout shuttle chip

IndexInputOutputBidirectional0ui[0]uo[0]uio[0]1ui[1]uo[1]uio[1]2ui[2]uo[2]uio[2]3ui[3]uo[3]uio[3]4ui[4]uo[4]uio[4]5ui[5]uo[5]uio[5]6ui[6]uo[6]uio[6]7ui[7]uo[7]uio[7]

I will be targeting the widely available Microchip LAN8720A/LAN8720AI (which will be the only mention of AI in this article) PHY chip for this interface. I will be going more in-depth as to how this ASIC will be interfacing with this PHY later.

Area

My second major constraint is my limited die area.

I am paying for all this out of pocket afterall, and more area means a higher manufacturing cost. Now I am not trying to accumulate a pool of gold or anything, it’s just that, in compliance with Maslow’s hierarchy of needs, waffles rank higher than area, and higher manufacturing cost means less waffles. So just like any semi-conductor company, I am incentivised to keep my area budget under control.

Maslow’s hierarchy of needs, distorted ASIC edition.

Because store-and-forward requires the switch to store the entire packet before forwarding it, and because ethernet frames can reach upwards of +1.5k Bytes (and +9k for jumbo frames), they require massive amounts of storage. A workaround for that would be to store the packet to some off-chip memory but I don’t have the pin budget to afford that right now, so on-chip memory is my only option.

The problem is, on-chip memory consumes a lot of area given the large area footprint of SRAM and the even larger area per stored bit footprint of flip-flops.

Now if we were talking of a few bytes this could be negotiable, but for multiple 1.5k Bytes packets this is a dealbreaker, thus ruling store-and-forward out.

Very very high resolution render of the switch ASIC floorplan using Tim Edward’s excellent OCD 256x8 SRAM IP, for scale. The SRAM macro features two banks and is on the right of the floor plan placed in the W (west) orientation.

Assuming I was using Tim Edward’s excellent OCD 256x8 SRAM IP, a single 256 Byte SRAM occupies 301.3 x 224.93 um (using W orientation in this implementation) and consumes just by itself 1/3 of the floorplan. If we want to store even a single full packet we would need 6 of such instances, and since we have 3 ports, we would then need to replicate that 3 times, so 18 instances in total. Now, we have a larger 1028 Byte version of this SRAM that is 301.3 x 515.81 um which nicely increases our storage area density. But again, if we were to instantiate six such macros this would occupy x3 the area than we currently have to spare.

Now, the Tiny Tapeout shuttle chip does support me scaling up this design up at most another two factors of two, or 4x. But the cost would also scale by a factor of 4, at which point we are getting into full chip orders of magnitude of cost. And if I were to go down the full chip route, since I then have the possibility of having a lot more pins to play with, this re-unlocks the possibility of interfacing with much larger external memories, thus changing the landscape of what the correct technical tradeoff would be again.

RTimothyEdwards/gf180mcu_ocd_ip_sram

3.3V SRAM macros for GF180MCU, based on the original 5V SRAM macros.

Verilog

22

5

Easy to use

Lastly, I want something that doesn’t require external software or configuration.

Firstly because I would like external third party users in the community to be able to easily pick this ASIC up and start using it. And that becomes increasingly difficult as soon as I start involving custom software. I am aiming for something that is as close to plug and play as possible with ease of use being a measure of success.

Not to say that the community won’t be able to compile and flash my custom embedded abominations, just that their willingness to do so decreases exponentially with each extra step.

Secondly because I am once again working on a very tight schedule and that custom software support adds significant amounts of time to both the pre-tapeout and bringup workloads. (Let’s not forget we are still talking about a single person’s project here.) This would be especially true for this ethernet switch project since I would aim to be compatible with a widely adopted open source switch management software and protocol like SNMP for monitoring or SSH for monitoring and configuration.

Support for these protocols is not at the level of something I can trivially implement in hardware, especially for SSH, and the best design decision would be to offload to a CPU. So either integrate an on chip CPU on the ASIC or, build a custom interface to an external MCU and offload all these requests to it. Both options involve a significant software effort, with the on chip CPU also promising a huge design effort and even more area usage. At which point, I am approaching the planned architecture of the router rather than the first generation of the switch.

So, for both of these reasons, an unmanaged switch is the path I am taking.

What are we building?

So to recap, I am building a:

  • 3-port
  • Full-duplex
  • 100 Mbps bandwidth
  • cut-through
  • unmanaged

ethernet switch.

Now that we have figured out what we’re building, it’s time to focus on the fun part: how to build it! 🥳

System Overview

The real Ethernet frame that is hidden from view

Most people have actually never seen a full ethernet packet.

When you inspect Ethernet traffic on your computer via tcpdump or wireshark, you actually only see part of the Ethernet frame, with some parts missing. These parts are generally stripped out by your computer’s network interface before the packet is forwarded to the software realm, thus hiding them from user’s view.

Random IPv4 packet captured over tcpdump (tcpdump -xx -e -v 'ether proto 0x0800') :

16:36:51.298082 60:e9:aa:92:dc:7d (oui Unknown) > 5c:e9:31:1e:9d:00 (oui Unknown), ethertype IPv4 (0x0800), length 78: (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 64)
    superpitchu.53332 > dfw25s53-in-f9.1e100.net.https: UDP, length 36
    0x0000:  5ce9 311e 9d00 60e9 aa92 dc7d 0800 4502
    0x0010:  0040 0000 4000 4011 2b98 c0a8 0085 4a7d
    0x0020:  0369 d054 01bb 002c a93f 6fe8 5bd5 5378
    0x0030:  f4c9 ccae 477c 5083 0696 8fa4 4f62 57bf
    0x0040:  41a9 78a3 fc60 7781 2b8b 38a1 2ccd

The missing parts are:

  • Preamble + SFD: Before the start of the MAC header exists a sequence of 7 bytes of an alternating bit sequence signifying that a packet is about to start, called the preamble, followed by a 1-byte marker ending in a double asserted bit sequence called the SFD (Start Frame Delimiter) signaling that the next bits are the MAC header.
  • Frame Check Sequence Footer: At the end of the packet there is a 4-byte footer called the FCS (Frame Check Sequence), used to check whether the Ethernet frame’s content was corrupted during transmission. This is checked by both store-and-forward switches and by most computers’ network interface cards and these drop all frames that fail this test before the packet is forwarded.

Raw packet overview

And since, once they have been evaluated by the networking interface, both the Preamble+SFD and FCS serve no further relevant purpose, they are stripped out before the remaining packet bits are forwarded up the networking stack.

Now, since we’re going through the Microchip PHY, we won’t actually be interfacing directly with the Ethernet physical layer, as it will be abstracting away the precise 100BASE-TX PHY behavior, though the full ethernet frame will remain intact (including Preamble+SFD+FCS)

All our data transmission and reception will actually be done through the RMII bus interface.

The RMII interface

LAN8720A to application device interface diagram taken directly from the LAN8720A/LAN8720AI datasheet. For our application the MAC and RMII block are going to be part of our ASIC and we will have 3 such interfaces in parallel. Like in this example, both the ASIC and all the 3 LAN8720A chips will be driven by the same external 50MHz reference clock signal.

RX

  • rxv valid signal (crs_dv in the diagram above )
  • rxer error signal
  • rxd[1:0] two data signals

On the RX (reception) side of RMII, we have four pins: two for data, one for data validity, and one to signal that an error has occurred on the line. Interestingly, this valid signal isn’t a pure data-valid signal but an early data-valid signal, and it’s up to our ASIC to read the incoming data and correctly identify when the Ethernet frame data actually starts using the preamble and SFD. The valid signal actually asserts asynchronously a few cycles before the start of the preamble but, deasserts synchronously with the end of the Ethernet frame.

TX

  • txv valid signal (txen in the diagram above )
  • txd[1:0] two data signals

On the TX (transmit) side, we only have three signals: two for data and one for valid, with no error signal. This makes sense, since the error signal is there to indicate issues on the medium, and since there is no medium between the ASIC and the PHY there is no need for it in the TX direction.

Timing

Lastly the PHY chip’s datasheet outlines the expected timings for the interface signals.

Unlike what my high level overview might have suggested, new data isn’t immediately available at the start of the clock cycle. Like in all real hardware there is an internal propagation delay. The same goes for how fast the data is allowed to transition after the start of a cycle. Because the PHY chip also contains flip-flops and is thus also subject to hold constraints, the previous cycle’s data must remain stable for a certain period of time after the clock edge before the new value can be propagated.

RMII interface timing for the LAN8720A/LAN8720AI Microchip chip family. Documentation code: DS00002165C. I swear, this doc is so well written, it truly makes this chip such a pleasure to work with ❤️.

So, implementing correct signaling alone isn’t enough to properly interface with this chip. If I want my ASIC to work I also really need to make sure my physical implementation’s resulting timing respects these constraints. This is both verified and enforced by specifying design constraint rules as part of the SDC (Synopsys Design Constraints) file.

Now by designing around the constraints of the LAN8720A chip readers might be concerned that I am locking myself into a dependency on a single external chip.

And actually that is kind of the case here, I am not proud of this but I caught this discrepancy too late, and not mentioning it in this article simply doesn’t align with the technically honest recollections I am looking to do here.

Since RMII is regented by the RMII consortium, and since in the RMII specification they include the AC characteristics I blindly assumed the LAN8720A would be compliant.

Turns out the LAN8720A isn’t actually compliant.

And, although in many cases the LAN8720’s timings are actually more constraining than the official spec, when it comes to the hold constraints on the RX pins it is actually much looser at 1.4ns less than the RMII’s consortium’s 2.0ns.

Although this might still work in practice, it would be by pure luck and I only believe in engineered luck!

RMII Specification, AC Characteristics

So note to self for future versions: I should set this to 2.0ns to guarantee that the ASIC would work with other RMII chips.

Apart from that, the LAN8720A is widely available, easy to get dev boards for, well documented, and at 103 cents a piece, worth every penny.

The official Microchip LAN8720A development daughterboard not only came with a real paper datasheet but it was the most precious tiny datasheet I have ever seen.

ASIC pinout

Putting it together, here is what the final pinout of our ASIC will look like connected to all 3 PHY chips. We will be referring to these as PHY0, PHY1 and PHY2.

Indexui (Input)uo (Output)uio (Bidirectional)0phy0_rx_data[0]phy0_tx_data[0]phy2_rx_data[0]1phy0_rx_data[1]phy0_tx_data[1]phy2_rx_data[1]2phy0_rx_vphy0_tx_vphy2_rx_v3phy0_rx_err-phy2_rx_err4phy1_rx_data[0]-tx_phase5phy1_rx_data[1]phy1_tx_data[0]phy2_tx_data[0]6phy1_rx_vphy1_tx_data[1]phy2_tx_data[1]7phy1_rx_errphy1_tx_vphy2_tx_v

Note: As a reminder, there are a total of 24 pins: 8 inputs, 8 outputs and 8 bidirectional pins.

Address Resolution

At its heart, a switch is actually a conceptually simple piece of networking equipment whose role is to read and forward incoming Ethernet frames to the correct ports. Matching incoming packets destination MAC addresses to the correct port is accomplished by an internal structure called an address table.

Like a software dictionary construct, it maps a destination MAC address to a switch port index.

In order to build this correspondence, the switch reads incoming traffic’s source MACs, keeping track of which port each source MAC was seen on, in order to forward future traffic to the correct port.

Putting it together: when an incoming Ethernet frame arrives, the switch first reads the destination MAC from the frame header and checks the address table for a matching entry. If there’s a hit, it forwards the packet to the specified port. And in cases where there is no hit, in a best effort to minimize packet drops, it broadcasts the frame on all ports except the one it came from.

At least that is the high level overview, in practice, this is hardware, so things get a bit more hard (pun intended … no, I am not sorry).

Filling the table

Recall that this switch is unmanaged, it needs to autonomously learn the correct ports corresponding to each device’s MAC address. It does this by reading the source MAC of all incoming Ethernet frames. Once it has the source MAC, it checks the address table to see if this MAC is already present. If no entry exists, it writes a new one.

The requirement that all entries in the table be unique is not only a correctness requirement but also stems from two physical implementation constraints (see ASIC implementation rules for readers not already deeply familiar with ASIC design ):

  • Most efficient utilization of the table: since the table is implemented in hardware not only is its size fixed but each additional entry is non-linearly more expensive. Since this first generation 3 port design only features 4 such entries it is imperative to make the most use of each entry, and duplicated entries are a pure waste.
  • Timing: lookup of this address table is on the critical path. But by guaranteeing that each hit is unique, we can replace the priority mux selecting from individual entry hit to the table hit, with a lower logic depth and/or reduction tree. See the code below as an example for the entry port hit to table port hit.
always @(*) begin
    /* verilator lint_off CASEOVERLAP */
    (* parallel_case *) // telling synthesizer it can optimize this from a priority mux to a parallel case
    casez(mac_hit) <- onehot0 entry hit vector
        4'b???1: port_hit = mem_port_q[0];
        4'b??1?: port_hit = mem_port_q[1];
        4'b?1??: port_hit = mem_port_q[2];
        4'b1???: port_hit = mem_port_q[3];
        default: port_hit = {PORT_IDX_W{1'bX}}; // port hit will only be used if we have at least one valid entry hit
    endcase
    /* verilator lint_on CASEOVERLAP */
end

So, like all hardware structures, this table has a limited, fixed size. In the best case, assuming there are multiple free entries, a static allocation algorithm is used to select which entry the new address is written to. If there is a single free entry it is used.

Where things get complicated is when there are no available entries. To explain what happens in this case, I need to take you on a quick detour and talk about Time-To-Live (TTL).

Time-To-Live 🪦

Each entry in the table actually has three parts: the MAC address, the port, and a time-to-live counter.

Address table entry memory layout. Each entry uses 54 bits of storage, and the first generation switch has 4 such entries.

So, why am I sacrificing some of my very precious on-chip storage for this counter? Well, because I must !

It implements an aging mechanism: entries in the table are only valid for as long as their TTL hasn’t expired. This is a necessary mechanism for networking equipment, to make sure old entries aren’t kept alive as it could result in improper forwarding.

Imagine the following scenario: a device is connected to our switch on port 0, but then it’s disconnected from port 0 and re-connected to port 1. If that device never transmits again, the switch has no way of being made aware that the port for this device has changed. So without an ageing mechanism, as long as the entry isn’t re-allocated, it would continue forwarding all packets destined for that device to the wrong port. Meanwhile, all traffic destined for the device would be lost.

Because of this, all switches, let they be managed (or unmanaged) implement such an ageing mechanism, where entries are regularly purged from the table. In our switch, this TTL counter also indicates whether an entry is valid (TTL != 0).

Then, at a regular interval, a hardware internal event is triggered and all the table’s TTL values in the table are decremented by 1.

This TTL is a hard-set 300 second (5 minute) invalidation cycle. All entries, if not refreshed within this five-minute window, will ultimately be invalidated.

Replacement policy

Coming back to our write example, what happens on a write when we have no invalid entries?

For cases like this the hardware implements a replacement policy.

Firstly, in parallel to the other address table lookup mechanism, the hardware keeps track of the oldest valid entry based on the TTL. For cases where multiple entries have the same age, we once again have a static tiebreaking rule. This oldest entry is called the victim and is selected for new allocations.

Now, in my explanation so far I have suggested we had 2 distinct cases:

  1. At least 1 invalid entry
  2. No invalid entries

But in practice, since the first case is actually a generalization of the replacement policy where entries ages are 0 the replacement policy is always used for allocating new entries. The distinction is actually between allocating entirely new entries (for which the MAC address isn’t in the table) and existing entries.

Updating existing entries

Even for cases where we detect we have an existing entry we also want to perform a write to the table for two reasons:

Firstly, it is rewritten in order to refresh its TTL counter back to the maximum value, keeping active ports entries alive.

Secondly, we also re-write the port index, to correctly handle the corner case where the device might have been connected to a different port compared to when it was originally allocated.

And with this we have ourselves an address table for our switch. 🎉

War stories

For this ASIC design I stuck to my classic project roadmap so after having finished writing the design and it having survived torture testing simulation I moved to the last validation step which was FPGA emulation.

This last step is particularly important for devices such as these that are expected to correctly interface with third party equipment and for which the testbench might not do a proper job at capturing all the corner cases.

And, let me, dear reader, tell you a funny story that happened while I was running this emulation.

Picture this: it was an early 3am, I had finished bringing up the switch and everything was working as expected. At this point my mind was fixated on actively debating whether I should head off to bed and get a wink of sleep or toughen it out until sunrise and go directly celebrate at Waffle House. For those wondering why I didn’t just head off to Waffle House then and there: I am happily married, and intend to keep it that way.

3:00 am emulation setup.

At that point my main work computer was connected via wired Ethernet to my switch, my switch to my router, and through there to my workstation.

And so there I was connected via ssh, running some physical implementation tests on my workstation, doing some small timing optimizations, when I decided that grabbing a swanky floorplan render would be a great addition to this ASIC’s documentation.

And so, I opened a GUI … (I know, who does that ?)

Thus, I was interfacing with the physical implementation tools over SSH, with visual forwarding enabled so I could see my floorplan results, and the results were unexpectedly … slow …

Like reaaaallllly slow … and laggy … and slow

I was contemplating my ssh visual lag until my two remaining brain cells reconnected and realized all my traffic was still being routed through the switch and that all the +9M packets that were composing my network traffic over the past few hours had been bottlenecked at 100 Mbps.

I was sleep deprived, your honor.

Turns out linux’s network management favors wired connections over wireless when available. So as soon as the switch became available all my ethernet traffic had stopped going over my wireless interface (wlp3s0) and was instead routed through my wired interface (enp2s0).

It turns out 100Mbps is enough for browsing reddit “the web” and Australia but not enough for ssh visual forwarding of ASIC floorplans.

At least we know one thing: it works! (Or at least, I think it works. )

The moment of truth will be around November 2026 when I get the chips back from the fab: let’s see if it stands up to being silicon proven.

The Coffee Shop family

For those not familiar with the term, “running a home lab” is the hobby of setting up and running a small datacenter tucked between the kitchen and the bedroom. It is also, as marriage counselors can attest to, a sign that the wife is a saint and that their marriage will be fine (allegedly).

Homelab [hom-læb]: a laboratory of (usually slightly outdated) awesome in the domicile.

The official ultimate authority on the question r/homelab

Robert’s very cool stealth homelab.

So it probably comes as no huge surprise that I have an interest in homelab’s.

But one humble switch doesn’t qualify as a homelab, no, there must be more, and it just so happens that there is.

This is actually part of a larger family of open source networking hardware IP that I have dubbed the “Coffee Shop” family.

It includes:

And,since all of the ASICs mentioned above are already taped-out, in mid November when the silicon comes back I can start building my first fully custom homelab!

First generation custom home lab schematic, or how to take the term “custom” a bit too literally.

What is next ?

Obviously, the long-term plan is to replace my router, but before that, I first need to get this switch silicon proven, and then expand it with both more entries for the address resolution table and more ports. Right now, because of the Tiny Tapeout shuttle’s limitations, I can only fit three ports max. But if I move to a full chip, then I control all the pins! 🔥 w 🔥

A full chip would allow me to greatly bump my pin count to between 56 and 122 pins, giving me enough precious pins to make a much more respectable 8 ports switch chip.

I have been eyeing the wafer.space 0.5×1 slot so hard these days I might be starting to burn a hole through it. But alas, regrettably good practice requires having something silicon proven before blowing up the area budget.

At which point, my measly four entries for the address resolution table just are not going to cut it. To address that, I can either scale the number of entries up with more pure digital logic as I am doing now, or change paradigms entirely and move to the analog realm. Because in this beautiful land lives the mystical creature known for its low lookup latency and its far superior scaling prowess that is the content-addressable memory, or CAM for short. 🌈

Although realistically I could maybe scale up the number of entries with a pure digital approach a few more orders of twos, this would require significant additional logic complexity and would stretch my tight timing even more. But if I wanted say 64 entries or more, a CAM would be the way to go.

Closing words

So while I wait to get this first generation silicon back from the fab the next item on my TODO list is to expand my address table, potentially by building an analog content-addressable memory.

Meanwhile, some of my previous silicon has started coming back with the first-generation systolic array recently landing in my mailbox!

The devboard for the first Global Foundries experimental shuttle chip featuring my first generation systolic array accelerator, mentioned in the Two weeks until tapeout article has recently arrived. Hold on tight to your probes, it’s bring-up time !

But before any of that can start, there’s one tradition I will never miss out on!

Waffle House, but the waffles have already vanished. 🧇

At least that is where this story was supposed to end …

Round 2

wafer.space was started by Tim Ansell, also known as mithro online. The open source silicon community is actually really tiny, so we were acquainted.

So, while I was wrapping up this article, amused with my own typos, I sent him a small message.

And that is where he dropped the bombshell:

So you are telling me there is a chance ?

Recall Maslow’s pyramid from a few paragraphs back? Well scrap that, it’s not applicable when we are talking about the possibility of FREE AREA.

Now there is just one problem: we are not talking about just a single macro but doing a full chip here. Plus, I need to scale things up to actually make good use of the additional silicon and pins and I have nothing started to that effect.

Also, tapeout is in 4 days …

Welcome to round 2!

The Daily Front Page 15 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Where Free Software Lives
article

I regret migrating to Codeberg

by boramalper·▲ 509 points·508 comments·xn--gckvb8fzb.com ↗
“why a free-software host deciding which projects are welcome worries me more than the bans themselves”

A brief comment on Codeberg’s new terms, and why a free-software host deciding which projects are welcome worries me more than the bans themselves.

I Regret Migrating to Codeberg

My primary reason for leaving GitHub was not about a single feature or a single outage, but about the “enshittification” of the platform under Microsoft’s ownership. The web interface got rewritten into a sluggish pile of JavaScript that either broke things which used to just work, or made them so horribly slow that using them became a PITA. Beyond the technical decay GitHub had turned into de facto “public infrastructure” in much the same way that WhatsApp has, hosting the source code of a very large share of the world’s software and, through that, giving Microsoft a degree of leverage and surveillance over everyone’s projects, and by extension everyone’s digital lives, that no single company should hold. On top of that, stories about legitimate developers losing their accounts due to arbitrary bans by Microsoft only reinforced the feeling that it would be a good idea to at least have a backup somewhere else.

Codeberg looked like a viable alternative. It offered free and open-source projects a reputable home and, more importantly, an equally free one, run by a non-profit association rather than a subsidiary of the largest software vendor on the planet. Unfortunately, the latest update to its terms of service seems to mark a first step in changing one part I moved there for, namely the “freedom” part.

Human stupidity

Every project I’ve published so far was built with 100% human stupidity rather than “artificial intelligence”, or, more accurately, LLMs. I don’t hold particularly strong feelings about Codeberg banning projects that are predominantly LLM-driven, at least not feelings as strong as the ones I hold about the simultaneous ban of legitimate cryptocurrency projects, which reads as though it got lumped in for no reason other than that most people still remember the villain-du-jour that crypto was in the years before LLMs took that title. The two clauses landed within days of each other, the LLM prohibition on the 29th of June and the cryptocurrency prohibition on the 2nd of July, both as Assembly 2026 proposals, and the terms now file the latter under, of all things, “content that harms the reputation of Codeberg”, which sounds like legalese for “we don’t have a solid reason or an actual number of bad precedents to categorically ban it”.

The announcement blog post, however, reads very poorly, and the section titled “The development team of none” is the worst of it. It states:

Using LLMs to work with your code gives you a kick of adrenaline. You can develop at a rapid pace, build things as if you had a large team. Only that you have none. In fact, you are (often) alone, working with a statistical machine that turns energy into code.

And, a little further down, it says:

It seems like many ‘vibe coders’ don’t realize that they don’t actually have a community around them.

This is out of touch with how most free software gets made. The majority of FOSS developers are one-man-shows, and the only cOmMuNiTy they have around them are the users requesting features or reporting bugs while most of the time not contributing in any form whatsoever. I’ve been publishing silly little tools for decades, predating this website and even GitHub itself (remember when SourceForge was the hot sh.t?), and not one of them has ever had an actual “community” around it, at least not in the romanticized sense that Codeberg paints in that post. I’m a lone wolf who codes everything by hand and spends an absurd amount of time doing exactly that, and the notion that an LLM is the thing separating a real project with a real community from a fake one does not hold up once you look at how the average useful little tool on any forge comes to exist in the first place.

It’s frankly a bit snotty of Codeberg to make this argument at all, considering that the platform effectively lives inside the Forgejo bubble, and Forgejo mutinied inherited its community of active contributors from Gitea, who had spent the better part of six years building that community before Forgejo even existed. A project that acquired its own community by hard-forking someone else’s, then turned around to lecture solo developers about not having one, is a difficult position to argue from with a straight face.

In addition, Codeberg conflates “having a community” with “being legitimate software worth hosting”, when the bar for a personal project has always been a working build, ideally a license, and maybe a README, and not a channel full of contributors. A good deal of what makes the small, single-author tool ecosystem worth having is precisely that it doesn’t need a community to justify its existence, and a forge whose entire selling point is hosting the code of individuals is an odd place to argue the opposite.

Censorship

The part that bothers me isn’t the specific ban on LLM projects, or the specific ban on cryptocurrency projects. It’s that a hub built around “free software” is now telling its users which kinds of software are deemed good and which are not, and that is closer to censorship than it might seem. Once a platform writes into its terms that an entire category “harms its reputation” and can be removed on that basis, the deciding factor stops being whether the code is legal, or functional, or useful, and becomes whether it aligns with a position the platform has taken. I would argue that a significant share of the projects caught by a blanket ban of that kind are legitimate software rather than vibe-coded slop or sh.tcoin implementations.

Every platform I can think of that took this approach became divisive the moment it started enforcing an ideology on its users, whatever that ideology happened to be, and however justified it looked at the time. The mechanism is always the same, where a real problem shows up, an unpopular category becomes the obvious culprit, the platform bans the category instead of addressing the problem, and that ban then becomes the precedent for the next category, and the one after that. The category that is uncontroversial to ban today is the reason the mechanism exists tomorrow, and the users who applauded the first ban rarely get asked about the second one.

I do acknowledge that both categories aren’t free of problems. LLM-driven repositories do strain infrastructure, do generate unmanageable volumes of low-quality issues and pull requests, and do carry real questions about copyright and code provenance, all of which Codeberg names in its post. The cryptocurrency space, in turn, might have produced more outright scams than almost any other corner of software. However, a categoric ban on the villain-du-jour is not a solution to any of that.

We now even have people like Linus Torvalds making the fairly reasonable argument that an LLM is just a tool, and “clearly a useful one”, with a legitimate place in Linux kernel development when it’s used carefully and its output is held to the same standard as everything else. If the maintainer of the largest and most consequential open-source project on the planet can treat LLMs as a tool to be judged on its results rather than a category to be banned on sight, a backyard code forge can manage the same.

I, too, am worried about the impact of LLMs on tech, and on society in general, going forward, and I’d guess I’m about as worried as whoever wrote Codeberg’s policy. I just don’t believe that banning content, which is very much what this amounts to, is the way forward.

Reasonable solution

What I wish Codeberg had reached for is a solution that treats the actual problem, which by their own account in that same post is resource consumption and the infrastructure cost that comes with it, as an actual resource problem. A change to the terms of service could have required authors to tick a checkbox declaring that a repository contains LLM-generated code, or is cryptocurrency-related, and those repositories could then be segmented onto a separate tier of infrastructure that doesn’t get the same resources as everyone else. A tier that carries specific quotas, and that might require the author to pay for what they consume. Declaring the truth honestly would (at least at first) cost nothing, and failing to declare it, then getting caught, could be met with exactly the permanent, immediate ban that Codeberg is now applying to entire categories from the outset.

Similarly, projects that carry the LLM or Crypto label could carry automatically displayed disclaimers that explicitly state that Codeberg is in no way responsible for the quality or correctness of this specific repository. Heck, they might even go as far as to blatantly state that Codeberg does not approve of the use of LLMs or Cryptocurrencies in those warnings, to make extra-extra-extra sure that people get it and that there is no “reputational risk” for Codeberg.

An approach like this puts the cost of resource-hungry projects onto the people creating them, and it keeps the shared resources for the projects that were the reason the platform exists. All of that without Codeberg having to decide which categories of software are ideologically acceptable in the first place. The “we ban everything upfront that we don’t agree with” approach is the wrong signal to send, and it is a very slippery slope.

Despite not owning a single project that falls into either banned category, I’m now going to look into setting up my own public Git host, and I’ll move off Codeberg only a few months after moving there, because of this. Not because of the bans themselves, but because I don’t want to depend on a platform that rewrites its terms of service on a whim, without properly announcing that the change was even under consideration, and without giving its users a way to weigh in.

The decisions did go through Codeberg’s own Assembly 2026, which is more process than most platforms bother with, and yet as an ordinary user I found out about it the way probably most people else did, through a dark blue banner at the top of the site on the day it was already settled. While I appreciate the info about the ToS change, I wish I’d gotten a banner back when the platform was still deciding whether to go down this road, and I wish it had linked to a discussion thread, or at the very least a poll, so that I could have voiced the concern I have, which is about the freedom of the platform as a whole, rather than about any single category that ended up banned.

The Daily Front Page 16 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Windows to the Past
article

98.css

by lopespm·▲ 541 points·123 comments·jdan.github.io ↗
“A design system for building faithful recreations of old UIs.”

A design system for building faithful recreations of old UIs.

Intro

98.css is a CSS library for building interfaces that look like Windows 98. See more on GitHub.

My First VB4 Program

Hello, world!

OK Cancel

This library relies on the usage of semantic HTML. To make a button, you'll need to use a <button>. Input elements require labels. Icon buttons rely on aria-label. This page will guide you through that process, but accessibility is a primary goal of this project.

You can override many of the styles of your elements while maintaining the appearance provided by this library. Need more padding on your buttons? Go for it. Need to add some color to your input labels? Be our guest.

This library does not contain any JavaScript, it merely styles your HTML with some CSS. This means 98.css is compatible with your frontend framework of choice.

Here is an example of 98.css used with React, and an example with vanilla JavaScript. The fastest way to use 98.css is to import it from unpkg.

<link
  rel="stylesheet"
  href="https://unpkg.com/98.css"
>

You can install 98.css from the GitHub releases page, or from npm.

npm install 98.css

Components

Button

A command button, also referred to as a push button, is a control that causes the application to perform some action when the user clicks it.

— Microsoft Windows User Experience p. 160

A standard button measures 75px wide and 23px tall, with a raised outer and inner border. They are given 12px of horizontal padding by default.

Click me

<button>Click me</button>
<input type="submit" />
<input type="reset" />

You can add the class default to any button to apply additional styling, useful when communicating to the user what default action would happen in the active window if the Enter key was pressed on Windows 98.

OK

<button class="default">OK</button>

When buttons are clicked, the raised borders become sunken. The following button is simulated to be in the pressed (active) state.

I am being pressed

<button>I am being pressed</button>

Disabled buttons maintain the same raised border, but have a "washed out" appearance in their label.

I cannot be clicked

<button disabled>I cannot be clicked</button>

Button focus is communicated with a dotted border, set 4px within the contents of the button. The following example is simulated to be focused.

I am focused

<button>I am focused</button>

Checkbox

A check box represents an independent or non-exclusive choice.

— Microsoft Windows User Experience p. 167

Checkboxes are represented with a sunken panel, populated with a "check" icon when selected, next to a label indicating the choice.

Note: You must include a corresponding label after your checkbox, using the <label> element with a for attribute pointed at the id of your input. This ensures the checkbox is easy to use with assistive technologies, on top of ensuring a good user experience for all (navigating with the tab key, being able to click the entire label to select the box).

This is a checkbox

<input type="checkbox" id="example1">
<label for="example1">This is a checkbox</label>

Checkboxes can be selected and disabled with the standard checked and disabled attributes.

When grouping inputs, wrap each input in a container with the field-row class. This ensures a consistent spacing between inputs.

I am checked

I am inactive

I am inactive but still checked

<div class="field-row">
  <input checked type="checkbox" id="example2">
  <label for="example2">I am checked</label>
</div>
<div class="field-row">
  <input disabled type="checkbox" id="example3">
  <label for="example3">I am inactive</label>
</div>
<div class="field-row">
  <input checked disabled type="checkbox" id="example4">
  <label for="example4">I am inactive but still checked</label>
</div>

OptionButton

An option button, also referred to as a radio button, represents a single choice within a limited set of mutually exclusive choices. That is, the user can choose only one set of options.

— Microsoft Windows User Experience p. 164

Option buttons can be used via the radio type on an input element.

Option buttons can be grouped by specifying a shared name attribute on each input. Just as before: when grouping inputs, wrap each input in a container with the field-row class to ensure a consistent spacing between inputs.

Yes

No

<div class="field-row">
  <input id="radio5" type="radio" name="first-example">
  <label for="radio5">Yes</label>
</div>
<div class="field-row">
  <input id="radio6" type="radio" name="first-example">
  <label for="radio6">No</label>
</div>

Option buttons can also be checked and disabled with their corresponding HTML attributes.

Peanut butter should be smooth

I understand why people like crunchy peanut butter

Crunchy peanut butter is good

<div class="field-row">
  <input id="radio7" type="radio" name="second-example">
  <label for="radio7">Peanut butter should be smooth</label>
</div>
<div class="field-row">
  <input checked disabled id="radio8" type="radio" name="second-example">
  <label for="radio8">I understand why people like crunchy peanut butter</label>
</div>
<div class="field-row">
  <input disabled id="radio9" type="radio" name="second-example">
  <label for="radio9">Crunchy peanut butter is good</label>
</div>

GroupBox

A group box is a special control you can use to organize a set of controls. A group box is a rectangular frame with an optional label that surrounds a set of controls.

— Microsoft Windows User Experience p. 189

A group box can be used by wrapping your elements with the fieldset tag. It contains a sunken outer border and a raised inner border, resembling an engraved box around your controls.

Select one:

Diners

Drive-Ins

Dives

<fieldset>
  <div class="field-row">Select one:</div>
  <div class="field-row">
    <input id="radio10" type="radio" name="fieldset-example">
    <label for="radio10">Diners</label>
  </div>
  <div class="field-row">
    <input id="radio11" type="radio" name="fieldset-example">
    <label for="radio11">Drive-Ins</label>
  </div>
  <div class="field-row">
    <input id="radio12" type="radio" name="fieldset-example">
    <label for="radio12">Dives</label>
  </div>
</fieldset>

You can provide your group with a label by placing a legend element within the fieldset.

Today's mood

Claire Saffitz

Brad Leone

Chris Morocco

Carla Lalli Music

<fieldset>
  <legend>Today's mood</legend>
  <div class="field-row">
    <input id="radio13" type="radio" name="fieldset-example2">
    <label for="radio13">Claire Saffitz</label>
  </div>
  <div class="field-row">
    <input id="radio14" type="radio" name="fieldset-example2">
    <label for="radio14">Brad Leone</label>
  </div>
  <div class="field-row">
    <input id="radio15" type="radio" name="fieldset-example2">
    <label for="radio15">Chris Morocco</label>
  </div>
  <div class="field-row">
    <input id="radio16" type="radio" name="fieldset-example2">
    <label for="radio16">Carla Lalli Music</label>
  </div>
</fieldset>

TextBox

A text box (also referred to as an edit control) is a rectangular control where the user enters or edits text. It can be defined to support a single line or multiple lines of text.

— Microsoft Windows User Experience p. 181

Text boxes can rendered by specifying a text type on an input element. As with checkboxes and radio buttons, you should provide a corresponding label with a properly set for attribute, and wrap both in a container with the field-row class.

Occupation

<div class="field-row">
  <label for="text17">Occupation</label>
  <input id="text17" type="text" />
</div>

Additionally, you can make use of the field-row-stacked class to position your label above the input instead of beside it.

Address (Line 1)

Address (Line 2)

<div class="field-row-stacked" style="width: 200px">
  <label for="text18">Address (Line 1)</label>
  <input id="text18" type="text" />
</div>
<div class="field-row-stacked" style="width: 200px">
  <label for="text19">Address (Line 2)</label>
  <input id="text19" type="text" />
</div>

To support multiple lines in the user's input, use the textarea element instead.

Additional notes

<div class="field-row-stacked" style="width: 200px">
  <label for="text20">Additional notes</label>
  <textarea id="text20" rows="8"></textarea>
</div>

Text boxes can also be disabled and have value with their corresponding HTML attributes.

Favorite color

<div class="field-row">
  <label for="text21">Favorite color</label>
  <input id="text21" disabled type="text" value="Windows Green"/>
</div>

Slider

A slider, sometimes called a trackbar control, consists of a bar that defines the extent or range of the adjustment and an indicator that shows the current value for the control...

— Microsoft Windows User Experience p. 146

Sliders can rendered by specifying a range type on an input element.

Volume: Low High

<div class="field-row" style="width: 300px">
  <label for="range22">Volume:</label>
  <label for="range23">Low</label>
  <input id="range23" type="range" min="1" max="11" value="5" />
  <label for="range24">High</label>
</div>

You can make use of the has-box-indicator class replace the default indicator with a box indicator, furthermore the slider can be wrapped with a div using is-vertical to display the input vertically.

Note: To change the length of a vertical slider, the input width and div height.

Cowbell

<div class="field-row">
  <label for="range25">Cowbell</label>
  <div class="is-vertical">
    <input id="range25" class="has-box-indicator" type="range" min="1" max="3" step="1" value="2" />
  </div>
</div>

Dropdown

A drop-down list box allows the selection of only a single item from a list. In its closed state, the control displays the current value for the control. The user opens the list to change the value.

— Microsoft Windows User Experience p. 175

Dropdowns can be rendered by using the select and option elements.

5 - Incredible! 4 - Great! 3 - Pretty good 2 - Not so great 1 - Unfortunate

<select>
  <option>5 - Incredible!</option>
  <option>4 - Great!</option>
  <option>3 - Pretty good</option>
  <option>2 - Not so great</option>
  <option>1 - Unfortunate</option>
</select>

By default, the first option will be selected. You can change this by giving one of your option elements the selected attribute.

5 - Incredible! 4 - Great! 3 - Pretty good 2 - Not so great 1 - Unfortunate

<select>
  <option>5 - Incredible!</option>
  <option>4 - Great!</option>
  <option selected>3 - Pretty good</option>
  <option>2 - Not so great</option>
  <option>1 - Unfortunate</option>
</select>

Window

The following components illustrate how to build complete windows using 98.css.

Title Bar

At the top edge of the window, inside its border, is the title bar (also reffered to as the caption or caption bar), which extends across the width of the window. The title bar identifies the contents of the window.

— Microsoft Windows User Experience p. 118

Include command buttons associated with the common commands of the primary window in the title bar. These buttons act as shortcuts to specific window commands.

— Microsoft Windows User Experience p. 122

You can build a complete title bar by making use of three classes, title-bar, title-bar-text, and title-bar-controls.

A Title Bar

<div class="title-bar">
  <div class="title-bar-text">A Title Bar</div>
  <div class="title-bar-controls">
    <button aria-label="Close"></button>
  </div>
</div>

We make use of aria-label to render the Close button, to let assistive technologies know the intent of this button. You may also use "Minimize", "Maximize", "Restore" and "Help" like so:

A Title Bar

A Maximized Title Bar

A Helpful Bar

<div class="title-bar">
  <div class="title-bar-text">A Title Bar</div>
  <div class="title-bar-controls">
    <button aria-label="Minimize"></button>
    <button aria-label="Maximize"></button>
    <button aria-label="Close"></button>
  </div>
</div>

<br />

<div class="title-bar">
  <div class="title-bar-text">A Maximized Title Bar</div>
  <div class="title-bar-controls">
    <button aria-label="Minimize"></button>
    <button aria-label="Restore"></button>
    <button aria-label="Close"></button>
  </div>
</div>

<br />

<div class="title-bar">
  <div class="title-bar-text">A Helpful Bar</div>
  <div class="title-bar-controls">
    <button aria-label="Help"></button>
    <button aria-label="Close"></button>
  </div>
</div>

Each aria-label also has a corresponding styling class to render the title bar buttons, to let the aria-label text be in other languages without causing rendering, accessibility, or localization issues.

A Title Bar using Button Styling Classes

A Maximized Title Bar using Button Styling Classes

A Helpful Bar using Button Styling Classes

<div class="title-bar">
  <div class="title-bar-text">A Title Bar using Button Styling Classes</div>
  <div class="title-bar-controls">
    <button aria-label="Any Text" class="minimize"></button>
    <button aria-label="Any Text" class="maximize"></button>
    <button aria-label="Any Text" class="close"></button>
  </div>
</div>

<br />

<div class="title-bar">
  <div class="title-bar-text">A Maximized Title Bar using Button Styling Classes</div>
  <div class="title-bar-controls">
    <button aria-label="Any Text" class="minimize"></button>
    <button aria-label="Any Text" class="restore"></button>
    <button aria-label="Any Text" class="close"></button>
  </div>
</div>

<br />

<div class="title-bar">
  <div class="title-bar-text">A Helpful Bar using Button Styling Classes</div>
  <div class="title-bar-controls">
    <button aria-label="Any Text" class="help"></button>
    <button aria-label="Any Text" class="close"></button>
  </div>
</div>

Maximize buttons can be disabled, useful when making a window appear as if it cannot be maximized.

A Title Bar with Maximize disabled

<div class="title-bar">
  <div class="title-bar-text">A Title Bar with Maximize disabled</div>
  <div class="title-bar-controls">
    <button aria-label="Minimize"></button>
    <button aria-label="Maximize" disabled></button>
    <button aria-label="Close"></button>
  </div>
</div>

You can make a title bar "inactive" by adding inactive class, useful when making more than one window.

An inactive title bar

<div class="title-bar inactive">
  <div class="title-bar-text">An inactive title bar</div>
  <div class="title-bar-controls">
    <button aria-label="Close"></button>
  </div>
</div>

Window contents

Every window has a boundary that defines its shape.

— Microsoft Windows User Experience p. 118

To give our title bar a home, we make use of the window class. This provides a raised outer and inner border, as well as some padding. We can freely resize the window by specifying a width in the container style.

A Complete Window

<div class="window" style="width: 300px">
  <div class="title-bar">
    <div class="title-bar-text">A Complete Window</div>
    <div class="title-bar-controls">
      <button aria-label="Minimize"></button>
      <button aria-label="Maximize"></button>
      <button aria-label="Close"></button>
    </div>
  </div>
</div>

To draw the contents of the window, we use the window-body class under the title bar.

A Window With Stuff In It

There's so much room for activities!

<div class="window" style="width: 300px">
  <div class="title-bar">
    <div class="title-bar-text">A Window With Stuff In It</div>
    <div class="title-bar-controls">
      <button aria-label="Minimize"></button>
      <button aria-label="Maximize"></button>
      <button aria-label="Close"></button>
    </div>
  </div>
  <div class="window-body">
    <p>There's so much room for activities!</p>
  </div>
</div>

Status Bar

A status bar is a special area within a window, typically the bottom, that displays information about the current state of what is being viewed in the window or any other contextual information, such as keyboard state.

— Microsoft Windows User Experience p. 146

You can render a status bar with the status-bar class, and status-bar-field for every child text element.

A Window With A Status Bar

There are just so many possibilities:

  • A Task Manager
  • A Notepad
  • Or even a File Explorer!

Press F1 for help

Slide 1

CPU Usage: 14%

<div class="window" style="width: 320px">
  <div class="title-bar">
    <div class="title-bar-text">A Window With A Status Bar</div>
  </div>
  <div class="window-body">
<p> There are just so many possibilities:</p>
<ul>
    <li>A Task Manager</li>
    <li>A Notepad</li>
    <li>Or even a File Explorer!</li>
</ul>
  </div>
  <div class="status-bar">
    <p class="status-bar-field">Press F1 for help</p>
    <p class="status-bar-field">Slide 1</p>
    <p class="status-bar-field">CPU Usage: 14%</p>
  </div>
</div>

TreeView

A tree view control is a special list box control that displays a set of objects as an indented outline based on their logical hierarchical relationship.

— Microsoft Windows User Experience p. 178

To render a tree view, use an ul element with the tree-view class. The children of this list (li elements), can contain whatever you'd like.

  • We can put
  • ✨ Whatever ✨
  • We want in here
<ul class="tree-view">
  <li>We can put</li>
  <li><strong style="color: purple">✨ Whatever ✨</strong></li>
  <li>We want in here</li>
</ul>

To make this a tree, we can nest further ul elements (no class needed on these). This will provide them with a nice dotted border and indentation to illustrate the structure of the tree.

To create expandable sections, wrap child lists inside of details elements.

  • Table of Contents

  • What is web development?

  • CSS

    • Selectors
    • Specificity
    • Properties
  • JavaScript

    • Avoid at all costs

    • Unless

      • Avoid

      • At

        • Avoid
        • At
        • All
        • Cost
      • All

      • Cost

  • HTML

  • Special Thanks

<ul class="tree-view">
  <li>Table of Contents</li>
  <li>What is web development?</li>
  <li>
    CSS
    <ul>
      <li>Selectors</li>
      <li>Specificity</li>
      <li>Properties</li>
    </ul>
  </li>
  <li>
    <details open>
      <summary>JavaScript</summary>
      <ul>
        <li>Avoid at all costs</li>
        <li>
          <details>
            <summary>Unless</summary>
            <ul>
              <li>Avoid</li>
              <li>
                <details>
                  <summary>At</summary>
                  <ul>
                    <li>Avoid</li>
                    <li>At</li>
                    <li>All</li>
                    <li>Cost</li>
                  </ul>
                </details>
              </li>
              <li>All</li>
              <li>Cost</li>
            </ul>
          </details>
        </li>
      </ul>
    </details>
  </li>
  <li>HTML</li>
  <li>Special Thanks</li>
</ul>

Tabs

A tab control is analogous to a divider in a file cabinet or notebook. You can use this control to define multiple logical pages or sections of information within the same window.

— Microsoft Windows User Experience p. 193

To render a tab list, use a menu element with the [role=tablist] attribute. The children of this menu (li elements), should get a [role=tab] attribute.

Tabs should be managed by adding custom javascript code. All you need is to add the [aria-selected=true] attribute to the active tab.

Hello, world!

Desktop

My computer

Control panel

Devices manager

Hardware profiles

Performance

the tab content

<div class="window-body">
  <p>Hello, world!</p>

  <menu role="tablist">
    <li role="tab" aria-selected="true"><a href="#tabs">Desktop</a></li>
    <li role="tab"><a href="#tabs">My computer</a></li>
    <li role="tab"><a href="#tabs">Control panel</a></li>
    <li role="tab"><a href="#tabs">Devices manager</a></li>
    <li role="tab"><a href="#tabs">Hardware profiles</a></li>
    <li role="tab"><a href="#tabs">Performance</a></li>
  </menu>
  <div class="window" role="tabpanel">
    <div class="window-body">
      <p>the tab content</p>
    </div>
  </div>
</div>

To create multirows tabs, add a multirows class to the menu tag.

Hello, world!

Desktop

My computer

Control panel

Devices manager

Hardware profiles

Performance

Users

Network

Programs

Services

Resources

Advanced

the tab content

<div class="window-body">
  <p>Hello, world!</p>

  <menu role="tablist" class="multirows">
    <li role="tab"><a href="#tabs">Desktop</a></li>
    <li role="tab"><a href="#tabs">My computer</a></li>
    <li role="tab"><a href="#tabs">Control panel</a></li>
    <li role="tab"><a href="#tabs">Devices manager</a></li>
    <li role="tab"><a href="#tabs">Hardware profiles</a></li>
    <li role="tab"><a href="#tabs">Performance</a></li>
  </menu>
  <menu role="tablist" class="multirows">
    <li role="tab"><a href="#tabs">Users</a></li>
    <li role="tab"><a href="#tabs">Network</a></li>
    <li role="tab"><a href="#tabs">Programs</a></li>
    <li role="tab"><a href="#tabs">Services</a></li>
    <li role="tab"><a href="#tabs">Resources</a></li>
    <li role="tab"><a href="#tabs">Advanced</a></li>
  </menu>
  <div class="window" role="tabpanel">
    <div class="window-body">
      <p>the tab content</p>
    </div>
  </div>
</div>

TableView

To render a table view, use a table element. Wrap it with a div element with sunken-panel class to provide proper border and overflow container.

With a bit of extra scripting you can make table view interactive. Give interactive class to table element to show pointer cursor when hovering over body rows. Table rows can be given highlighted class to appear selected.

Name Version Company MySQL ODBC 3.51 Driver 3.51.11.00 MySQL AB SQL Server 3.70.06.23 Microsoft Corporation SQL Server 3.70.06.23 Microsoft Corporation SQL Server 3.70.06.23 Microsoft Corporation SQL Server 3.70.06.23 Microsoft Corporation SQL Server 3.70.06.23 Microsoft Corporation SQL Server 3.70.06.23 Microsoft Corporation SQL Server 3.70.06.23 Microsoft Corporation SQL Server 3.70.06.23 Microsoft Corporation SQL Server 3.70.06.23 Microsoft Corporation

<div class="sunken-panel" style="height: 120px; width: 240px;">
  <table class="interactive">
    <thead>
      <tr>
        <th>Name</th>
        <th>Version</th>
        <th>Company</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>MySQL ODBC 3.51 Driver</td>
        <td>3.51.11.00</td>
        <td>MySQL AB</td>
      </tr>
      <tr>
        <td>SQL Server</td>
        <td>3.70.06.23</td>
        <td>Microsoft Corporation</td>
      </tr>
      <tr>
        <td>SQL Server</td>
        <td>3.70.06.23</td>
        <td>Microsoft Corporation</td>
      </tr>
      <tr>
        <td>SQL Server</td>
        <td>3.70.06.23</td>
        <td>Microsoft Corporation</td>
      </tr>
      <tr>
        <td>SQL Server</td>
        <td>3.70.06.23</td>
        <td>Microsoft Corporation</td>
      </tr>
      <tr>
        <td>SQL Server</td>
        <td>3.70.06.23</td>
        <td>Microsoft Corporation</td>
      </tr>
      <tr>
        <td>SQL Server</td>
        <td>3.70.06.23</td>
        <td>Microsoft Corporation</td>
      </tr>
      <tr>
        <td>SQL Server</td>
        <td>3.70.06.23</td>
        <td>Microsoft Corporation</td>
      </tr>
      <tr>
        <td>SQL Server</td>
        <td>3.70.06.23</td>
        <td>Microsoft Corporation</td>
      </tr>
      <tr>
        <td>SQL Server</td>
        <td>3.70.06.23</td>
        <td>Microsoft Corporation</td>
      </tr>
    </tbody>
  </table>
</div>
<script>
  document.querySelectorAll('table.interactive').forEach(element => {
    element.addEventListener('click', (event) => {
      const highlightedClass = 'highlighted';
      const isRow = element => element.tagName === 'TR' && element.parentElement.tagName === 'TBODY';
      const newlySelectedRow = event.composedPath().find(isRow);
      const previouslySelectedRow = Array.from(newlySelectedRow.parentElement.children).filter(isRow).find(element => element.classList.contains(highlightedClass));
      if(previouslySelectedRow){
        previouslySelectedRow.classList.toggle(highlightedClass);
      }

      if (newlySelectedRow) {
        newlySelectedRow.classList.toggle(highlightedClass);
      }
    })
  });
</script>

Progress Indicator

You can use a progress indicator, also known as a progress bar control, to show the percentage of completion of a lengthy operation.

— Microsoft Windows User Experience p. 189

There are two types of progress bars: solid and segmented. The solid version is the default. To declare a segmented bar, you should use the segmented class.

<div class="progress-indicator">
  <span class="progress-indicator-bar"  style="width: 40%;" />
</div>
<div class="progress-indicator segmented">
  <span class="progress-indicator-bar" style="width: 40%;" />
</div>

Field borders

Text boxes, check boxes, drop-down list boxes, spin boxes and list boxes use the field border style. You can also use the style for define the work area within a window. It uses the sunken outer and sunken inner basic border styles. For most controls, the interior of the field uses the button highlight color. For text fields, such as text boxes and combo boxes, the interior uses the button face color when the field is read-only or disabled.

— Microsoft Windows User Experience p. 421

Status fields use the status field border style. This style uses only the sunken outer basic border style. You use the status field style in status bars and other read-only fields where the content of the file can change dynamically.

— Microsoft Windows User Experience p. 422

As mentioned in these guidelines, these styles are used in other contexts than just form elements and status fields such as to indicate work areas and dynamic content. For that reason, we provide three classes for these generic usages, field-border, field-border-disabled, and status-field-border. These classes only define the border and background color and minimal padding, so you will typically need to at least provide some extra padding yourself.

Work area

<div class="field-border" style="padding: 8px">
  Work area
</div>

Disabled work area

<div class="field-border-disabled" style="padding: 8px">
  Disabled work area
</div>

Dynamic content

<div class="status-field-border" style="padding: 8px">
  Dynamic content
</div>

Issues, Contributing, etc.

98.css is MIT licensed.

Refer to the GitHub issues page to see bugs in my CSS or report new ones. I'd really like to see your pull requests (especially those new to open-source!) and will happily provide code review. 98.css is a fun, silly project and I'd like to make it a fun place to build your open-source muscle.

Thank you for checking my little project out, I hope it brought you some joy today. Consider starring/following along on GitHub and maybe subscribing to more fun things on my twitter. 👋

The Daily Front Page 17 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — The Walkman That Cannot Return
article

Why Sony can't bring back its classic Walkman models

by speckx·▲ 203 points·215 comments·obsoletesony.substack.com ↗
“why the company cannot simply bring them back”

Explained by a former Sony engineer

Almost every time I post one of Sony’s early Walkman models, someone asks why the company cannot simply bring them back. I understand why. There are stories almost every week announcing that cassettes and CDs are back, and several manufacturers now sell new players for both formats. From the outside, it can look as though Sony only needs to choose one, update a few things, and put it back into production.

Akira Tanaka, who spent years designing Walkman at Sony, says it would be much closer to starting over.

Tanaka is a former Sony mechanical engineer whose published project list spans four types of Walkman: five cassette models, eight CD models, two MiniDisc models, and ten generations of file-based players. He was project manager for the camera-equipped MZ-DH10P and the MZ-RH1, Sony’s final Hi-MD Walkman. He later served as mechanical engineering manager for several digital Walkman generations, including the A820 and X1000 series.

He remained at Sony until taking early retirement in February 2025. Today, he owns more than 70 Walkman products and 279 catalogs, and he writes about the machines he helped create almost every day.

Tanaka is probably my favorite person to follow online. I eagerly wait for anything he has to say about Walkman history because nobody else has his combination of firsthand experience, technical knowledge, and personal archive. He has answered my questions, looked at my work, and helped me with the Obsolete Sony archive. I think of him as my Walkman senpai, and I am still slightly amazed that I get to talk with someone who helped make the products I spend so much time documenting.

In a recent post, Tanaka gave six reasons Sony would have difficulty reissuing its cassette, CD, or MiniDisc Walkman models. His explanation reveals how much of the world that produced the Walkman has disappeared.

1. The Parts No Longer Exist

The miniature motors, magnetic heads, optical pickups, and proprietary integrated circuits used by these players have gone out of production. Sony cannot pull an old bill of materials from its files and order everything again. Suppliers moved on, production equipment was retired, and some companies may no longer be in those businesses. A working WM-EX2000 can make this difficult to believe, but any drawings still held by Sony describe components that nobody manufactures today.

Replacements could be designed, but nearly everything around them would need to change. A new cassette Walkman would need a transport, motor, head, control system, power supply, tooling, and housing built around components available now. A CD Walkman would need a new optical assembly and disc mechanism. A MiniDisc player would add a magnetic recording head, signal processing, and software. Sony can do all of this, but each format would require a new development program.

2. The Manufacturing Technology Has Been Lost

Later Walkman models were extremely small, thin, and precise. Sony reached those dimensions by designing each part around the others. Motors became flatter, circuit boards wrapped around moving assemblies, clearances almost disappeared, and the exterior casing sometimes became part of the structure.

That work depended on dedicated production lines and adjustment procedures. Drawings can record dimensions and tolerances, but they do not always record how a line was tuned after the first few thousand units, which jig solved an alignment problem, or which adjustment stopped a mechanism from wearing too quickly. Much of that knowledge stayed with the engineers and factory workers who used it.

This is why a new cassette player can be larger and mechanically worse than a Walkman sold more than 30 years ago. The factories making portable cassette mechanisms today are serving a small, inexpensive market. During the Walkman’s peak, shaving another millimeter from the body could justify a new motor and new tooling. That level of spending ended with the mass market.

3. The Economics Do Not Work

Plenty of people say they want a new cassette or MiniDisc Walkman, but the total market is still small. Collectors and physical-media fans are active online, which can make demand look larger than it is.

According to Tanaka, even sales in the tens of thousands might not recover the development and tooling costs. Low production volume would also raise the price of every specialized component. By the time Sony covered manufacturing, warranty service, and support, the player would be far more expensive than the simple reissue many fans have in mind.

4. MiniDisc Media Is Disappearing

CDs are still widely available, and cassettes continue to be manufactured in smaller quantities. MiniDisc is different. In January 2025, Sony announced that it would end production of all recordable MiniDisc media the following month, along with MD Data discs, MiniDV cassettes, and recordable Blu-ray media. Sony also said there would be no successor products.

A new MD Walkman would arrive after Sony stopped making blank discs for it. Used and unopened media will remain available for years, but the supply can only decline. Relaunching the hardware would make little sense unless Sony also restarted the media.

5. Development Resources Are Limited

Sony still develops Walkman. They are Android-based Hi-Res players built for local files and streaming, and that is where Tanaka believes the company can realistically concentrate its limited engineering staff and development budget. These players may have little in common with a cassette Walkman beyond the name and the fact that both play music through headphones. Sony chose to continue Walkman as a digital audio category and retire the cassette, CD, and MiniDisc mechanisms.

6. Tanaka Is No Longer at Sony

Tanaka makes his own departure the sixth reason. His joke points to another loss: Sony still has drawings, reports, patents, and test data, but it no longer has every engineer who remembers why a part was changed, which prototype failed, or how a production problem was fixed.

Some of that knowledge was passed to younger engineers, as Sony’s interview with Tanaka about the NW-X1000 shows. Once Sony stopped making mechanical Walkman models, however, there was no reason to keep passing along every detail of how to manufacture one.

Most of Tanaka’s six reasons are easy enough to guess. I still found it special to hear them from him. Sony has always been a company in motion. It launches the next thing and rarely explains why the old one can no longer be made. The Walkman moved from cassette to CD, MiniDisc, flash memory, and eventually Android, while the people, suppliers, tools, and knowledge behind each generation scattered.

Tanaka was close enough to this history to know what disappeared along the way. Sony will probably never publish a formal explanation of why those old Walkman models cannot come back. His post may be the closest answer we will ever get.

Make sure to follow Akira Tanaka on X, where he continues to share firsthand stories from Sony’s portable audio history.

The Daily Front Page 18 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — The Dungeon Still Types Back
article

The case for MUDs in modern times (2018)

by bw86·▲ 92 points·73 comments·andrewzigler.com ↗
“virtual worlds that consist entirely of text”

The case for MUDs in modern times

The case for MUDs in modern times

In the age of smart devices and instant entertainment, can a medium as old as MUDs survive? Driven entirely by text, these Multi-User Dimensions ― or Dungeons, or Domains, or so many other options that they’re often called MU* ― are virtual worlds that consist entirely of text. Often outfitted as RPG-style games, these platforms are also home to niche internet communities on the fringes of the web. The servers are accessed via a telnet client, which is easy enough to launch in a command line. But there are a few popular applications that many longtime players opt to use. They’re rather reminiscent of the various chat programs built up around the IRC protocol, and provide simple functionality like logging, colors, aliases, triggers, timers, and even mapping.

At this point, if you’ve never played a MUD before, you might be very confused by this prospect. An online game that’s entirely text? How does it work? More importantly, why would anyone play that?

When I first stumbled across MUDs as a preteen, that was my initial reaction. I was an avid reader, but the idea of playing a game that was entirely text felt more like work than fun. Perhaps it did feel like work a bit in the beginning, but I picked up the controls pretty quickly, and soon things felt very natural to navigate. In a typical MUD setting, you are represented as a textual avatar inside of a space called a room. A room has a written description and a list of objects that are inside that room. A room can be anything: a lion’s den, outer space, an old crypt, a classroom, a wide prarie, or even a coral reef! Your avatar can interact with the game world and its contents via commands you enter. These can be as simple as 'get sword' but can be as expansive as any imperative clause. Some MUDs have robust command systems that allow you to be verbose, like 'look at gemstones on tiara' or 'pilot ship 500 meters north', and intricate complexity can follow.

These concepts will be very familiar to you if you’ve ever played interactive fiction (IF), which can be best described as the single-player version of MUDs. There are many similarities between IF and MUDs, but the latter is focused on collaborative (or competitive) effort in a realtime environment.

In a MUD, the environment is constantly changing, producing a sense of place by reacting to stimuli. As a virtual world, it simulates various systems with varying levels of complexity, depending on the codebase and the design of the environment. This ever-churning simulation is the heart of what makes a MUD so uniquely interesting. These systems can simulate time, weather, economies, NPC schedules, and more ― all of which work together to create an interconnected environment that can be navigated by your avatar and interacted with via verbs. The intricacies of these simulations can vary wildly between games and different codebases. Some MUDs provide a more straightforward hack-n-slash environment where players collect items and kill monsters to gain experience and get stronger. These types of games are essentially programmed rulebooks, replacing the role of a GM (Game Master) in a tabletop game and instead handling all of the combat, dice rolling, skill building, and inventory management that you would otherwise be doing with pen and paper around a table. Other MUDs provide a completely freeform environment, with no rules, items, or NPCs. Players in these environments are provided a canvas and often expected to roleplay their interactions within the environment, collaboratively writing a story with other players ― with or without the interference of game administrators. Some MUDs fall somewhere in the middle, leveraging the best of both worlds to provide unique experiences.

As computers grow more interconnected with everyday facets of our lives, they further become tools through which we can manipulate the real world around us. A surgeon can perform surgery from the other side of the planet with robotic arms and a camera, for example. The unique sensation and phenomenon of interacting with the world through technology can bestow a sence presence that’s come to be defined as telepresence. Telepresence refers to the experience of controlling objects remotely, and the sensation people have when they interact with and immerse themselves within a virtual environment. In the study of telepresence, scholars such as Rheingold have cited MUDs as being “imaginary worlds in computer databases where people use words and programming languages to improvise melodramas, build worlds and all the objects in them, solve puzzles, invent amusements and tools, compete for prestige and power, gain wisdom, seek revenge, indulge greed and lust and violent impulses.” Turkle similarly wrote that “MUDs are a new kind of virtual parlor game and a new form of community. In addition, text-based MUDs are a new form of collaboratively written literature. MUD players are MUD authors, the creators as well as consumers of media content. In this, participating in a MUD has much in common with script writing, performance art, street theater, improvisational theater ― or even commedia dell’arte.”

This unique sensation of telepresence can come in six unique forms, depending on the user’s level of immersion and their expectations of the virtual environment in which they’re navigating. These telepresence senses include social richness (the feeling one gets from social interaction), realism (such as computer-generated environments looking, feeling, or otherwise seeming real), transportation (also includes users feeling as though something is “here” with them or feeling as though they are sharing common space with another person together), immersion (either through the senses or through the mind), being a social actor within the medium (no longer passive viewers, gaining a sense of interactivity and control), and the medium itself as a social actor.

MUDs are also home to many players with vision impairments, who are attracted to the environment because they can potentially experience it fully. Visually-impaired players are often unable to play games that rely heavily on graphics, because they can struggle to interpret what is happening on the screen. However, in a text-based games, visually-impaired players can use a screenreader to read the contents of the terminal as events happen live on the screen. Many MUDs provide configuration options for visually-impaired players, allowing them to disable nonsensical text like ASCII art or character-based maps, and streamlining the text so that a screenreader can effectively convey the information to the player. A visually-impaired player with a high recitation speed on their screenreader can play just as effectively as a someone reading their screen, using sounds and triggers to facilitate their gameplay.

In fact, until the invention of graphics cards and technologies that surpass the human imagination (haha!), MUDs will be difficult to completely remove from the scene. Imagine a realtime adventure with other people online, as vividly detailed as your favorite book but with all of the agency in your hands? That’s the reality of gameplay on a MUD. We put a lot of emphasis on graphics and visuals for games now, but as hardware begins to plateau, avenues like MUDs will continue to double-down on the experiences that make them so great, eschewing the bridles of resource creation in exchange for pure poiesis. You can spin up a MUD and start writing the environment, making it as intricate as you’d like, and everything you describe costs you the same amount of effort: words. Making a game with graphics is entirely different, with various effects, models, and landscapes requiring more time, attention, and skills than others. In a graphic-based game, not every asset has the same cost associated, and this can place artificial limitations on a game. Developers may opt for a less dramatic or exciting route simply because they lack the time or budget. Whereas in developing a MUD, your only limitation is your ability to describe.

Despite the age and legacy of this type of program, starting a MUD in 2018 can be a difficult process. There are many popular codebases that have been in use for years or even decades, and the command syntax, interfaces, and unique quirks of each of them means that players often develop preferences. These codebases can sometimes be in older programming languages or require complex accompanying databases to facilitate the program. Thankfully, there are codebases available that are fairly straightforward to set up and come with a fair amount of functionality out of the box. It’s worth noting that it can easily take months or years of development for even a team of dedicated creators to build a quality, developed MUD for players, and that’s barely considering the amount of writing and building that has to go into it. Creating unique and compelling gameplay mechanics that are balanced and engaging is a mixture of art and science that many MUDs still struggle to get right. Because I am a JavaScript junkie, I’ve done a fair amount of tinkering in a MUD engine called Ranvier and I recommend this codebase for modern would-be MUD wizards looking to set up a _tabula rasa _for tinkering. Because it takes such a large amount of time and dedication to create a MUD, I do not think there are any released/popular MUDs out there currently using the Ranvier engine, but the same can be said for many MUD codebases, unfortunately. Due to the nature of niche communities in which MUDs tend to live, it’s fairly common for these virtual worlds to appear, amass players, and then vanish just as quickly as they came. In some cases, the community can recover the source code and try to reboot, but other times the entire content is lost forever. Still, you can find a wide variety of popular MUDS ― some of which have been around for decades ― on websites like Top Mud Sites and The Mud Connector and I encourage you to check one out if any of this piques your interest.

You can read more about my new MUD engine project, Pinwheelhere on my blog.

Further Reading

MUD - Wikipedia

MUSH - Wikipedia

MOO - Wikipedia

Telnet - Wikipedia

Ranvier, a MUD engine in JavaScript

The Daily Front Page 19 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Punctuation Desk
article

Em dashes are amazing

by surprisetalk·▲ 346 points·287 comments·psychotechnology.substack.com ↗
“Typing em dashes is not an AGI-complete problem.”

An ode to a punctuation mark

I fucking love em dashes. I spam them all the time. They make me feel free.

I don’t give a shit what the “oh yeah let’s examine this piece of writing with a magnifying glass for any signs of AI” crowd thinks. I don’t give a shit that AI figured out how to produce em dashes before these online troglodytes did. Typing em dashes is not an AGI-complete problem. It’s not that difficult to produce an organic, artisanal, hand-crafted em dash — on Mac, for example, it’s simply Option + Shift + Hyphen.

I fucking love em dashes. There is no greater joy in life than typing a sentence, realising it needs a clarification, a caveat, an addendum — but in the same sentence, not a new one — and, guess what, the em dash is right there for you. You want to package things neatly together — and the em dash lets you do exactly this. Em dashes make writing feel like you are assembling lego bricks.

Em dashes can be used instead of brackets in a sentence — like this one for example — and you can just type your shit and keep going. Brackets are for people who raise their hand in meetings and say: “this might be a stupid question”. A parenthetical is whispering: “Sorry, don’t mind me, I’ll be quick”. Em dash kicks the door open and announces itself. Use brackets when you are embarrassed by your own thought.

And also occasionally — occasionally — one just needs a random dramatic pause. Punctuation marks originally evolved as pause or breathing markers, after all. It’s not like grammar and punctuation rules were sent to us by god in their final form. People were just writing shit, and at some point the most popular patterns got codified. Sure, you need commas to signify a small break. Then em dash is a natural way to express a larger, longer, break. A period is great to express a complete thought — and it shifts the register of the next letter.

But colons are so nearly useless — they are the same width as a comma and unlike periods they don’t change the register of the following letter. Em dashes are of a clearly different length. And most colons are better off as em dashes to delineate different parts of the sentence.

As for semicolons, semicolons are neat, they are like the coolest punctuation mark after the em dash — the fundamental indecision compressed into a single punctuation mark — you are neither starting a new sentence nor you are, exactly, continuing an existing one. You are just… piling your stuff together. I am always happy when I find a place for the little guy semicolon. But, again, most cases where you could use one are better off served by the em dash as well.

Speaking of ellipsis… Ellipsis is a tad too melancholic. It’s nice, it’s fine, it’s like being in a garden and having limerence about a woman you can’t have. If you have a text where this is appropriate — by all means use ellipsis. I usually want to take my readers to the highest highs instead of idly sitting around with them. And em dashes are like a lift to the top floor of a high-rise hotel building in Tokyo — an one that takes you there in seconds. The ellipsis trails off while em the em dash cuts forward.

“But what would people think of my writing if I ever used an em dash? What if someone points one out in my writing?”. Bitch, please. Are you writing for an internet rando who’s got nothing better to do than to hunt for em dashes? Fine, you do, okay, fair enough. Then I’ve got you covered: use AP-style em dashes, these are separated from the text by spaces instead of being glued to it. That’s how every em dash in this piece is styled — and it’s unlike AI em dashes which are “like—this, word—word”. You can now outnitpick your hostile interlocutor by explaining that you’re using the special sort of em dashes AI doesn’t produce by default.

But also, maybe consider not giving a fuck about what someone on the internet think? Are you really that easily swayed by a rando’s opinion? You know what, we can play this game the other way. If your writing doesn’t contain an em dash, I ain’t reading it. From now on you are obliged to use em dashes for my pleasure.

PS: if you want personalised advice from me on how to use punctuation correctly, you can now get it for $175/hour.

The Daily Front Page 20 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Notebook Moderns
article

Marimo now runs in PyCharm

by cantdutchthis·▲ 96 points·27 comments·marimo.io ↗
“You can now add reactive notebooks to your Python projects in PyCharm”

Announcing the marimo plugin for PyCharm

Today, we are excited to announce a first version of the marimo plugin for PyCharm. You can now add reactive notebooks to your Python projects in PyCharm and other JetBrains IDEs.

PyCharm support has been one of our most requested features, both on our issue tracker and on JetBrains’ tracker. We’re starting with the full marimo editor and plan to improve the integration over time.

Check out the video:

A live notebook next to your code, in your IDE

With the plugin, you can add a marimo notebook to an existing project and import code from the application or library you are developing. You can use the notebook as a live workspace for testing your code or as an interactive demo for it, without leaving your IDE.

marimo’s module reloader updates the notebook cells as you update the imported Python modules. That gives you a tight feedback loop: edit your library code in PyCharm’s editor and see results in a reactive notebook.

Editing a Python module in PyCharm automatically updates the imported function's plot in a marimo notebook

Edit your library code and watch dependent notebook cells update automatically.

marimo notebooks are stored as plain .py files. The plugin identifies a notebook by looking for a marimo import and a matching App declaration, so ordinary Python files continue to open normally. You can switch between the marimo and Source tabs to move between the interactive notebook and native editor. Since marimo notebooks are plain Python files, they work really well with git (or any other VCS). You can use PyCharm VCS tools to version your notebooks alongside your project.

Opening a notebook file starts its local marimo server automatically and loads it in an editor tab. The plugin manages the port and process lifecycle, so there is no extra terminal or a separate browser tab to manage.

Keep your PyCharm workflow

By default, the plugin runs the notebook on your configured Python interpreter, so it uses the same environment and dependencies as your project. If marimo is not installed, the plugin offers to install it for you.

If you want to run the notebook without affecting your project environment, you can start a notebook in sandbox mode. Just choose the Start marimo in Sandbox option by right-clicking on the notebook file. This feature requires uv. With uv, marimo and the notebook dependencies run in an isolated environment; the dependencies are stored directly in the notebook using PEP 723 inline script metadata. The notebook remains self-contained and packages you install stay out of your project environment.

Your PyCharm tools stay available beside the notebook. For example, you can use PyCharm’s database tools to inspect schemas and query tables, then use the notebook to work with that data using Python or SQL.

Note: These tools work side by side rather than through a direct integration, so database connections need to be configured separately in marimo.

Pair with an agent

You can give your agent your marimo notebook with marimo-pair and jam on it together. The Pair with AI dropdown opens a PyCharm terminal and starts a marimo pair session with Claude, Codex, or opencode. You can also select Copy prompt and paste it into another agent, including Junie in PyCharm’s AI Chat.

Try it and help us with feedback

To try the plugin, install marimo from the JetBrains Marketplace, then create a marimo Notebook from the New menu or open an existing marimo .py file.

This is an early preview, and we’d love your feedback. Like marimo, the plugin itself is open source and available on GitHub. Share bugs and ideas in the plugin’s GitHub repository.

The Daily Front Page 21 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Civic Wires & Public Curios
article

Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey

by rootkea·▲ 449 points·333 comments·thehindu.com ↗

The notice comes after several users participating in the Jantar Mantar protest were observed using Bluetooth-based messaging apps after the government imposed temporary restrictions on internet services

Bitchat app’s developer and former Twitter CEO Jack Dorsey shared a copy of the notice dated July 23, 2026, on the X platform. File.

Bitchat app’s developer and former Twitter CEO Jack Dorsey shared a copy of the notice dated July 23, 2026, on the X platform. File. | Photo Credit: The Hindu

The Home Ministry’s cybercrime arm, the Indian Cybercrime Coordination Centre, has ordered Microsoft subsidiary GitHub to remove Bluetooth-based messaging application Bitchat, according to a notice.

“The Government of India does not like technologies like Bitchat and wants it taken down,” said the app’s developer and former Twitter CEO Jack Dorsey on Friday (July 24, 2026) in an X post, sharing a copy of the notice dated July 23.

A query sent to I4C in this regard elicited no immediate reply.

In its notice, I4C said that the app enables communication even during network restrictions and creates a substantial risk of misuse by anti-national elements, terrorist organisations, organised criminal groups and cyber criminals seeking to evade lawful detection and continue communication despite legally imposed restrictions.

While giving reference to Bitchat, I4C said that the content hosted or published by the GitHub intermediary platform is prohibited by law or being used to commit an unlawful act. I4C said that it has identified multiple applications as communication platforms capable of establishing decentralised peer-to-peer messaging over Bluetooth mesh networks without relying on mobile networks, internet connectivity, or centralised servers.

“The application enables anonymous communication without mandatory user registration, phone number verification, or centralised logging of communications. The technical architecture of the application significantly impedes lawful interception, attribution and investigation by law enforcement agencies,” the notice said.

The notice comes after several users participating in a protest organised by the Cockroach Janata Party at Jantar Mantar were observed using Bluetooth-based messaging apps after the government imposed temporary restrictions on internet services around the protest site.

According to I4C, since communications occur directly between nearby devices through a decentralised mesh network, the platform can be misused to evade lawful surveillance, facilitate anonymous coordination, and circumvent lawful restrictions imposed by competent authorities during situations involving public disorder, riots, terrorism, organised crime, or internet shutdowns.

“Intelligence inputs indicate that such decentralised communication platforms are capable of being exploited for coordinating unlawful assemblies, violent protests, dissemination of misinformation, radicalisation, criminal conspiracies, and other activities prejudicial to the sovereignty and integrity of India, defence of India, security of the State, public order, and facilitating the commission of cognizable offences,” the notice said.

It added that the absence of a centralised service provider also limits the ability of law enforcement agencies to obtain subscriber information, communication records, or timely assistance during investigations.

“The application’s design, which enables communication even during network restrictions, creates a substantial risk of misuse by anti-national elements, terrorist organisations, organised criminal groups, and cybercriminals seeking to evade lawful detection and continue communication despite legally imposed restrictions,” the notice mentioned.

In the notice to GitHub, I4C has mentioned that the app violates Sections 43, 84B and 84C of the IT Act and Section 61 read with 196 and 197.

The Daily Front Page 22 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Civic Wires & Public Curios
article

Future euro banknote design proposals

by robin_reala·▲ 166 points·139 comments·ecb.europa.eu ↗

The euro banknotes are being redesigned to reflect Europe’s shared identity and values. The design proposals presented below were selected by the Jury. The designs shown are proposals only and do not represent final euro banknotes.

Design A - Studio Joost Grootens

Design B - PunktFormStrich

Proposal C - Neue Gestaltung GmbH

Proposal D - Rudy Guedj and François Girard-Meunier

Proposal E - Myrsini Vardopoulou

Proposal F - Jan Robert Dünnweller

Proposal G - Rubio & del Amo and Cruz más Cruz

Proposal H - Atelier Goppel-Toperngpong

Proposal I - Isabelle Daëron

Proposal J - Ville Tietäväinen

article

What else do people draw on gradient.horse?

by spython·▲ 165 points·41 comments·rybakov.com ↗

What else do people draw on gradient.horse?

Since gradient.horse went online in January 2026, six months have passed, and more than 600 000 horses (and non-horses) were drawn. There are now more horses on gradient.horse than in the wild.

The image model I trained to filter out vandalism works very well, but it also hides a lot of ingenious drawings. You could see them if you’d activate the SHOW NON-HORSES setting, but most people do not.

Interestingly, there are some topics that appear again and again (besides the obvious desire for transgressive expression by drawing dicks and slurs): people on skateboards and trampolines! Snails! Sea horses! Memes! Texts on love and philosophy..

I’ve gathered some here for you to enjoy:

Seahorses of course. Still horses, but with more sea.

Horses that are jumping - on a ball or a pogo stick!

Skateboards and trampolines

Catepillars, centipedes and other processions

Snaaaails!

Dragons and dinosaurs

Wheelchairs! People and horses with mobility upgrades.

Bikes and horses on bikes

Important philosophical discussions

Hearts! Of course, many many hearts

Elephants, cats, sheep and other animals

Crabs! so many crabs!

Pegasi and pegasuses

and finally, the absurdist meme of the year:

And after all that, is something still missing? Draw it!

P.S. I'm looking for work. Doing (web)art is fun, but I noticed that I like good food too. If you ever wanted to work with a creative coder, need research into new ways of interaction design or just need some good old UX/UI please do reach out!

The Daily Front Page 23 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Toolchain Briefs
article

Gsxui – Shadcn-style components for Go

by jackielii·▲ 62 points·11 comments·ui.gsxhq.dev ↗

gsxui is a shadcn-style component set for gsx: copy-in, type-checked, server-rendered. Own the code, style it with Tailwind, ship it.

Browse componentsView on GitHubgsx documentation ↗

go install github.com/gsxhq/gsxui/cmd/gsxui@latest
gsxui init
gsxui add button

Button

DefaultSecondaryDestructiveOutlineGhostLink

Badge

DefaultSecondaryDestructiveOutline

Dialog

Open dialog

Edit profile

Rendered by ui/dialog on the native <dialog> element — no client framework required.

Close

gsxui — shadcn-style components for gsx. Copy-in, type-checked, server-rendered.

The Daily Front Page 24 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Back Page: Ports, Pills & Pointers
The Daily Front Page 25 of 26
Friday, July 24, 2026 The Daily Front No. #260724 — Colophon

That's the Front for Today

Issue No. #260724 — Friday, July 24, 2026 — went to press 2026-07-25 at 10:34 UTC.

About This Magazine

The Daily Front is a daily digital magazine assembled from the stories that reached the front page of Hacker News on Friday, July 24, 2026. Headlines, points, and comment counts are recorded as they stood at press time. All articles remain the property of their original authors — every piece links back to its source and its discussion thread.

How It Was Made

Fetched, cleaned, and typeset by an automated pipeline. An editor model laid out the pages, chose the highlights, and briefed the cover illustrator — 30 model calls and 212k tokens in total. Set in Jacquard 12, Playfair Display, Source Serif 4, and IBM Plex Mono, all served via Google Fonts under the SIL Open Font License.

The Cover

The cover illustration was commissioned with this prompt:

authentic 1990s instant-film style: soft focus, warm faded colors, heavy film grain, slight overexposure, direct on-camera flash, subtle light leaks, imperfect exposure. On a cluttered desk, a classic cassette Walkman with wired headphones sits beside a beige desktop computer, floppy disks, and old software manuals. In the background, a privately built rocket launches into a pink-and-purple twilight sky, while faint glowing circuit-board patterns and abstract AI network lines hint at open-weight models, regulation, and technology becoming more complicated. Nostalgic but forward-looking, tactile analog texture, editorial photography, no logos, no readable text. no polaroid frame

Production Ledger

StageModelCallsTokens InTokens Out
extractgpt-5.5 29 132,898 57,834
layoutgpt-5.5 1 18,588 3,035

The Publisher

Published by Johnny.

Support the Press

If The Daily Front brightens your morning, consider supporting its publisher.

Credits & Contact

All content — articles, posts, comments, and the images within them — belongs to its original authors and is reproduced here to point readers back to the source. Full credit goes to those creators; every item links to its original and its Hacker News discussion.

If you are an author and would like your content removed from an issue, write to hi@johnnys.page and it will be taken down.

Feedback is always welcome at the same address: hi@johnnys.page.

Credit where credit is due.

Every page of this issue began as someone else's work — these are the original sources, linked in full.

  1. Claude Opus 5 by alvis — anthropic.com·HN discussion ↗
  2. If coding has been solved, why does software keep getting worse? by pchm — ptrchm.com·HN discussion ↗
  3. It's getting harder to focus every day by peykar — glyphack.com·HN discussion ↗
  4. Nvidia, Microsoft, Meta warn against overregulating open-weight models by louiereederson — cnbc.com·HN discussion ↗
  5. Be skeptical of OpenAI's rogue hacker agent story by rwmj — theguardian.com·HN discussion ↗
  6. Flux 3 by ThouYS — bfl.ai·HN discussion ↗
  7. Flux 3 X Mimic: The Next Generation of Video-Action Models by kensai — bfl.ai·HN discussion ↗
  8. Unitree As2-W by MehrdadKhnzd — unitree.com·HN discussion ↗
  9. India's first privately-developed rocket reaches orbit on debut launch by sohkamyung — arstechnica.com·HN discussion ↗
  10. My security camera shipped a GitHub admin token in its login page by hhh — hhh.hn·HN discussion ↗
  11. IRGC claims it destroyed Amazon's Bahrain data center by thisislife2 — houseofsaud.com·HN discussion ↗
  12. Postgres LISTEN/NOTIFY actually scales by KraftyOne — dbos.dev·HN discussion ↗
  13. Designing an Ethernet Switch ASIC by random__duck — essenceia.github.io·HN discussion ↗
  14. I regret migrating to Codeberg by boramalper — xn--gckvb8fzb.com·HN discussion ↗
  15. 98.css by lopespm — jdan.github.io·HN discussion ↗
  16. Why Sony can't bring back its classic Walkman models by speckx — obsoletesony.substack.com·HN discussion ↗
  17. The case for MUDs in modern times (2018) by bw86 — andrewzigler.com·HN discussion ↗
  18. Em dashes are amazing by surprisetalk — psychotechnology.substack.com·HN discussion ↗
  19. Marimo now runs in PyCharm by cantdutchthis — marimo.io·HN discussion ↗
  20. Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey by rootkea — thehindu.com·HN discussion ↗
  21. Future euro banknote design proposals by robin_reala — ecb.europa.eu·HN discussion ↗
  22. Fields Medals 2026 by nill0 — mathunion.org·HN discussion ↗
  23. What else do people draw on gradient.horse? by spython — rybakov.com·HN discussion ↗
  24. Buz – A fork of Bun using modern Zig, with sub-1s incremental builds by kristoff_it — ziggit.dev·HN discussion ↗
  25. Claude Cookbook by saikatsg — platform.claude.com·HN discussion ↗
  26. Kimi K3 exploited the latest Redis server by Alifatisk — twitter.com·HN discussion ↗
  27. Gsxui – Shadcn-style components for Go by jackielii — ui.gsxhq.dev·HN discussion ↗
  28. Half-Life 2 running natively on HaikuOS by m0do1 — discuss.haiku-os.org·HN discussion ↗
  29. Don't Take the Black Pill [video] by signa11 — youtube.com·HN discussion ↗
  30. Fil-C: Garbage In, Memory Safety Out [video] by Bootvis — youtube.com·HN discussion ↗

Browse all issues in the archive →