EpicGames/lore · error
Missing Public QUIC config
Error message
Missing Public QUIC config
What it means
The public QUIC endpoint handler reads `settings.server.quic` and fails with this error when the option is None. The QUIC server cannot bind or configure its handler timeout without this config, so startup of the public QUIC endpoint aborts.
Solutions
- Add the `[server.quic]` section (including handler_timeout_seconds if desired) to the settings file.
- Remove the public QUIC endpoint from the configured endpoints list if QUIC is not wanted.
- Diff the config against the version's example/template config to find the missing section.
Example fix
// before endpoints = ["quic"] // no [server.quic] // after [server.quic] bind = "0.0.0.0:4433" handler_timeout_seconds = 30
Defensive patterns
Strategy: validation
Validate before calling
// Rust: ensure every enabled endpoint has its config section
for ep in &settings.server.endpoints {
if ep == "quic" && settings.server.quic.is_none() {
return Err(anyhow!("endpoint 'quic' enabled but [server.quic] is missing"));
}
} Prevention
- Treat endpoint lists and their config sections as pairs; validate them together.
- Use strongly-typed endpoint enums so the compiler/config schema flags unconfigured endpoints.
- Run a config linter in CI that checks enabled endpoints against provided sections.
When it happens
Trigger: Configuring the server to launch the public QUIC endpoint (the endpoint list includes QUIC) while `server.quic` is absent from the settings, so `ok_or(anyhow!("Missing Public QUIC config"))` fires.
Common situations: Enabling a QUIC endpoint in the endpoints list but forgetting the matching `[server.quic]` section; copying a partial config between environments; removing the quic section during a config cleanup while QUIC remains enabled.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- Missing Internal QUIC config
- presigned_url_hmac_key is not valid hex
- presigned_url_hmac_key must be at least
- {} {err}
- Failed to start maintenance HTTP server
AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13).
Data as JSON: /api/errors/9360aba5f01d999b.
Report an issue: GitHub.
Appendix: source
Thrown at lore-server/src/server.rs:2018
// verify_client_certs flag is intentionally false in every shipped
// config and is not validated here.
if !is_maintenance
&& let Some(quic_settings) = settings.server.quic.as_ref()
&& quic_settings.enabled
{
lore_spawn!(endpoints, {
let immutable_store = immutable_store.clone();
let mutable_store = mutable_store.clone();
let settings = settings.clone();
let jwt_verifier = jwt_verifier.clone();
let repository_authorizer = repository_authorizer.clone();
let user_agent_filter = user_agent_filter.clone();
let shutdown_rx = _shutdown_rx.clone();
let quic_settings = settings
.server
.quic
.ok_or(anyhow!("Missing Public QUIC config"))?;
let request_handler_timeout = quic_settings
.handler_timeout_seconds
.map(Duration::from_secs);
/// With the 8 streams a connection opens this amounts to 4000 commands being
/// processed in parallel per connection.
const DEFAULT_STREAM_MESSAGE_LIMIT: usize = 500;
let process_limit = quic_settings
.stream_message_limit
.unwrap_or(DEFAULT_STREAM_MESSAGE_LIMIT);
let limits = AdmissionLimits {
process_limit,
inflight_limit: connection_inflight_limit(&quic_settings, process_limit),
handler_timeout: request_handler_timeout,
permit_timeout: quic_settings.permit_timeout_ms.map(Duration::from_millis),
};
let local_immutable_store = local_store().unwrap_or_else(|| {View on GitHub (pinned to 074eb0b0d1)