Chrome does not. But that choice is orthogonal, could happen with any protocol.
Which means HTTP/3 de facto doesn't support self-signed certificates. Once Chrome disables HTTP 1.1/2 which it will at some point in the name of security or performance, you'll only be able to exist on the web with a CA signed certificate.
In reality, the opposition is misdirected; it is Chrome that requires secure connections, not HTTP/3.
I'd love to be wrong or shown a newer version that does allow these things. It'd be a huge load off my mind.
There's no reason for to mandate TLS for everything just because of a protocol.
If you need certs if a private network, either use Let's Encrypt/ACME or run your own CA and add the CA cert to your machines.
This definition sounds right to me. Do you disagree with it?
I get what you're saying, that you can set up a certificate yourself. But you can't accept a certificate someone else set up. (in Chrome)
In fact every CA root are by necessity self-signed and therefore signed by a CA (i.e. itself)
Anyway, your definition is clearer, but it still supports the point I was trying to make. You don't "add your CA" in order to use self-signed certs. You do that to use a private CA that will sign all your certs. And doing so only allows you to use websites you signed, not websites other people signed. It would be a terrible idea to add anyone else's CA, and you can't easily use your CA to slap your signature onto websites other people signed. Adding your own CA is a completely different situation from trying to visit a self-signed site.
Is it forbidden at the protocol level or by the implementations?
There does appear to be cli flags to change the behavior, but I don't see how you'd do that on mobile or embedded browsers.
[1]https://www.smashingmagazine.com/2021/09/http3-practical-dep...
Note that the spec essentially says "if verification fails don't trust this connection". What not trusting means is up to the application. For browsers that's probably equivalent to not allowing the connection at all.