# outpoot/gurted architecture

> Architecture diagram of the GitHub repository outpoot/gurted, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/outpoot/gurted
- Repository: https://github.com/outpoot/gurted

## Overview

Gurted combines a secured custom GURT protocol, domain/DNS services, certificate issuance, server hosting, and search, with a public website. The main flows are client requests through the protocol stack to hosted services, domain registration and resolution through DNS, certificate requests through GurtCA, and crawling/indexing registered domains for search. The tree and excerpts support the protocol, DNS, CA client, CLI, and search entry points; the README documents a Godot/GDScript browser and HTML/CSS/Lua engine, but their source is absent from the supplied tree, so their wiring is not shown.

Main entry points: [`protocol/library/src/client.rs`](https://github.com/outpoot/gurted/blob/main/protocol/library/src/client.rs) (GURT client), [`dns/src/gurt_server/routes.rs`](https://github.com/outpoot/gurted/blob/main/dns/src/gurt_server/routes.rs) (DNS service), [`search-engine/src/server.rs`](https://github.com/outpoot/gurted/blob/main/search-engine/src/server.rs) (Search server), [`protocol/library/src/server.rs`](https://github.com/outpoot/gurted/blob/main/protocol/library/src/server.rs) (GURT server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_protocol["GURT protocol"]
  node_protocol_library["Protocol library<br/>[lib.rs]"]
  node_protocol_client["GURT client<br/>[client.rs]"]
  node_protocol_server["GURT server<br/>[server.rs]"]
  node_protocol_crypto["TLS and crypto<br/>[crypto.rs]"]
  node_godot_extension["Godot extension<br/>[lib.rs]"]
end

subgraph group_domains["Domains and certificates"]
  node_dns_service["DNS service<br/>[routes.rs]"]
  node_dns_auth["Accounts and invites<br/>[auth_routes.rs]"]
  node_dns_ca["CA endpoints<br/>[ca.rs]"]
  node_domain_store[("DNS database<br/>[models.rs]")]
  node_discord["Discord approvals<br/>[discord_bot.rs]"]
  node_ca_cli["GurtCA CLI<br/>[main.rs]"]
  node_ca_client["CA client<br/>[client.rs]"]
  node_ca_crypto["Certificate crypto<br/>[crypto.rs]"]
  node_ca_challenges["DNS challenges<br/>[challenges.rs]"]
end

subgraph group_hosting["Server hosting"]
  node_gurty_cli["Gurty CLI<br/>[main.rs]"]
  node_gurty_server["Hosting server<br/>[server.rs]"]
  node_request_handler["Request handling<br/>[request_handler.rs]"]
  node_file_handlers["File handlers<br/>[handlers.rs]"]
end

subgraph group_search["Search"]
  node_search_cli["Search commands<br/>[main.rs]"]
  node_crawler["Domain crawler<br/>[crawler.rs]"]
  node_scheduler["Crawl scheduler<br/>[scheduler.rs]"]
  node_indexer[("Search index<br/>[indexer.rs]")]
  node_search_server["Search server<br/>[server.rs]"]
end

subgraph group_web["Public website"]
  node_site["Gurted website<br/>[+page.svelte]"]
  node_download_page["Download page<br/>[+page.svelte]"]
end

node_visitor(("User"))
node_approved_domains[("Registered domains")]
node_hosted_sites(("GURT sites"))
node_browser_engine["Flumi browser and renderer"]

node_visitor -->|"browses"| node_site
node_site -->|"links to"| node_download_page
node_visitor -->|"views GURT sites"| node_browser_engine
node_browser_engine -.->|"uses"| node_godot_extension
node_godot_extension -->|"uses"| node_protocol_library
node_protocol_client -->|"secures connections"| node_protocol_crypto
node_protocol_server -->|"secures connections"| node_protocol_crypto
node_protocol_library -->|"provides client"| node_protocol_client
node_protocol_library -->|"provides server"| node_protocol_server
node_protocol_client -->|"requests resolution"| node_dns_service
node_dns_service -->|"reads and writes"| node_domain_store
node_dns_auth -->|"reads and writes"| node_domain_store
node_dns_service -->|"requests approval"| node_discord
node_ca_cli -->|"requests certificates"| node_ca_client
node_ca_cli -->|"generates key and CSR"| node_ca_crypto
node_ca_cli -->|"completes challenge"| node_ca_challenges
node_ca_client -->|"calls CA endpoints"| node_dns_ca
node_ca_challenges -->|"uses CA API"| node_ca_client
node_dns_service -->|"publishes approved domains"| node_approved_domains
node_search_cli -->|"starts crawl"| node_crawler
node_search_cli -->|"rebuilds or queries"| node_indexer
node_search_cli -->|"starts server"| node_search_server
node_scheduler -->|"schedules crawl"| node_crawler
node_crawler -->|"fetches site content"| node_hosted_sites
node_crawler -->|"supplies pages"| node_indexer
node_search_server -->|"searches index"| node_indexer
node_search_server -->|"reads online status"| node_approved_domains
node_gurty_cli -->|"builds and serves"| node_gurty_server
node_gurty_server -->|"registers routes"| node_protocol_server
node_protocol_server -->|"dispatches requests"| node_request_handler
node_request_handler -->|"serves files"| node_file_handlers
node_search_server -->|"returns search results"| node_visitor
node_protocol_client -->|"requests resources"| node_hosted_sites

click node_protocol_library "https://github.com/outpoot/gurted/blob/main/protocol/library/src/lib.rs"
click node_protocol_client "https://github.com/outpoot/gurted/blob/main/protocol/library/src/client.rs"
click node_protocol_server "https://github.com/outpoot/gurted/blob/main/protocol/library/src/server.rs"
click node_protocol_crypto "https://github.com/outpoot/gurted/blob/main/protocol/library/src/crypto.rs"
click node_godot_extension "https://github.com/outpoot/gurted/blob/main/protocol/gdextension/src/lib.rs"
click node_dns_service "https://github.com/outpoot/gurted/blob/main/dns/src/gurt_server/routes.rs"
click node_dns_auth "https://github.com/outpoot/gurted/blob/main/dns/src/gurt_server/auth_routes.rs"
click node_dns_ca "https://github.com/outpoot/gurted/blob/main/dns/src/gurt_server/ca.rs"
click node_domain_store "https://github.com/outpoot/gurted/blob/main/dns/src/gurt_server/models.rs"
click node_discord "https://github.com/outpoot/gurted/blob/main/dns/src/discord_bot.rs"
click node_ca_cli "https://github.com/outpoot/gurted/blob/main/protocol/gurtca/src/main.rs"
click node_ca_client "https://github.com/outpoot/gurted/blob/main/protocol/gurtca/src/client.rs"
click node_ca_crypto "https://github.com/outpoot/gurted/blob/main/protocol/gurtca/src/crypto.rs"
click node_ca_challenges "https://github.com/outpoot/gurted/blob/main/protocol/gurtca/src/challenges.rs"
click node_gurty_cli "https://github.com/outpoot/gurted/blob/main/protocol/cli/src/main.rs"
click node_gurty_server "https://github.com/outpoot/gurted/blob/main/protocol/cli/src/server.rs"
click node_request_handler "https://github.com/outpoot/gurted/blob/main/protocol/cli/src/request_handler.rs"
click node_file_handlers "https://github.com/outpoot/gurted/blob/main/protocol/cli/src/handlers.rs"
click node_search_cli "https://github.com/outpoot/gurted/blob/main/search-engine/src/main.rs"
click node_crawler "https://github.com/outpoot/gurted/blob/main/search-engine/src/crawler.rs"
click node_scheduler "https://github.com/outpoot/gurted/blob/main/search-engine/src/scheduler.rs"
click node_indexer "https://github.com/outpoot/gurted/blob/main/search-engine/src/indexer.rs"
click node_search_server "https://github.com/outpoot/gurted/blob/main/search-engine/src/server.rs"
click node_site "https://github.com/outpoot/gurted/blob/main/site/src/routes/%2Bpage.svelte"
click node_download_page "https://github.com/outpoot/gurted/blob/main/site/src/routes/download/%2Bpage.svelte"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_protocol_library,node_protocol_client,node_protocol_server,node_protocol_crypto,node_godot_extension,node_visitor,node_browser_engine toneBlue
class node_dns_service,node_dns_auth,node_dns_ca,node_domain_store,node_discord,node_ca_cli,node_ca_client,node_ca_crypto,node_ca_challenges,node_approved_domains toneAmber
class node_gurty_cli,node_gurty_server,node_request_handler,node_file_handlers toneMint
class node_search_cli,node_crawler,node_scheduler,node_indexer,node_search_server toneRose
class node_site,node_download_page,node_hosted_sites toneIndigo
```

## Components

### GURT protocol

- [Protocol library](https://github.com/outpoot/gurted/blob/main/protocol/library/src/lib.rs): `protocol/library/src/lib.rs`
- [GURT client](https://github.com/outpoot/gurted/blob/main/protocol/library/src/client.rs): `protocol/library/src/client.rs`
- [GURT server](https://github.com/outpoot/gurted/blob/main/protocol/library/src/server.rs): `protocol/library/src/server.rs`
- [TLS and crypto](https://github.com/outpoot/gurted/blob/main/protocol/library/src/crypto.rs): `protocol/library/src/crypto.rs`
- [Godot extension](https://github.com/outpoot/gurted/blob/main/protocol/gdextension/src/lib.rs): `protocol/gdextension/src/lib.rs`

### Domains and certificates

- [DNS service](https://github.com/outpoot/gurted/blob/main/dns/src/gurt_server/routes.rs): `dns/src/gurt_server/routes.rs`
- [Accounts and invites](https://github.com/outpoot/gurted/blob/main/dns/src/gurt_server/auth_routes.rs): `dns/src/gurt_server/auth_routes.rs`
- [CA endpoints](https://github.com/outpoot/gurted/blob/main/dns/src/gurt_server/ca.rs): `dns/src/gurt_server/ca.rs`
- [DNS database](https://github.com/outpoot/gurted/blob/main/dns/src/gurt_server/models.rs): `dns/src/gurt_server/models.rs`
- [Discord approvals](https://github.com/outpoot/gurted/blob/main/dns/src/discord_bot.rs): `dns/src/discord_bot.rs`
- [GurtCA CLI](https://github.com/outpoot/gurted/blob/main/protocol/gurtca/src/main.rs): `protocol/gurtca/src/main.rs`
- [CA client](https://github.com/outpoot/gurted/blob/main/protocol/gurtca/src/client.rs): `protocol/gurtca/src/client.rs`
- [Certificate crypto](https://github.com/outpoot/gurted/blob/main/protocol/gurtca/src/crypto.rs): `protocol/gurtca/src/crypto.rs`
- [DNS challenges](https://github.com/outpoot/gurted/blob/main/protocol/gurtca/src/challenges.rs): `protocol/gurtca/src/challenges.rs`

### Server hosting

- [Gurty CLI](https://github.com/outpoot/gurted/blob/main/protocol/cli/src/main.rs): `protocol/cli/src/main.rs`
- [Hosting server](https://github.com/outpoot/gurted/blob/main/protocol/cli/src/server.rs): `protocol/cli/src/server.rs`
- [Request handling](https://github.com/outpoot/gurted/blob/main/protocol/cli/src/request_handler.rs): `protocol/cli/src/request_handler.rs`
- [File handlers](https://github.com/outpoot/gurted/blob/main/protocol/cli/src/handlers.rs): `protocol/cli/src/handlers.rs`

### Search

- [Search commands](https://github.com/outpoot/gurted/blob/main/search-engine/src/main.rs): `search-engine/src/main.rs`
- [Domain crawler](https://github.com/outpoot/gurted/blob/main/search-engine/src/crawler.rs): `search-engine/src/crawler.rs`
- [Crawl scheduler](https://github.com/outpoot/gurted/blob/main/search-engine/src/scheduler.rs): `search-engine/src/scheduler.rs`
- [Search index](https://github.com/outpoot/gurted/blob/main/search-engine/src/indexer.rs): `search-engine/src/indexer.rs`
- [Search server](https://github.com/outpoot/gurted/blob/main/search-engine/src/server.rs): `search-engine/src/server.rs`

### Public website

- [Gurted website](https://github.com/outpoot/gurted/blob/main/site/src/routes/%2Bpage.svelte): `site/src/routes/+page.svelte`
- [Download page](https://github.com/outpoot/gurted/blob/main/site/src/routes/download/%2Bpage.svelte): `site/src/routes/download/+page.svelte`

### Other components

- **User**
- **Registered domains**
- **GURT sites**
- **Flumi browser and renderer**

## Connections

- User → Gurted website: browses
- Gurted website → Download page: links to
- User → Flumi browser and renderer: views GURT sites
- Flumi browser and renderer → Godot extension: uses
- Godot extension → Protocol library: uses
- GURT client → TLS and crypto: secures connections
- GURT server → TLS and crypto: secures connections
- Protocol library → GURT client: provides client
- Protocol library → GURT server: provides server
- GURT client → DNS service: requests resolution
- DNS service → DNS database: reads and writes
- Accounts and invites → DNS database: reads and writes
- DNS service → Discord approvals: requests approval
- GurtCA CLI → CA client: requests certificates
- GurtCA CLI → Certificate crypto: generates key and CSR
- GurtCA CLI → DNS challenges: completes challenge
- CA client → CA endpoints: calls CA endpoints
- DNS challenges → CA client: uses CA API
- DNS service → Registered domains: publishes approved domains
- Search commands → Domain crawler: starts crawl
- Search commands → Search index: rebuilds or queries
- Search commands → Search server: starts server
- Crawl scheduler → Domain crawler: schedules crawl
- Domain crawler → GURT sites: fetches site content
- Domain crawler → Search index: supplies pages
- Search server → Search index: searches index
- Search server → Registered domains: reads online status
- Gurty CLI → Hosting server: builds and serves
- Hosting server → GURT server: registers routes
- GURT server → Request handling: dispatches requests
- Request handling → File handlers: serves files
- Search server → User: returns search results
- GURT client → GURT sites: requests resources
