xyproto/algernon

Small self-contained pure-Go web server with Lua, Teal, Markdown, HTTP/2, QUIC, Redis, TypeScript, npm-less React 19, SQLite, and PostgreSQL support ++

Algernon – 組み込みスクリプトとオプションのLLMサポートを備えた単一バイナリWebサーバー

何であるか – AlgernonはHTTP/1、HTTP/2、HTTP/3(QUIC)トラフィックを処理する自己完結型のGo実行可能ファイルです。Markdown、Pongo2、Amber、Sass/SCSS、GCSS、JSX/TSX、Lua、Tealなど、幅広いファイル形式をレンダリングでき、Lua/Tealスクリプトをリクエストハンドラとして実行できます。組み込みのキー・バリュー・ストア(BoltDB)を備えており、Redis、Valkey、PostgreSQL、SQLite、MariaDB/MySQL、MSSQLとも連携可能です。小さなプラグインシステムにより、外部プログラムでサーバーを拡張できます。

なぜ重要か – WebサイトやAPIのプロトタイピングを迅速かつ依存関係ゼロで行いたい開発者にとって、Algernonは別途のWebサーバー、ビルドパイプライン、データベースサーバーの必要性を排除します。テンプレートエンジン、CSSプリプロセッサ、esbuildによるJSX/TSXバンドル、Server-Sent Eventsによる自動リフレッシュといったツール類はすべてバイナリ内に内蔵されているため、マシンに1つのファイルを配置するだけでコンテンツを提供し始められます。

主な機能

  • プロトコル対応 – TLS経由のHTTP/2がデフォルト、オプションでHTTP/3(QUIC)、プレーンHTTPのフォールバック。
  • スクリプティング – gopher-lua経由のLuaと型付きLuaであるTealがリクエストハンドラとして使用可能。data.luaファイルでテンプレートに関数を公開できます。
  • テンプレート&マークアップ – Markdown → HTML、Pongo2、Amber、Sass/SCSS、GCSS、JSX/TSX(esbuildでトランスパイル)、HyperApp、ReactスタイルのJSX。
  • データベースバックエンド – 組み込みのBoltDB、または外部のRedis/Valkey、PostgreSQL、SQLite、MariaDB/MySQL、MSSQL。
  • レート制限 – 組み込みのtollboothミドルウェア。
  • 自動リフレッシュ – ソースファイルの変更を検知し、Server-Sent Eventsでブラウザを自動リロード(Linux/macOSのみ)。
  • プラグインシステム – 任意の言語がJSON-RPC経由でLua.CodeLua.Helpを実装するプラグインを提供可能(pieライブラリ)。
  • LLM統合 – Ollamaサーバーに接続可能であれば、Luaスクリプトでollama()またはOllamaClientを呼び出してテキスト生成、コード実行、プロンプト間のベクトル距離計算が可能。
  • パッケージング – アプリケーションはZIP(.zipまたは.alg)形式でアーカイブでき、直接実行可能。約17 MiBのDockerイメージも提供。

一般的なワークフロー

  1. サイト用のディレクトリを作成。
  2. 好みの言語に応じてindex.luaindex.mdindex.pongo2index.jsxなどを追加。
  3. オプションでdata.luaを追加し、テンプレートにデータアクセス関数を公開。
  4. algernon -e(開発モード)またはalgernon --autorefreshでサーバーを起動。
  5. ファイルを編集;ブラウザが自動的にリフレッシュ。
  6. 本番環境ではTLS証明書(--cert--key)を指定し、HTTP/2またはHTTP/3に切り替え。

誰に適しているか – Nginx、Node、別々のビルドツールの設定を避けたい趣味開発者、教育者、小規模チームの開発者。Lua/Teal愛好家や、Ollama経由でリアルタイムでLLM呼び出しを試したい人にも魅力的です。

制限事項

  • 高性能CDNレベルのサーバーではない;専用サーバーに比べてスループットは劣る。
  • 自動リフレッシュはLinux/macOSでのみ動作。
  • 組み込みLuaインタプリタはネイティブライブラリ(package.loadlib)の読み込みが不可。
  • LLM機能は外部のOllamaサーバーに依存;バイナリ自体にはモデルは含まれない。

導入方法go install github.com/xyproto/algernon@latest または事前ビルド済みバイナリを取得し、print("Hello, World!")を含むindex.luaを作成して http://localhost:3000/ にアクセス。リポジトリにはwelcome.shスクリプトとsamplesコレクションがあり、すべてのサポートされるファイル形式を探索できます。


TL;DR – AlgernonはGoで書かれた、静的ファイルの提供、Lua/Tealスクリプトの実行、モダンなフロントエンドアセットのレンダリング、オプションでOllama LLMへの呼び出しをすべて1つの実行可能ファイルから行える、完全統合型Webサーバーです。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト