Skip to content
Grove-ComputingPublic

About

A browser where Go replaces JavaScript.

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Growse

プロキシ

Growse は標準の HTTP_PROXY、HTTPS_PROXY、NO_PROXY 環境変数を使用する。 プロキシ設定を切り替えた後の新しいリクエストでは、その時点の値を読み直すため、 アプリケーションを再起動する必要はない。

Growseは、GoまたはJavaScriptをクライアントサイド言語として実行する実験的なWebブラウザです。

HTMLとCSSで画面を構築し、Tab単位のGo / JS selectorでWebGoまたはJavaScriptから同じDOM、Event、Scheduler、Fetch、Storage、Navigationを操作できます。desktop appの新規TabはJavaScriptが既定で、WebGo PageはGoへ明示的に切り替えられます。

Growseでできること

項目 主な機能
ブラウジング 左側Vertical Tab、URL入力、リンク遷移、same-document Routing、戻る、進む、再読込、Scroll復元
HTML / DOM 要素の検索・生成・追加・削除、属性・class・Form値の操作
CSS Layout Flow / Float、intrinsic sizing、Table、Flexbox、Grid / Subgrid、Writing Mode、Position / Sticky、Overflow、Multi-column
CSS Paint Color Level 4、Gradient、複数Background、Shadow、Opacity、2D Transform、bounded Filter / Blend
Animation CSS Transition、@keyframes、Easing、Iteration、Direction、Fill Mode、Pause、prefers-reduced-motion
Form Form Controls、Focus、Constraint Validation、GET / POST Submission
Scheduler timeout、interval、Animation Frame、Page終了時の自動解除
Storage Tab間で共有する永続Local Storage、Storage Event、Tab単位のSession Storage
HTTP WebGo Fetch、Cookie、Same-Origin Policy、CORS、Freshness・再検証・Disk対応のHTTP Cache
Dual Runtime desktopはJavaScript既定、Tab単位Go / JavaScript切替、完全reload、Engine間分離
External JavaScript 通常HTTP(S) Pageのclassic / async / defer、ES Modules、dynamic import、import map
Browser-grade Compatibility 明示的にJSを選んだTabで固定Next.js / SvelteKit実build、Chromium差分Gate、非同期media、incremental rendering、bounded compositor
WebAssembly JavaScript API、streaming compile / instantiate、Memory / Table / Instance quota
Browsing Context same / cross-origin iframe、sandbox、postMessage、独立Runtime
Offline Service Worker registration / lifecycle / fetch、Cache Storage、idle restart
Web API Go / JavaScript共通のDOM Event、Fetch、Scheduler、History、Navigation、Storage、Console API
DevTools Console、Inspector、Network、秘密情報を持たないPage / Frame / Service Worker Runtime診断

詳しい対応範囲と制限は、CSS対応表、Form / Fetch / Cookie対応表、Storage / Cache対応表を参照してください。

インストール

Installerを使う

Linux、macOS、Git Bashを利用できるWindowsでは、最新版を~/.local/binへインストールできます。InstallerはダウンロードしたArchiveのSHA-256 checksumを検証します。

Installerはcommandに加えて、OSごとのGUI Applicationも登録します。

  • Linux: Desktop EntryとIconを$XDG_DATA_HOMEへ配置します。未設定時は~/.local/shareを使用します。UbuntuのApplication一覧から起動してDockへ登録できます。
  • macOS: Growse.appを~/Applicationsへ配置し、growse commandから同じApplication Bundleを起動します。
  • Windows: 専用Iconを配置し、ユーザーのStart Menu ProgramsへGrowse Shortcutを登録します。

実行中は、リリース確認、環境判定、検証、インストールの進捗を段階ごとに表示します。対話端末ではColor表示になり、CIやFileへのRedirectでは自動的にColorを無効化します。明示的に切り替える場合はGROWSE_COLOR=always|neverを、Colorを使わない一般的な設定にはNO_COLOR=1を指定できます。

wget -qO- https://github.com/Grove-Computing/Growse/releases/latest/download/install.sh | bash

Versionとインストール先を指定する場合は、環境変数を利用します。

wget -qO- https://github.com/Grove-Computing/Growse/releases/latest/download/install.sh | GROWSE_VERSION=v0.20.0 GROWSE_INSTALL_DIR=/usr/local/bin bash

GUI Applicationの配置先は、GROWSE_DATA_HOME、GROWSE_APPLICATIONS_DIR、GROWSE_WINDOWS_PROGRAMS_DIRで変更できます。

Docker imageを使う

Linux amd64のDocker imageを、GitHub Container Registryから取得できます。

docker pull ghcr.io/grove-computing/growse:v0.20.0

GrowseはGUI applicationのため、Containerから起動する場合はホストのDisplay ServerとGPU deviceを接続する必要があります。

クイックスタート

必要なもの

  • Go 1.26以降
  • Gioが利用するOSのグラフィックス開発ライブラリ

Ubuntu / Debian系では、次のパッケージをインストールします。

sudo apt-get update
sudo apt-get install -y libvulkan-dev gcc pkg-config libwayland-dev libx11-dev libx11-xcb-dev libxkbcommon-x11-dev libgles2-mesa-dev libegl1-mesa-dev libffi-dev libxcursor-dev

ほかのLinuxディストリビューションについては、GioのLinuxセットアップ手順を参照してください。

起動する

go mod download
go run ./cmd/growse

起動すると、左側Vertical Tab Rail、戻る・進む・再読込・DevTools・URL入力欄・Gopherボタン・状態表示を備えたブラウザウィンドウが開きます。

Demoを試す

別のターミナルでDemoを1つ配信し、Growseでhttp://localhost:6053を開きます。

python3 -m http.server 6053 --directory examples/data-app

ほかのDemoへ切り替える場合は、配信するディレクトリを変更します。

Demo 配信ディレクトリ 確認できる機能
Counter examples/counter click Eventによるカウント更新
Todo examples/todo テキスト入力、Form送信、完了切替、削除
CSS3 Core Showcase examples/css3-core Custom Property、calc()、Media Query、Gradient、Box Model
Flexbox Showcase examples/flexbox grow / shrink、wrap、alignment、gap、auto margin、nested flex
Dashboard examples/dashboard Grid、Position、複数Background、Shadow、Transform、Opacity
Animation Showcase examples/animation hover Transition、複数Keyframes Animation
Data App Showcase examples/data-app Form、WebGo Fetch、structured Headers、Session Cookie、DOM更新、Animation
Persistent App Showcase examples/persistent-app Scheduler、same-document Routing、Local / Session Storage、Fetch、HTTP Cache、offline状態
Multi-Tab Workspace go run ./examples/multi-tab-workspace Vertical Tab、Storage Event、共有Cookie / Cache、Tab別Session / Scheduler
DevTools Showcase go run ./examples/devtools Console 4 level、DOM / Style / Layout、成功Fetch、redirect、cache、HTTP error、timeout
Dual Runtime Showcase go run ./examples/dual-runtime 同じUIのGo / JavaScript切替、DOM、Event、Timer、Fetch、Storage、History、Runtime error
External Web Platform go run ./examples/external-web-platform 外部classic / Module、dynamic import、WASM、same / cross-origin iframe、Service Worker offline、cross-origin CSS、sandbox
Modern Web Compatibility go run ./examples/modern-web-compat Next.js / SvelteKit SSR、Tailwind CSS v4実artifact、SSR先行表示、段階的image更新、hydration、priority / cache / lifecycle診断
Browser-grade Compatibility go run ./examples/browser-grade-compat desktop / narrow・DPR 1 / 2 corpus、Chromium差分、visual / performance Gate、resource queue・dirty subtree・layer・damage診断
Real-Site Compatibility Gate GROWSE_REAL_SITE_ARTIFACT_DIR=/tmp/growse-real-site bash tests/v020-real-site-visual.sh 7サイトの固定fixture、desktop / narrow、P0 content loss / P1 structural breakage、Growse・Chromium・diff PNG
Visual Fidelity Showcase go run ./examples/visual-fidelity CJK fallback、wrap、vertical writing、shadow、gradient、radius、clip、transform、filter、responsive viewport、resource completion
CSS Layout 2026 go run ./examples/css-layout-2026 Flow、Sizing / Table、Flex / Grid / Subgrid、Writing Mode、Sticky / Overflow、Multi-column、動的reflow

WebGoソースは通常のGo build対象から除外するため、各Demoでは_app.goとして配置しています。

Multi-Tab Workspaceは専用のlocal fixture serverを起動し、Growseでhttp://localhost:6053を開きます。Notes画面のリンクからTasksとActivityを新しいVertical Tabへ開けます。外部ServiceやAPI keyは不要です。

DevTools Showcaseも専用のlocal fixture serverだけを使用します。外部通信や実Credentialなしで、Console、Inspector、Networkの通常・error・timeout・cache状態を再現できます。

Dual Runtime Showcaseもlocalhost内だけで完結します。ツールバーのGo / JSを押すとPageを完全reloadし、同じHTML/CSS上のCounterとWeb API処理を選択Engineだけで実行します。

External Web Platform Showcaseはtop-level、CDN、Frameを別のlocal Originで配信し、Internet、DNS、Credentialなしで外部サイト経路を再現します。起動後に表示されるURLをJavaScript Engineで開くと、Module / WASM / iframe / Service Worker / sandbox状態を確認できます。

Modern Web Compatibility ShowcaseはNext.js / SvelteKit fixtureに加え、Tailwind CSS v4.1.12で実際に生成したstylesheetとSvelteKit SSR相当HTMLを/real-site/でlocalhostだけから配信します。desktop appでは既定のJavaScript Engineで、遅いscriptを待つ間のSSR先行表示、priority付きimage queue、段階的image commit、hydration、日本語、重複画像のdecode再利用、responsive grid、transform / opacity animationを確認できます。Go Engineへ切り替えた場合はSSR HTMLとEngine非依存resourceだけを表示し、JavaScriptを取得・実行しません。DevToolsはcache hit / miss / coalesced request / cancellation / rejectionをbody-free counterとして表示します。

Browser-grade Compatibility Showcaseは同じ固定framework artifactをdesktop / narrow、DPR 1 / 2、SSR / resource完了 / hydration / interaction / scroll / animationのcorpusとして公開します。tests/v017-conformance.shはChromium referenceとのDOM landmark、computed style、geometry、focus、resource、region別visual diffと固定runner性能をRelease Gateとして検証します。

CSS Layout 2026 Showcaseはv0.19.0のscreen向けbaselineを1ページへ集約します。6個の操作ボタンでfloat / BFC、Table、Writing Mode / direction、relative / transform、Multi-columnを動的に切り替え、late image、nested scroll、Sticky、Paint / Hit Testingを同じrevisionで確認できます。固定Chromium 153とFirefox 156との差分fixture、選定WPT、Next.js / SvelteKit / Tailwind corpusはoffline CIで検証します。

Visual Fidelity Showcaseはv0.20.0の実raster evidenceを補完するローカルfixtureです。Latin / CJK / combining mark のfallbackと折返し、vertical writing、shadow、gradient、radius、clip、2D transform、filter、focus、resize、scroll、resource completionを一画面で確認できます。pixelを完全一致させる対象は固定font・viewport・DPRのCI fixtureに限り、任意サイト、全font、complex script、3D transform、SVG filter全体との完全一致は保証しません。

Real-Site Compatibility Gateは1MB Club、日本語Wikipedia、GitHub profile、cv.btxx.org、t0.vc、Schemescape、KIDLATを取得情報付きのsanitized fixtureとして固定します。desktop / narrowの両方で主要region、文字切れ・重なり、reload、scroll、focus、link、font / image完了を検証し、P0 / P1が1件でもあれば失敗します。公開サイトはrelease candidateのlive smokeにだけ使い、CI baselineは自動更新しません。

ブラウザの仕組み

Rendering Pipeline

Growseは取得したHTMLとCSSを、独自のPipelineで画面へ描画します。

HTML / CSS
  → DOM
  → Computed Style
  → Layout Tree
  → Display List
  → Viewport

Animation中のPaintとHit Testingは、同じFrameの値を参照します。transform / opacityだけのframeは基準Layout Treeと静的Display Listを再利用し、layoutへ影響する変更だけを再構築します。画像はPage generation内のfetch / decode cacheと、target size・DPR・object-fit・filter単位のbounded paint cacheを使います。DOMを変更すると影響するresourceとComputed Style以降を更新します。

Navigation

  • 左側のVertical Tab RailからTabを作成、選択、終了できます。TabごとにNavigation、History、Scroll、Focus、WebGo Runtime、Scheduler、Session Storageを保持します。
  • URL入力欄でEnterを押すか、Gopherボタンを押すと移動します。
  • リンクのclick、戻る、進む、履歴を増やさない再読込に対応しています。
  • Ctrl+T(macOSではCommand+T)でTabを作成し、Ctrl+W(macOSではCommand+W)でactive Tabを終了します。Ctrl+TabとCtrl+Shift+Tabで前後のTabへ切り替えます。
  • Ctrl+L(macOSではCommand+L)でURL入力欄へ移動し、現在のURLを全選択します。
  • Ctrl+R(macOSではCommand+R)で通常の再読込、Ctrl+Shift+R(macOSではCommand+Shift+R)でHTTP Cacheへ再検証を要求する強制再読込を実行します。
  • リンクへカーソルを重ねると、認証情報を除去した遷移先URLを状態表示に示します。
  • ウィンドウ内では、青いGopherをマウスカーソルとして表示します。

Go / JavaScript Dual Runtime

Goでは<script type="text/go">をYaegiで、JavaScriptではtype省略、text/javascript、application/javascriptとtype="module"をgojaで実行します。Go sourceはtrusted loopbackかつsame-originに限定します。JavaScriptは通常のHTTP(S) Pageでinline / external classicとES Modulesを実行し、redirect、MIME、mixed content、CORS、credentials、integrity、sizeをBrowser側で検証します。選択していないEngineのScriptは取得しません。

EngineはTabごとに保持し、desktopの新規TabではJavaScript、WebGo PageではGoを明示選択します。切り替え時は旧Runtime、Event、Timer、Fetch、Storage callbackを停止して完全reloadします。Go RuntimeとJavaScript Runtimeを同時実行せず、値やfunctionを共有しません。

  • growse/dom: DOM、Form、Eventを操作
  • growse/fetch: Headers、JSON / text / binary / FormData body、AbortController、timeoutを備えた非同期HTTP Requestを実行
  • growse/navigation: 現在URL、pushState / replaceState、History traversalとEventを操作
  • growse/scheduler: timeout、interval、Animation Frameを登録・解除
  • growse/storage: Origin単位のLocal / Session Storageを操作し、OnChangeで別TabのLocal Storage更新を受信
  • growse/console: Log、Info、Warn、ErrorをPage単位のDevTools Consoleへ記録
  • Fetch callback: PageのEvent Queueで実行
  • Page終了時: Timer、Frame callback、実行中Fetchをcancelし、Runtime参照を解放

JavaScriptはconsole、DOM / Event、Timer / Animation Frame、Promise形式fetch、Storage、Navigationに加え、ES Modules、dynamic resource、hydration向けDOM / CSSOM / observer、WebAssembly、iframe messaging、Service Worker / Cache Storageの検証済みsubsetを提供します。これらはdesktopの既定JavaScript Tab、またはJSへ明示切替したTabだけで有効になり、Go Engineへhost objectやcallbackを公開しません。Node.js、npm、CommonJS、WASI、OS、filesystem、process、Go reflectionは公開しません。詳細はRuntime / Web API対応表を参照してください。

Go / JavaScript / WASMとService WorkerはBrowser UIとは別のresource-bounded worker processで実行し、version / size制限付きIPCとBrowserが再検証するbrokered APIだけを使用します。必須sandbox状態を検証できない場合はcodeを実行しません。この境界は未知のOS kernel、Go runtime、goja、wazero、decoderの脆弱性まで排除するものではありません。詳細はRuntime worker / Web Platform設計とSECURITY.mdを参照してください。

WebGo DevTools

ツールバーのDevToolsボタンまたはF12で、active Tabの下部へDevToolsを開閉できます。選択panelとfilterはTabごとに保持されます。

  • Console: Go / JavaScript Engine、4 level、script / runtime errorを表示し、level filterとclearを提供
  • Inspector: active PageのDOM snapshotを選択し、公開attribute、主要Computed Style、Layout Boxをread-only表示
  • Network: Navigation、resource、Form、Fetchのmethod、外部Script Engine、redacted URL、timing、status、redirect、cache、size、error categoryを表示
  • Runtime: Page / Frame / Service Worker context、script kind / schedule、Engine、generation、CSS局所無視理由、font fallback family、image cache hit / miss / eviction、frame rebuild理由、sandbox capabilityを表示

DevToolsはRequest / Response body、Header、Cookie、Authorizationを保持しません。URL userinfoとquery valueをマスクし、password input valueもInspectorへ公開しません。安全上限と詳細はWebGo DevTools設計を参照してください。

ドキュメント

文書 内容
CSS対応表 CSS Property、Layout、Animationの対応状況と制限
Form / Fetch / Cookie対応表 Form、HTTP、Cookie、CORSの対応状況と制限
Storage / Cache対応表 Web Storage、HTTP Cache、永続化、quotaの対応状況と制限
Visual Regression Test 固定Viewport、Font、Scaleによる既存gateと、v0.20.0の7サイトdesktop / narrow real-site visual gate
Performance Baseline Layout、Paint、Form、Scheduler、History、Storage、CacheのBenchmark基準値
WPT由来テスト Web Platform Testsから移植したTestと出典
Developer Supply Chain Security 不可視Code検査、Extension管理、署名、Credential、Incident Response
WebGo DevTools設計 Console、Inspector、Network、Runtimeのデータ境界、redaction、安全上限
Runtime / Web API対応表 Go / JavaScript Engine、Script type、API対応、制約、非対応範囲
Runtime worker / Web Platform設計 worker process、IPC、sandbox、generation、Frame / Service Worker所有境界
v0.9.0リリース定義 v0.9.0のTheme、Scope、完了条件
v0.10.0リリース定義 v0.10.0のTheme、Scope、完了条件
v0.11.0リリース定義 v0.11.0のTheme、Scope、完了条件
v0.12.0リリース定義 v0.12.0 WebGo DevToolsのTheme、Scope、完了条件
v0.13.0リリース定義 v0.13.0 Go / JavaScript Dual RuntimeのTheme、Scope、完了条件
v0.14.0リリース定義 v0.14.0 External JavaScript / Module / WASM / iframe / Service Worker / sandboxのTheme、Scope、完了条件
v0.15.0リリース定義 v0.15.0 Modern Web Compatibility、framework CSS / hydration、image / SVG / fontのTheme、Scope、完了条件
v0.16.0リリース定義 v0.16.0 Real-site Rendering & Performance、Tailwind v4、CJK、image cache、差分AnimationのTheme、Scope、完了条件
v0.17.0リリース定義 v0.17.0 Browser-grade Web Compatibility、実framework corpus、media pipeline、incremental rendering、compositor、differential Gateの完了条件
v0.18.0リリース定義 v0.18.0 Browser-grade Resource Loading、非同期image commit、script lifecycle、priority、cache / cancel診断の完了条件
v0.19.0リリース定義 v0.19.0 CSS Layout 2026、Flow / Table / Flex / Grid / Subgrid / Writing Mode / Sticky / Multi-columnと仕様適合の完了条件
v0.20.0リリース定義 v0.20.0 Real-World CSS Compatibility、7サイトcorpus、P0 / P1 gate、live smokeの完了条件

品質チェック

ローカルで、CIと同等の検査を実行できます。

make ci

主な検査項目は次のとおりです。

  • go test -race ./...
  • 最低Test Coverage 70%
  • go vet
  • Staticcheck
  • actionlint
  • govulncheck
  • 不可視Unicode、未承認Binary、Editor Extension recommendationの検査
  • Installer、Release成果物、Docker、文書の検証

Go Modules、GitHub Actions、Docker base imageの依存関係は、Dependabotで週次確認します。Pull Requestでは追加されたHigh/Criticalの既知脆弱性をDependency Reviewで遮断します。

セキュリティ

v0.20.0はRuntime workerのdefault-deny境界を維持し、font fallback、visual raster、gradient / filter surfaceにもglyph 50,000件、画像16 megapixel、artifact 1件16 MiB・corpus合計256 MiBの上限を適用します。Layoutも実行時間、box / fragment、recursion、line / float、column balancingへ上限を設けます。Navigation、Page close、Engine切替では進行中resourceをcancelしますが、実験的browserとして未知のnative/runtime/decoder脆弱性への完全耐性は保証しません。外部Go sourceは引き続きtrusted loopbackだけに限定されます。Growseを権限の高いユーザーや機密profileで実行しないでください。

脆弱性の非公開報告方法、サポート対象、通信とResource LoadingのSecurity BoundaryはSECURITY.mdを参照してください。

リリース成果物

v0.20.0のようなVersion tagをpushすると、GitHub Actionsが次の成果物、SHA-256 checksum、SPDX JSON SBOMをGitHub Releaseへ公開します。ArchiveとSBOMにはGitHub Artifact Attestation、Docker imageにはBuildKitのSBOMとSLSA Provenanceを付与します。

  • Linux amd64
  • macOS Intel
  • macOS Apple Silicon
  • Windows amd64
  • Linux amd64 Docker imageのVersion tagとlatest tag

Archiveには、Growse本体、Runtime workerとして再起動する同一検証済み実行ファイル、すべてのDemoを同梱します。Gopher cursor imageは実行ファイルへ埋め込まれるため、別途assetを配置する必要はありません。

checksum、SBOM、Provenanceを使った成果物の検証手順は、SECURITY.mdのSupply Chain Securityを参照してください。

Go Gopherのクレジット

The Go Gopher was designed by Renée French.

The Go Gopher is licensed under the Creative Commons Attribution 4.0 License.

About

A browser where Go replaces JavaScript.

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages