(Early WiP) Anonymize Forgejo repositories for scientific blind review
  • Rust 94.5%
  • HTML 5.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-31 21:23:09 +02:00
src Module comments, update example config 2026-07-31 21:23:09 +02:00
templates Download 2026-07-31 10:14:40 +02:00
.gitignore Initial commit 2026-01-25 18:27:41 +01:00
Cargo.lock Serve empty directories, page cache 2026-07-29 17:57:02 +02:00
Cargo.toml Serve empty directories, page cache 2026-07-29 17:57:02 +02:00
example_config.toml Module comments, update example config 2026-07-31 21:23:09 +02:00
favicon.ico Serve empty directories, page cache 2026-07-29 17:57:02 +02:00
FORMATS.md Serve empty directories, page cache 2026-07-29 17:57:02 +02:00
LICENSE Initial commit 2026-01-25 18:27:41 +01:00
README.md Module comments, update example config 2026-07-31 21:23:09 +02:00
rustfmt.toml Initial commit 2026-01-25 18:27:41 +01:00

Blindforge

(The name may not be definitive.)

Git repository anonymizer for double-blind scientific review. Inspired by Anonymous GitHub but not tied to a centralized platform. It will allow to mirror public or private Git repositories from diverse platforms (Forgejo, and maybe Gitea, GitLab, GitHub...), removing any information leaking the author's identities or affiliations.

Early development: not usable yet.

TODO

  • Fetch repo from API
  • Repo caching
  • Submission form
  • Config
  • Repo serving
  • Allow download
  • Markdown rendering
  • Replace words
  • Abuse report
  • Admin tools
  • Captcha
  • Rate-limiting and space quota
  • Expiration
  • Manual removal
  • Security tests (zip bomb)
  • Security tests (URL encoding in links, HTML, HTTP headers)
  • Error pages
  • Webdesign
  • Compatibility with other forges
  • Serve at a subdirectory
  • Better logo (contribution welcome)

Install

Use example_config.toml. The settings that are important to look at are listen_host, listen_port, data_dir, api_client_user_agent and origin.

The executable is self-contained. Serve it behind any reverse proxy. The process must have read/write access to data_dir, where the repositories will be stored.

blindforge config.toml

Design choices

Language: It would have been simpler to use good old PHP and SQL. But I have more fun with Rust.

Database: No database, because none needed. Persistent data are structured in directories and files. Metadata are written to files in a simple custom binary format. Advantages: simpler installation, easier portability, no dependency to a third-party nonstandard format (such as embedded databases other than SQLite).

Rust crates: I did not select the most famous crates (e.g. clap, toml, tokio). They are great and quite feature-complete, but also very big and we don't use most of their features. I instead carefully selected smaller crates with fewer dependencies but still satisfying our needs and with good (or better) performance.

AI: No generative AI was used. Any use of generative AI by contributors must be declared explicitly. AI-generated content that has not been reviewed carefully by the contributor will not be accepted. Contributing using AI with something the contributor does not have the skills to review correctly, is strongly discouraged.

TLS: Cryptographic libraries such as Ring, AWS-LC or Graviola are often more performant than OpenSSL. However, they are less often available as a shared library in Linux distributions. Embedding them statically takes storage and memory (each program has its own copy of a different crypto library, and the OS cannot optimize), and makes the program's maintainer responsible for security updates of the embedded library. As this project is very small, it is better to use your distribution's cryptographic implementation. Note: only the API client uses TLS. The user is responsible for setting up an HTTPS reverse proxy of their choice.

License

GNU AGPL v3, CopyLeft 2026 Pascal Engélibert (why copyleft?)

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.