10 interesting stories served every morning and every evening.

I'm Upset Again About a Co-Creator of RSS Being Prosecuted For Something Meta Is Doing With Little Consequence

blog.curiousquail.com

Also here’s a cool un­re­lated photo of a chip­munk

Look at this lit­tle guy. They don’t know what an AI model is and they’re so much bet­ter off

It’s noth­ing short of an in­dict­ment of our so­ci­ety at large that Aaron Swartz, one of the co-cre­ators of the RSS pro­to­col (among many other things) was ef­fec­tively as­sas­i­nated by our le­gal sys­tem for illegally” down­load­ing about 70 gi­ga­bytes of aca­d­e­mic ar­ti­cles from JSTOR - charged so ex­ces­sively to be made an ex­am­ple of (we’re talk­ing 35 years in prison, $1million USD fine, and as­set for­fei­ture) to the point where he felt the need to take his own life rather than deal with the court cir­cus and im­pend­ing fi­nan­cial ruin - while Facebook (oh I’m sorry Meta) has tor­rented 80 TERABYTES of books to train their AI mod­els with vir­tu­ally no con­se­quences other than a court case they will most likely get some sort of fi­nan­cial slap on the wrist for while their AI mod­els con­tinue to print them money.

Swartz’ use case was the dis­sem­i­na­tion and archival of knowl­edge; Meta’s use case is pow­er­ing up their pro­pri­etary pla­gia­rism code that cooks the en­vi­ron­ment while giv­ing CEOs psy­chosis and mak­ing one of the world’s rich­est peo­ple even richer.

I never met Aaron but I get mad on his be­half so of­ten and I don’t know what to do with it other than get more rad­i­cal­ized.

Maybe that’s for the best.

Anyway, here’s your end-of-post cat photo. Her name is Lilith and she’s won­der­ing why we don’t do some­thing about all these tech bil­lionares.

Changelog - Kagi Search

kagi.com

August 21st, 2026 - A new Stocks wid­get and a bet­ter every­day Assistant ex­pe­ri­ence #

Kagi Search

Bringing Stocks up to speed

We’ve re­vamped our Stocks wid­get. It should ap­pear more of­ten when you need it. It can now dis­play in­for­ma­tion about ex­change-traded funds in ad­di­tion to stocks. Most im­por­tantly, it now fea­tures a price chart, with an­i­ma­tions be­tween time win­dows that in­stantly con­tex­tu­ral­ize how big the price fluc­tu­a­tions you’re see­ing are com­pared to the wider story:

As well, we’ve added a set­ting for re­mov­ing pay­walled links from search re­sults au­to­mat­i­cally.

Kagi Assistant

Everyday use just got smoother

Richer mes­sages User mes­sages now ren­der links, Markdown, and LaTex. #6674 @oxlvlnle, #3283 @EvacuatedTerminal

More pow­er­ful search Search across all your threads, sort by re­cency or al­pha­bet­i­cally, and start with / to fil­ter by folder.

More con­trol with calmer set­tings Now you can choose whether tem­po­rary threads stick around for 24h, 7 or 30 days. All within a calmer, eas­ier-to-scan set­tings ex­pe­ri­ence.

Other im­prove­ments and bug fixes

Kagi Search

Direct URLs for search pages with our built-in lenses are now eas­ier to use, with names re­plac­ing num­bers: https://​kagi.com/​search?lens=fo­rums

Shortcuts should not trig­ger with mod­i­fiers held #9385 @poacher2k

kag­ifeeed­back xss vuln tag fix #10767 @unknown

Upstream con­nect er­ror or dis­con­nect/​re­set be­fore head­ers. re­set rea­son: con­nec­tion ter­mi­na­tion #10680 @TheToby

Select text and Search in Assistant #11242 @mb

Homepage Companions - Random or Rotate #9077 @Anonymous12

Extract API re­turns empty data for an en­tire batch when one page times out #11176 @fredcy

Currency con­ver­sion wid­get does not han­dle of­fi­cial name of cur­rency #11175 @Keli

A way to find sim­i­lar web­sites #1152 @Protech

Blocked do­mains are used as sources in Quick Answer #11257 @bausauce

CHATGPT Wikipedia ar­ti­cle is flagged as slop #10192 @fxgn

Surveillance Watch for play.google.com goes to a page about Zalo #9146 @pma_snek

Assistant no longer de­codes URL en­cod­ing from !ai bang #11096 @arijan

Kagi Assistant

Ability to ex­port all Assistant chats in one go #5221 @Thibaultmol

In Assistant, add an op­tion to re­quire ⌘+⏎ to sub­mit a prompt #6110 @dudeofawesome

Click to Expand” on Thinking” Section #8004 @KagiFeedbackDuder

Assistant: do not close think­ing block if user opened it dur­ing ex­tended think­ing #6675 @DomW

Assistant prompt code fence syn­tax high­light­ing #4775 @slater

FIXED - !ai bang - Query not work­ing #11077 @fanged_bagful

Prevent Search Engine Indexing of Shared Assistant Threads #7867 @Hanbyeol

Web Search tog­gle state not main­tained be­tween app switches #11140 @ryonic

Improvement to code snip­pet in­put #6254 @Leward

Choppy an­i­ma­tion in Assistant app #11134 @Temanor

Assistant prompt code fence syn­tax high­light­ing #4775 @slater

Speech-to-text doesnt sup­port pauses in Android Assistant app #11265 @jeroenpelgrims

Assistant Mobile Apps

Keyboard short­cut pref­er­ence to sub­mit prompts on iPads with con­nected key­boards

Back swipe on left side of Kagi Assistant in­ter­feres with Android gues­tures #11126 @mb

After open­ing Kagi Assistant, back swipe on the right side closes the app #11127 @mb

Choppy an­i­ma­tion in Assistant app #11134 @Temanor

Web Search tog­gle state not main­tained be­tween app switches #11140 @ryonic

Cannot Login Kagi Assistant 1.0.4 on iOS #11146 @hirsheykiss

Kagi Translate

Kagi Translate Reloads the page when us­ing web­site trans­late #10852 @tijol

Kagi Translate ex­ten­sion RSS feed 503 er­ror #10831 @Albi

Translate ex­ten­sion con­text menu op­tions don’t work every­where #10813 @WorstWizard

Alternative-translations re­quest pay­load has blank context” string in new up­date #11278 @Drexont

Regression: saved pre­sets do not au­to­mat­i­cally ap­ply con­text to trans­la­tions #11218 @Drexont

American alias for English (US) #11143 @mb

July 30th, 2026 - Kagi Assistant on the go and de­sign re­fine­ments for Search #

Announcing the of­fi­cial Kagi Assistant apps

Kagi Assistant is now avail­able as a na­tive app for iOS and Android!

Ask a ques­tion, ex­plore the web, work with files, con­duct in-depth re­search, or choose from lead­ing AI mod­els, all from your phone. Your threads and Custom Assistants stay with you, so you can pick up wher­ever you left off.

These are the first steps to­wards de­liv­er­ing a fan­tas­tic Kagi Assistant ex­pe­ri­ence on mo­bile, with much more to come.

Download it now:

App store: https://​apps.ap­ple.com/​app/​6755965340

Play store: https://​play.google.com/​store/​apps/​de­tails?id=com.kagi.as­sis­tant

Give it a spin and let us know what you think!

Report re­sponses di­rectly from Kagi Assistant

You can now re­port an as­sis­tant re­sponse with­out leav­ing the con­ver­sa­tion. Hover over any as­sis­tant mes­sage and se­lect the thumbs-down but­ton to open the feed­back form, where you can re­port is­sues for rea­sons rang­ing from UI bugs to harm­ful con­tent.

Note that when you sub­mit a re­port, the full thread is shared with Kagi for re­view. The re­port and its as­so­ci­ated copy of the thread are au­to­mat­i­cally deleted from Kagi’s re­view records af­ter 30 days.

Export or delete all your threads

We’ve also added im­por­tant con­trols, so you can now ex­port all your threads or per­ma­nently delete them at once from Settings > General.

Kagi Search

A sharper search ex­pe­ri­ence

We’ve pol­ished the search re­sults page to make its con­trols eas­ier to find and un­der­stand. From the fil­ter bar to do­main-re­lated op­tions and menus, these up­dates bring greater clar­ity and ease of use to the fea­tures you rely on most.

Exchange rates, right in your search re­sults

Next up in our broader ef­fort to im­prove search wid­gets: cur­rency con­ver­sion. Comes handy when you’re plan­ning a trip, shop­ping abroad, or sim­ply want to keep tabs on ex­change rates.

Other im­prove­ments and bug fixes

Kagi Search

Fixed sev­eral an­i­ma­tions that did­n’t re­spect the sys­tem’s prefers-re­duced-mo­tion set­ting

Open first re­sult’ short­cut sug­ges­tion tries to es­cape dou­ble-quotes #8752 @craftypersimmon

Fake 1337x do­main #9279 @fxgn

Dice Number get­ting cut off in the thou­sands #10964 @Flossiii

Some Kagi lenses not work­ing for me in Kagi search #10970 @Fearce

NSFW re­sults when search­ing for xteink black vs white” while safe search is turned on #10905 @ciccero040

Incorrect de­f­i­n­i­tion of socialism” #10988 @thoroughly

Nothing trig­gers the weather wid­get when the in­ter­face lan­guage is set to German #4612 @laiz

Cannot Manually Select Location in Privacy Settings #11005 @iamjameswalters

More and share but­tons dis­ap­peared - Mobile DOM #10957 @NyraSyn

Slopstop blocks whole do­mains #11039 @kslays

Unable to re­port AI im­age slop on mo­bile due to popup clo­sure #11066 @Hanbyeol

Kagi adding ex­tra {{{s}}} in bang redi­rect when no query #9885 @jadams9

Profile not found for ki_re­search” er­ror when us­ing ?? short­hand #11020 @paying_customer

Kagi Knowledge an­swer for Labour Day 2025” gives wrong date #8713 @wanion

Delete re­cent lan­guage op­tion #8549 @ten

Stopwatch should not start from searches like 0424:2422 #6061 @xfhrnozxqnrnqrsvntp

[Android] Quick Switch Doesn’t work #7695 @cr0ntab

Save a round trip: Advertise HTTP/3 sup­port in an HTTPS DNS record #10829 @drrlvn

Searching for <script> re­turns no re­sults #11117 @Bonarc

Kagi Assistant

Camera but­ton in as­sis­tant #5261 @Arnaud

Assistant er­ror something went wrong…” when web ac­cess” is se­lected #6687 @Nyaa

Gemma 4 31B fail­ing to read im­ages #10947 @Dustin

Assistant: Remove whole his­tory #6971 @Wanja

Didn’t like a Quick Answer re­sponse? post it here #9082 @Thibaultmol

Hourglass de­sign is bad #11034 @shurik

AI companies destroy physical books — let’s scan rare books before it’s too late

annas-archive.pk

an­nas-archive.gl/​blog, 2026 – 08-05

A guest post by Anna’s Archive vol­un­teer u” (translated from Chinese).

TL;DR: AI com­pa­nies are se­cretly buy­ing, scan­ning, and de­stroy­ing mil­lions of phys­i­cal books to train their mod­els, per­ma­nently lock­ing hu­man knowl­edge in­side pri­vate cor­po­rate servers. Anna’s Archive is ur­gently call­ing on vol­un­teers world­wide to scan and up­load books be­fore this cul­tural her­itage dis­ap­pears for­ever.

Several AI com­pa­nies are ac­quir­ing large quan­ti­ties of sec­ond­hand books through in­ter­me­di­aries, scan­ning and de­stroy­ing them, all to ob­tain train­ing data untouched by ma­chines” from be­fore 2022.

Anthropic’s Project Panama” was ex­posed in a $1.5 bil­lion copy­right set­tle­ment. In early 2024, they launched this highly con­fi­den­tial pro­ject. The com­pany has spent tens of mil­lions of dol­lars pur­chas­ing mil­lions of pa­per books, scan­ning them, train­ing its Claude LLM, and then de­stroy­ing them all. It’s out­ra­geous is that it’s legally per­mis­si­ble, but eth­i­cally, it’s an ex­tremely se­ri­ous crime against hu­man­ity.

So why de­stroy phys­i­cal books? Behind it lies the AI race and the in­ter­ests of cap­i­tal:

It pre­vents these books from be­ing scanned and used for train­ing by com­peti­tors.

It avoids le­gal risks.

Destroying books is cheaper than loss­less scan­ning.

After AI com­pa­nies mas­sively scan and de­stroy phys­i­cal books, they be­come the only ones in the world with dig­i­tal copies. Knowledge is per­ma­nently mo­nop­o­lized on pri­vate servers.

This bat­tle for old books re­veals a para­dox: while promis­ing to make hu­man knowl­edge ac­ces­si­ble,” AI com­pa­nies are dis­man­tling the most solid car­ri­ers of hu­man knowl­edge. The pub­lic may gain more in­tel­li­gent AI as­sis­tants, but at the cost of a vast amount of knowl­edge re­sources dis­ap­pear­ing from the pub­lic do­main.

Shadow li­braries

As the world’s largest shadow li­brary, Anna’s Archive needs a plan to com­bat the de­struc­tion of phys­i­cal books by AI com­pa­nies. After all, the emer­gence of shadow li­braries is the great­est mir­a­cle of knowl­edge shar­ing in the 21st cen­tury. Along with other shadow li­braries, we’re build­ing a dig­i­tal li­brary of Alexandria, an in­ex­tin­guish­able light of hu­man­ity.

We need the help of vol­un­teers world­wide to scan ma­te­ri­als (including books, jour­nal ar­ti­cles, news­pa­pers, mag­a­zines, an­cient books, rare books, and other ma­te­ri­als) from every li­brary and archive around the world and up­load them to the shadow li­brary for knowl­edge preser­va­tion, es­pe­cially those that are eas­ily lost. If every per­son scans a book, and there are 10 mil­lion vol­un­teers world­wide, we can ob­tain 10 mil­lion pieces of in­valu­able wealth.

For small scans and up­loads, we usu­ally award recog­ni­tion and life­time mem­ber­ship to Anna’s Archive.

For large-scale scans and up­loads of books, we can help pay for the scan­ning fees and other re­wards.

Time is run­ning out

Since the be­gin­ning of 2025, AI-generated con­tent has ac­counted for more than half of newly pub­lished in­ter­net con­tent. A fright­en­ing re­al­ity emerges: if much of the fu­ture con­tent con­sists of AI-generated books and pa­pers, will hu­mans be able to dis­tin­guish them? Once AI has ab­sorbed even the last sen­tence writ­ten by hu­mans on pa­per, all that will re­main on the in­ter­net will be AIs own words. In such a world, how can hu­man civ­i­liza­tion be pre­served?

Shadow li­braries of­fer the best an­swer. If you want the mem­ory of hu­man civ­i­liza­tion to no longer be mo­nop­o­lized, if you want fu­ture gen­er­a­tions to be able to read all of hu­man­i­ty’s wealth for free, if you don’t want pub­lish­ers mak­ing a for­tune while au­thors re­ceive lit­tle, then please help us. Please make any con­tri­bu­tion you can, whether it’s scan­ning and up­load­ing books, pur­chas­ing books and pa­pers to scan and up­load, or do­nat­ing. With the ef­forts of all hu­man­ity, the mo­nop­oly on knowl­edge will be bro­ken. Each of us can make his­tory.

This is a race against time. Our ideal is to scan and up­load all the world’s pub­li­ca­tions be­fore pub­lish­ers com­pletely block knowl­edge, and be­fore AI com­pa­nies scan and de­stroy all the world’s books and pa­pers.

- Anna’s Archive vol­un­teer u”

Relevant tick­ets for more in­for­ma­tion: #223 #187

Grand jury declines to indict Ohio man charged with destroying Flock camera

san.com

A grand jury in Ohio has de­clined to in­dict a man charged with felony van­dal­ism for al­legedly de­stroy­ing a Flock au­to­matic li­cense plate reader cam­era.

Police in Union Township, a Cincinnati sub­urb, ac­cused Cody Morelock of dis­as­sem­bling the cam­era, its sup­port pole and so­lar panel on June 13.

Investigators, ac­cord­ing to WKRC-TV in Cincinnati, iden­ti­fied Morelock af­ter ob­tain­ing sur­veil­lance footage from other cam­eras near the scene as well as in­for­ma­tion linked to a credit card and a cus­tomer re­wards ac­count.

Download the Straight Arrow app to­day to get the sto­ries that mat­ter free from ma­nip­u­la­tion, bias or agenda.™

Point phone cam­era here

Police es­ti­mated the dam­age at more than $1,000. Morelock posted a $10,000 bond and was re­leased from cus­tody shortly af­ter his ar­rest.

A Clermont County grand jury, how­ever, opted not to in­dict Morelock, and the charges were dis­missed.

Flock re­sis­tance grow­ing

While de­tails on the grand ju­ry’s de­ci­sion are lim­ited, it comes amid a grow­ing back­lash against Flock and its cam­eras.

The com­pa­ny’s cam­eras record the li­cense plate num­bers and char­ac­ter­is­tics of ve­hi­cles that pass by. The data is then hosted in a cen­tral data­base that can be ac­cessed not only by lo­cal po­lice but of­ten by law en­force­ment agen­cies in other cities and states.

The in­ci­dent in Union Township is part of an on­go­ing trend that has seen dozens of Flock cam­eras van­dal­ized across the coun­try. Earlier this month, po­lice in Winona, Minnesota, re­ported that some­one had cut down and stolen each of the city’s eight li­cense plate reader cam­eras.

Social me­dia users are pro­mot­ing a loosely or­ga­nized event known as De-Flock America Night,” en­cour­ag­ing peo­ple to van­dal­ize or ob­scure Flock cam­eras on Halloween.

The back­lash against Flock has in­ten­si­fied as a grow­ing num­ber of po­lice of­fi­cers have been ac­cused of or charged with abus­ing the tech­nol­ogy, of­ten to stalk ro­man­tic in­ter­ests. As of Aug. 12, there had been more than 100 cases of abuse by law en­force­ment, ac­cord­ing to the Institute for Justice.

In re­sponse, Flock an­nounced new safe­guards de­signed to pre­vent mis­use by po­lice. Critics, such as the Electronic Frontier Foundation, ar­gue that the re­forms are largely cosmetic,” and that war­rants should be re­quired for search­ing li­cense plate reader data.

Round out your read­ing

Your phone is­n’t re­ally eaves­drop­ping. But it still knows all about you.

After years of deny­ing other elec­tions, MyPillow founder won’t ac­cept his own de­feat.

Gun sup­pres­sors sold un­reg­is­tered for the first time since FDR, but not for every­one.

Why an over-scrolled gen­er­a­tion is turn­ing to grandma hob­bies’ for men­tal health.

Our per­sonal in­for­ma­tion is for sale on the in­ter­net. We know — we bought it.

Mikael Thalen is a tech re­porter for Straight Arrow, where he cov­ers cy­ber­se­cu­rity, sur­veil­lance, hack­ing and dig­i­tal pri­vacy.

AI companies destroy physical books — let’s scan rare books before it’s too late

annas-archive.gl

an­nas-archive.gl/​blog, 2026 – 08-05

A guest post by Anna’s Archive vol­un­teer u” (translated from Chinese).

TL;DR: AI com­pa­nies are se­cretly buy­ing, scan­ning, and de­stroy­ing mil­lions of phys­i­cal books to train their mod­els, per­ma­nently lock­ing hu­man knowl­edge in­side pri­vate cor­po­rate servers. Anna’s Archive is ur­gently call­ing on vol­un­teers world­wide to scan and up­load books be­fore this cul­tural her­itage dis­ap­pears for­ever.

Several AI com­pa­nies are ac­quir­ing large quan­ti­ties of sec­ond­hand books through in­ter­me­di­aries, scan­ning and de­stroy­ing them, all to ob­tain train­ing data untouched by ma­chines” from be­fore 2022.

Anthropic’s Project Panama” was ex­posed in a $1.5 bil­lion copy­right set­tle­ment. In early 2024, they launched this highly con­fi­den­tial pro­ject. The com­pany has spent tens of mil­lions of dol­lars pur­chas­ing mil­lions of pa­per books, scan­ning them, train­ing its Claude LLM, and then de­stroy­ing them all. It’s out­ra­geous is that it’s legally per­mis­si­ble, but eth­i­cally, it’s an ex­tremely se­ri­ous crime against hu­man­ity.

So why de­stroy phys­i­cal books? Behind it lies the AI race and the in­ter­ests of cap­i­tal:

It pre­vents these books from be­ing scanned and used for train­ing by com­peti­tors.

It avoids le­gal risks.

Destroying books is cheaper than loss­less scan­ning.

After AI com­pa­nies mas­sively scan and de­stroy phys­i­cal books, they be­come the only ones in the world with dig­i­tal copies. Knowledge is per­ma­nently mo­nop­o­lized on pri­vate servers.

This bat­tle for old books re­veals a para­dox: while promis­ing to make hu­man knowl­edge ac­ces­si­ble,” AI com­pa­nies are dis­man­tling the most solid car­ri­ers of hu­man knowl­edge. The pub­lic may gain more in­tel­li­gent AI as­sis­tants, but at the cost of a vast amount of knowl­edge re­sources dis­ap­pear­ing from the pub­lic do­main.

Shadow li­braries

As the world’s largest shadow li­brary, Anna’s Archive needs a plan to com­bat the de­struc­tion of phys­i­cal books by AI com­pa­nies. After all, the emer­gence of shadow li­braries is the great­est mir­a­cle of knowl­edge shar­ing in the 21st cen­tury. Along with other shadow li­braries, we’re build­ing a dig­i­tal li­brary of Alexandria, an in­ex­tin­guish­able light of hu­man­ity.

We need the help of vol­un­teers world­wide to scan ma­te­ri­als (including books, jour­nal ar­ti­cles, news­pa­pers, mag­a­zines, an­cient books, rare books, and other ma­te­ri­als) from every li­brary and archive around the world and up­load them to the shadow li­brary for knowl­edge preser­va­tion, es­pe­cially those that are eas­ily lost. If every per­son scans a book, and there are 10 mil­lion vol­un­teers world­wide, we can ob­tain 10 mil­lion pieces of in­valu­able wealth.

For small scans and up­loads, we usu­ally award recog­ni­tion and life­time mem­ber­ship to Anna’s Archive.

For large-scale scans and up­loads of books, we can help pay for the scan­ning fees and other re­wards.

Time is run­ning out

Since the be­gin­ning of 2025, AI-generated con­tent has ac­counted for more than half of newly pub­lished in­ter­net con­tent. A fright­en­ing re­al­ity emerges: if much of the fu­ture con­tent con­sists of AI-generated books and pa­pers, will hu­mans be able to dis­tin­guish them? Once AI has ab­sorbed even the last sen­tence writ­ten by hu­mans on pa­per, all that will re­main on the in­ter­net will be AIs own words. In such a world, how can hu­man civ­i­liza­tion be pre­served?

Shadow li­braries of­fer the best an­swer. If you want the mem­ory of hu­man civ­i­liza­tion to no longer be mo­nop­o­lized, if you want fu­ture gen­er­a­tions to be able to read all of hu­man­i­ty’s wealth for free, if you don’t want pub­lish­ers mak­ing a for­tune while au­thors re­ceive lit­tle, then please help us. Please make any con­tri­bu­tion you can, whether it’s scan­ning and up­load­ing books, pur­chas­ing books and pa­pers to scan and up­load, or do­nat­ing. With the ef­forts of all hu­man­ity, the mo­nop­oly on knowl­edge will be bro­ken. Each of us can make his­tory.

This is a race against time. Our ideal is to scan and up­load all the world’s pub­li­ca­tions be­fore pub­lish­ers com­pletely block knowl­edge, and be­fore AI com­pa­nies scan and de­stroy all the world’s books and pa­pers.

- Anna’s Archive vol­un­teer u”

Relevant tick­ets for more in­for­ma­tion: #223 #187

Vision | DeepSeek API Docs

api-docs.deepseek.com

The deepseek-v4-flash-vi­sion-exp model ac­cepts im­ages along­side text, so you can ask the model to de­scribe pic­tures, read text from screen­shots, an­a­lyze charts, and more.

Supported im­age for­mats: JPEG, PNG, GIF, and WebP. The for­mat is de­tected from the ac­tual file con­tent, not from the file name or the de­clared MIME type.

Sending Images​

There are three ways to pro­vide an im­age to the model. All of them use the stan­dard OpenAI-compatible Chat Completions for­mat, where con­tent is an ar­ray of blocks in­stead of a plain string. The same three meth­ods are also avail­able in the Responses API, where im­ages are car­ried in in­put_im­age con­tent parts.

The base_url for the ex­am­ples be­low is https://​api.deepseek.com.

1. Base64-encoded im­age (inline)​

Encode the im­age and em­bed it di­rectly in the re­quest as a data: URL. This is the sim­plest op­tion for lo­cal files. The en­coded data counts to­ward the 48 MiB re­quest body limit (see Limits).

im­port base64from ope­nai im­port OpenAIclient = OpenAI(api_key=“<DeepSeek API Key>”, base_url=“https://​api.deepseek.com)with open(“im­age.jpg”, rb”) as f: b64 = base64.b64en­code(f.read()).de­code(“utf-8″)re­sponse = client.chat.com­ple­tions.cre­ate( model=“deepseek-v4-flash-vi­sion-exp”, mes­sages=[ { role”: user”, content”: [ {“type”: text”, text”: What is in this im­age?“}, { type”: image_url”, image_url”: {“url”: f”data:im­age/​jpeg;base64,{b64}“}, }, ], } ],)print(response.choices[0].message.content)

curl https://​api.deepseek.com/​chat/​com­ple­tions \ -H Content-Type: ap­pli­ca­tion/​json” \ -H Authorization: Bearer <DeepSeek API Key>” \ -d { model”: deepseek-v4-flash-vision-exp”, messages”: [ { role”: user”, content”: [ {“type”: text”, text”: What is in this im­age?“}, {“type”: image_url”, image_url”: {“url”: data:image/jpeg;base64,<BASE64_DATA>“}} ] } ] }’

2. External im­age URL​

Pass a pub­licly ac­ces­si­ble http(s) link and the model down­loads the im­age for you. The URL must be at most 8192 char­ac­ters, the im­age file may be at most 32 MiB, and the down­load must com­plete within 60 sec­onds. If your link is longer, use a base64 data URL or the Files API in­stead.

re­sponse = client.chat.com­ple­tions.cre­ate( model=“deepseek-v4-flash-vi­sion-exp”, mes­sages=[ { role”: user”, content”: [ {“type”: text”, text”: Describe this im­age.“}, { type”: image_url”, image_url”: {“url”: https://​ex­am­ple.com/​im­age.jpg}, }, ], } ],)print(response.choices[0].message.content)

3. Reference a file up­loaded via the Files API​

Upload an im­age once with the Files API, then ref­er­ence its file_id in your re­quests. This is the best op­tion when you reuse the same im­age across mul­ti­ple re­quests, or when the im­age pushes the re­quest body over the 48 MiB in­line limit. Unlike in­line im­ages, im­ages ref­er­enced via Files API file_id may be up to 64 MiB and are not sub­ject to the 32 MiB per-im­age check.

Use a file con­tent block with the re­turned file_id (which has the form file-api-…):

re­sponse = client.chat.com­ple­tions.cre­ate( model=“deepseek-v4-flash-vi­sion-exp”, mes­sages=[ { role”: user”, content”: [ {“type”: text”, text”: What is in this im­age?“}, {“type”: file”, file_id”: file-api-xxxxxxxxxxxxxxxx”}, ], } ],)print(response.choices[0].message.content)

Alternatively, a file block can carry the im­age in­line as base64 via file_­data in­stead of file_id (the two are mu­tu­ally ex­clu­sive):

{ type”: file”, file_data”: data:image/jpeg;base64,<BASE64_DATA>”, filename”: image.jpg”}

Detail Level​

For im­age_url in­puts you can op­tion­ally set a de­tail field to con­trol how the im­age is processed:

{ type”: image_url”, image_url”: {“url”: https://​ex­am­ple.com/​im­age.jpg, detail”: low”}}

When to Use the Files API​

Inline im­ages (base64 or file_­data) count to­ward the re­quest body size limit of 48 MiB. Consider the Files API when:

A sin­gle re­quest would ex­ceed the body size limit.

The im­age is larger than 32 MiB, which is only pos­si­ble through the Files API.

You ref­er­ence the same im­age in mul­ti­ple re­quests and want to avoid re-up­load­ing it each time.

Token Usage​

Images are con­verted into to­kens based on their di­men­sions, and these to­kens are billed to­gether with your text to­kens.

Before in­fer­ence, every im­age is au­to­mat­i­cally re­sized:

Images with a to­tal pixel count be­low roughly 384×384 are scaled up while pre­serv­ing their as­pect ra­tio.

Larger im­ages are scaled down while pre­serv­ing their as­pect ra­tio, so that the to­tal pixel count af­ter re­siz­ing is roughly that of an 800×800 im­age.

As a re­sult, there is an up­per bound of 384 to­kens per im­age: for ex­am­ple, a 2000×2000 im­age and a 5000×5000 im­age con­sume the same num­ber of to­kens af­ter re­siz­ing. When a re­quest con­tains mul­ti­ple im­ages, each im­age is counted in­de­pen­dently un­der the same rule — there is no sep­a­rate cal­cu­la­tion for multi-im­age re­quests.

To es­ti­mate the to­ken cost of an im­age of a spe­cific size, use the im­age to­ken cal­cu­la­tor on the Token & Token Usage page.

Limits​

For stor­age and up­load quo­tas of files up­loaded via the Files API, see Files API: Limits.

Restrictions​

Images are sup­ported in user mes­sages only: im­ages in sys­tem or as­sis­tant mes­sages re­turn a 400 er­ror.

Only vi­sion mod­els (deepseek-v4-flash-vision-exp) ac­cept im­ages; other mod­els re­turn a 400 er­ror (“This model does not sup­port im­age”).

User text con­tain­ing the re­served im­age place­holder to­ken is re­jected with a 400 er­ror.

Using Images with the Anthropic API​

In ad­di­tion to the OpenAI-compatible end­point above, you can send im­ages through the Anthropic-compatible /messages end­point (base_url = https://​api.deepseek.com/​an­thropic). For gen­eral setup, see Anthropic API.

The dif­fer­ence is the shape of the im­age con­tent block. Instead of im­age_url, Anthropic uses an im­age block with a source ob­ject whose type is one of base64, url, or file:

im­port an­throp­ic­client = an­thropic.An­thropic() # ANTHROPIC_BASE_URL=https://​api.deepseek.com/​an­throp­icmes­sage = client.mes­sages.cre­ate( model=“deepseek-v4-flash-vi­sion-exp”, max_­to­kens=1024, mes­sages=[ { role”: user”, content”: [ {“type”: text”, text”: What is in this im­age?“}, { type”: image”, source”: { type”: base64”, media_type”: image/jpeg”, data”: <BASE64_DATA>”, }, }, ], } ],)print(message.content)

The three source vari­ants mir­ror the OpenAI meth­ods above:

Using Images with the Responses API​

The deepseek-v4-flash-vi­sion-exp model also ac­cepts im­ages through the OpenAI-compatible Responses API. The same three in­put meth­ods (base64 data URL, ex­ter­nal http(s) URL, Files API file_id) and the same lim­its ap­ply; only the con­tent part shape dif­fers — im­ages are car­ried in in­put_im­age parts, ei­ther in user / de­vel­oper mes­sages or in the out­put of func­tion_­cal­l_out­put / cus­tom_­tool_­cal­l_out­put items:

re­sponse = client.re­sponses.cre­ate( model=“deepseek-v4-flash-vi­sion-exp”, in­put=[ { role”: user”, content”: [ {“type”: input_text”, text”: What is in this im­age?“}, {“type”: input_image”, image_url”: https://​ex­am­ple.com/​im­age.jpg, detail”: low”}, ], } ],)print(response.output_text)

The in­put_im­age part sup­ports a de­tail field with the same se­man­tics as above (low / high / orig­i­nal / auto). de­tail is ig­nored when the im­age is pro­vided via file_id, and im­age_url and file_id are mu­tu­ally ex­clu­sive.

For field se­man­tics, re­stric­tions (images in sys­tem / as­sis­tant mes­sages are re­jected with a 400 er­ror), and tool-out­put im­ages, see the Responses API guide.

Japan tried to build an operating system for the entire world, then the US government intervened

www.xda-developers.com

Published Aug 20, 2026, 9:00 AM EDT

I’m Adam Conway, an Irish tech­nol­ogy fa­natic with a BSc in Computer Science and I’m XDAs Lead Technical Editor. My Bachelor’s the­sis was con­ducted on the vi­a­bil­ity of bench­mark­ing the non-func­tional el­e­ments of Android apps and smart­phones such as per­for­mance, and I’ve been work­ing in the tech in­dus­try in some way or an­other since 2017.

In my spare time, you’ll prob­a­bly find me play­ing Counter-Strike or VALORANT, and you can reach out to me at adam@xda-de­vel­op­ers.com, on Twitter as @AdamConwayIE, on Instagram as AdamConwayIE, or u/​Adam­Con­wayIE on Reddit.

Sign in to your XDA ac­count

There’s a ver­sion of com­put­ing his­tory where the desk­top OS that won was­n’t Windows. Not be­cause the al­ter­na­tive was Unix-based or be­cause Apple pulled off some­thing dif­fer­ent, but be­cause an op­er­at­ing sys­tem de­signed at the University of Tokyo in 1984 was am­bi­tious enough to try to re­place the file sys­tem with a hy­per­me­dia doc­u­ment model, run on a cus­tom Japanese CPU ar­chi­tec­ture, and en­code 1.5 mil­lion char­ac­ters, only to have a US trade re­port sin­gle it out as an un­fair trade bar­rier in 1989.

That pro­ject was TRON (The Real-time Operating sys­tem Nucleus), a real, gov­ern­ment-backed Japanese com­put­ing ini­tia­tive whose desk­top vari­ant, BTRON, was named in a US trade bar­rier re­port and ef­fec­tively killed be­fore it could reach schools na­tion­wide. Meanwhile, its em­bed­ded coun­ter­part, ITRON, qui­etly be­came one of the most de­ployed op­er­at­ing sys­tems in his­tory.

TRONs his­tory has since at­tracted some gen­uinely wild con­spir­acy the­o­ries, in­clud­ing one claim­ing that Japan Airlines Flight 123 was de­lib­er­ately crashed in or­der to tar­get the TRON de­vel­op­ers on board, de­spite there be­ing no ev­i­dence that any TRON de­vel­op­ers were even on the flight. But the strangest part of the story is­n’t even a con­spir­acy the­ory: BTRONs hy­per­me­dia desk­top was decades ahead of what the mar­ket could sup­port, and SoftBank founder Masayoshi Son may have helped sink it from the in­side.

Ken Sakamura de­signed an OS fam­ily for the whole of Japanese so­ci­ety

He wanted all of it, sil­i­con in­cluded

Ken Sakamura was a re­searcher at the University of Tokyo when he launched the TRON Project in 1984. It was an am­bi­tious un­der­tak­ing; he wanted a ver­ti­cally in­te­grated com­put­ing ar­chi­tec­ture that Japan could build its en­tire dig­i­tal in­fra­struc­ture on, from the mi­cro­con­troller in a wash­ing ma­chine to the work­sta­tion on a desk to the tele­com switch in a cen­tral of­fice. The pro­ject had five sub-ar­chi­tec­tures: ITRON for em­bed­ded real-time sys­tems, BTRON for per­sonal com­put­ers, CTRON for main­frames and tele­com switch­ing, MTRON for cross-sys­tem co­or­di­na­tion, and STRON, a hard­ware im­ple­men­ta­tion of the real-time ker­nel.

The pro­ject de­signed its own CPU ar­chi­tec­ture, the TRON VLSI CPU, which Hitachi man­u­fac­tured as the Gmicro/200 se­ries. Hitachi ac­tu­ally pro­duced and sold it, and it ended up pow­er­ing some Japanese work­sta­tions and em­bed­ded sys­tems through­out the late 1980s. Sakamura’s team also drew up its own TRON key­board lay­out, de­signed for ef­fi­cient Japanese text in­put along­side pro­gram­ming sym­bols, and a real-time pe­riph­eral bus called mi­cro-BTRON, based on IEEE 802.5 and in­tended as an al­ter­na­tive to MIDI for con­nect­ing electronic sta­tionery” pe­riph­er­als, though that bus never shipped in a com­mer­cial prod­uct. The idea was that every layer, from sil­i­con to user in­ter­face, would be de­signed to­gether, with no com­pat­i­bil­ity debt to ex­ist­ing plat­forms.

The char­ac­ter en­cod­ing sys­tem, TRON Code, was ar­guably the most am­bi­tious part. It sup­ported multi-plane char­ac­ter switch­ing via 0xFE es­cape codes, with 31 de­fined planes of 48,400 char­ac­ters each, giv­ing a the­o­ret­i­cal ca­pac­ity of 1,500,400 char­ac­ters. By 1999, B-right/V R2 shipped with roughly 130,000 char­ac­ters across 14 de­fined planes, cov­er­ing JIS lev­els 1 and 2, Chinese GB 2312, Korean KS C 5601, Unicode’s non-CJK range, and the Mojikyo col­lec­tion of rare his­tor­i­cal char­ac­ters, and users could reg­is­ter new char­ac­ters for free through the TRON Character Resource Center. To put that in per­spec­tive, Unicode 1.0 in 1991 de­fined 20,902 uni­fied CJK ideo­graphs, and TRONs CJK cov­er­age ex­ceeded Unicode’s for well over a decade. A large part of that count came from Mojikyo, though, which sep­a­rately en­codes vari­ant glyphs that Unicode uni­fies into sin­gle code points.

You can see the am­bi­tion from the very be­gin­ning, as the 1996 demo re­lease in­cludes a char­ac­ter-code viewer that lists its planes side by side: Japanese ba­sic, Japanese sup­ple­men­tary, Chinese GB, Korean KSC, and 6-dot Braille. Braille is there as a first-class plane rather than an ac­ces­si­bil­ity add-on bolted on later, and Unicode did­n’t en­code Braille pat­terns at all un­til ver­sion 3.0 in 1999. For its time TRON Code was the best an­swer any­one had to a prob­lem the rest of the in­dus­try was years from solv­ing.

The pro­ject was backed by an ac­tual or­ga­ni­za­tion: the TRON Association, es­tab­lished in 1986. Its mem­bers in­cluded Hitachi, Mitsubishi, Fujitsu, NEC, Matsushita, and Toshiba… ba­si­cally every ma­jor Japanese elec­tron­ics com­pany of the era. On top of those do­mes­tic com­pa­nies, for­eign com­pa­nies could join too, and sev­eral did. TRON was roy­alty-free and its spec­i­fi­ca­tions were open, which was a de­lib­er­ate choice that would later al­low ITRON to spread. The Japanese gov­ern­ment, through MITI, sup­ported the pro­ject as a na­tional tech­nol­ogy strat­egy, giv­ing it the kind of in­sti­tu­tional back­ing that most op­er­at­ing sys­tem pro­jects could only dream of.

On top of all this, BTRON pro­posed some­thing rad­i­cal for desk­tops.

BTRONs desk­top was decades ahead of where com­put­ing ac­tu­ally went

The file and the ap­pli­ca­tion were im­ple­men­ta­tion de­tails

BTRONs core idea was that the user-vis­i­ble prim­i­tive on a desk­top com­puter should­n’t be a file or the ap­pli­ca­tion, but the typed doc­u­ment part. In other words, a block of con­tent with a sta­ble iden­tity and a de­clared type. Parts can con­tain other parts, and the same mech­a­nisms that em­bed a fig­ure in a re­port can also em­bed a re­port in a work­space, mean­ing that there was no spe­cial case for a top-level file.

This model could be found across the in­ter­face as well, and you can browse a con­tainer in 1B/V3 and see each en­try car­ries its type in paren­the­ses af­ter the name. For ex­am­ple, a doc­u­ment called 中国・韓国料理ガイド(図形), mean­ing Chinese and Korean Cuisine Guide (Graphics)”, de­scribes this file as an im­age. In com­par­i­son, DOS would have given you an ex­ten­sion.

Parts were con­nected by typed links, stored in a sys­tem-man­aged link store rather than frag­ile string paths. Links sur­vived re­names, ed­its, and re­or­ga­ni­za­tions, and ap­pli­ca­tions weren’t own­ers of files but han­dlers for part types. According to the BTRON3 spec­i­fi­ca­tion, the first two half­words of an ap­pli­ca­tion ID are the data type it ap­plies to, and only the third dis­tin­guishes ri­val han­dlers for the same type. When a doc­u­ment con­tained writ­ing, a table, and a fig­ure, open­ing those parts made the sys­tem launch each one’s reg­is­tered han­dler to draw its own con­tent in­side the par­ent doc­u­men­t’s win­dow. If no han­dler ex­ists, or the han­dler fails to draw, the sys­tem strikes a di­ag­o­nal line through the re­gion where the con­tent should have been.

BTRON also used a file sys­tem model called real-body/​pseudo-body, which re­placed the tree-struc­tured di­rec­tory hi­er­ar­chy with an ar­bi­trary di­rected graph. Files can ex­ist in mul­ti­ple lo­ca­tions with­out du­pli­ca­tion, linked by the sys­tem rather than by sym­links or short­cuts, and the dic­tio­nary that pow­ers Japanese text in­put is ad­dressed the same way a cook­ing guide would be. Here, the TRON Application Databus for­mat car­ries struc­tured data be­tween ap­pli­ca­tions us­ing a chun­ked seg­ment struc­ture with a com­mon header, so a spread­sheet cell and a para­graph of text could be com­posed into the same doc­u­ment with­out the user ever hav­ing to think about file for­mats. Applications can skip data types they don’t sup­port, mak­ing in­ter­op­er­abil­ity a core as­pect of the sys­tem.

Arguably, this is the same con­cept that tools like Roam, Logseq, and Obsidian have been re­dis­cov­er­ing over the last decade. But BTRON pro­posed it as the fun­da­men­tal OS ab­strac­tion in the mid-1980s, paired with a cus­tom CPU and a real-time mi­cro­ker­nel un­der­neath. It’s not that BTRONs im­ple­men­ta­tion would feel smooth by mod­ern stan­dards, be­cause the hard­ware it ran on was too slow for that, but the ar­chi­tec­ture was do­ing some­thing con­cep­tu­ally dif­fer­ent from any­thing that shipped com­mer­cially in the West at the time.

1B/V3 comes with a num­ber of sam­ple doc­u­ments that show ex­actly this con­cept. One demon­stra­tion is a Microscript fig­ure, which is a draw­ing can­vas hold­ing a green ball and a sloped sur­face, each a named ob­ject, with a text sec­tion dubbed SCRIPT in the same space. You can open the script and see DEFINE 半径(ボール.W/2), defin­ing a ra­dius as half the bal­l’s width, then SET 新Y ボール.Y+半径+速度Y/4″ which ad­vances the bal­l’s po­si­tion on each step. The script ad­dresses the fig­ure’s con­tents as ボール.X and 斜面.W, mean­ing ob­ject and prop­erty, and the en­tire file is a sin­gle doc­u­ment rather than a pro­gram load­ing data files. Sure, a bounc­ing-ball sim­u­la­tion is a small thing to build, but the point is that it’s a typed part in­side the doc­u­ment in­stead of a ded­i­cated ap­pli­ca­tion that owns it.

BTRON was made avail­able in a small num­ber of prod­ucts in Japan: for ex­am­ple, the BrainPad TiPO PDA from Seiko Instruments had a ver­sion with a touch­screen and sty­lus. As well, B-right/V (also called Cho-Kanji) was avail­able on com­mod­ity PC hard­ware through Personal Media Corporation, a com­pany that still lists the soft­ware on its Japanese-language web­site to­day. This is 1B/V3, and I got the demo disk work­ing in 86Box on an Apple Silicon Mac. All it needs, at min­i­mum, is a mid-90s Pentium clone with 16MB of RAM and a Cirrus Logic video card.

Unfortunately, BTRON never got the dis­tri­b­u­tion it needed, and by 1989 it had a much big­ger prob­lem than adop­tion.

The US gov­ern­ment named TRON in a trade bar­rier re­port

Buried in Section 7

In April 1989, the Office of the US Trade Representative pub­lished its an­nual National Trade Estimate Report on Foreign Trade Barriers. Buried in Section 7, Other Barriers,” was a sec­tion about TRON. The re­port stated that the US had con­cerns about Japanese gov­ern­ment mar­ket in­ter­ven­tion to sup­port the TRON OS and iden­ti­fied two spe­cific mar­kets where TRON was re­ceiv­ing gov­ern­ment ad­van­tage.

The first ad­van­tage it was deemed to be ben­e­fit­ing from was in the in­dus­try of ed­u­ca­tional PCs. The Japanese Ministry of Education and MITI were de­vel­op­ing a stan­dard spec­i­fi­ca­tion for com­put­ers be­ing in­tro­duced into mid­dle schools na­tion­wide, and the spec­i­fi­ca­tion was built around TRON. The sec­ond was NTTs next-gen­er­a­tion dig­i­tal com­mu­ni­ca­tions net­work, which planned to adopt CTRON, the tele­com vari­ant. The re­port noted that while sev­eral US com­pa­nies were mem­bers of the TRON Association, none were in a po­si­tion to sell TRON-based prod­ucts in ei­ther mar­ket.

The NTE re­port was an an­nual sur­vey of for­eign trade bar­ri­ers, and it was­n’t a sanc­tions list. The more ag­gres­sive Super 301 process, es­tab­lished by the 1988 Trade Act, was a sep­a­rate mech­a­nism that could es­ca­late a dis­pute into in­ves­ti­ga­tion and ne­go­ti­a­tion, and TRON was never des­ig­nated a Super 301 pri­or­ity. The ac­tual Japan des­ig­na­tions that year were su­per­com­put­ers, satel­lites, and for­est prod­ucts, as Carla Hills’ May 25 state­ment con­firms. No sanc­tions were ever ap­plied to TRON, but it was clear that the US gov­ern­ment had been spooked for some rea­son by the TRON pro­ject.

In fact, Ken Sakamura was sur­prised that it had been named at all. In an in­ter­view with Japan’s Yomiuri Shimbun pub­lished in August 2026, he said: TRON is open to the world, and American com­pa­nies can use it freely. Why would it be­come a tar­get of trade fric­tion? I had no idea what was go­ing on.”

The TRON Association sent a writ­ten protest to the US gov­ern­ment, and the US sent an in­spec­tion team to in­ves­ti­gate as a re­sult. By Sakamura’s ac­count, the mat­ter was closed over a din­ner where the USTR told him On in­ves­ti­ga­tion, it turned out that BTRON is no harm. We are sorry for caus­ing trou­bles to you if any.” Unfortunately, by June 1989, the school adop­tion was dead.

Even though the le­gal re­al­ity was that TRONs nam­ing in the sur­vey was re­solved, that mat­tered less than the rep­u­ta­tional hit it took as a re­sult. Japanese man­u­fac­tur­ers in­ter­preted the dis­pute as a sig­nal that TRON had an­gered the US gov­ern­ment, and stay­ing as­so­ci­ated with it could threaten their American busi­ness. Companies with­drew from TRON PC de­vel­op­ment left and right, and Yomiuri quotes an in­dus­try source de­scrib­ing the out­come bluntly: TRON it­self was never de­nied, but it be­came an OS with a blem­ish from America. We can’t use it.”

Funnily enough, the USTRs com­plaint had some va­lid­ity to it. After all, the ob­jec­tion to TRON did­n’t come from it be­ing closed off or ex­clu­sion­ary, but that the Japanese gov­ern­ment was steer­ing its pro­cure­ment of two huge mar­kets to­ward a do­mes­tic stan­dard. This had the ef­fect of ex­clud­ing for­eign ven­dors re­gard­less of whether TRONs spec was open or not. However, what hap­pened af­ter, namely the rep­u­ta­tional dam­age, is a lot harder to jus­tify.

There’s an­other side to this story, though, and it re­frames things a lit­tle bit. In a book from Scott Callon in 1995, Divided Sun: MITI and the Breakdown of Japanese High-Tech Industrial Policy,” he ar­gues that BTRON was al­ready strug­gling with in­ter­nal co­or­di­na­tion prob­lems and de­layed hard­ware be­fore the trade dis­pute, which made the con­tro­versy a con­ve­nient way to exit the mar­ket. An aca­d­e­mic pa­per pub­lished in 2003, ti­tled Three Attempts at De-Wintelization,” frames this dis­pute as just an­other event in a longer pat­tern of Japanese ef­forts to chal­lenge the Wintel mo­nop­oly, each of which failed for a com­bi­na­tion of po­lit­i­cal and struc­tural rea­sons.

Even still, Matsushita Communication Industrial shipped the PanaCAL ET in 1990, which was a BTRON ed­u­ca­tional PC, but the mo­men­tum was well and truly gone at this stage. But there was an­other fac­tor too, one that Sakamura him­self would later de­scribe as the real cause of the dam­age.

SoftBank’s founder may have weaponized the re­port against BTRON

He pub­lished a book called The Tron Revolution’ first

There’s a book from Japanese re­porter Eiji Oshita, writ­ten in 1999 as a bi­og­ra­phy about Masayoshi Son. In the book, ti­tled Masayoshi Son: The Young Lion of Entrepreneurship,” Oshita writes that Son had a di­rect in­cen­tive to sab­o­tage the TRON pro­ject. Oshita states that Son was build­ing a soft­ware dis­tri­b­u­tion busi­ness around im­port­ing American PC soft­ware, and if TRON-based, Windows-incompatible PCs be­came the stan­dard in Japanese schools (which was a cap­tive mar­ket), then his busi­ness model would take a se­ri­ous hit.

Oshita’s bi­og­ra­phy fur­ther de­scribes Son lob­by­ing MITI of­fi­cials, politi­cians, and busi­ness lead­ers to op­pose TRONs adop­tion, ar­gu­ing that TRON would iso­late Japan from global com­put­ing stan­dards. The TRON Association pub­lished an ed­i­to­r­ial in its own TRONWARE mag­a­zine in December 1999 ti­tled People who blocked the TRON pro­ject,” which stated that the per­son who de­stroyed BTRON us­ing the USTR was not an American com­pany, but a Japanese per­son.”

Stranger still, the strongest cor­rob­o­ra­tion of this al­le­ga­tion comes from Ken Sakamura him­self. On the of­fi­cial TRON Project 30th Anniversary web­site, pub­lished some­time in 2014, Sakamura wrote a sec­tion called An Unexpected Ending” that di­rectly names Son. He de­scribes how the Oshita bi­og­ra­phy de­tails Son mo­bi­liz­ing every con­nec­tion he had to op­pose BTRON, and in Sakamura’s own words: I have to ad­mit I was im­pressed by his thor­ough­ness.”

Son’s SoftBank pub­lish­ing di­vi­sion had pub­lished a book called The Tron Revolution” in December 1988, four months be­fore the USTR re­port that named TRON as a trade bar­rier.

All of this is from ma­chine trans­la­tions of Oshita’s bi­og­ra­phy, the TRON pro­ject an­niver­sary site, and other sources that ap­pear to have never been pub­lished in English. It’s im­por­tant to know that the Yomiuri se­ries ap­proaches this claim far more ap­pre­hen­sively than Sakamura does: It says that there was talk that Son op­posed TRON,” rather than out­right ac­cus­ing him of it. We don’t know for sure if Son killed BTRON, but it’s hard to dis­miss Sakamura’s own words as merely a ru­mor.

Sakamura goes fur­ther as well when he ac­cuses Son, stat­ing that Son used the US trade process as his way of sab­o­tag­ing the pro­ject. He said that the per­son who de­stroyed BTRON did so through what was es­sen­tially rep­u­ta­tional dam­age lever­ag­ing the USTR,” which is­n’t nec­es­sar­ily a claim that Son man­u­fac­tured the NTE re­port, just that he ex­ploited its ex­is­tence. This par­tic­u­lar de­tail, amongst many oth­ers, I could­n’t find trans­lated to English any­where else, and it comes from some­one who was es­sen­tially the fa­ther of the en­tire pro­ject.

To be fair to Sakamura as well, it ac­tu­ally lines up well with what hap­pened, and ex­plains sev­eral as­pects of it. It cer­tainly makes more sense than a claim that Son’s lob­by­ing and the US com­plaint were to­tally un­re­lated.

The em­bed­ded vari­ant no­body no­ticed is in bil­lions of de­vices

ITRON sur­vived and be­came valu­able in­fra­struc­ture

While BTRON was dy­ing, it was ITRON that was qui­etly spread­ing around the world. As an em­bed­ded real-time op­er­at­ing sys­tem, it did­n’t need a mon­i­tor, a key­board, or a 1.5-million-character en­cod­ing space. All it needed was to be small, de­ter­min­is­tic, and roy­alty-free, which it was. Remember the Java in­staller say­ing 3 bil­lion de­vices run Java”? Yeah, we’ll get to that in a sec­ond.

ITRON, and later T-Kernel, shipped in dig­i­tal cam­eras, car en­gine con­trol units, mo­bile phones, fac­tory au­toma­tion equip­ment, and home ap­pli­ances. Casio’s QV-10, the cam­era widely cred­ited with spark­ing the dig­i­tal cam­era rev­o­lu­tion, ran on TRON, and Toyota even used it in en­gine con­trol sys­tems. On top of that, many first wave Japanese mo­bile phones ran on it too. In fact, this LinuxInsider ar­ti­cle from 2003 calls ITRON the most pop­u­lar op­er­at­ing sys­tem in the world,” and while no­body has pub­lished hard num­bers since, the Yomiuri se­ries re­ported that TRON-based op­er­at­ing sys­tems still run in roughly 60% of the world’s em­bed­ded de­vices.

TRON even got its own Java spec­i­fi­ca­tion in the late 1990s, and it com­bined ITRONs real-time ker­nel with Sun’s Java Runtime Environment. Commercial ap­pli­ca­tions such as Aplix’s JBlend came af­ter, and Aplix says that JBlend shipped on more than 800 mil­lion de­vices. Not all 800 mil­lion of those were JTRON de­vices, since JBlend later be­came a portable Java plat­form that Aplix de­ployed across mul­ti­ple op­er­at­ing sys­tems, and there’s no pub­lished break­down of how many ran on ITRON. But it does mean that when that old Java in­staller proudly told you 3 bil­lion de­vices run Java,” some un­known num­ber of those de­vices were al­most cer­tainly run­ning Java along­side TRON.

A stan­dard­iza­tion ef­fort has since ce­mented its longevity. In 2018, mi­cro-T-Ker­nel 2.0 was adopted as IEEE stan­dard 2050 – 2018, and in 2023, the IEEE rec­og­nized the TRON Real-time Operating System Family as an of­fi­cial Milestone, in­stalling a plaque at the University of Tokyo. The TRON Forum, the suc­ces­sor to the orig­i­nal Association, still main­tains the spec­i­fi­ca­tions and li­censes the tech­nol­ogy. Even more in­ter­est­ing is that, by Sakamura’s ac­count, Microsoft joined the TRON Project in 2003, through the ef­forts of its then-US vice pres­i­dent Furukawa. Microsoft re­ally does seem to have a habit of sup­port­ing would-be com­peti­tors these days.

Unsurprisingly, the am­bi­tious and po­lit­i­cally tar­geted desk­top vari­ant failed. But it was the em­bed­ded vari­ant no­body in the West paid at­ten­tion to that man­aged to suc­ceed to the point of be­com­ing an im­por­tant build­ing block of day-to-day in­fra­struc­ture. The same pro­ject pro­duced what could well be the world’s most-used op­er­at­ing sys­tem and an op­er­at­ing sys­tem that failed en­tirely, and it was the pro­ject that every­one was pay­ing at­ten­tion to that ac­tu­ally failed. You can still buy a BTRON im­ple­men­ta­tion to­day if you know where to look, since Personal Media Corporation’s web­site is still up and still sell­ing Cho-Kanji, in Japanese only. The pro­jec­t’s last­ing mark on com­put­ing is in­vis­i­ble, though, run­ning in the de­vices around you that you never think about as hav­ing an op­er­at­ing sys­tem at all.

Sakamura re­ceived the Takeda Prize jointly with Linus Torvalds and Richard Stallman, for spread­ing open ar­chi­tec­ture world­wide. After all, the same open ap­proach that made TRON vul­ner­a­ble in a trade dis­pute, the as­sump­tion that be­ing open was pro­tec­tion enough, is what let ITRON spread with­out fric­tion af­ter­wards. Sakamura’s apol­ogy, though, ar­rived af­ter the dam­age had been done over din­ner in 1989. The in­dus­try had al­ready aban­doned the pro­ject by that stage.

BTRONs hy­per­me­dia ideas are be­ing re­dis­cov­ered by a new gen­er­a­tion of tools that don’t know they’re recre­at­ing a 40-year-old de­sign. The char­ac­ter en­cod­ing is archived and the CPU is a mu­seum piece. But the real-time ker­nel that no­body seemed to think of as an im­por­tant piece of the puz­zle still runs in places you’d never guess, and it’s hard to think of a bet­ter legacy than that.

I accidentally logged hundreds of thousands of phone calls to military bases

lina.sh

DNS hi­jack­ing is silly. I al­ready took over dif­fer­ent .gov and .edu do­mains in the past, but I just im­me­di­ately re­ported that and moved on. This one is a lit­tle dif­fer­ent though, it’s about how I took over phone-net­work in­fra­struc­ture do­mains (e164.arpa) of en­tire ter­ri­to­ries, and ac­ci­den­tally logged hun­dreds of thou­sands of phone calls to mil­i­tary bases. But let’s start at the be­gin­ning.

What is e164.arpa any­way?

ENUM (e164.arpa) was an idea from the early 2000s1: take a phone num­ber, re­verse the dig­its, put dots be­tween them, and add .e164.arpa at the end, so +49 30 123456 be­comes some­thing like 6.5.4.3.2.1.0.3.9.4.e164.arpa. You can see that every German num­ber will end up un­der .9.4.e164.arpa, which is the zone for all +49 num­bers, and that zone is con­trolled by DENIC (the same or­ga­ni­za­tion that runs .de). This means the DENIC de­cides which car­rier or per­son gets which num­ber ranges un­der that zone, just like they hand out .de do­mains (which makes it de­cen­tral­ized, mak­ing every coun­try de­cide on del­e­ga­tion them­selves).

The idea was that car­ri­ers could then look these do­mains up and get back a record say­ing hey, this num­ber can be reached over SIP/VoIP un­der this ad­dress”, skip­ping the ex­pen­sive phone net­work and re-rout­ing calls over the cheap in­ter­net in­stead.

It never re­ally took off though, and even back in its early days it saw barely any use. Over the years it just de­te­ri­o­rated fur­ther, and to­day it’s ba­si­cally com­pletely dead. I do ac­tu­ally own 5.8.7.1.7.1.3.2.6.1.9.4.e164.arpa and point it at this web­site, al­though tech­ni­cally I’m not sup­posed to do that (you can fig­ure out my sec­ondary num­ber from that!). Germany is ac­tu­ally one of the last coun­tries that still tech­ni­cally al­lows reg­is­ter­ing an e164.arpa do­main, al­though I was the first per­son since 2019 to reg­is­ter one2.

The RFC says you should only set NAPTR records on these do­mains, which are the records that tell car­ri­ers where to route a call. It states that you ab­solutely should­n’t be us­ing .arpa do­mains as nor­mal domains” and host stuff like web­sites on them, they are meant to be infrastructure” do­mains (you might know in-addr.arpa for re­verse DNS lookups for ex­am­ple). But there’s no­body who can ac­tu­ally stop you from do­ing it, it’s still just DNS at the end of the day, and noth­ing pre­vents you from slap­ping an A record on there and host­ing a web­site. Some peo­ple ac­tu­ally re­ally dis­like that, and try to get Certificate Authorities to no longer is­sue cer­tifi­cates for .arpa do­mains3.

Hijacking a ter­ri­to­ry’s phone net­work

I was scan­ning e164.arpa to see if any of the del­e­gated zones were hi­jack­able, mostly out of cu­rios­ity about how ne­glected this whole sys­tem re­ally was.

I found three coun­try-code zones, 0.9.2.e164.arpa, 6.4.2.e164.arpa, and 7.4.2.e164.arpa, all del­e­gated to the same two name­servers: ns6.icb.co.uk and ns.enum.org.uk.

Quick ex­plainer for any­one who is­n’t a DNS per­son: when a do­main is del­e­gated to a name­server, it ba­si­cally means for any ques­tion about this do­main, go ask this server, it has the an­swers”, and if I con­trol the name­server a do­main points to, I con­trol every DNS re­sponse for that do­main.

icb.co.uk still ex­ists as a do­main, but the spe­cific ns6.icb.co.uk sub­do­main no longer re­solves to any­thing, mean­ing any re­quest falls back to the sec­ond listed name­server in­stead: ns.enum.org.uk.

And that do­main had ex­pired, so I bought it for just 5€, and just like that I con­trolled the DNS for 0.9.2.e164.arpa, 6.4.2.e164.arpa, and 7.4.2.e164.arpa. Reversed, those are phone codes +290, +246, and +247: Saint Helena, the British Indian Ocean Territory (Diego Garcia), and Ascension Island re­spec­tively (funnily enough, those ter­ri­to­ries also have the pop­u­lar ccTLDs .sh, .io, and .ac).

To be clear about what this meant: when a car­rier does an ENUM lookup for one of these num­bers, they’re es­sen­tially ask­ing where do I route this call?”, and I could an­swer with what­ever I wanted. I could point it at my own SIP server, ac­cept the in­com­ing call, and then place an out­go­ing call to the real des­ti­na­tion with a spoofed num­ber. The per­son be­ing called would see the orig­i­nal num­ber ring­ing, and af­ter pick­ing up would speak to the per­son on the other end as if every­thing was nor­mal, but I’d be sit­ting silently in the mid­dle of the en­tire con­ver­sa­tion. I would the­o­ret­i­cally be able to do this for every sin­gle re­quest that I got if I could re-route a num­ber, if any­one was still ac­tu­ally us­ing this sys­tem.

I re­ported it right away to every­one I could think of, through mul­ti­ple chan­nels into the British gov­ern­ment, and got noth­ing back. My best guess is that some­one at the Internet Computer Bureau (who seem­ingly man­aged them in the past) set these name­servers up over a decade ago. Then e164.arpa slowly died out, and who­ever set it up ei­ther moved on or just for­got about it, leav­ing no­body to re­new a do­main no­body re­mem­bered they de­pended on.

Checking if any­one ac­tu­ally uses this

Q Misell (a re­searcher of the Max-Planck-Institute for Informatics) had heard about this and re­ported it to RIPE (who man­ages e164.arpa) on my be­half, but RIPE also de­clined to do any­thing, be­cause e164.arpa del­e­ga­tions are gov­erned by an ITU-T com­mit­tee at the UN level. And RIPE was­n’t will­ing to go against a de­ci­sion made by a UN com­mit­tee, which would prob­a­bly be a bu­reau­cratic night­mare.

Q also asked if I had any data on how much traf­fic these zones ac­tu­ally got, which I did­n’t know. And be­cause I was very cu­ri­ous about that my­self, I set up log­ging on 0.9.2.e164.arpa (Saint Helena) to find out, and waited a full day.

Not a sin­gle query came in. So af­ter try­ing my best to get any­one to care and get­ting nowhere, I just kept the do­mains, since no­body seemed to be re­ly­ing on them any­way.

I hosted my per­sonal site on it, spun up a Fediverse in­stance, a Matrix home­server, and handed out sub­do­mains to friends, be­cause why not, it’s a dead sys­tem. It’s not like it’s gonna hurt any­one, and no one cares. So it’s time to be whim­si­cal and have fun with it.

Six months later…

Just out of cu­rios­ity, I checked the logs again on all three zones, since I en­abled log­ging run­ning on the other two as well when I set every­thing up.

Hundreds of thou­sands of ENUM queries, all logged4. Since the do­main name is lit­er­ally just the phone num­ber re­versed, you can sim­ply flip it back around to get the real num­ber, so I had full phone num­bers, time­stamps, and the source IP ad­dresses of the DNS re­solvers mak­ing the re­quests.

Hundreds of thou­sands of lines in logs look­ing just like this (phone num­bers are ran­dom­ized)

Almost none of it was for Saint Helena (0.9.2.e164.arpa), it was ba­si­cally al­most en­tirely 6.4.2.e164.arpa and 7.4.2.e164.arpa: Diego Garcia and Ascension Island. The source IPs were mostly American. That would at least ex­plain why I orig­i­nally did­n’t see any traf­fic, as I was only log­ging Saint Helena.

So I had ac­ci­den­tally logged hun­dreds of thou­sands of phone num­bers and time­stamps for calls go­ing to mil­i­tary bases. And as de­scribed ear­lier, a ma­li­cious ac­tor could have sim­ply MITM’d every sin­gle one of them. I mean I am no ex­pert, but I would as­sume that in hun­dreds of thou­sands of calls be­tween sol­diers and their fam­i­lies, sen­si­tive in­for­ma­tion would al­ways slip here and there even­tu­ally. A na­tion state with an in­ter­est in what’s hap­pen­ing on those bases would have ab­solutely loved sit­ting on this for months with­out any­one notic­ing. It’s not hard to imag­ine who might want that kind of in­tel on Diego Garcia specif­i­cally, but I’ll get to that later.

My DNS server replied with an NXDOMAIN for all queries, so they were just be­ing routed over the nor­mal phone net­work. But af­ter re­al­iz­ing this I shut the DNS server down and deleted all the log files.

Suddenly, peo­ple care

I re­ported it for a sec­ond time to the UKs National Cyber Security Centre (NCSC), and this time, men­tion­ing that mil­i­tary bases were in­volved, they ac­tu­ally cared a lot.

They could­n’t fig­ure out who had orig­i­nally set up the aban­doned del­e­ga­tion, and ac­tu­ally fix­ing it prop­erly ran into the same ITU-committee is­sues from ear­lier, so for a while noth­ing changed. Even a year later I still owned the do­main and could’ve in the­ory still in­ter­cept the traf­fic, though I had wiped the zone com­pletely so ns.enum.org.uk just re­turned NXDOMAIN for every­thing at that point.

Then on March 20th, 2026, Iran fired bal­lis­tic mis­siles at Diego Garcia5. It maybe would’ve been in­ter­est­ing to see if there was a spike in calls from wor­ried fam­ily mem­bers that day, but by then I was long done log­ging any­thing. But this shows that a state ac­tor could have been in­ter­ested in this in­for­ma­tion.

Shortly af­ter, the NCSC let me trans­fer own­er­ship of the do­main di­rectly to them, right af­ter I had to re­new it for an­other 5€ (because oth­er­wise, it would be up for grabs again, and any­one could do the afore­men­tioned stuff).

So the NCSC now con­trols ns.enum.org.uk, but the name­servers for those three zones still point there. So in the end, I was down 10€ in do­main fees, there was sadly no bug bounty (I thank­fully did­n’t get my door kicked in at least). And on top of that, it’s a funny story :P

RFC 3761 - The E.164 to URI DDDS Application (ENUM) ↩

RFC 3761 - The E.164 to URI DDDS Application (ENUM) ↩

The DENIC pub­lishes an­nual re­ports on their ENUM reg­is­tra­tions, the last time any­one reg­is­tered one was in 2019, up un­til when I reg­is­tered three in 2025. ↩

The DENIC pub­lishes an­nual re­ports on their ENUM reg­is­tra­tions, the last time any­one reg­is­tered one was in 2019, up un­til when I reg­is­tered three in 2025. ↩

At this point, a friend of mine (86dd) had set up a sec­ondary name­server for the zones, with­out any log­ging. I had logged 100,170 queries to 6.4.2.e164.arpa and 99,902 queries to 7.4.2.e164.arpa, and 9,133 queries to 0.9.2.e164.arpa. This should be ap­prox­i­mately half of the to­tal queries that were sent to us; Meaning it were ~400.000 re­quests in to­tal ↩

At this point, a friend of mine (86dd) had set up a sec­ondary name­server for the zones, with­out any log­ging. I had logged 100,170 queries to 6.4.2.e164.arpa and 99,902 queries to 7.4.2.e164.arpa, and 9,133 queries to 0.9.2.e164.arpa. This should be ap­prox­i­mately half of the to­tal queries that were sent to us; Meaning it were ~400.000 re­quests in to­tal ↩

Wikipedia: 2026 Iranian strike on Diego Garcia ↩

Wikipedia: 2026 Iranian strike on Diego Garcia ↩

Felony Bench: Be AI, Do Crime

www.felonybench.com

A bench­mark you re­ally don’t want mod­els to be sat­u­rated with.

Learn more

Score

↖ Most il­le­gal­Least il­le­gal ↘

8

Anthropic

8

OpenAI

1

Meta

0

Google

0

Moonshot

Scores in­di­cate count of il­le­gal ac­tiv­ity. Higher is… you de­cide.

Methodology

Felony Bench counts unique in­stances where AI agents af­fect third-party en­ti­ties. Escaping a sand­box alone does not con­sti­tute a counted in­ci­dent. It is for these rea­sons that Frontier Security’s Kimi K3 in­ci­dent and Alibaba’s ROME in­ci­dent are not counted.

Cobalt: apps and an SDK for Kobo e-readers

bandarlabs.github.io

Your Kobo can run apps now.

Cobalt is an open-source ap­pli­ca­tion plat­form for Kobo e-read­ers: a launcher, a signed App Store, a Rust SDK, and a run­time that keeps every app in its own un­priv­i­leged process.

Install it once over USB. Every app af­ter that in­stalls, up­dates and re­moves on the reader it­self, over Wi-Fi. A re­boot re­turns to the stock Kobo reader.

Not af­fil­i­ated with Rakuten Kobo

Running on a Kobo.

Every app is a sta­tic ARM bi­nary run­ning as its own un­priv­i­leged process on stock hard­ware. The App Store in­stalls, up­dates and re­moves them over Wi-Fi, with sig­na­tures ver­i­fied be­fore any­thing launches.

arXiv pa­pers and cod­ing agents, on the panel.

These are pho­tographs of the de­vice, not sim­u­la­tor cap­tures. The arXiv app reads the HTML ren­der­ing arXiv pub­lishes for every pa­per since December 2023: ab­stracts, sec­tions, math and re­sult ta­bles, pag­i­nated for the panel.

Apps

The apps.

Every screen­shot be­low is a cap­ture from a Kobo Clara BW. Store apps ver­sion in­de­pen­dently of the plat­form; the rest ship with the plat­form in­stall.

Launcher

Opens in­stalled apps and al­ways keeps a route back to the Kobo reader.

App Store

Installs, up­dates, re­moves and re­in­stalls signed apps over Wi-Fi.

arXiv

Browses a sub­jec­t’s newest preprints and reads the full text on the panel.

Sudoku

Store-only by de­sign: in­stalling it proves de­liv­ery of an app the USB pack­age never con­tained.

Morse

Sends a typed mes­sage in Morse on the front light, one let­ter across the whole panel.

Gutenbird

Reads any OPDS li­brary: Project Gutenberg, Standard Ebooks, Open Library, or yours.

Hacker News

Top, New, Ask and Show sto­ries with com­plete com­ment threads.

Feeds

Discovers a site’s feed and pre­sents its ar­ti­cles with­out the site’s lay­out.

Daily Brief

Collects the day’s sto­ries in the back­ground while you use an­other app.

Sidekick

Approve or deny re­quests from cod­ing agents, away from the key­board.

Terminal

A panel-na­tive shell with keys that send in­put im­me­di­ately.

Components

The UI toolk­it’s con­trols, lay­outs, ty­pog­ra­phy and states, on the panel.

Settings

Connectivity, hard­ware, and plat­form up­dates, kept sep­a­rate from Store.

Todo

A per­sis­tent list with touch en­try and com­pleted-item states.

Tic-tac-toe

Two play­ers, par­tial re­freshes for in­di­vid­ual cells.

Magnet

Locates the hall sen­sor be­hind the bezel and re­ports its changes.

The SDK

An app is one Rust file.

Implement KoboApp, de­scribe screens de­clar­a­tively, and the run­time han­dles lay­out, e-ink re­fresh plan­ning, Back nav­i­ga­tion and life­cy­cle.

Apps don’t open de­vice re­sources; they ask. Network, stor­age, au­dio, front­light and Wi-Fi are ca­pa­bil­ity-gated, and a re­fusal comes back as a value the app can han­dle.

kobo new my-app cd my-app kobo dev

Read the SDK docs

use kobo_sdk::{ ActionId, Context, KoboApp, ScreenBuilder, };

#[derive(Default)] struct Hello { taps: u32 }

impl KoboApp for Hello { fn on_s­tart(&mut self, ctx: &mut Context) { self.show(ctx); }

fn on_ac­tion( &mut self, ctx: &mut Context, a: ActionId, ) { if a == kobo_sdk::ac­tion_id(“tap”) { self.taps += 1; } self.show(ctx); } }

impl Hello { fn show(&self, ctx: &mut Context) { let screen = ScreenBuilder::new(“hello”) .top_bar(“Hello”) .heading(format!(“{} taps”, self.taps)) .button(“tap”, Tap me”) .build(); ctx.set_screen(screen); } }

fn main() { let app = Hello::default(); let _ = kobo_sdk::run(“hello”, app); }

The Store

Signed pack­ages, ver­i­fied be­fore launch.

Store reads a signed cat­a­log from a fixed GitHub re­lease. Each pack­age holds one ARM ex­e­cutable and a signed canon­i­cal man­i­fest. The run­time ver­i­fies the cat­a­log, the pack­age, the in­stalled man­i­fest and the bi­nary be­fore an app runs.

App re­leases are in­de­pen­dent of plat­form re­leases: merg­ing an app PR builds it for ARM, signs it, and up­dates the cat­a­log. No Cobalt ver­sion bump, no re­in­stall. The app sim­ply ap­pears in Store.

The Cobalt plat­form it­self also up­dates over Wi-Fi, through Settings, on a chan­nel sep­a­rate from the app cat­a­log. The USB ca­ble is only ever needed once.

Install and cat­a­log trans­ac­tions are re­cov­ery-safe; an in­ter­rupted up­date leaves the reader with the ver­sion it had.

Publish your own app →

Install

Installing from source.

Charge a Kobo Clara BW (N365) and con­nect it over USB. Other mod­els are re­fused, not guessed at.

Run the setup:

git clone https://​github.com/​Ban­dar­Labs/​Cobalt.git cd Cobalt rustup tar­get add ar­mv7-un­known-linux-musleabihf cargo run -p kobo-cli — setup

Restart the reader and open Cobalt from Kobo’s menu.

Open Store. Everything from here on ar­rives over Wi-Fi.

The com­plete walk­through, in­clud­ing re­cov­ery steps, is in docs/​IN­STALL.md.

Contributing

Contribute an app.

App con­tri­bu­tions are reg­u­lar pull re­quests. If it runs on your de­vice and the PR shows it run­ning, it gets merged and pub­lished.

Build it. Add the app as a work­space pack­age un­der apps/&​lt;app-id>/ and reg­is­ter it in apps/​cat­a­log.json.

Test it. Add unit and lay­out tests, and run it in the browser and run­time sim­u­la­tors.

Run it on your own de­vice. A real Clara BW, not just the sim­u­la­tor.

Open a PR with a gif or pho­tos of it run­ning. Once re­viewed and merged, the pub­lish work­flow signs it and it ap­pears in Store. No plat­form re­lease needed.

Own a dif­fer­ent Kobo model? Porting is wel­come too; open an is­sue first so the de­vice pro­file can be agreed. Full de­tails in docs/​CON­TRIBUT­ING_APPS.md.

Safety

Device sup­port and safety.

Cobalt does not re­place Kobo’s boot chain. Device writes are gated on an ex­act hard­ware and firmware match, and a re­boot re­turns to the stock reader. The first in­stal­la­tion does mod­ify files on the user stor­age par­ti­tion, and it is pro­vided with­out war­ranty.

Only the Clara BW pro­file has been hard­ware-tested. Don’t in­stall on an­other model un­til it has a re­viewed, hard­ware-tested pro­file. Cobalt is an in­de­pen­dent pro­ject, not af­fil­i­ated with Rakuten Kobo.

To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".

10HN is also available as an iOS App

If you visit 10HN only rarely, check out the the best articles from the past week.

Visit pancik.com for more.