summaryrefslogtreecommitdiff
path: root/README.txt
blob: c680f43cfa9a74100a37936aeeb907a83e5dbeb2 (plain)
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.