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 是一个自包含的 Go 可执行文件,可处理 HTTP/1、HTTP/2 和 HTTP/3(QUIC)流量。它能渲染多种文件类型(Markdown、Pongo2、Amber、Sass/SCSS、GCSS、JSX/TSX、Lua、Teal 等),并可将 Lua/Teal 脚本用作请求处理器。它自带嵌入式键值存储(BoltDB),也可连接 Redis、Valkey、PostgreSQL、SQLite、MariaDB/MySQL 或 MSSQL。一个小型插件系统允许你通过外部程序扩展服务器功能。
为何重要 – 对于希望快速、零依赖地原型化网站或 API 的开发者,Algernon 消除了对独立 Web 服务器、构建流水线和数据库服务器的需求。所有工具(模板引擎、CSS 预处理器、通过 esbuild 的 JSX/TSX 打包、通过 Server-Sent Events 的自动刷新)都内置于二进制文件中,因此你只需将一个文件复制到机器上即可开始提供内容。
核心功能
- 协议支持 – 默认使用 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)。
- 插件系统 – 任何语言均可提供实现
Lua.Code和Lua.Help的插件,通过 JSON-RPC(pie 库)通信。 - LLM 集成 – 当可访问 Ollama 服务器时,Lua 脚本可调用
ollama()或OllamaClient生成文本、运行代码或计算提示之间的向量距离。 - 打包方式 – 应用程序可打包为 ZIP(
.zip或.alg)并直接运行;提供约 17 MiB 的 Docker 镜像。
典型工作流程
- 为你的网站创建一个目录。
- 根据偏好语言添加
index.lua、index.md、index.pongo2、index.jsx等文件。 - 可选地添加
data.lua以向模板暴露数据访问函数。 - 运行
algernon -e(开发模式)或algernon --autorefresh启动服务器。 - 编辑文件;浏览器将自动刷新。
- 生产环境时,提供 TLS 证书(
--cert、--key)并切换至 HTTP/2 或 HTTP/3。
适合谁使用 – 希望快速原型化 Web 栈而无需配置 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 编写的全功能 Web 服务器,可从单个可执行文件中提供静态文件、运行 Lua/Teal 脚本、渲染现代前端资产,并可选地调用 Ollama LLM。
相关
- 项目
- 项目
- 项目
- 项目
- 项目