Just another yet messenger
  • Rust 38.3%
  • TypeScript 37.6%
  • Typst 11.3%
  • Python 6.7%
  • JavaScript 4.3%
  • Other 1.8%
Find a file
kiper220 4ec3f6e96a
Some checks failed
Nightly Delivery / nightly (push) Failing after 23m51s
chore: snapshot current guildwine workspace
2026-03-22 19:02:03 +04:00
.forgejo/workflows chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
branding chore: initial commit with structured spec and russian mermaid diagrams 2026-02-24 01:58:37 +04:00
client-rust chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
crates chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
scripts chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
spec chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
web chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
.dockerignore chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
.gitignore chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
AGENTS.MD chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
Cargo.lock chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
Cargo.toml chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
docker-compose.yml chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
INSTALL.MD chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
Makefile chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00
README.MD chore: snapshot current guildwine workspace 2026-03-22 19:02:03 +04:00

GuildWine

GuildWine is a federated messenger with a Rust backend, a React web client, and supporting shared crates for protocol, canonical signing, and MLS-related client logic.

Components

  • crates/gw_server: HTTP/API server and federation endpoints.
  • web: React/Vite frontend source. Production delivery uses built static assets, not vite dev.
  • scripts/package-backend.sh: builds and packs the backend runtime payload.
  • scripts/package-web.sh: builds and packs the production frontend dist.
  • .forgejo/workflows: nightly and tag-based delivery pipelines.

Local Development

Docker Compose

docker compose up --build

This uses the dev Dockerfiles:

  • crates/gw_server/Dockerfile.dev
  • web/Dockerfile.dev

Services:

  • web: http://localhost:3000
  • backend: http://localhost:8080

Without Docker

Backend:

cargo run -p guildwine --bin guildwine

Frontend:

npm --prefix web ci
VITE_PROXY_TARGET=http://127.0.0.1:8080 npm --prefix web run dev -- --host 0.0.0.0 --port 3000

Packaging

Backend package:

bash scripts/package-backend.sh v0.1.0

Creates:

  • dist/artifacts/guildwine-backend-v0.1.0-linux-amd64.tar.gz
  • dist/artifacts/guildwine-backend-linux-amd64.tar.gz

Web package:

npm --prefix web ci
bash scripts/package-web.sh v0.1.0

Creates:

  • dist/artifacts/guildwine-web-v0.1.0-dist.tar.gz
  • dist/artifacts/guildwine-web-dist.tar.gz

Production Docker images are built from these packaged artifacts. They do not rebuild the project inside the image.

Production Docker Images

  • Backend image build source: crates/gw_server/Dockerfile
  • Web image build source: web/Dockerfile

Backend image contents:

  • all release binaries from crates/gw_server

Web image contents:

  • prebuilt static frontend from web/dist
  • static-only nginx runtime on port 3000

The production web image does not proxy /v1 or /.well-known. That routing must be handled by your ingress or reverse proxy.

Forgejo Delivery

Nightly

Pushes to main trigger .forgejo/workflows/nightly.yaml.

Outputs:

  • workflow artifacts with backend/web packaged archives
  • Docker images:
    • git.wetgrape.su/wetgrape/guildwine-backend:nightly-main
    • git.wetgrape.su/wetgrape/guildwine-backend:nightly-<shortsha>
    • git.wetgrape.su/wetgrape/guildwine-web:nightly-main
    • git.wetgrape.su/wetgrape/guildwine-web:nightly-<shortsha>

Releases

Git tags trigger .forgejo/workflows/release.yaml.

Outputs:

  • Forgejo Release with packaged backend/web tarballs as assets
  • Docker images tagged with the git tag
  • latest only for stable tags

Auth For Publishing

Recommended repository secrets:

  • FORGEJO_PUBLISH_USER
  • FORGEJO_PUBLISH_TOKEN

The workflows require these dedicated credentials for registry publication. Use a token that is allowed to create releases and publish container packages on the Forgejo instance.

Tag Naming

Stable release tags:

  • v1.2.3

Prerelease tags:

  • v1.2.3-alpha.1
  • v1.2.3-beta.1
  • v1.2.3-rc.1
  • v1.2.3-pre.1
  • any other SemVer-compatible prerelease suffix after -

Rules:

  • Only strict vMAJOR.MINOR.PATCH tags are treated as stable.
  • Any SemVer tag with a prerelease suffix is treated as prerelease.
  • Prerelease tags publish release assets and versioned Docker images, but do not update latest.
  • Stable tags publish release assets, versioned Docker images, and update latest.
  • Nightly delivery is created only from main and does not use git tags.

Pulling Images

Examples:

docker pull git.wetgrape.su/wetgrape/guildwine-backend:nightly-main
docker pull git.wetgrape.su/wetgrape/guildwine-web:nightly-main
docker pull git.wetgrape.su/wetgrape/guildwine-backend:v1.2.3
docker pull git.wetgrape.su/wetgrape/guildwine-web:v1.2.3

Stable latest:

docker pull git.wetgrape.su/wetgrape/guildwine-backend:latest
docker pull git.wetgrape.su/wetgrape/guildwine-web:latest

Notes

  • INSTALL.MD contains the domain and reverse-proxy setup guide.
  • The repository currently targets linux/amd64 for packaged artifacts and Docker delivery.