メインコンテンツへスキップ

多機能なターミナルブラウザChawanが登場!

·4 分
2025/06 ターミナル ウェブブラウザ プログラミング OSS Nim

多機能なターミナルブラウザChawanが登場!

引用元:https://news.ycombinator.com/item?id=44293260

shiomiru 2025/06/16 20:48:43

Nim製のターミナルベースのWebブラウザChawanについて詳しい紹介だよ。[1]許容範囲(個人差あり)のCSSレンダリングや一部のJSサポート、インライン画像(sixel/kitty)に対応してるんだ。http(s)以外にも(s)ftpやgopher、geminiなんかのプロトコルも使えるよ…。Chawanはもともとw3mのクローンとして始まったからUIは似てるんだけど、アーキテクチャは結構違ってて、ページ読み込みは別プロセスだし、プロトコルやファイルタイプの扱いは外部バイナリに分離されてるんだ。その面白い結果として、カスタムのインライン画像フォーマットのデコーダまで登録できるんだけど、実用的なケースはかなり少ないかもね。いくつかのWebサイトがChawanでどう表示されるかが見られるギャラリーはこちらだよ: https://chawan.net/gallery/index.html
[1]: https://nim-lang.org

eMPee584 2025/06/17 06:26:45

ありがとう、ちょっと調べ物したい時に別のblinkエンジンを使わずに済む方法があるのはホント助かるよ!学校終わったら試してみるね ; )
まだ出てないみたいだけど、特にsixel使えない人にとってマジですごいハックなのが、Chromiumのターミナル移植版Carbonylだよ: https://github.com/fathyb/carbonyl。…でも元の作者さんが更新する時間がないみたいなんだ。だからすごく必要最低限で、キーボードショートカットとかファイル保存とかたくさんの機能が足りないんだけど、でも明らかに完全なWeb互換性があるし、とにかくめちゃくちゃクールなんだ。Rustのスキルがある誰かにまた引き継いでもらいたいなあって願ってるよ、最後に見た時(数ヶ月前)はどのフォークも全然勢いがなかったから。

Imustaskforhelp 2025/06/17 11:41:48

余談だけどCarbonylのGitHub投稿見てるとさ、みんな作者さんの健康について、パレスチナ人だから無事かどうかって尋ね続けてるんだよね。
作者さんが無事だといいな。彼の仕事はホントに素晴らしかったと思うよ、マジで。戦争なんてクソ食らえだ。

onetom 2025/06/17 06:31:11

@shiomiru
TTY関連のこういう概念について学ぶのに、あなたの意見で一番いいリソース(有料・無料問わず)は何?例えばhttps://www.linusakesson.net/programming/tty/index.phpは知ってるけど、termcapやterminfo、cursesには触れてないんだ。
コメントの一つにhttp://www.amazon.com/termcap-terminfo-OReilly-Nutshell-Lind…っていうO’Reillyの本や、
オンラインだとhttps://www.scribd.com/document/831486848/Termcap-and-Termin…)が紹介されてたけどね。

shiomiru 2025/06/17 08:53:35

Chawanは独自のターミナルモジュールを使ってるから、標準のX/Open cursesについての知識はそんなに詳しくないんだ。
とは言え、実際のエスケープシーケンスに関しては、XTermのctlseqs.ms[1]がホントに貴重なリソースだよ。あとnick blackのnotcurses[2]からもたくさんのアイデアをもらったし、特に彼の「sprixels」についてのノート[3]はホントおすすめ。
[1]: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
[2]: https://nick-black.com/dankwiki/index.php/Notcurses
[3]: https://nick-black.com/dankwiki/index.php/Theory_and_Practic

noufalibrahim 2025/06/17 04:56:01

これマジで美しく出来てるね。日常業務の一部でこれを使ってみて、どこまでいけるか見てみるよ。HNとかめちゃくちゃ綺麗に表示されるね。ありがとう!

dotancohen 2025/06/17 11:27:50

いいね!見つけたバグは忘れずに報告してね。

Hrun0 2025/06/21 20:03:25

これマジ印象的だね!これから追加予定とか、計画してる機能のロードマップってある?

shiomiru 2025/06/21 22:38:20

一番近いものだと、これかな:
https://codeberg.org/bptato/chawan/raw/branch/master/todo、でもちょっと古いし、優先順位もあんまりつけてないんだけどね…。

isaacvando 2025/06/16 23:39:28

これマジで超クールじゃん!すごいね。Nimで書かれてるのもいいね。
だけどさ、cha example.comってやっても、hjklみたいなコマンドが全然使えないんだよね。唯一反応するのは数字を入力すると左下に出るとこだけ。あれで何ができるのかも分かんないや。
これって俺が見落としてるだけ?それともバグかな?
Mac OS Sequoia 15.5のApple SiliconでNim 2.24を使ってソースからビルドしたよ。ページはちゃんと表示されるんだけど、コマンドが動かないんだ。頼む!

isaacvando 2025/06/16 23:56:27

Ghostty、iTerm2、Terminal.appで試してみたけど、全部同じ動きだったよ。

shiomiru 2025/06/17 00:34:34

バグだよ、報告サンキューね。チケット作ったよ:
https://todo.sr.ht/~bptato/chawan/63
https://git.sr.ht/~bptato/chawanからmacos-inputブランチをプルして、サイトを開いてコマンドをいくつか入力した後に作られるaファイルの中身を教えてくれる?
(カレントディレクトリにできるはずだよ。)

isaacvando 2025/06/17 01:02:36

aファイルの中身はこれだよ。他に打ってほしいコマンドがあったら教えてね。
<br>handleCommandInput 1, buffer ”” c ’j’<br>handleCommandInput 2, buffer ”” c ’j’<br>after handleCommandInput, buffer 0x104c5b780”j” c ’j’<br>handleCommandInput 1, buffer ”” c ’k’<br>handleCommandInput 2, buffer ”” c ’k’<br>after handleCommandInput, buffer 0x104ca8b70”k” c ’k’<br>handleCommandInput 1, buffer ”” c ’l’<br>handleCommandInput 2, buffer ”” c ’l’<br>after handleCommandInput, buffer 0x104c5bab0”l” c ’l’<br>handleCommandInput 1, buffer ”” c ’k’<br>handleCommandInput 2, buffer ”” c ’k’<br>after handleCommandInput, buffer 0x104ca8d20”k” c ’k’<br>handleCommandInput 1, buffer ”” c ’j’<br>handleCommandInput 2, buffer ”” c ’j’<br>after handleCommandInput, buffer 0x104c5b480”j” c ’j’<br>handleCommandInput 1, buffer ”” c ’h’<br>handleCommandInput 2, buffer ”” c ’h’<br>after handleCommandInput, buffer 0x104ca89c0”h” c ’h’<br>handleCommandInput 1, buffer ”” c ’g’<br>handleCommandInput 2, buffer ”” c ’g’<br>after handleCommandInput, buffer 0x104cae780”g” c ’g’<br>handleCommandInput 1, buffer ”” c ’1’<br>after handleCommandInput, buffer ”” c ’1’<br>handleCommandInput 1, buffer ”” c ’2’<br>after handleCommandInput, buffer ”” c ’2’<br>handleCommandInput 1, buffer ”” c ’3’<br>after handleCommandInput, buffer ”” c ’3’<br>handleCommandInput 1, buffer ”” c ’1’<br>after handleCommandInput, buffer ”” c ’1’<br>handleCommandInput 1, buffer ”” c ’2’<br>after handleCommandInput, buffer ”” c ’2’<br>handleCommandInput 1, buffer ”” c ’2’<br>after handleCommandInput, buffer ”” c ’2’<br>handleCommandInput 1, buffer ”” c ’3’<br>after handleCommandInput, buffer ”” c ’3’<br>handleCommandInput 1, buffer ”” c ’\3’<br>handleCommandInput 2, buffer ”” c ’\3’<br>after handleCommandInput, buffer 0x104cae690”\3” c ’\3’<br>handleCommandInput 1, buffer ”” c ’\3’<br>handleCommandInput 2, buffer ”” c ’\3’<br>after handleCommandInput, buffer 0x104adaed0”\3” c ’\3’<br>handleCommandInput 1, buffer ”” c ’\3’<br>handleCommandInput 2, buffer ”” c ’\3’<br>after handleCommandInput, buffer 0x104ca8720”\3” c ’\3’<br>handleCommandInput 1, buffer ”” c ’\4’<br>handleCommandInput 2, buffer ”” c ’\4’<br>after handleCommandInput, buffer 0x104bf8d80”\4” c ’\4’<br>handleCommandInput 1, buffer ”” c ’\3’<br>handleCommandInput 2, buffer ”” c ’\3’<br>after handleCommandInput, buffer 0x104caaa80”\3” c ’\3’<br>handleCommandInput 1, buffer ”” c ’\4’<br>handleCommandInput 2, buffer ”” c ’\4’<br>after handleCommandInput, buffer 0x104ca8e40”\4” c ’\4’<br>

shiomiru 2025/06/17 01:58:35

変だね、入力は見てるのにコマンドを評価してないみたい…OK、別のこと試してみよう。
masterブランチで、cha -o’page.p=”pager.alert(config.page.j)”’ -Vって起動してpを押すと、ステータスラインに何か表示される?

erohead 2025/06/17 15:37:26

俺もMac OSだけど、同じ問題に遭遇してる。cha -o’page.p=”pager.alert(config.page.j)”’ -Vで開いてpを押してみたけど…何も起こらないね。

isaacvando 2025/06/18 02:09:27

俺も何も起きないよ。

shiomiru 2025/06/21 07:00:33

masterで直したよ。(clangのコンパイルエラーが原因だったんだ。かなり面白かったよ、詳細は上記のチケットを見てね。)
https://todo.sr.ht/~bptato/chawan/63

FerretFred 2025/06/17 04:52:29

これすごくいいね!Lenovo M8 4th genにTermuxを入れて、ソースからコンパイルしたよ。Nimを入れるだけでよかった。root権限がなくてもちゃんとインストールできたのもいいね。

mariusor 2025/06/17 06:08:40

Linksでサイトを綺麗に見せるようにしてたんだけど、ChawanはCSSに対応してるからちょっと大変になったなー。Linksはマージンとかパディング無視してたから、リストとかの配置が簡単だったんだよね。

shiomiru 2025/06/17 08:45:16

本来は’ただ動く’はずなんだけどね…時々そうじゃないのは分かってる、それはバグだと思っていいよ。でも、グリッド表示でCSSをカスタマイズしたいなら、Chawanは標準の’grid’メディア機能に対応してるよ→ https://developer.mozilla.org/en-US/docs/Web/CSS/@media/grid

mariusor 2025/06/18 10:03:06

@media: gridのアドバイスに従って変更したら、全部綺麗になったよ!ここから確認できるよ→ https://brutalinks.tech (これ、HNみたいなリンクアグリゲーターなんだ)

mariusor 2025/06/17 12:32:48

こんなCSS APIがあったなんて知らなかったよ。CSSに追加してみる、ありがとう!Linksで見た目がまともになるように頑張ったサイトに、CSSをほとんどなくした’シンプル’なスタイルもあるんだけど、代替スタイルシートのサポートについてイシュートラッカーで確認してみるね。

higon 2025/06/17 04:04:45

長いことw3mを使ってる者だけど、試してみて気に入ったよ。すごくいいね。’Open URL’(アドレスバー)の機能がないのは設計上の選択なのかな?

shiomiru 2025/06/17 08:24:10

アドレスバーはC-l(control+L)を押せば開くはずだよ。

silasdb 2025/06/17 01:31:26

素晴らしいね!ありがとう!もうtermcapとかncursesは使ってないんだね。端末の処理は自分で直接やってるの?またありがとう!

shiomiru 2025/06/17 02:10:24

Chawanはncursesは使ってなくてtermcapだけだったんだ。(ncursesはtermcapも実装してるけどね。)
w3mでtermcapに慣れてたからそれから始めたんだ。でもtermcapは古いし、モダンな端末の唯一有用な機能(true color)に対応できない。’80年代のハードウェア端末で偶然動くかも’って利点だけじゃ、余計な失敗モードを増やす価値はない。
だからterminfoに移行する代わりに、terminal queriesの方に完全に切り替えたんだ。(別の理由でも必要だったしね。)
XTermの互換性がある既知のTERM値を検出するために、組み込みの端末データベースはまだあるよ。でも、queriesにちゃんと応答する端末なら、TERM値が分からなくてもそのまま動くよ。

NoGravitas 2025/06/17 15:25:36

w3mでtermcapに慣れてたからそれから始めた。でもtermcapは古いし、モダンな端末の唯一有用な機能(true color)に対応できない。’80年代のハードウェア端末で偶然動くかも’って利点だけじゃ…
優先順位、だね。俺が端末を使ってる限りは、true colorより80年代のハードウェア端末サポートの方がいいな。でも、俺の唯一のハードウェア端末はVT-420だから、多分ベースのXTerm(モノクロ)をサポートしてるものなら大体動くと思うよ。

ijustlovemath 2025/06/16 21:48:48

TermuxからHNが一発で開けた時、マジでびっくりしたぜ!すっげえ仕事だね!

shiomiru 2025/06/16 22:15:32

ありがとう:)興味あるならHNのユーザースタイルをここに貼っといたぜ。
https://lists.sr.ht/~bptato/chawan-devel/%3CD9S40OS2QWHL.PXQ
主に投票矢印を直すためで、今はbackground-imageがplaceholdersでしか表示されねえんだ。

greenspam 2025/06/16 22:53:44

ついにターミナルでHNを見るいいツールが出たな!ありがとう!キーボードショートカットはどこで見つけられるんだ?vimキーバインドで動けるけど、戻り方が分からねえんだよな。

もっとコメントを表示(1)
shiomiru 2025/06/16 23:08:41

cha-config(5)かabout:chawanを見てくれよ。前者にはオンライン版もあるぜ。
https://chawan.net/doc/cha/config.html#pager-actions
ナビゲーションは特に、大文字Dで今のbufferを捨てて前のpageに戻れる。カンマ(,)でback、ピリオド(.)でforwardもあって、stackを壊さずに移動できるぜ。(まあ、実際はtreeだけどUIはstack扱いかな)

poulpy123 2025/06/17 09:08:14

Nimで書かれてるの見るの、いつも嬉しいわ。俺の初心者目線だと、C/C++とPythonの間にある一番面白いlanguageなんだよな。人気が出なかったのが残念だぜ。userbaseの規模に比べてuserのproductivityが高いのは、このtopicに詳しくなくても「やっぱそうだよな」って思わせてくれるんだ。

pancsta 2025/06/17 14:19:32

Nim(rod)はGolangよりちょっと前に出て、featureがかぶってたのが普及が進まなかった理由だろうな。

anta40 2025/06/17 07:15:11

macOSで ’make’ 一発で簡単にbuildできたぜ。クールだな。
新しいelinksのalternativeが出たのもいい感じだ。

desireco42 2025/06/17 05:11:16

terminalでMarkdown browser作るのってマジで筋が通ってるし、すげえうまくいくと思うんだ。よく考えたら、Netscapeっぽくpageのeditingもできるようにできるんじゃね?それはヤバいだろ。
Nimは最高なlanguageだし、これで使われてるの見るのは嬉しいぜ。

ralgozino 2025/06/17 12:56:09

glowがそれに近いぜ: https://github.com/charmbracelet/glow

desireco42 2025/06/17 14:02:34

ありがとう、これ良いの見つけたね

zquestz 2025/06/17 03:31:23

これめっちゃ動くじゃん、s-search経由で触ってるんだけどw3mより全然良いね =)

elcritch 2025/06/16 23:14:42

コード読んでみるのおすすめだよ。Nimで書かれてるから読みやすいし(高性能)。HTML DOMとかWeb仕様の実装とか、やっかいな部分もあるけど、基本的な設定はすぐわかるよ。

corv 2025/06/16 21:54:15

すごい! しかもNimなんだ!

ieee2 2025/06/17 11:13:04

あの画像、テキストUIでどうやって表示してんの?

ieee2 2025/06/17 11:18:33

あー、わかったよ。SixelsかKitty protocolで表示してるんだって。対応してる画像形式はPNG, JPEG, BMP, GIF (stb_image), WebP (jebp), SVG (nanosvg)だよ。
設定ファイルで有効にできるみたい。

dotancohen 2025/06/17 11:17:26

sixel使ってインライン表示。スクショ見てみ。悪くないよ。

ieee2 2025/06/17 11:19:16

うん、スクショ良いよね。だから聞いたんだよ。

ho_schi 2025/06/17 11:22:20

そういえばさ、TTYで画像とか動画をレンダリングするのって結構普通なんだよね。
fbida: https://www.kraxel.org/blog/linux/fbida/
mpv: https://mpv.io/
fbidaはscreenとかtmux使う時、たまに-dオプションで/dev/drm/何かしらを指定する必要あるかな。MPVはTTYで長いこと-vo=drm必要だったけど、ここ数ヶ月でいつも動くようになったね。良い改善 :)
ディスプレイサーバーいらないよ。

ieee2 2025/06/17 11:23:52

今日初めて見たよ。ありがとう!

hecanjog 2025/06/16 21:10:07

このbrowser大好き!作ってくれてありがとう!

marcodiego 2025/06/16 21:35:56

GPMに対応してる?

shiomiru 2025/06/16 22:08:15

まだGPMには対応してないけど、XTermのmouse protocolは認識するよ。

lucideer 2025/06/17 00:21:36

マジで信じられないくらいすごい。gopherにも対応してるんだ。

adamseddie 2025/06/17 10:38:21

Dockerfile: https://paste.rs/egbGg
docker build -t chawan:0.2.0 .
docker run -it –rm chawan:0.2.0 https://news.ycombinator.com/

ericrenan 2025/06/17 16:14:02

いい仕事してるね、本当にナイスな出来だよ、おめでとう。

agumonkey 2025/06/16 22:45:00

tiny webのファンとしては、こういうprojectが見られるのはすごく嬉しいよ、(拍手)。

shiomiru 2025/06/17 08:58:05

記事であった指摘(ホビーPJだって?とか、外部バイナリ、sixel/kitty、Mac対応どうなの?)について、開発者が理由を説明したり、賛同したり、Mac対応は協力をお願いしたりしてるよ。
詳しくはリンク見てね! https://todo.sr.ht/~bptato/chawan/63

baq 2025/06/17 05:58:36

Chawanも良いけど、これも結構近いよ
https://www.brow.sh/

dodslaser 2025/06/17 07:18:24

もっと近いのはこれかな
https://github.com/chase/awrit
対応してるターミナルエミュレーターが必要だけどね。

akkartik 2025/06/17 07:10:32

これぞShow HNだよ! ハッカーによるハッカーのためのもの! なんでもかんでも真面目で野心的でつまらなくある必要はないんだよね。
君のフラストレーション、すごくわかるな〜。ほら、代わりに僕の半端なプロジェクトも批判してよ! → https://akkartik.name/freewheeling-apps
一般論としては全くその通りだよ。

b0a04gl 2025/06/17 07:20:47

まあ確かにね、全部が洗練されてたり製品レベルじゃなくていいのはわかるよ。
君の作品は目的を絞ってて、トレードオフにも正直で分かりやすい。それは珍しいことだね。
僕は趣味のツールとか実験的なのは大賛成だよ、ただ未完成な時には正直になろうぜって思ってるんだ。こっそり基準が下がるのは避けたいだけなんだよね。

pvg 2025/06/17 13:35:20

未完成なものがあるなら正直になろうぜ
未完成なものはShow HNではちゃんとしたトピックだよ。趣味のツール、ちょっとした思いつきで作ったもの、学習目的のプロジェクト、全部トピックとしてあり。
一般的な不満を言うのは面白くないし、スレッドの質を下げるだけ。

invaliduser 2025/06/17 07:04:18

でも、それがなんで問題なの? 楽しむためだけにプロジェクトに取り組むのは全く正当じゃん。
ここはまさか「Hacker News」じゃないの?
ちなみに、これがStallmanによるハッカーの定義だよ→「プログラマーであることがハッカーであることとは違う。それは遊び心のある賢さを評価することだ。遊び心のある賢さなしにプログラマーにはなれるし、プログラミング以外の分野でも遊び心のある賢さは発揮できる。」

もっとコメントを表示(2)
b0a04gl 2025/06/17 08:48:38

楽しむために作るの、全然オッケーだよ。誰もそうじゃないなんて言ってない。
僕がちょっと異論を唱えたのは、それらを実際以上のものとして扱っちゃう時だけ。
僕は壊れたオモチャをたくさん作ったけど、それを過大に宣伝しないようにしてるんだ。
ブラウザのデモって呼ぶ? クールだね。
ターミナルの代替って呼ぶ? そしたら、まあ入力とかレンダリングとかJavaScriptのこと聞いちゃうよね。
それが面倒なら、もしかしたら僕がスレッドを間違えたのかもね。別に強いこだわりはないんだけど。

記事一覧へ

海外テックの反応まとめ
著者
海外テックの反応まとめ
暇つぶしがてらに読むだけで海外のテックニュースに詳しくなれるまとめサイトです。