Text.js’teki yenilikler
Text.js’teki tüm önemli değişiklikler bu dosyada belgelenir.
Eklenenler
- textjs.org: İspanyolca, Fransızca, Almanca, Brezilya Portekizcesi, Korece, Basitleştirilmiş ve Geleneksel Çince sürümleri textjs.org/es, /fr, /de, /pt-br, /ko, /zh-cn ve /zh-tw adreslerinde taslak aşamasından çıktı. Alt bilgideki dil seçici ve tarayıcı dili düğmesi, Japoncanın yanı sıra bu dilleri de sunuyor. Arama motorları çevrilmiş sayfaları dizine ekliyor ve her birini İngilizce sürümüyle eşleştiriyor.
- textjs.org: İtalyanca, Rusça, Türkçe, Lehçe, Endonezce, Vietnamca ve Hintçe sürümleri textjs.org/it, /ru, /tr, /pl, /id, /vi ve /hi adreslerinde taslak aşamasından çıktı. Alt bilgideki dil seçici ve tarayıcı dili düğmesi, diğer dillerin yanı sıra bu dilleri de sunuyor. Arama motorları çevrilmiş sayfaları dizine ekliyor ve her birini İngilizce sürümüyle eşleştiriyor.
Değiştirilenler
@textjs/react:<FocusPad>ve<ViewportControl>, sayfada bir--monoyazı tipi yığını tanımlıysa eş aralıklı etiketlerinde bu yığını kullanır, yoksa önceki gibi Geist Mono’ya döner. Arapça veya İbranice etiketleri olan bir sayfa, yazı sistemine ait yazı tiplerini--monoyığınına ekleyebilir.
Düzeltilenler
- textjs.org: telefonlarda, satırdan uzun satır içi kodlar sayfayı genişletmek yerine alt satıra geçer. textjs.org/docs/internationalization, 390 px genişliğindeki bir ekranda 92 px fazla genişti.
Eklenenler
@textjs/react:<FocusPad messages>, çevrilmiş siteler için odak alanının yerleşik metinlerinden herhangi birini değiştirir. Her satırı, ekran okuyucu etiketlerini ve konsol boyutu denetimini kapsar.<TextCanvas>ve<ViewportControl>damessagesalır.<ViewportControl>yalnızca boyut denetiminin anahtarlarını kullanır. “Sonra buraya tıklayın ve ↑ ↓ tuşlarına basın.” gibi bir değer içeren metinler, cümlenin tamamını döndüren işlevlerdir.defaultFocusPadMessagesİngilizce metni içerir. Odak alanını çevirme bölümüne bakın.@textjs/react: sağdan sola yazılan sayfalarda odak alanı, ⌘ ⌥ J gibi tuş etiketlerini ve 120×36 gibi konsol boyutlarını soldan sağa tutar; boyut denetimini ve adım çubuğunu aynalar. Çince ve Japonca sayfalarda iki cümlesi arasındaki boşluğu kaldırır; Korecede korur.- textjs.org: textjs.org/ja artık taslak değil. Altbilgideki dil seçici aynı sayfayı İngilizce veya Japonca açar. Japoncaya ayarlanmış bir tarayıcıda “Japonca oku” düğmesi, textjs.org/ja üzerindeki İngilizce bir tarayıcıda ise “İngilizce oku” düğmesi görünür. Bir dil seçtiğinizde veya düğmeyi kapattığınızda düğme artık görünmez. Arama motorları çevrilmiş Japonca sayfaları dizine ekler ve her birini İngilizce sürümüyle eşleştirir.
- textjs.org: textjs.org/ja üzerinde odak alanı, her demonun tuşlarının altındaki etiketler dahil her sayfada Japoncadır.
Değiştirilenler
@textjs/core: Chromium ve Firefox konsolları, animasyonlu sprite çıktısını 4 MB yerine 16 MB sınırında temizler; böylece textjs.org/doom, “Konsol temizlendi” mesajını 4,5 saniyede bir yerine yaklaşık 19 saniyede bir gösterir. Safari ve▀yarım bloklarıyla çizilen sprite’lar 4 MB sınırını korur. textjs.org/doom sayfasının en yüksek yığın belleği kullanımı 10,8 MB’tan yaklaşık 12–13 MB’a çıkar.- textjs.org: bir belge sayfası, 33 sayfanın tamamı yerine yalnızca kendi Markdown içeriğini indirir; böylece İngilizce belge sayfaları 43–47 KB, /ja belge sayfaları ise 60–64 KB daha az JavaScript (gzip) yükler. Başka bir belge sayfasının bağlantısının üzerine gelmek veya bağlantıya odaklanmak, o sayfayı önceden getirir; böylece sayfa yine hemen açılır.
Düzeltilenler
- textjs.org/ja: ⌘K araması, Japonca belge başlıklarını gösterir ve Japonca sorguları bunlarla eşleştirir. Önceden Japonca sayfa başlıklarının altında İngilizce başlıkları listeliyordu. İngilizce adlar hâlâ sayfaları bulur:
routing, ルーティング sayfasını;open the console, コンソールを開く sayfasını bulur. - textjs.org: konsolunuzda çalışan bir belge örneği, textjs.org/ja üzerinde ve textjs.org/docs/internationalization adresindeki Çift yönlü metin örneğinde değişikliklerini yeniden sayfanın önizlemesinde gösterir. Konsolda bir örneğin üstündeki satırda artık “▼ Belgeler › Giriş › Sayaç” yerine “▼ Belgeler › Sayaç” yazar.
Eklenenler
- textjs.org/doom, Doom’un kendi stereo konumlandırması ve mesafeye bağlı ses azalmasıyla Doom’un ses efektlerini çalar. Ses, sayfaya ilk tıklamanızla veya ilk tuşa basmanızla başlar, oyunla birlikte duraklar ve Doom’un Options → Sound Volume menüsündeki Sfx Volume ayarını izler. Müzik yoktur.
Değiştirilenler
@textjs/react,@textjs/app: odak ipucu (“Klavyeyi kullanmak için sayfaya tıklayın”), her temada kalın siyah metinli kehribar renkli bir çubuktur. Önceden temanın ters çevrilmiş renklerini kullanıyordu. Her göründüğünde yaklaşık 6 saniye boyunca 4 kez yanıp söner, ardından kehribar renginde kalır. Azaltılmış hareket açıkken yanıp sönmez. Her yanıp sönme döngüsü en fazla 8 ek konsol karesi kaydeder.- textjs.org: Doom, textjs.org/doom adresine taşındı. textjs.org/playground/doom buraya yönlendirir.
Düzeltilenler
@textjs/core,@textjs/react: Chrome’un “Sorunlar” paneli artık her sayfada “Bir form alanı öğesinin id veya name özelliği olmalıdır” bildirimini göstermez. Gizli klavye<textarea>öğesinin adıtextjs-inputoldu veViewportControlbileşeninin konsol boyutu<select>öğesi (FocusPadbileşenininsizeControlözelliğinde de bulunur) biridvetextjs-console-sizeadı taşır. Klavye<textarea>öğesi ayrıca 1Password, LastPass, Bitwarden ve Dashlane’i devre dışı bırakır.- textjs.org: textjs.org/doom üzerindeki konsol başlığında “Text.js / playground / doom” yerine “Text.js / doom” yazar.
- textjs.org/doom: dar bir pencerede “Kaynağı görüntüle” ifadesinden sonra artık fazladan bir “·” kalmaz.
- textjs.org: dar bir pencerede Playground demo seçicisi, son demoyu kelimenin ortasından kesmek yerine kaydırılacak başka demoların bulunduğu kenarda soluklaşır.
- textjs.org/doom, Doom’un saniyede 35 tik hızında çalışır. Sayfa, Doom’un bir bölüm çizerken yaptığı ek saat okumalarını etkin bekleme sanıp her animasyon karesinde ve zamanlayıcı geri çağrısında Doom’un saatini bir tik ileri aldığı için bölüm içinde 60 Hz ekranda 3,8× hızlı (saniyede 131 tik), 120 Hz ekranda ise 5,5× hızlı (192) çalışıyordu.
Eklenenler
@textjs/react:<Image renderMode="halfblock">,<Image>bileşeninin 1.3 sürümünde yaptığı gibi her yerde▀yarım blokları çizer.@textjs/core/experimental:drawPixels, yumuşak alfa ve 256’dan fazla renk içeren kayıpsız bir sprite içinencoding: "rgba"ve sprite’ın gösterilemediği yerlerde hücreleri boyayan birfallbackfonksiyonu alır.@textjs/app: curl, Wget, HTTPie ve xh;text dev,text startvebun,vercel,cloudflareadaptörlerinde HTML sayfası yerine sayfanın ilk karesini gerçek renkli ANSI metni olarak alır.text build, statik sayfaların karelerine ön render uygular.text startvebun, dinamik ve sunucuda render edilen sayfaları istek üzerine render eder ve bilinmeyen yollara uygulamanın bulunamadı sayfası ve404ile yanıt verir. Kareler varsayılan olarak 80 × 24 boyutundadır. Boyutu değiştirmek veya kareleri kapatmak içintext.config.tsdosyasındaansiya da bir sayfadaexport const ansikullanın.staticadaptörü curl’e HTML sayfasını sunar. curl ve terminal istemcileri bölümüne bakın.@textjs/app/ansi,text startveya bir adaptör kullanmayan sunucular içinwantsAnsiveansiResponsedışa aktarımlarını,@textjs/reactiseframeToAnsidışa aktarımını sunar.- textjs.org: textjs.org/ja adresinde Giriş, Kurulum ve Rotalama belgeleriyle ve site arayüzüyle başlayan taslak bir Japonca sürüm bulunur. Çevrilmemiş paragraflar İngilizce gösterilir. Henüz dizine eklenmez veya dil seçicide sunulmaz.
Değiştirilenler
@textjs/react:<Image>artık Chromium ve Firefox konsollarında piksel sanatı için hücre başına en fazla 8 × 16, fotoğraflar için 4 × 8 pikselle bir piksel sprite’ı çizer. Bu, destek politikasının karelerin alt sürümler arasında aynı görüneceği vaadini bilinçli olarak bozar. 1.3 sürümünün yarım bloklarını korumak içinrenderMode="halfblock"geçirin. Safari, terminaller (text rundahil), ANSI ve düz metin çıktısı ile sunucuda render edilen sayfalar (runtime = "server") hâlâ yarım bloklar çizer.@textjs/app: curl, Wget, HTTPie veya xh ile sayfa getiren betikler ve çalışma süresi kontrolleri artık ANSI metni alır. HTML almaya devam etmek içinAccept: text/htmlgönderin veyatext.config.tsdosyasındaansi: falseayarlayın.@textjs/app: asenkron sunucu bileşenleri artıktext buildbir sayfanın kabuğuna ön render uygularken çalışmaz. Derleme sırasında veri isteklerini başlatmadan, önceden olduğu gibi<Suspense>yedek içeriklerini gösterirler.@textjs/app: sunucuda render edilen sayfaların kare oynatıcısı 3 KB küçüldü;examples/dashboardiçin gzip boyutu 25,4 KB yerine 22,4 KB oldu. ArtıkCellBufferçizim yöntemlerini, kutu kenarlıklarını veya metin kısaltmayı içermez.
Düzeltilenler
@textjs/core: grafikler ve yükleme göstergeleri Windows 10’da ızgaralarını korur. Konsol yazı tipi Consolas; ▁▂▃▅▆▇ sekizlik bloklarını, çeyrek blokları, braille, ▶ veya ✓ gliflerini içermez ve bunların yedek glifleri satırları karenin sağ kenarından taşırıyordu.CssConsoleDriverartık konsol yazı tipinin bu gliflerden hangilerini hücrenin beşte birinden fazla sapmayla çizdiğini bir kez ölçer ve bunları Consolas’ın içerdiği en yakın glifle çizer: sekizlikler için_▄▌█, çeyrek bloklar ve braille için yarım bloklar, oklar, onay işaretleri ve çarpılar için►◄√×. Windows 11’deki Cascadia Mono ve macOS’teki Menlo gibi bunları sığdırabilen yazı tipleri özgün glifleri çizer.measureText: falsebunu kapatır.@textjs/core: Chrome ve Edge DevTools’ta, textjs.org/coffee üzerindeki “hesap” ve “adet” yanlarında olduğu gibi komşu arka planlar arasında artık 1 px dikey ince çizgiler oluşmaz. Chromium, her%cspan öğesini cihaz piksellerine ayrı ayrı hizalar ve iki span’ın birleştiği pikseli ikisine de atamayabiliyordu.CssConsoleDriverartık bir span’ın arka planını sağındaki opak komşunun altına 1 px uzatır (padding-right:1px;margin-right:-1px). Firefox ve Safari kareleri değişmez.@textjs/core: Chrome ve Edge’deki<Image>sprite’ları metinle aynı 1 px kuralını izler. Saydam bir sprite’ın solundaki metin artık arka planının 1 px genişliğindeki bir şeridini sprite’ın sol kenarına boyamaz ve sprite, ters renkli metin dahil sağındaki opak metne boşluksuz birleşir. Satırlarında tek başına duran bir sprite artık üstündeki ve altındaki metin satırları gibi karenin sağ kenarına ulaşır.@textjs/react:<ConsoleMirror>, metnin yanındaki fotoğrafı görüntü olarak göstermek yerine konsolun yaptığı gibi yarım bloklarla çizer.
Eklenenler
@textjs/react/experimental, canlı kare arabellekleri için<Pixels>ve basılı tutulan tuşlar içinuseKeyStatedışa aktarımlarını;@textjs/core/experimentalisedrawPixelsdışa aktarımını sunar. Bunlar bir alt sürümde değişebilir.- textjs.org/playground/doom: Doom’un shareware bölümünü DevTools konsolunda oynayın.
@textjs/react,@textjs/app: sayfa odakta değilken konsol karesinin son satırında “Klavyeyi kullanmak için sayfaya tıklayın” yazar; böylece konsoldaki uygulamaya tıklayan ziyaretçi tuşların neden çalışmadığını bilir. Uygulamada biruseInputveyausePasteişleyicisi ya da odak hedefi olduğunda, sunucuda render edilen rotalar dahil yalnızca tarayıcı konsolunda görünür. Satır içi aynalar ve VS Code önizlemesi bunu göstermez. Kapatmak içintext.config.tsveyacreateConsoleRootiçindefocusHint: falsekullanın.@textjs/react:usePageFocus(), sayfanın odakta olup olmadığını döndürür. Uygulamanın klavyeyi ne zaman istediğine kendiniz karar vermek içinfocusHint: falseayarlayın ve<FocusHint active={…}>render edin.useInput(handler, { ambient: true }), tek başına ipucunu göstermeyen, her zaman etkin bir kısayolu işaretler.
Değiştirilenler
@textjs/core: bir<Pixels>sprite’ı animasyon gösterirkenConsoleRenderer, Chromium’da anahtar kareleri 51 ms aralıklarla gruplar, Safari’de kareleri 33 ms aralıklarla sınırlar veCssConsoleDriveriçinde sona eklenen çıktıyı 4 MB sınırında temizler (SPRITE_MAX_BYTES). Statik sprite’lar ve yalnızca metin içeren uygulamalar mevcut zamanlamayı ve 300 karelik temizleme sınırını korur.
Eklenenler
@textjs/core:bindTextSink(element, onText), bir IME veya ölü tuş ile kesinleştirilen metni gizli bir textarea veya input öğesinden her kesinleştirmede bir kez okur, oluşturma sırasında asla okumaz.engine.bindTextSink(element), kendiniz render ettiğiniz bir textarea öğesini birInputEnginenesnesine bağlar. İkisi de dinleyicileri kaldıran bir fonksiyon döndürür.@textjs/app:POST /__textjs/input, IME ve ölü tuş metni için{ type: "text", text }kabul eder.@textjs/app/frame-protocoliçindekiInputMessageveparseInputMessagebunu içerir.
Değiştirilenler
@textjs/app: middleware ve rota işleyicileri kanonik yolu alır./docs/ve/docs//intro,/docsve/docs/introolarak gelir; bu nedenle sona eğik çizgi eklemek için yönlendiren middleware artık sonsuza kadar yönlendirir. Bu yönlendirmeyi kaldırın. Dinamik segment kodlanmış eğik çizgi içeremez:/files/a%2Fb,400döndürür.@textjs/app: middleware kullanıldığında--adapter cloudflare, hash içeren varlıklar dahil her isteği worker’a gönderir; birbasePathvarsa temel yolun dışındaki istekleri de gönderir. Worker’ı çalıştıran her istek bir Functions çağrısıdır ve Workers istek kotanızdan sayılır. Workers Free planında Pages projesini hata durumunda kapalı kalacak şekilde ayarlayın (Settings → Runtime → Fail open / closed); aksi halde günlük kota dolunca Pages dosyalarınızı middleware olmadan sunar.
Düzeltilenler
- Çince, Japonca ve Korece IME’ler ve ölü tuşlar textjs.org sitesinin satır içi konsollarında çalışır. Konsollar, oluşturma sırasında textarea öğesini temizlediği için uygulama ham harfleri veya yanlış karakteri alıyordu.
<FocusPad>, bir tıklamadan sonra klavye odağını uygulamada tutar. Önceden odağı hemen bıraktığı için Çince, Japonca ve Korece IME’ler metin oluşturamıyordu.- Karakter oluşturmayan ölü tuşlar (Windows ve IME bulunmayan Linux), gizli textarea odaktayken uygulamaya ulaşır. US-International düzeninde önce
'sonrae,éverir; önce'sonrat,'tverir.InputEngine, ölü tuşu tamamlayan keydown olayını engellediği için tarayıcı hiçbir şey eklemiyordu.@textjs/coreiçindekiDeadKeyTrackerbu keydown olayını geçirir ve VS Code önizlemesi de bunu kullanır. - VS Code önizlemesi, önceden düşürdüğü IME ve ölü tuş metnini iletir ve artık ölü tuşları veya IME oluşturma tuş vuruşlarını uygulamaya iletmez.
@textjs/app1.1.0 veya önceki sürümlerden birtext devsunucusuyla metni tuş basımları veya yapıştırma olarak gönderir. @textjs/core:InputEngine.handleTextInput, tuş ve yapıştırma girdilerinin zaten yaptığı gibishouldCapture,falsedöndürürken metni yok sayar.text dev,@textjs/app/live-stubve@textjs/app/live-playerpaketlerini önceden paketler.runtime = "server"sayfası olan bir uygulama bunları ancak ilk sayfa yüklemesinden sonra buluyordu; bu nedenle Vite bunları yükleme sırasında yeniden paketliyor, eski parçalar için 404 hatalarına ve iki React kopyasından kaynaklanan “Geçersiz hook çağrısı” hatasına yol açıyordu.- Grafikler ve yükleme göstergeleri Windows’ta kareye sığar. Consolas; ▁▂▃▅▆▇ bloklarını, çeyrek blokları, braille, ▶ veya ✓ gliflerini içermediği için Windows bunları 1,8 hücreye kadar genişlikte yedek yazı tipleriyle çiziyor ve grafik satırları karenin sağ kenarından taşıyordu. Konsol yazı tipi yığını artık
"SF Mono",Menlo,"Cascadia Mono",Consolas,monospaceve Windows 11 tüm kareyi Cascadia Mono ile çizer.<ConsoleMirror>, VS Code önizlemesi ve DevTools uzantısının kare görünümü de Cascadia Mono’yu Consolas’ın önüne koyar. @textjs/opencode: Windows’ta Node altında köprü,npm i -g opencode-aiile kurulan OpenCode’u bulur. Node, npm’inopencode.cmdsarmalayıcısını adıyla başlatamadığı için köprü OpenCode kurulmamış gibi davranıyordu. ArtıkPATHiçinde herPATHEXTuzantısıyla arama yapar ve.cmdsarmalayıcılarınıcmd.exeüzerinden çalıştırır. Bun (bunx) altında zaten çalışıyordu.text build, Windows’ta çalışır. Her şablondaCould not resolve entry module "virtual:textjs/api"hatasıyla veya hata mesajı vermeden başarısız oluyordu.text build, konsol kabuklarına ön render uygulama veya sunucuda render edilen rotaları derleme başarısız olduğunda hatayı yazdırır. Önceden Vite’ın “Derleme başarısız” satırından sonra nedeni belirtmeden 1 koduyla çıkıyordu.- Windows’ta
text dev, bir dosyayı düzenlediğinizde sunucuda render edilen rotaları yeniden render eder ve bir sayfaruntimedışa aktarımını değiştirdiğinde tarayıcıyı yeniden yükler. - Windows’ta
text dev,/app/page.tsxgibi Vite’ın modül olarak sunduğu kaynak dosyaları için artıkmiddleware.tsçalıştırmaz; böylece kimlik doğrulama yönlendirmesi geliştirme istemcisini bozmaz. text runvetext mcp, proje yoluC:\Users\RUNNER~1gibi bir Windows 8.3 kısa adı içerdiğinde çalışır. CLI ve uygulama@textjs/apppaketini iki kez yüklediği için “Uygulama hatası” gösteriyorlardı.- Windows’ta derlenen bir
dist/, ön render uygulanmış sayfalarını Linux ve macOS’te sunar. Canlı rota manifesti yollarını ters eğik çizgilerle saklıyordu. text build,text.config.tsdosyasındakiviteseçeneğibuild.rollupOptions.inputayarladığında çalışır. Bu girdi API, sunucuda render edilen rota ve adaptör paketlerinin girişlerini değiştiriyor ve derleme başarısız oluyordu.text dev, sayfa yüklemesinden sonraki ilk saniyelerde durdurduğunuzda kapanır veserver.close()sonuçlanır. Vite yeni keşfedilen bağımlılıkları optimize ederken kapatma işlemi hiç bitmiyordu (vitejs/vite#22934).
Güvenlik
@textjs/app1.1.0 ve önceki sürümler, korumalı bir yolu/ad%6din,/api//adminveya/admin%2Fxgibi başka bir biçimde yazarak isteğinmiddleware.tsdosyasını atlamasına izin veriyordu. Middleware yolu gönderildiği biçimde eşleştirirken sayfalar, rota işleyicileri ve statik dosyalar yolun kodlaması çözüldükten sonra (rota işleyicileri için iki kez) aranıyordu. Bu durumtext dev,text startve--adapter bun,vercel,cloudflarederlemelerini etkiliyordu. Statik derlemeler middleware kullanamaz ve etkilenmez. 1.2.0 sürümüne yükseltin, ardından yeniden derleyip dağıtın: Vercel için.vercel/output, Cloudflare Pages içindist/, Bun için tümdist/(sunucuyu yeniden başlatın). Kendi URL’lerinden hâlâ erişilebilen eski dağıtımları silin veya koruyun.- Artık her sunucu, istek başına tek bir kanonik yol adı belirler ve bunu eşleştirici,
request.nextUrlve tüm aramalar için kullanır. Yüzde kaçışlarının kodlamasını çözer ve yolunew URL()yazdığı biçimde yeniden kodlar,.ve..segmentlerini çözümler ve yinelenen ve sondaki eğik çizgileri kaldırır.%2F,%5Cveya geçersiz yüzde kodlaması içeren yollar400alır.text dev,text startve Bun adaptörü statik dosyaları yalnızca tam adlarıyla sunar; böylece macOS ve Windows’ta/ADMIN/report.txtartıkpublic/admin/report.txtdosyasını sunmaz. - Eşleştiriciler, yeniden yazma kaynakları, rota segmentleri ve
basePath, istek yollarıyla aynı kodlanmış biçimde karşılaştırılır; böylecematcher: "/café/:path*"ve"/caf%c3%a9/:path*",/caf%C3%A9yolunu;"/ops%40corp/:path*"ise/ops@corpyolunu korur. Eşleştiricisi olmayan middleware,basePathdışında çalışmaz./admin/gibi sonunda eğik çizgi bulunan bir eşleştirici/adminile eşleşir ve birhostkoşulu sunucu adının sonundaki noktayı yok sayar. - Bir
runtime = "server"rotasının canlı oturumu, middleware’in/restrictedyolunu/loginyoluna yeniden yazmak gibi başka bir yola veya sorguya yeniden yazdığı ya daNextResponse.next({ status: 403 })gibi bir hata durumuyla yanıtladığı sayfayı render etmez. --adapter vercel: rota işleyici fonksiyonu yolunu yalnızca oluşturulan rotaların ayarladığı bir istek başlığından alır; böylece/api/x/%252e%252e/adminartık/api/adminyoluna ulaşmaz ve/_textjs/*yolunun hiçbir yazım biçimi fonksiyonu çalıştırmaz. Oluşturulan rotalar büyük/küçük harfe duyarlı eşleşir; böylece/LEGACY/xartık middleware’in hiç denetlemediği/legacy/:path*yeniden yazmasına ulaşmaz.{gibi ham karakterler dahil kanonik olmayabilecek her yol, artık her Vercel derlemesine dahil edilen ve isteği kanonik yoluna yeniden yazan edge middleware üzerinden geçer.--adapter cloudflare: statik dosyalar kodlanmış yolla aranır; böylece/x/%252e%252e/admin/report.txtartık/admin/report.txtdosyasını sunmaz. BirbasePathvarsa bunun dışındaki dosyalar artık worker olmadan sunulmaz.text dev;public/dosyalarını/public/…veya/@fs/…altında,middleware.tsvetext.config.tsgibi yalnızca sunucuya ait kaynakları farklı harf büyüklüğüyle, kodlanmış bir/@fs/yolu altında, uzantısız modül istekleri (/text.config?import) olarak veya yapılandırma yeniden yazması üzerinden ya da rota işleyicilerinibasePathdışında sunmaz.
Eklenenler
- Text.js, Firefox ve Safari konsollarında render eder.
CssConsoleDriver, tarayıcıyı CSS özellik kontrolleriyle algılar.%cspan öğelerinin satır içinde kaldığı yerlerde kenar boşluksuz 14 px satır yüksekliği yazar, otomatik satır kaydırmayı kapatır veline-height: 100vhperdesi kullanır. - Duyarlı boyutlandırma, Firefox’un kaynak bağlantısı sütunu için yer bırakır. Safari, yazı tipi yığınında Menlo’yu ilk sıraya koyar: sayfaları, Web Inspector’ın çizim için kullanabildiği, kullanıcı tarafından kurulmuş SF Mono’yu kullanamaz.
- Bir konsol seçmek için
createConsoleRoot,ConsoleRendererveyaCssConsoleDriverişlevinebrowser: "chromium" | "firefox" | "safari"geçirin. - Ön render uygulanmış kabuklar, her iki konsol türünün CSS’ini taşır.
<FocusPad>, ziyaretçinin tarayıcısının konsol kısayolunu gösterir: Firefox’ta ⌘⌥K veya Ctrl+Shift+K, Safari’de ise “Web geliştiricileri için özellikleri göster” seçeneğini açma notuyla birlikte ⌘⌥C.- Ön render uygulanmış bir
<FocusPad>, her tarayıcının kısayolunu render eder. Yalnızca ziyaretçinin kısayolunu göstermek için ilk boyamadan önce<html>üzerindedata-browser(firefoxveyasafari) vedata-os(mac) ayarlayın; bunlar olmadan hidrasyon tamamlanana kadar Chrome’un Windows ve Linux kısayolunu gösterir.
Düzeltilenler
- ⌘⌥K ve Ctrl+Shift+K (Firefox’un konsol kısayolu), uygulamaya ulaşmak yerine tarayıcıya geçer.
- Duyarlı boyutlandırma, DevTools kapalıyken yüksekliği 60 px altında olan tarayıcı araç çubuklarını (Safari ve Firefox) öğrenir; böylece alta sabitlenmiş konsol sığdırabildiği tüm satırları alır.
<FocusPad>, DevTools’un sabitlenmiş olup olmadığını anlamak için öğrenilen yüksekliği kullanır. <FocusPad>, tıklama durumunda Windows ve Linux kısayollarınıCtrl+Shift+Jolarak yazar.
Güvenlik
@textjs/opencode: köprü başladığında bir eşleştirme kodu yazdırır ve textjs.org/opencode ilk bağlantıda bunu ister. Bir sayfa kodu gönderene kadar köprü428ile yanıt verir ve izin verilen kaynaklar için bile OpenCode’a hiçbir şey iletmez. Her kod köprünün tek bir çalıştırması için geçerlidir, döndürdüğü belirteç yalnızca eşleşen kaynaktan çalışır ve on yanlış kod, köprü yeniden başlatılana kadar eşleştirmeyi kilitler.@textjs/opencode: textjs.org sitesinin Cloudflare Pages önizleme dağıtımlarına artık varsayılan olarak izin verilmez. Birini kullanmak için--allow-origingeçirin.- textjs.org/opencode,
@textjs/opencode1.0.x köprülerini reddeder.bunx @textjs/opencode@latest proxykomutunu çalıştırın. - textjs.org; Content-Security-Policy,
Strict-Transport-Security,Cross-Origin-Opener-PolicyveCross-Origin-Resource-Policygönderir. OpenCode sayfası yalnızca127.0.0.1veyalocalhostüzerindeki sunuculara bağlanır.
- Text.js, Firefox ve Safari konsollarında render eder.
Eklenenler
- OpenCode Lite: dosya bazında farkları inceleyin, prompt geçmişine göz atın, öncü tuş kısayollarını yapılandırın ve sağlayıcı hesaplarıyla MCP sunucularını yönetin. Deneme ortamı, betikle çalışan bir terminal bölmesi içerir.
- OpenCode Lite: komut aramak için
/, proje dosyası eklemek için@yazın. Tab, dosya menüsünde bir dizin açar. Bağlı oturumlar sunucunun projesinde, deneme ortamı ise örnek deposunda arama yapar. - textjs.org/coffee: terminal.shop demosu, küçük, orta ve büyük layout’larıyla ve 20 × 10 altında “terminaliniz çok küçük” mesajıyla SSH uygulaması gibi konsol boyutunu izler. Hesaba ödeme yöntemleri, adı düzenlenebilen bir profil ve abonelikler için haftalık program değişiklikleri eklendi. Oturum kapalıyken sepet ve hesabın SSS, hakkında ve hata ayıklama bilgileri oturum açmadan açılır.
Performans
@textjs/react:BoxveText, bağlama ve güncelleme sırasında prop nesnelerini kopyalamak yerine önceden ayıklanmış sahne prop’larını uzlaştırıcıya geçirir.@textjs/core:SceneNode.getTextModel(), tek dizgeli<Text>yapraklarında satır içi ağaç dolaşmalarını atlar ve önbelleğe alınmış, sıfırlanmışUint16ArrayrunOfarabelleklerini yeniden kullanır.CssConsoleDriver, stili eşleşen ardışık BMP hücrelerini bir iç döngüde tarar veConsoleRenderer, değişmeyen karelerdecountYogaNodes()çağrısını atlar.- textjs.org: rotalar ve konsol yardımcısı sekmeleri, rota başına JS ve CSS parçalarına ayrılır. Mağaza fotoğrafları
photos/finalana dosyalarından yeniden kodlanır ve ikincil ürün fotoğrafları üzerine gelindiğinde veya slayt değiştiğinde yüklenir.
Düzeltilenler
<ViewportControl>,20chyerine piksel cinsindenminWidthkullanır ve<FocusPad>gibi metrikleri eşleşen yedek yazı tiplerini listeler; böyleceGeist Monoyüklendiğinde boyut seçici genişliğini korur.
Eklenenler
@textjs/opencode: textjs.org/opencode köprüsü, bağımlılığı olmayan ayrı bir paket olarak sunulur. Vite, React ve MCP SDK kurmadan başlatmak içinbunx @textjs/opencode proxy(veyanpx) komutunu çalıştırın.text proxyhâlâ çalışır ve aynı köprüyü çalıştırır.
Değiştirilenler
- Framework ve CLI paketinin adı artık
@textjs/app; adın resmî bir Next.js entegrasyonunu çağrıştırmaması için@textjs/nextadı değiştirildi.@textjs/next, yerini@textjs/apppaketine bıraktı ve yeni sürüm almaz. Geçiş yapmak içinbun remove @textjs/next && bun add @textjs/appkomutunu çalıştırın ve@textjs/app/linkgibi alt yollar dahil içe aktarmalarda@textjs/nextyerine@textjs/appkullanın. CLI hâlâtextadını taşır ve create-text-app şablonları@textjs/apppaketine bağımlıdır. - Konsol içindeki
[▼]düğmesi ve inceleyici, Dev Overlay olarak adlandırılır ve inceleyicinin başlığında▼ Dev Overlay · Turbologyazar. Text.js DevTools yalnızca Chrome uzantısının adıdır.<TextDevOverlay>ve prop’ları değişmedi. dynamic = "error"dışa aktaran rota işleyicileriTX031ile başarısız olur. Text.js, Next.js’te bu değerin gerektirdiği gibi işleyicinin isteği okuyup okumadığını denetlemeden bunu"force-static"olarak ele alıyordu."force-static"kullanın.
Düzeltilenler
text start, engellenmiş birHostdeğerinetext devgibiTX028ile yanıt verir. Her sunucu okuduğu ayarın adını belirtir:text deviçinvite.server.allowedHosts,text startiçinserver.allowedHosts.- textjs.org: Öğren bölümündeki Dağıtım dersi artık bir
vercel.jsonyeniden yazması eklemenizi söylemez. Vercel ve Cloudflare Pages üzerindetext build,index.htmlyedeğini kendisi yazar. Yeniden yazma örneği artık Netlify’ın_redirectsdosyasını kullanır. eslint-plugin-textjs:route-handler-exports,route.tsiçindekidynamicverevalidatedışa aktarımlarına izin verir vevalid-route-moduleburadakidynamicdeğerlerini denetler.
Eklenenler
- textjs.org: Öğren bölümünde oynatılan bir ders videosu, kaydırarak geçildiğinde köşedeki mini oynatıcıya taşınır. Her videonun altındaki Altyazılar düğmesi altyazıları açar veya kapatır ve seçimi hatırlar.
<TextDevOverlay>,pill,shortcutveshellprop’larını alır; böylece App Router kullanmayan uygulamalar inceleyiciyi kendi tuşları ve tema denetimleriyle bağlayabilir.<FocusPad>, mesajın ilk satırı olarak (örneğin uygulamanın yazı logosu) ve dokunmatik cihazlarda bildirimin üzerinde gösterilen birbanneralır.
Değiştirilenler
- textjs.org: Playground seçicisi Gösterge paneli, Akış, Yılan, OpenCode ve Kahve (terminal.shop) demolarını listeler. Her demonun kendi URL’si vardır: OpenCode
/opencode, terminal.shop ise/coffeeadresindedir ve yazı logoları mesajın başında yer alır. Sayaç ve Form, Playground dışına taşındı; belgeler ikisini de hâlâ canlı örnek olarak çalıştırır. <FocusPad>yeni bir layout’a sahiptir. Her durum üç parçalı bir ilerleme çubuğu, bir başlık, bir büyük öğe ve bir satır metin gösterir. Konsol açılmadan önce büyük öğe DevTools kısayoludur. Tıklama beklerken bir işaretçidir. Canlı duruma geçtiğinde uygulamanınhintsdeğerlerini, tuşlar geldikçe aydınlanan tuş simgeleri olarak gösterir ve ipucu olmayan tuşlar aşağıda yansıtılır. Adım etiketleri, ayrı “Canlı” rozeti ve “Konsolu izleyin.” satırı kaldırıldı. Satırlar durum değişikliklerinde soluklaşarak görünür, ilk boyamada bu olmaz veprefers-reduced-motionaltında hareket kapalıdır. İkincil metin her iki görünümde de WCAG AA kontrastını karşılar ve konsol boyutu seçicisine klavyeyle ulaşıldığında odak halkası görünür.- textjs.org: Playground yeni
<FocusPad>layout’unu kullanır. Seçicideki geçerli demo tuş simgelerinin yüzeyini kullanır, OpenCode komut alanı URL alanının köşeleri ve yazı boyutuyla eşleşir, terminal.shop notu üç yerine iki satır kaplar, “Kaynağı görüntüle” boyut denetiminin taban çizgisine oturur ve odak alanındaki soluk metin AA kontrastını karşılar.
Düzeltilenler
text dev, her istekteproxyyollarını proxy üzerinden sunar.fetch(),Accept: */*gönderdiği için geliştirme sunucusu bunlara önce uygulamanın HTML’iyle yanıt veriyor ve opencode şablonu ilk çalıştırmada “Beklenmeyen belirteç '<'” hatasıyla başarısız oluyordu.text dev, Vite’ın bağımlılık taraması yalnızca sunucuya ait bir dosyayı okuduğunda artık ikinci bir React kopyası yüklemez. Tarama, yalnızca sunucuya ait içe aktarma denetimini tetikliyor; bu da bir yığın izi, ardından konsolda “Geçersiz hook çağrısı” yazdırıyor ve Fast Refresh’i bozuyordu.text dev,/?demogibi sorgu dizgisi içeren sayfa URL’lerini işler. Vite bunları proje klasörü olarak ele alıp tüm diski izlediği için Linux’ta sayfa hiç yüklenmiyordu.- create-text-app: geliştirme düğmesi artık hiçbir şablonun ilk ekranında ilk tuş ipucunu örtmez, varsayılan proje adı belgelerle eşleşmesi için
my-appoldu, şablonlareslint-plugin-textjsönerilen yapılandırmasını geçer ve dashboard README dosyası--adapter staticderlemesini açıklar. <FocusPad>ve<ViewportControl>, kenarlıkları yalnızca uzun biçimli özelliklerle ayarlar. React, geliştirme sırasında bir tuş ipucu her yanıp söndüğünde “Yeniden render sırasında stil özelliği güncelleniyor (border)” uyarısını veriyordu.- Bir satırın son öğesi olan metin artık kısaldığında yerini korur. Bir
<Spacer>sonrasında en uzun metnin bıraktığı yerde kalıyor ve taşan satıra sığmak için küçülen kardeş öğeler küçük kalıyordu. <FocusPad>,actionveyahintsdeğiştiğinde adımlarını, alt başlığını ve tuş satırlarını değiştirir; böylece tek bir odak alanında demo değiştirmek layout kayması olarak bildirilmez.@textjs/react/testing, içe aktarıldığında Yoga’yı yükler; böylece bir test ilkrender()çağrısından öncefetchiçin bir taklit tanımlayabilir.
İlk kararlı sürüm.
▼ Text.js 1.0.0 (Turbolog).Değiştirilenler
- Uyumluluğu bozan değişiklik: framework ve CLI paketi artık
@textjs/next(textjs, npm üzerinde alınmış). İçe aktarmalarıtextjsyerine@textjs/nextkullanacak şekilde güncelleyin. - OpenCode köprüsü
bunx @textjs/app proxykomutudur ve her dizinden çalışır. - Konsol, varsayılan olarak sabitlenmiş DevTools paneline sığar (alta, sola veya sağa sabitleme, sayfa yakınlaştırması, araç çubuğunun satır kaydırması). Ayrı penceredeki DevTools,
120×36boyutuna döner. Odak alanlarına boyut denetimi eklendi.
Eklenenler
- Otomatik
?yardım ekranı, tuş ipuçları veCtrl+Kkomut paletiyleuseKeymap. - Veri bileşenleri:
List(sanallaştırılmış),Table,Tree. - Grafikler:
LineChart,BarChart,Sparkline,ProgressBar, ayrıcaGradientveImage. - Denetimler:
Button,Checkbox,Switch,RadioGroup,Slider,Dialog,Confirmve geçici bildirimler. - Layout:
Center,Stack,Grid,SplitPane,FocusScope. - Zamanlayıcılar, animasyon, ölçüm, kesme noktaları, depolama ve pano için hook’lar.
- Sağdan sola metin. Text.js, Unicode Çift Yönlü Algoritması’nı (UAX #9, Unicode 18.0) uygular ve 770.241
BidiTest.txtile 91.707BidiCharacterTest.txttestinin tamamını geçer. Arapça şekillendirilir ve<Text dir>bir span’ı yalıtır. - Kararlı
TX###hata kodları. Framework hataları bir kod vehttps://textjs.org/errors/<code>bağlantısı taşır. - Testlerde bileşenleri metne render etmek için
@textjs/react/testing. @textjs/react/terminalve bir App Router uygulamasını gerçek terminalde render edentext run.- Kodlama ajanlarının tarayıcı olmadan uygulamada gezinmesi, tuşlara basması ve kareleri okuması için uygulamayı Model Context Protocol üzerinden sunan
text mcp. - Bileşen ağacı, kare inceleyicisi ve zaman çizelgesi içeren, Konsol’un yanındaki Text.js DevTools uzantısı paneli.
eslint-plugin-textjsve canlı önizlemeler içeren bir VS Code uzantısı.apps/terminal-shop: gerçek API’yi kullanan, konsoldaki terminal.shop mağazası (varsayılan olarak geliştirme deneme ortamı, üretim çift kilitli).- textjs.org: konsolda çalışan 10 bölümlük kurs Öğren. Hidrasyonla birlikte derleme zamanında ön render, kendi sunucusunda barındırılan metrikleri eşleşen yazı tipleri, eğik çizgisiz
.htmlrotaları ve canlı önizlemeli yeni belge sayfaları.
Performans
- Temizleme sonrası DevTools hız sınırlamasının faz kilidi kırıldı. Temizleyen bir kareden sonra render motoru bir kez 110 ms bekler; böylece sonraki kareler DevTools’un anında işleme yoluna girer. Görüntüleme gecikmesinin p50 değeri 63 ms’den 10 ms’ye düştü.
- Hasar bandı kısmi boyaması: yalnızca bir değişimin dokunduğu satır bantları yeniden boyanır.
- Önbelleğe alınmış satır başına hash’ler, tamsayı stil kimlikleri ve sıfır bellek tahsisli boşta kareler.
- Sayfa gizli veya odak dışındayken sıfır boşta zamanlayıcı.
Düzeltilenler
- Satır sonlarında hayalet boş boyama katmanı span’ları ve çift perde yok.
- Perde kendi satırında durur; böylece DevTools kaynak bağlantısı (
VM12:1) 0. satırı asla kaydırmaz. - Varsayılan yükleme göstergesi hücreye tam uyar (Menlo’da braille glifleri yoktur).
brailleçeşidi isteğe bağlıdır. - Node üzerinde
text buildartık React’in geliştirme derlemelerini paketlemez. - textjs.org: birikimli layout kayması her rotada 0’dır. Playground ve OpenCode aynı odak alanı layout’unu paylaşır.
- textjs.org: belgeler ve Öğren kenar çubukları uzun sayfaların altında sabit kalır.
- textjs.org: dosya sekmeleri, kod blokları ve metin tabloları yalnızca yatay kaydırılır; böylece iOS Safari dikey sayfa kaydırmalarını asla ele geçirmez.
- textjs.org:
scrollbar-gutter: stableyalnızca fareli cihazlara uygulanır. iOS Safari’de ilk kaydırmanın sıçramasına neden oluyordu. - textjs.org: kaydırma sabitlemesi kapalıdır. iOS Safari’de ana tanıtım alanını yapışkan başlığın altına sabitliyordu.
- Uyumluluğu bozan değişiklik: framework ve CLI paketi artık
Yanıp sönmeyen kareler ve sunucuda render etme.
Değiştirilenler
- Kare başına
console.clear()+console.log()yerine kareler sona eklenir. DevTools temizlemeyi eşzamanlı uygular ancak yeni mesajları 50 ms aralıklarla boyar; bu yüzden temizleme, 15 fps hızında DevTools boyamalarının %70,6’sında ve 60 fps hızında %81,1’inde konsolu boş bırakıyordu. Baştaki sıfır genişlikli perde span’i önceki kareleri gizler. Konsol yalnızca ilk karede,invalidate()sonrasında, 100 kare biriktiğinde boşta kalınca veya 300 karede temizlenir. - Üretilen kareler arasında en az 66 ms olacak şekilde zamanlama yapılır (yaklaşık 15 fps). Daha hızlı kareler DevTools’un bekleme süresini yeniden başlatır ve atılır: 60 fps hızında DevTools, üretilen 295 karenin 67’sini boyadı.
- Playground ve OpenCode tam ekran odak alanlarıdır.
Performans
- Yalnızca uzun biçimli özellikler kullanan span CSS’i, DevTools’un her satıra kopyaladığı özellikleri yaklaşık 33’ten yaklaşık 7’ye düşürür. Onaltılık renkler ve yalnızca arka plana göre anahtarlanan boş diziler.
- Artımlı Markdown ayrıştırma ve sonuçları önbelleğe alınan
Markdown,CodeveDiffsatırları. - Tek geçişte işlenen host prop’ları, seyrek prop güncellemeleri ve metin boyutu değişemediğinde Yoga layout’unun yeniden hesaplanmaması.
- Akıştaki bir kare 0,79 ms’den 0,14 ms’ye, bir yükleme göstergesi adımı 0,90 ms’den 0,056 ms’ye indi. Çıktı bit düzeyinde aynıdır.
Eklenenler
- Sunucuda render etme.
runtime = "server"dışa aktaran bir sayfa,async functionbileşenleri dahil sunucuda render edilir ve satır düzeyindeki hücre farklarını sunucudan gönderilen olaylar üzerinden gzip ile yaklaşık 19 kB boyutundaki bir kare oynatıcısına aktarır. - Kısmi ön render.
text build, her statik rotanın ilk karesini HTML’ine gömer; böylece konsol herhangi bir modül yüklenmeden boyanır. middleware.ts, rota segmenti yapılandırması (dynamic,revalidate) vetextjs/cache(unstable_cache,revalidateTag,revalidatePath).text build --adapter static|bun|vercel|cloudflare.bench/devtools: gerçek DevTools ön yüzünü çalıştıran ve boş boyamaları, atılan kareleri, görüntüleme gecikmesini ve DevTools CPU kullanımını ölçen bir test düzeneği.
Düzeltilenler
- DevTools artık
path:line,//host:portvedata:metinlerini bağlantıya dönüştürmez. - OpenCode köprüsü yönetilen arka plan servisini bulur (geçici port, temel kimlik doğrulama), yazma işlemlerinde CSRF başlığını gönderir ve hataları tek satırda bildirir.
- Kare başına
Değiştirilenler
- Ayrık girdi (bir tuşa basma, bir yapıştırma), sonraki animasyon karesini beklemek yerine aynı görev içinde eşzamanlı render edilir.
- Gerçeğiyle eşleşen, sadeleştirilmiş bir OpenCode TUI.
- textjs.org genelinde kapsamlı bir mobil ve duyarlı tasarım düzenlemesi.
Eklenenler
@textjs/font:<FigletText>ve<AsciiFont>için 17 yazı tipiyle birlikte gelen bir FIGlet yazı tipi ayrıştırıcısı ve render aracı. Çıktı,figlet2.2.5 ikili dosyasından kaydedilen 273 referansla eşleşir.text proxy: textjs.org’un OpenCode sunucunuzla iletişim kurmasını sağlayan yerel bir CORS köprüsü.
Eklenenler
apps/opencode-console:console.logiçinde render edilen, sunucu çalışmadığında demoya geçen bağlı bir OpenCode istemcisi.create-text-appiçin biropencodeşablonu.- textjs.org: yeni bir açılış sayfası, canlı konsol yardımcısı, Playground, OpenCode sayfası ve belgeler.
- Statik rota üretimi içeren bir GitHub Pages dağıtım iş akışı.
İlk kilometre taşı.
Eklenenler
@textjs/core: düz tipli diziler üzerindeCellBuffer, Yoga WASM layout,Intl.Segmenterile metin ölçümü ve%cdizi uzunluğu kodlama sürücüsü. Değişen kare başına birconsole.log, boşta ise hiç yok.@textjs/react: React 19 uzlaştırıcısı, PascalCase bileşenler (Box,Text,ScrollBox,Input,Textarea,Select,Tabs,Code,Markdown,Diff,Modal,Spinnerve daha fazlası), hücre düzeyinde Tailwind tarzıclassNameyardımcıları, temalar ve DOMFocusPadbileşeni.textjs: dosya sistemi tabanlı App Router (layout,page,loading,error,not-found, dinamik segmentler, rota işleyicileri),text dev,text build,text startve konsol içi[▼]denetleyicisi.startervedashboardşablonlarıylacreate-text-app.