```CL-BBS:用 Common Lisp 重写的类 SchemeBBS 文本论坛```
CL-BBS: the schemeBBS-like textboard rewritten in Common Lisp

原始链接: https://github.com/ryukinix/cl-bbs

本项目是一个高性能、现代化的 Common Lisp 实现,旨在复刻经典的 SchemeBBS 论坛引擎。作为原版 /prog/ BBS 的忠实克隆,它保留了传统的 `

` 标签布局和单线程发帖模式。 主要功能包括: * **丰富的格式支持:** 支持 Markdown 样式的粗体、斜体、代码、剧透遮盖、引用以及动态帖子引用。 * **媒体与用户体验:** 支持自动图片预览、链接自动跳转,并通过 Cookie 实现持久化的主题自定义。 * **高性能:** 采用服务器端渲染,无需任何 JavaScript。 * **健壮性:** 基于 SBCL、Hunchentoot 和 Clack 构建,使用 Qlot 管理依赖,并配备完整的 Parachute 测试套件。 * **配置灵活:** 支持通过环境变量进行高度灵活的部署,允许自定义数据目录、管理员凭据以及设置只读版块。 * **存储方式:** 使用轻量级的纯文本 S-expression 文件进行数据持久化。 开始使用前,用户需安装 Roswell 和 Qlot 以管理依赖,并启动监听 8222 端口的服务器。

用户 “lerax” 宣布发布 **CL-BBS**,这是文本讨论版平台 “SchemeBBS” 的 Common Lisp 重写版本。 开发者更青睐无认证文本讨论版所具备的简洁性和隐私性,而非像 Reddit 那样图片繁多的替代品。在托管了两年 SchemeBBS 实例后,他们希望能寻求到一个比 MIT Scheme 更灵活、更稳健的生态系统。 与原版相比,CL-BBS 引入了多项新功能: * **用户自定义:** 支持主题和默认讨论版设置的持久化保存。 * **增强功能:** 支持图片 URL 预览及内置搜索系统。 * **管理功能:** 提供用于内容审核的集成仪表板。 该项目目前已上线([board-v2.manoel.dev](https://board-v2.manoel.dev)),开发者正寻求社区反馈。
相关文章

原文

An anonymous textboard (BBS) engine written in Common Lisp. It is a high-performance, modern clone of the original MIT Scheme SchemeBBS (which ran behind dis.4chan.org and world4ch /prog/).

  • Seamless SchemeBBS Layout: Displays threads, index lists, and posts inside definition lists (<dl>, <dt>, <dd>) exactly conforming to the original SchemeBBS style.
  • Single Trailing Forms: Conforms to the original textboard paradigm where a single posting form is rendered at the very end of the thread (no per-post forms).
  • Comprehensive Formatting Support:
    • Bold: **text** -> <b>text</b>
    • Italic: __text__ -> <i>text</i>
    • Monospace: `text` -> <code>text</code> (Uses the standard backtick notation)
    • Spoilers: ~~text~~ -> <del>text</del>
    • Blockquotes: Lines starting with > are rendered as <blockquote> blocks.
    • Post References: >>7 are dynamically hyperlinked to jump anchors inside the thread page.
    • Direct Image Link Previews: Direct links to images (.png, .jpg, .jpeg, .gif, .webp, .bmp) are automatically converted into elegant clickable image previews.
    • Standard URLs: Standard URLs are automatically formatted as standard hyperlinks.
  • Dynamic Board Headers: Centered and left-aligned board listing headers (e.g. [ foo | prog ]) are scanned and displayed dynamically at the top of every page.
  • Theme Preferences (Cookies): Choose between multiple themes (default, classic, dark, mona, no) on the /board/preferences page. Selections are stored inside browser cookies (theme) and persistent.
  • Zero JavaScript Required: The application is completely server-rendered.
  • Local Qlot Sandbox: Locked sandbox dependencies pinned via qlfile to ensure backwards compatibility across environments.
  • 29-Assertion Test Suite: Comprehensive test coverage verifying cookies, routing pipelines, and formatting rules.

You must have Roswell and Qlot installed:

# Install Roswell
# (Follow Roswell platform instructions)

# Install Qlot
ros install qlot

Clone the repository and install dependencies locally:

# Fetch and lock dependencies locally
qlot install

Start the Hunchentoot/Clack server:

The server will boot and listen locally on port 8222.

Execute the automated Parachute test suite:

You can configure the server using environment variables:

  • SBBS_DATADIR: The directory where board S-expression database files are stored (default: data/).
  • SBBS_LOCKED_BOARDS: A comma-separated list of boards that should be locked in read-only mode. New threads cannot be created and comments/replies cannot be posted to these boards (e.g., SBBS_LOCKED_BOARDS=foo,bar). The posting forms will also be hidden on the frontend of these boards.
  • SBBS_ADMIN_USER: The username for the admin panel (default: admin).
  • SBBS_ADMIN_PASSWORD: The password for the admin panel (default: superchanner).
  • Lisp: Common Lisp (SBCL) loaded via Roswell.
  • Web Server: Hunchentoot, Clack, Lack.
  • HTML Templating: cl-who (HTML generation).
  • Data Store: S-expression files saved inside plain-text files under data/sexp/.
联系我们 contact @ memedata.com