mirror of
https://github.com/juanfont/headscale.git
synced 2026-01-11 20:00:28 +01:00
Evaluate ConnectRPC over gRPC + webgateway #886
Open
opened 2025-12-29 02:25:16 +01:00 by adam
·
10 comments
No Branch/Tag Specified
main
update_flake_lock_action
gh-pages
kradalby/release-v0.27.2
dependabot/go_modules/golang.org/x/crypto-0.45.0
dependabot/go_modules/github.com/opencontainers/runc-1.3.3
copilot/investigate-headscale-issue-2788
copilot/investigate-visibility-issue-2788
copilot/investigate-issue-2833
copilot/debug-issue-2846
copilot/fix-issue-2847
dependabot/go_modules/github.com/go-viper/mapstructure/v2-2.4.0
dependabot/go_modules/github.com/docker/docker-28.3.3incompatible
kradalby/cli-experiement3
doc/0.26.1
doc/0.25.1
doc/0.25.0
doc/0.24.3
doc/0.24.2
doc/0.24.1
doc/0.24.0
kradalby/build-docker-on-pr
topic/docu-versioning
topic/docker-kos
juanfont/fix-crash-node-id
juanfont/better-disclaimer
update-contributors
topic/prettier
revert-1893-add-test-stage-to-docs
add-test-stage-to-docs
remove-node-check-interval
fix-empty-prefix
fix-ephemeral-reusable
bug_report-debuginfo
autogroups
logs-to-stderr
revert-1414-topic/fix_unix_socket
rename-machine-node
port-embedded-derp-tests-v2
port-derp-tests
duplicate-word-linter
update-tailscale-1.36
warn-against-apache
ko-fi-link
more-acl-tests
fix-typo-standalone
parallel-nolint
tparallel-fix
rerouting
ssh-changelog-docs
oidc-cleanup
web-auth-flow-tests
kradalby-gh-runner
fix-proto-lint
remove-funding-links
go-1.19
enable-1.30-in-tests
0.16.x
cosmetic-changes-integration
tmp-fix-integration-docker
fix-integration-docker
configurable-update-interval
show-nodes-online
hs2021
acl-syntax-fixes
ts2021-implementation
fix-spurious-updates
unstable-integration-tests
mandatory-stun
embedded-derp
prtemplate-fix
v0.28.0-beta.1
v0.27.2-rc.1
v0.27.1
v0.27.0
v0.27.0-beta.2
v0.27.0-beta.1
v0.26.1
v0.26.0
v0.26.0-beta.2
v0.26.0-beta.1
v0.25.1
v0.25.0
v0.25.0-beta.2
v0.24.3
v0.25.0-beta.1
v0.24.2
v0.24.1
v0.24.0
v0.24.0-beta.2
v0.24.0-beta.1
v0.23.0
v0.23.0-rc.1
v0.23.0-beta.5
v0.23.0-beta.4
v0.23.0-beta3
v0.23.0-beta2
v0.23.0-beta1
v0.23.0-alpha12
v0.23.0-alpha11
v0.23.0-alpha10
v0.23.0-alpha9
v0.23.0-alpha8
v0.23.0-alpha7
v0.23.0-alpha6
v0.23.0-alpha5
v0.23.0-alpha4
v0.23.0-alpha4-docker-ko-test9
v0.23.0-alpha4-docker-ko-test8
v0.23.0-alpha4-docker-ko-test7
v0.23.0-alpha4-docker-ko-test6
v0.23.0-alpha4-docker-ko-test5
v0.23.0-alpha-docker-release-test-debug2
v0.23.0-alpha-docker-release-test-debug
v0.23.0-alpha4-docker-ko-test4
v0.23.0-alpha4-docker-ko-test3
v0.23.0-alpha4-docker-ko-test2
v0.23.0-alpha4-docker-ko-test
v0.23.0-alpha3
v0.23.0-alpha2
v0.23.0-alpha1
v0.22.3
v0.22.2
v0.23.0-alpha-docker-release-test
v0.22.1
v0.22.0
v0.22.0-alpha3
v0.22.0-alpha2
v0.22.0-alpha1
v0.22.0-nfpmtest
v0.21.0
v0.20.0
v0.19.0
v0.19.0-beta2
v0.19.0-beta1
v0.18.0
v0.18.0-beta4
v0.18.0-beta3
v0.18.0-beta2
v0.18.0-beta1
v0.17.1
v0.17.0
v0.17.0-beta5
v0.17.0-beta4
v0.17.0-beta3
v0.17.0-beta2
v0.17.0-beta1
v0.17.0-alpha4
v0.17.0-alpha3
v0.17.0-alpha2
v0.17.0-alpha1
v0.16.4
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.16.0-beta7
v0.16.0-beta6
v0.16.0-beta5
v0.16.0-beta4
v0.16.0-beta3
v0.16.0-beta2
v0.16.0-beta1
v0.15.0
v0.15.0-beta6
v0.15.0-beta5
v0.15.0-beta4
v0.15.0-beta3
v0.15.0-beta2
v0.15.0-beta1
v0.14.0
v0.14.0-beta2
v0.14.0-beta1
v0.13.0
v0.13.0-beta3
v0.13.0-beta2
v0.13.0-beta1
upstream/v0.12.4
v0.12.4
v0.12.3
v0.12.2
v0.12.2-beta1
v0.12.1
v0.12.0-beta2
v0.12.0-beta1
v0.11.0
v0.10.8
v0.10.7
v0.10.6
v0.10.5
v0.10.4
v0.10.3
v0.10.2
v0.10.1
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.1
v0.8.0
v0.7.1
v0.7.0
v0.6.1
v0.6.0
v0.5.2
v0.5.1
v0.5.0
v0.4.0
v0.3.6
v0.3.5
v0.3.4
v0.3.3
v0.3.2
v0.3.1
v0.3.0
v0.2.2
v0.2.1
v0.2.0
v0.1.1
v0.1.0
Labels
Clear labels
CLI
DERP
DNS
Nix
OIDC
SSH
bug
database
documentation
duplicate
enhancement
faq
good first issue
grants
help wanted
might-come
needs design doc
needs investigation
no-stale-bot
out of scope
performance
policy 📝
pull-request
question
regression
routes
stale
tags
tailscale-feature-gap
well described ❤️
wontfix
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/headscale#886
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @kradalby on GitHub (Dec 17, 2024).
We currently use plain gRPC and grpc-gateway (for our http+json) api, it has worked fine, but also there are a couple of drawbacks, and it kind of feels a bit hacky.
One of the drawbacks is that some parts of gRPC is unsupported by grpc-gateway, and it does not support OpenAPI 3.0.
oneofis for example not supported https://github.com/juanfont/headscale/issues/2237.ConnectRPC seem to be a rethinking of this, where the gRPC and the HTTP part is "equally" important. It might be better, it might be worse, they advertise with good client code generators so might be worth a look.
Initial thoughts:
I would value peoples views, particularly if you have experience using this.
@perezd commented on GitHub (Dec 19, 2024):
RE: OpenAPI support, there's a fantastic plugin for this that supports Connect: https://github.com/sudorandom/protoc-gen-connect-openapi?tab=readme-ov-file
If you'd like to chat about the eval w/ the Connect team we're here in Slack: https://buf.build/b/slack
@majst01 commented on GitHub (Dec 20, 2024):
As a long term user of the connectrpc stack since the 0.1 version, i really can say that this was the best improvement of the grpc ecosystem ever. Could only say good things about that. So go for it.
@kradalby commented on GitHub (Aug 10, 2025):
Another contender to using connect and grpc would be to leverage the now stable tailscale v2 api client, and use all the types in it:
9ce246ebbf/devices.go (L70)Having all the types now that there is one official client makes this a lot easier than previously when they had two clients.
If we implement this as our api, and use the go api client we could theoretically end up with terraform and others support, at least if it doesn't require oauth.
By using the go client in our own cli, we would ensure we have to handle what ever changes comes our way all the time.
@kradalby commented on GitHub (Sep 9, 2025):
I'm getting more and more keen on the idea in the previous comment, particularly since the gRPC + gateway + tooling is kind of a pain and makes us run the api/grpc part on different ports and other annoyances.
Tailscale's API has a OpenAPI 3.1 spec, while our is stuck on v2 for the foreseeable future. This means that generation of client code should be available for most languages.
The main stakeholders as I see it is the web developers, so while I'm getting more firm that we will move in this direction, or at least to a PoC to test it, I'll tag them so we can have a look at it together:
@routerino @simcu @tale @GoodiesHQ @yellowsink @ich777 @rickli-cloud
@tale commented on GitHub (Sep 10, 2025):
I'd be fine with this change assuming it will be in 0.27 or a new major release. Since this will create breaking changes for the API I would also like to see 2 different changes that should hopefully become easier with the switch to connectRPC.
5xxstatus code and then have a JSON body with an error that isn't a server error.Otherwise, I fully support this change and would like the opportunity to test it early and utilize the breaking change to try and refine the API design where it makes sense. I understand the 2nd point I made might require a ton more work so I'm also available to help out if necessary.
@ich777 commented on GitHub (Sep 10, 2025):
Yeah I‘m also fine with that change, I think @tale said everything.
@kradalby commented on GitHub (Sep 10, 2025):
We are more likely going to switch to implement Tailscale's API instead of using connectrpc.
@majst01 commented on GitHub (Sep 11, 2025):
Bonus would be to be able to use the tailscale operator with headscale as well !
@kradalby commented on GitHub (Sep 11, 2025):
I would say might, we still are not going to implement oauth. If it can run with our wide open keys then maybe.
@ArcticLampyrid commented on GitHub (Dec 3, 2025):
I understand that, for you, the main concern may be the hassle that comes with manually managing type drift. However, I believe adopting these types is a much worse choice than manually managing drift—at least for request parameters.
When managing drift manually, it actually makes the types better reflect how well we keep up with the API.