1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai>
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, either version 3 of the
License, or (at your option) any later version.
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/>.
STACK
Four services: Caddy, cgit, SearXNG, Rust private chat.
Rust management CLI; strict TypeScript browser code; GNU LibreJS checks.
SearXNG and cgit's upstream supervisor use third-party Python. No first-party Python.
License: GNU Affero General Public License, version 3 or later. See LICENSE.
START LOCAL
Linux tools: rustup, Podman, Git, GnuPG, Node >=22.18.0, npm.
Native chat checks: GCC-compatible C compiler, Linux UAPI headers, libclang,
pkg-config, make, Perl, curl, tar, OpenSSL >=3.5 development libraries.
Pinned Rust includes rustfmt, Clippy, static x86_64 Linux target.
Native/WASI release builds: docs/CHAT-PRODUCTION.txt.
cargo stack dev
cargo stack status
cargo stack down
Open http://localhost:8080, /git/, /search/, http://chat.localhost:8080/.
Fresh checkout creates private .env. Local mode: loopback only, no public TLS.
FILES AND STATE
Full file tree and uses: docs/MAP.txt. Rules: docs/POLICY.txt.
CLI: src/main.rs, src/app.rs, src/app/. Backends: crates/.
Add crates explicitly to root workspace; inherit strict workspace lints.
infra/: services, proxy, containers, user service. web/: site and WKD.
docs/: .txt guides. Browser code/tests: TypeScript; docs/TYPESCRIPT.txt.
Exactly one root .env: settings and configured secrets.
One public .env.example: hosts, ports, upstreams, chat, backup keys/placeholders.
Generated databases and TLS keys: var/data. More: docs/CONFIGURATION.txt.
Git ignores .env, var/, .tools/, target/, bin/, dist/, node_modules/.
CHECK AND RELEASE
cargo install --locked --version 0.20.2 cargo-deny --root .tools
cargo install --locked --version 0.9.3 --features cli cargo-about --root .tools
cargo stack check
cargo stack release
Check: TypeScript build, both compilers, typed ESLint, npm audit; Rust fmt,
Clippy, tests, private rustdoc, cargo-deny, cargo-about. npm lock: package-lock.json.
Policy and tested exceptions: docs/LINTING.txt.
Cargo.lock + about.hbs generate THIRD-PARTY-LICENSES.html.
Display GNU license names; preserve exact SPDX identifiers and upstream legal text.
Build/test locally. Deploy prebuilt archives. VPS needs Podman, Git, GnuPG;
no Rust/Cargo/Node/npm/TypeScript. Backup, restore, host setup, deployment:
docs/OPERATIONS.txt. Building a release does not activate production.
CHAT — EXPERIMENTAL
cargo stack chat --init
cargo stack chat
--init adds settings to existing root .env; chat starts direct local service.
Setup, protected files, tests, recovery, licensing, limits: docs/CHAT-APPLICATION.txt.
Packaged HTTPS, owner setup, recovery: docs/CHAT-PRODUCTION.txt.
SQLite snapshots use bundled SQLite C library. Static releases use OpenSSL,
hash-verified musl headers, Rust musl target. VPS needs no compiler.
|