Files
5ducky/Cargo.toml
kibiandClaude Opus 5.5 d0f2d526df Port 4ducky to Rust (Axum + SQLite)
Same design, layout, URLs and features as the PHP version: browse grid,
image view with AJAX comments, BBCode, likes, uploads (file, URL and
bookmarklet), quicktagger, profile, block list, inbox, invites, Hall of
Ducks, Truhe, abuse reports and the admin tools.

- Parameterized SQL, escaped templates (askama), argon2 passwords,
  server-side sessions, CSRF tokens on every write, strict script CSP
- SSRF-safe remote image fetching, magic-byte upload checks
- Self-hosted captcha replaces reCAPTCHA v1; analytics/social widgets removed
- Vanilla JS replaces jQuery and its plugins with the same DOM behaviour
- Reverse proxy support (frontend_path, trust_proxy, secure_cookies)
- Admin CLI: admin, settings, invites

See README.md for running it and the full list of changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 02:15:05 +02:00

40 lines
1.2 KiB
TOML

[package]
name = "fourducky"
version = "0.1.0"
edition = "2024"
description = "4ducky.com image board - Rust port of the original PHP/Picturelicious site"
publish = false
[dependencies]
ab_glyph = "0.2"
anyhow = "1"
argon2 = "0.5"
askama = "0.14"
axum = { version = "0.8", features = ["multipart", "macros"] }
chrono = "0.4"
clap = { version = "4", features = ["derive"] }
futures-util = "0.3"
hex = "0.4"
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "gif"] }
imageproc = { version = "0.25", default-features = false }
percent-encoding = "2"
rand = "0.9"
regex = "1"
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "stream"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
sha2 = "0.10"
sqlx = { version = "0.8", default-features = false, features = ["runtime-tokio", "sqlite", "macros", "migrate"] }
subtle = "2"
tokio = { version = "1", features = ["full"] }
toml = "0.8"
tower = "0.5"
tower-http = { version = "0.6", features = ["fs", "set-header", "limit", "trace"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
url = "2"
[profile.release]
lto = "thin"
strip = true