尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Libreverse is a privacy‑centric application for curating and sharing interactive "experiences" (self‑contained HTML documents). Powered by Hotwire, it delivers a seamless, single‑page‑application (SPA) experience entirely within the Ruby on Rails ecosystem while keeping all data on whatever instance you choose to use.
Alpha release - routine maintainence only since the need for libreverse has diminished – this version is under active development. Expect breaking changes, incomplete features, and occasional rough edges. Planned work is tracked in our road‑map.
| Layer | Technology |
|---|---|
| Language | Ruby 3.4 (YJIT enabled) |
| Framework | Rails 8.0.2 + Hotwire |
| Database | TiDB + SQLite 3 (enhanced adapter) |
| Build / Assets | Vite 6 + Shakapacker |
| Web Server | Phusion Passenger |
| Container Image | Multi‑stage Dockerfile |
Libreverse supports decentralized federation using the ActivityPub protocol, allowing instances to share experiences while maintaining local control.
Set your instance domain in environment variables:
export INSTANCE_DOMAIN=your-domain.com
Admin users can manage federation settings at /admin/federation. Federation is implemented with a simplified delivery approach to ensure stability - full ActivityPub delivery can be enabled when desired.
For detailed federation documentation, see documentation/federation.md.
Note: Building the Docker image requires at least 8 GB of available memory, though the running container itself needs very little memory. If you encounter out-of-memory errors during the build, try increasing your Docker memory limit.
docker build -t libreverse:alpha .
# Persist database and uploads
docker run -p 3000:3000 -v libreverse_data:/data libreverse:alpha
The image exposes port 3000 and stores the production SQLite database and uploaded files under /data.
Quality checks now run automatically via GitHub Actions CI on every push and pull request.
To run quality checks manually (original script preserved):
perl scripts/static.pl
app/ – MVC components, Reflexes, Stimulus controllers (.coffee)
bin/ – Development helpers & executable scripts
db/ – Migrations and schema.sql
documentation/ – Comprehensive guides (e.g., SQLite, security)
scripts/ – One‑off maintenance scripts
See the https://docs.libreverse.io for full guides.
Security is a core focus of Libreverse. Please see SECURITY.md for more information.
Looking for ideas? Check the good first issue label or our road‑map.
Libreverse is licensed under the APGL License for source code and various permissive licenses for assets. See the licenses/ directory for full texts.
Sensitive columns in Rodauth tables are encrypted using Sequel's built-in column_encryption plugin. The encryption key is a 32-byte value derived from Rails.application.secret_key_base using ActiveSupport::KeyGenerator (see config/initializers/sequel_encryption.rb).
secret_key_base does not change. If it does, you must re-encrypt existing data.accounts.password_hashaccount_remember_keys.key (searchable)account_password_reset_keys.key (searchable)CHECK constraints to ensure only encrypted data is stored (see db/migrate/20250501000000_add_column_encryption_constraints_to_rodauth.rb).No additional gem is required; this uses Sequel's built-in plugin. All Rodauth features continue to work seamlessly with encrypted data.
If you deploy Libreverse behind a reverse proxy (such as Nginx, Apache, or a cloud load balancer), you must ensure that the proxy sets the X-Forwarded-Proto header on all requests. This header is used by Rails and middleware to correctly identify whether the original request was made over HTTP or HTTPS. If this header is missing or misconfigured, you may experience issues such as:
Solution:
proxy_set_header X-Forwarded-Proto $scheme;RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}Thank you for exploring Libreverse!