Chawanというターミナルウェブブラウザを知りました.
メモリセーフなNimで実装されていてライセンスはパブリックドメインです.
同じようにターミナル上で動作するw3mやLynx系との大きな違いはJavaScriptやCSSに対応している辺りでしょうか.SixelやKittyのターミナル画像形式にも対応しています.
少し試してみました.
Note | 少し用途が違いますが,v8エンジンを使ったスクレイピング向けのヘッドレスブラウザのLightpandaなんてものもあります. |
Chawanのインストール
現在のChawan: 0.2.0はLinux amd64の静的バイナリtarballやDebian amd64の.debがあります.
不安定のパッケージとしてAUR/NixOS/AppImageがあるようです.(こちらは今回未確認)
他の環境ではセルフビルドが必要そうです.
Debianパッケージ利用(amd64のみ)
Debian sid amd64環境に.debパッケージで導入してみました.
$ wget -c https://chawan.net/dl/chawan-0-2-0-amd64.deb (1) $ sha256sum ./chawan-0-2-0-amd64.deb ba3ff4e24a5bf09919caba1cdc4f50b0cbf862f8433f5ea43d5391c1e04eceda ./chawan-0-2-0-amd64.deb $ sha512sum ./chawan-0-2-0-amd64.deb e941b880c179df8da7eb4cf7a8050c75ef8a1cdfe629aff8287893f4308071454bf7fb54b4054a5ab99330610b17eca12e7f23a71ffc956d613329365d3c7e17 ./chawan-0-2-0-amd64.deb $ sudo apt install ./chawan-0-2-0-amd64.deb (2) $ chawan (3) bash: chawan: command not found $ dpkg -L chawan | grep /bin/ (4) /usr/bin/cha /usr/bin/mancha $ cha Chawan browser v0.2.0 (release, sandboxed) Usage: cha [options] [URL(s) or file(s)...] Options: -- Interpret all following arguments as URLs -c, --css <stylesheet> Pass stylesheet (e.g. -c 'a{color: blue}') -d, --dump Print page to stdout -h, --help Print this usage message -o, --opt <config> Pass config options (e.g. -o 'page.q="quit()"') -r, --run <script/file> Run passed script or file -v, --version Print version information -C, --config <file> Override config path -I, --input-charset <enc> Specify document charset -M, --monochrome Set color-mode to 'monochrome' -O, --display-charset <enc> Specify display charset -T, --type <type> Specify content mime type -V, --visual Visual startup mode $ cha --version Chawan browser v0.2.0 (release, sandboxed by seccomp-bpf) $ mancha Usage: mancha [-M path] [[-s] section] -k keyword mancha [-M path] [[-s] section] name mancha -l file $ mancha cha :
.debを入手
インストール
chwanコマンドはなかった
バイナリを探すと
cha
とmancha
が見つかった
Debian sid amd64でsourceからbuild
sourceからのbuildも試してみます.
パッケージで導入したNimはちょっと古そうです.
$ /usr/bin/nim -V Nim Compiler Version 1.6.14 [Linux: amd64] Compiled at 2024-04-25 Copyright (c) 2006-2023 by Andreas Rumpf active boot switches: -d:release
Nim 2.2.4を貰ってきてPATHを通しておきます.
$ wget -c https://nim-lang.org/download/nim-2.2.4-linux_x64.tar.xz https://nim-lang.org/download/nim-2.2.4-linux_x64.tar.xz.sha256 $ sha256sum -c nim-2.2.4-linux_x64.tar.xz.sha256 nim-2.2.4-linux_x64.tar.xz: OK $ fuse-archive nim-2.2.4-linux_x64.tar.xz fuse-archive: Created mount point 'nim-2.2.4-linux_x64' $ export PATH=`pwd`/nim-2.2.4-linux_x64/nim-2.2.4/bin:$PATH $ which nim /home/matoken/Downloads/nim-2.2.4-linux_x64/nim-2.2.4/bin/nim $ nim -V Nim Compiler Version 2.2.4 [Linux: amd64] Compiled at 2025-04-22 Copyright (c) 2006-2025 by Andreas Rumpf git hash: f7145dd26efeeeb6eeae6fff649db244d81b212d active boot switches: -d:release
適当なディレクトリに移動してChawanのsourceを貰ってきてbuildします.
$ cd ~/src $ git clone https://git.sr.ht/~bptato/chawan && cd chawan $ sudo apt install libssh2-1-dev libssl-dev libbrotli-dev pkg-config make $ make $ ./cha Chawan browser v0.3 (release, sandboxed) Usage: cha [options] [URL(s) or file(s)...] Options: -- Interpret all following arguments as URLs -c, --css <stylesheet> Pass stylesheet (e.g. -c 'a{color: blue}') -d, --dump Print page to stdout -h, --help Print this usage message -o, --opt <config> Pass config options (e.g. -o 'page.q="quit()"') -r, --run <script/file> Run passed script or file -v, --version Print version information -C, --config <file> Override config path -I, --input-charset <enc> Specify document charset -M, --monochrome Set color-mode to 'monochrome' -O, --display-charset <enc> Specify display charset -T, --type <type> Specify content mime type -V, --visual Visual startup mode $ ./cha -v Chawan browser v0.3 (release, sandboxed by seccomp-bpf)
Raspberry Pi OS bookworm armhf
Single-Board ComputerのRaspberry Piでも試したいのでこちらでもbuildを試します.
Linux armhfのNimバイナリは公式に見当たらないのでこちらのNightlyのものを使いました.
$ wget -c https://github.com/nim-lang/nightlies/releases/download/2025-04-22-version-2-2-f7145dd26efeeeb6eeae6fff649db244d81b212d/nim-2.2.4-linux_armv7l.tar.xz $ tar tvf nim-2.2.4-linux_armv7l.tar.xz $ tar xvf nim-2.2.4-linux_armv7l.tar.xz $ export PATH=$PATH:`pwd`/nim-2.2.4/bin $ which nim /home/matoken/Downloads/nim-2.2.4/bin/nim $ cd ~/src $ git clone https://git.sr.ht/~bptato/chawan && cd chawan $ sudo apt install libssh2-1-dev libssl-dev libbrotli-dev pkg-config make $ make $ ./cha --version Chawan browser v0.3 (release, sandboxed by seccomp-bpf)
Note | 手元の環境ではパッケージ導入時に以下のような依存関係のエラーとなりました. The following packages have unmet dependencies: zlib1g-dev : Depends: zlib1g (= 1:1.2.13.dfsg-1) but 1:1.2.13.dfsg-1+rpt1 is to be installed E: Unable to correct problems, you have held broken packages. とりあえずバージョンを指定して入れ直して回避できました. $ sudo apt install zlib1g=1:1.2.13.dfsg-1 |
Chawanを試す
$ cha Chawan browser v0.2.0 (release, sandboxed) Usage: cha [options] [URL(s) or file(s)...] Options: -- Interpret all following arguments as URLs -c, --css <stylesheet> Pass stylesheet (e.g. -c 'a{color: blue}') -d, --dump Print page to stdout -h, --help Print this usage message -o, --opt <config> Pass config options (e.g. -o 'page.q="quit()"') -r, --run <script/file> Run passed script or file -v, --version Print version information -C, --config <file> Override config path -I, --input-charset <enc> Specify document charset -M, --monochrome Set color-mode to 'monochrome' -O, --display-charset <enc> Specify display charset -T, --type <type> Specify content mime type -V, --visual Visual startup mode
とりあえず cha $URL
という感じでurlを指定して起動するとウェブページが表示できます.
既定値ではCSSは認識しますが,JavaScriptや画像は使えません.
右クリックからのメーニューやショートカットで有効にすることも出来ますが面倒なので設定ファイルで設定します.
┌──────────────────────────────┐ │ Select text (v) │ │ Copy selection (y) │ │ Previous buffer (,) │ │ Next buffer (.) │ │ Discard buffer (D) │ │ ──────────────────────────── │ │ View image (I) │ │ Peek (u) │ │ Copy link (yu) │ │ Copy image link (yI) │ │ Paste link (M-p) │ │ Reload (U) │ │ ──────────────────────────── │ │ Save link (sC-m) │ │ View source (\) │ │ Edit source (sE) │ │ Save source (sS) │ │ ──────────────────────────── │ │ Linkify URLs (:) │ │ Toggle images (M-i) │ │ Toggle JS & reload (M-j) │ │ Toggle cookie & reload (M-k) │ │ ──────────────────────────── │ │ Bookmark page (M-a) │ │ Open bookmarks (M-b) │ │ Open history (C-h) │ └──────────────────────────────┘
設定ファイルは
~/.chawan/config.toml
若しくは ~/.config/chawan/config.toml
が使えるようです.
cha-config(5)
を見ながら設定すると良さそうです.
とりあえず画像とJavaScriptを有効にする最低限の設定はこんな感じのようです.
[buffer] images = true scripting = true
ただ,JavaScriptの設定の scripting
はここではなくsiteごとの設定の [siteconf]
内で有効にするのを強く勧めますとのことなのでちゃんと必要なsiteだけ有効にしたほうが良さそうです.
この状態でSixelやKittyに対応したXTermなどの端末でアクセスするとこんな感じで表示されます.
about:chawan
キーバインドなども確認できます
という感じで少し試した感じではCSSを認識するので見た目がw3mなどと比べて大分いい感じです.カーソルが背景と同じになり場所がわからなくなってしまったりしますが,ポインティングデバイスが使える場合はクリックでカーソルがその場所に移動するのでアンカ部分をクリック&Enterでリンク先に移動できます.画像が一部しか表示されないとき key:[M-i] で画像をoff → 再度 key:[M-i] で画像を再度on とすると読み込まれることがあります.
回線が細い場合リモートのVPSでChawanを動かして結果だけをもらうようにするとダウンロード時間が短縮されていい感じです.ただし加増が多いサイトでスクロールを多用する場合はもたつきます.
Sixelで画像が利用できる時にSixel対応tmux経由でChawanを起動するとChawanのSixel画像が表示されないようです.同じ端末でimg2sixelなどは問題ないのでChawan側の問題でしょうか?
JavaScriptは思ったより動かないなという感じですがCSSが思ったより助かります.JavaScriptについてはQuickJS-NGを使っているのでこちらに期待です.ECMAScriptの機能準拠の進捗状況はこちら
ただ,現時点ではChawanはLinux amd64環境でJavaScript/画像有効でもメモリ利用量10MB前後.色々と動くようになるとこの辺も増えていってしまうでしょうね…….
という感じで軽量で見た目もいいのでこれからにも期待しつつw3mなどと併用していこうと思います.