Skip to content
This repository was archived by the owner on Jul 13, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1093 commits
Select commit Hold shift + click to select a range
4c3cf8b
wgengine/magicsock: extract IMDS utilities into a standalone package …
illotum Jan 7, 2026
480ee9f
ipn,cmd/tailscale/cli: set correct SNI name for TLS-terminated TCP Se…
tendstofortytwo Jan 7, 2026
6c67def
cmd/distsign: add CLI for verifying package signatures (#18239)
awly Jan 7, 2026
e665310
cmd/containerboot: add OAuth and WIF auth support (#18311)
rajsinghtech Jan 7, 2026
522a6e3
cmd/tailscale/cli, util/qrcodes: format QR codes on Linux consoles (#…
sfllaw Jan 8, 2026
73cb3b4
cmd/k8s-operator/e2e: run self-contained e2e tests with devcontrol (#…
tomhjp Jan 8, 2026
5be02ee
cmd/k8s-operator/e2e,go.mod: remove client v2 dependency
tomhjp Jan 8, 2026
5019dc8
go.mod: bump mkctr dep (#18365)
tomhjp Jan 8, 2026
6aac87a
net/portmapper, go.mod: unfork our goupnp dependency
andrew-d Dec 18, 2025
3e45e5b
feature/featuretags: make QR codes modular (#18358)
sfllaw Jan 8, 2026
4c37141
cmd,internal,feature: add workload idenity support to gitops pusher
mpminardi Dec 17, 2025
5f34f14
net/udprelay: apply netns Control func to server socket(s)
jwhited Jan 7, 2026
f976206
tsnet: reset serve config only once
hwh33 Jan 9, 2026
3c1be08
tsnet: ensure funnel listener cleans up after itself when closed
hwh33 Jan 9, 2026
5db95ec
go.mod: bump github.com/containerd/containerd@v1.7.29 (#18374)
patrickod Jan 9, 2026
aadc4f2
wgengine/magicsock: add home DERP region usermetric (#18062)
rajsinghtech Jan 9, 2026
78c8d14
tsnet: use errors.Join and idiomatic field order
hwh33 Jan 9, 2026
87e108e
docs: add instructions on referencing pull requests in commit messages
hwh33 Jan 12, 2026
8c17d87
ipn/store/kubestore: don't load write replica certs in memory (#18395)
irbekrm Jan 13, 2026
76fb09c
.github/workflows: fix timeouts by caching packages for golangci-lint…
sfllaw Jan 13, 2026
17b0c7b
metrics: add a NewLabelMap helper to create and register label maps
knyar Jan 12, 2026
58042e2
metrics: add a NewSet and Set.NewLabelMap helpers
knyar Jan 13, 2026
6a6aa80
cmd,feature: add identity token auto generation for workload identity…
danni-popova Jan 14, 2026
28f1635
.github/actions/go-cache: build cigocacher using remote path, fall ba…
irbekrm Jan 14, 2026
02af7c9
tsnet: allow for automatic ID token generation
mpminardi Jan 14, 2026
e9d8276
cmd/containerboot: allow for automatic ID token generation
mpminardi Jan 14, 2026
c3b7f24
ipn,ipn/local: always accept routes for Tailscale Services (cgnat ran…
ChaosInTheCRD Jan 14, 2026
5aeee1d
.github/workflows: double the timeout for golangci-lint (#18404)
sfllaw Jan 14, 2026
1a79abf
VERSION.txt: this is v1.95.0 (#18414)
nickoneill Jan 14, 2026
54d7789
tool/gocross: update gocross-wrapper.ps1 to use absolute path for res…
dblohm7 Jan 14, 2026
1cc6f32
k8s-operator,kube: allowing k8s api request events to be enabled via …
ChaosInTheCRD Jan 16, 2026
1478028
docs/windows/policy: use a separate value to track the configuration …
nickkhyl Jan 16, 2026
643e91f
net/netmon: move TailscaleInterfaceIndex out of netmon.State (#18428)
barnstar Jan 16, 2026
1b88e93
ipn/ipnlocal: allow retrieval of serve config ETags from local API
hwh33 Jan 13, 2026
3840183
tsnet: add support for Services
hwh33 Jan 13, 2026
7676030
net/portmapper: Stop replacing the internal port with the upnp extern…
sorribas Jan 19, 2026
7213b35
k8s-operator,kube: remove enableSessionRecording from Kubernetes Cap …
ChaosInTheCRD Jan 19, 2026
0a5639d
net/udprelay: advertise addresses from cloud metadata service (#18368)
illotum Jan 20, 2026
e30626c
version: add support for reporting the mac variant from tailscale --v…
barnstar Jan 20, 2026
2cb86cf
cmd/k8s-operator,k8s-operator: Allow the use of multiple tailnets (#1…
davidsbond Jan 21, 2026
6dc0bd8
util/limiter: don't panic when dumping a new Limiter
josharian Jan 12, 2026
4b7585d
net/udprelay: add tailscaled_peer_relay_endpoints gauge (#18265)
illotum Jan 22, 2026
151644f
wgengine: send disco key via TSMP on first contact (#18215)
cmol Jan 22, 2026
c062230
tsnet: clarify that ListenService starts the server if necessary
hwh33 Jan 22, 2026
63d563e
tsnet: add support for a user-supplied tun.Device
raggi Jan 16, 2026
df54751
scripts/installer.sh: allow running dnf5 install script twice (#18492)
fmarier Jan 23, 2026
ce12863
ipn/ipnlocal: manage per-profile subdirectories in TailscaleVarRoot (…
creachadair Jan 23, 2026
3ec5be3
all: remove AUTHORS file and references to it
willnorris Jan 23, 2026
2a69f48
wf: allow limited broadcast to/from permitted interfaces when using a…
nickkhyl Jan 23, 2026
bfa90ea
go.toolchain.rev: update to Go 1.25.6 (#18507)
awly Jan 24, 2026
7683958
licenses: update license notices
Jan 19, 2026
1183f7a
tstest/integration/testcontrol: fix unguarded read of DNS config
raggi Jan 23, 2026
9d13a6d
appc,ipn/ipnlocal: Add split DNS entries for conn25 peers
franbull Jan 14, 2026
0e1b2b1
net/dns/publicdns: support CIRA Canadian Shield
andrew-d Jan 26, 2026
8d875a3
net/dns: add test for DoH upgrade of system DNS
andrew-d Jan 26, 2026
6e44cb6
tsnet: make ListenService examples consistent with other tsnet examples
hwh33 Jan 26, 2026
9385dfe
ipn/ipnlocal/netmapcache: add a package to split and cache network ma…
creachadair Jan 26, 2026
6de5b01
ipn/localapi: stop logging "broken pipe" errors (#18487)
amalscale Jan 27, 2026
ae62569
hostinfo: retrieve OS version for Macs running the OSS client
alexwlchan Jan 27, 2026
aac12ba
cmd/tailscale/cli: add json output option to `switch --list` (#18501)
clstokes Jan 27, 2026
a374cc3
tool/gocross, pull-toolchain.sh: support a "next" Go toolchain
bradfitz Jan 27, 2026
8f8236f
cmd/printdep: add --next flag to use rc Go build hash instead
bradfitz Jan 27, 2026
d7d1276
Add .stignore for syncthing (#18540)
awly Jan 28, 2026
72f7361
cmd/testwrapper/flakytest: skip flaky tests if TS_SKIP_FLAKY_TESTS set
bradfitz Jan 28, 2026
aca1b5d
go.toolchain.rev: bump for cmd/go caching work
bradfitz Jan 28, 2026
99584b2
ipn/ipnlocal/netmapcache: report the correct error for a missing colu…
creachadair Jan 28, 2026
e39a730
go.toolchain.rev: bump for cmd/go caching work
bradfitz Jan 28, 2026
9e7f536
cmd/testwrapper: show "(cached)" for packages that hit the cache
bradfitz Jan 29, 2026
6f55309
logtail/filch: fix panic in concurrent file access (#18555)
dsnet Jan 29, 2026
2d2d5e6
.github/workflows: set CMD_GO_USE_GIT_HASH=true for our cmd/go
bradfitz Jan 29, 2026
afc90ce
control/controlclient: add PersistView.Valid() check in NetmapFromMap…
icio Jan 29, 2026
ce5c08e
cmd/testwrapper: detect cached tests with coverage output (#18559)
tomhjp Jan 29, 2026
65d6793
licenses: update license notices
Jan 29, 2026
bcceef3
cmd/tailscale/cli: allow fetching keys from AWS Parameter Store
andrew-d Jan 14, 2026
db96e52
cmd/tailscale/cli: redact auth keys in FlagSet output (#18563)
awly Jan 30, 2026
214b70c
net/dns: skip DNS base config when using userspace networking (#18355)
fserb Jan 30, 2026
f48cd46
net/dns,ipn/ipnlocal: add nodecap to resolve subdomains (#18258)
fserb Jan 30, 2026
698e92a
logtail/filch: close Filch instances in TestConcurrentSameFile (#18571)
fserb Jan 30, 2026
3ce13eb
cmd/testwrapper: add support for the -vet test flag
bradfitz Jan 30, 2026
3b6d542
wgengine/magicsock: make debugNeverDirectUDP influence remote peer de…
jwhited Jan 29, 2026
03461ea
wgengine/netstack: add local tailscale service IPs to route and termi…
KevinLiang10 Jan 30, 2026
b4d39e2
cmd/gitops-pusher: fix precedence when id token env var is empty
mpminardi Jan 31, 2026
8cac8b1
net/dns/resolver: set TC flag when UDP responses exceed size limits (…
bcreane Jan 31, 2026
274ab99
go.toolchain.*: bump our Go 1.25 and Go 1.26 toolchains
bradfitz Feb 1, 2026
abdbca4
client/systray: Update systemd unit to use correct dependencies (#18457)
Conan-Kudo Feb 2, 2026
8736fbb
cmd/tailscale/cli: add 'wait' listening subcommand and ip --assert=<ip>
bradfitz Jan 30, 2026
ae95d8d
cmd/tailscale: fix sanitizeOutput and add a test (#18589)
awly Feb 2, 2026
f2b4d70
cmd/containerboot: handle v6 pod ips that are missing square brackets…
davidsbond Feb 3, 2026
77f5200
cmd/k8s-operator,k8s-operator:ensure that recorder replicas default t…
ChaosInTheCRD Feb 3, 2026
1432271
ipn/ipnlocal/netmapcache: ensure cache updates preserve unchanged dat…
creachadair Feb 3, 2026
7b96c4c
cmd/testwrapper: support experimental -cachelink
bradfitz Feb 3, 2026
54d70c8
clientupdate: best-effort restart of tailscaled on init.d systems (#1…
awly Feb 3, 2026
5edfa6f
ipn/ipnlocal: add wildcard TLS certificate support for subdomains (#1…
fserb Feb 3, 2026
569caef
tsnet: add tests to TestListenService for user-supplied TUN devices
raggi Jan 29, 2026
40cd54d
cmd/tailscale: remove dep on clientupdate package if feature is omitted
bradfitz Feb 4, 2026
642d1aa
cmd/tailscaled,feature/conn25,feature/featuretags: add conn25 to feat…
franbull Feb 4, 2026
036b6a1
feature/featuretags: add test that all ts_omit_foo tags are declared
bradfitz Feb 4, 2026
6587caf
cmd/tailscale: use advertise tags from prefs for OAuth and id federation
mpminardi Feb 5, 2026
058cc3f
ipn/ipnlocal: skip AuthKey use if profiles exist (#18619)
willh-ts Feb 6, 2026
0c5b17c
cmd/tailscale: don't depend on regexp in minbox builds
bradfitz Feb 4, 2026
de4a8db
control/controlclient: fix canSkipStatus online conditions
raggi Feb 6, 2026
826fd54
tsweb/varz: only export numeric expvar.Map values
knyar Feb 6, 2026
35e656a
tsweb/varz: remove unnecessary Map.Init() calls in tests
knyar Feb 6, 2026
fe69b7f
cmd/tailscale: add event bus queue depth debugging
raggi Feb 6, 2026
9ba2a80
go.toolchain.{rev,next.rev}: update to Go 1.25.7 / Go 1.26rc3 (#18633)
awly Feb 6, 2026
5eaaf97
tailcfg: add peerRelay bool to hostinfo
KevinLiang10 Feb 4, 2026
a3215f1
cmd/tailscale,feature/featuretags: make webbrowser and colorable deps…
bradfitz Feb 8, 2026
dfba01c
cmd/tailscaled: update documentation url
timtailscale Feb 8, 2026
fff6232
flake.nix: update NixOS wiki link (#18662)
faukah Feb 9, 2026
00e180c
go.mod: update bart dep to v0.26.1 (#18659)
amalscale Feb 9, 2026
5a5572e
tstun,wgengine: add new datapath hooks for intercepting Connectors 2025
mzbenami Dec 11, 2025
d26d3fc
.github/workflows: add macos runner
bradfitz Feb 9, 2026
770bf00
tool/gocross: replace use of Start-Process -Wait flag with WaitForExit
dblohm7 Feb 9, 2026
e4008d1
cmd/containerboot: fix error handling for egress (#18657)
BeckyPauley Feb 10, 2026
086968c
net/dns, ipn/local: skip health warnings in dns forwarder when accept…
barnstar Feb 10, 2026
dc1d811
magicsock, ipnlocal: revert eventbus-based node/filter updates, remov…
bradfitz Feb 8, 2026
6cbfc2f
logtail/filch: fix filch test panic (#18660)
scottjab Feb 10, 2026
1172b2f
licenses: update license notices
Feb 11, 2026
12188c0
ipn/ipnlocal: log traffic steering scores and suggested exit nodes (#…
sfllaw Feb 11, 2026
8e39a0a
go.toolchain.next.rev: update to final Go 1.26.0 [next]
bradfitz Feb 11, 2026
45db369
prober: export a metric with the number of in-flight probes
knyar Feb 10, 2026
73d0931
tstest: update clock to always use UTC (#18663)
fserb Feb 11, 2026
84ee5b6
testcontrol: send updates for new DNS records or app capabilities
hwh33 Feb 9, 2026
0bac422
tstun: add test for intercept ordering
mzbenami Feb 10, 2026
36d359e
clientupdate, cmd/tailscale/cli: support updating to release-candidat…
willh-ts Feb 12, 2026
068074c
portlist: also tb.Skip benchmarks (not just tests) on bad Linux kernels
bradfitz Feb 12, 2026
d468870
.github/workflows: bump oss-fuzz builder hash
bradfitz Feb 12, 2026
a341eea
k8s-operator,cmd/k8s-operator: define ProxyGroupPolicy CRD (#18614)
davidsbond Feb 13, 2026
afb065f
net/dns: write MagicDNS host names to the hosts file on domain-joined…
nickkhyl Feb 13, 2026
9741c1e
control/controlknobs,net/dns,tailcfg: add a control knob that disable…
nickkhyl Feb 13, 2026
be4449f
util/clientmetric, wgengine/watchdog: report watchdog errors in user/…
barnstar Feb 13, 2026
4f1406f
ipn/ipnlocal/netmapcache: include packet filters in the cache (#18715)
creachadair Feb 13, 2026
3cc7f89
health: always include control health messages in the current state
nickkhyl Feb 13, 2026
371d636
gokrazy: use monorepo for gokrazy appliance builds (monogok)
bradfitz Feb 8, 2026
6854d29
ipn/ipnlocal: log errors when suggesting exit nodes (#18728)
sfllaw Feb 14, 2026
3f3af84
tool/gocross: respect TS_GO_NEXT=1 in gocross too
bradfitz Feb 16, 2026
bfc15cb
cmd/cigocacher: remove Windows-specific disk code moved upstream (#18…
bradfitz Feb 16, 2026
4044e05
client/systray: set consistent ID for StatusNotifierItem
willnorris Feb 16, 2026
a820456
all: replace UserVisibleError with vizerror package
willnorris Feb 16, 2023
a6390ca
ssh/tailssh: fix data race on conn auth state in OnPolicyChange
bradfitz Feb 13, 2026
a7a8644
net/dns: make MagicDNS IPv6 registration opt-out now, not opt-in
bradfitz Feb 17, 2026
fbbf0d6
tsconsensus: fix race condition in TestOnlyTaggedPeersCanBeDialed
hwh33 Feb 13, 2026
f4aea70
ipn/ipnlocal: add basic support for netmap caching (#18530)
creachadair Feb 17, 2026
eb3d35c
cmd/k8s-operator,k8s-operator: define ProxyGroupPolicy reconciler (#1…
davidsbond Feb 18, 2026
299f1bf
testcontrol: ensure Server.UpdateNode triggers netmap updates
hwh33 Feb 12, 2026
976aa94
ipn/ipnlocal, cmd/tailscale: use wildcard. prefix for cert filenames …
fserb Feb 18, 2026
9acf22f
netmon: use State AnyInterfaceUp in ChangeDelta (#18752)
barnstar Feb 18, 2026
7fb61e1
cmd/cigocacher: make --stats flag best-effort (#18761)
tomhjp Feb 19, 2026
c208ba2
.github: Bump actions/setup-go from 5.5.0 to 6.2.0 (#18455)
dependabot[bot] Feb 19, 2026
6e76db7
go.mod: bump filippo.io/edwards25519 (#18765)
awly Feb 19, 2026
f1509d2
build(deps): bump lodash from 4.17.21 to 4.17.23 in /client/web (#18476)
dependabot[bot] Feb 19, 2026
c0446aa
.github: Bump DeterminateSystems/nix-installer-action from 20 to 21 (…
dependabot[bot] Feb 19, 2026
f5d1202
build(deps): bump postcss from 8.4.14 to 8.4.31 in /cmd/tsconnect (#9…
dependabot[bot] Feb 19, 2026
03d0f6c
build(deps): bump github.com/go-git/go-git/v5 from 5.13.1 to 5.16.5 (…
dependabot[bot] Feb 19, 2026
03247a3
.github: Bump actions/create-github-app-token from 2.0.6 to 2.2.1 (#1…
dependabot[bot] Feb 19, 2026
9e31a68
build(deps): bump micromatch from 4.0.5 to 4.0.8 in /cmd/tsconnect (#…
dependabot[bot] Feb 19, 2026
c38d1ba
cmd/tailscale/cli: add bind-address and bind-port flags to netcheck c…
amalscale Feb 19, 2026
d9d95db
build(deps): bump github.com/go-viper/mapstructure/v2 (#16914)
dependabot[bot] Feb 19, 2026
2a60d0a
.github: Bump github/codeql-action from 3.29.8 to 4.31.10 (#18454)
dependabot[bot] Feb 19, 2026
cae54e2
build(deps): bump github.com/docker/docker (#13081)
dependabot[bot] Feb 19, 2026
3b737ed
appc,feature/conn25,net: Add DNS response interception for conn25
franbull Jan 28, 2026
2d64c0d
cmd/k8s-operator/e2e: mark TestIngress flaky (#18773)
tomhjp Feb 20, 2026
8890c3c
cmd/containerboot,kube: enable autoadvertisement of Tailscale service…
ChaosInTheCRD Feb 20, 2026
c48b736
licenses: update license notices
Feb 23, 2026
0ea55d3
.github: bump peter-evans/create-pull-request from 8.0.0 to 8.1.0
dependabot[bot] Feb 23, 2026
98c77ac
.github: bump actions/cache from 4.2.4 to 5.0.3
dependabot[bot] Feb 23, 2026
3d2bb5b
.github: bump actions/download-artifact from 6.0.0 to 7.0.0
dependabot[bot] Feb 23, 2026
8be5aff
.github: bump actions/checkout from 6.0.1 to 6.0.2
dependabot[bot] Feb 23, 2026
980e1c9
.github: bump actions/upload-artifact from 4.6.2 to 6.0.0
dependabot[bot] Feb 23, 2026
a58a8fc
.: permit running binary built with TS_GO_NEXT=1
bradfitz Feb 23, 2026
dc80fd6
flake: fix default devShell
kradalby Feb 22, 2026
811fe7d
ipnext,ipnlocal,wgengine/filter: add extension hooks for custom filte…
mzbenami Feb 20, 2026
eb819c5
cmd/containerboot, net/dns/resolver: remove unused funcs in tests
bradfitz Feb 25, 2026
329d2e2
prober: fix race condition in TestExcludeInRunAll (#18807)
mikeodr Feb 25, 2026
fd2ebcd
cmd/k8s-operator: add exit node example (#18087)
cmosetick Feb 25, 2026
7370c24
tool/listpkgs: add --affected-by-tag
bradfitz Feb 25, 2026
518d241
netns,wgengine: add OpenBSD support to netns via an rtable
jcs Feb 22, 2026
54de5da
tstest/integration/nat: use per-call timeout in natlab ping (#18811)
fserb Feb 25, 2026
6e2677b
client/systray: open BrowseToURL from WatchIPN in a browser (#18816)
awly Feb 26, 2026
15836e5
util/set: make Set.Slice return elements in sorted order for ordered …
bradfitz Feb 26, 2026
da90ea6
wgengine/magicsock: only run derpActiveFunc after connecting to DERP …
fserb Feb 26, 2026
5ac35b6
client/systray: add installer for a freedesktop autostart file (#18767)
cmol Feb 26, 2026
a98036b
go.mod: bump gvisor
bradfitz Feb 27, 2026
30e1231
cmd/tailscaled/*.{target,unit}: add systemd online target
raggi Jan 31, 2026
0fb207c
wgengine/netstack: deliver self-addressed packets via loopback
raggi Feb 27, 2026
4530580
net/netmon: ignore NetBird interface on Linux
raggi Feb 27, 2026
439d841
tsnet: fix slow test shutdown leading to flakes
raggi Feb 28, 2026
fa13f83
tsnet: fix deadlock in Server.Close during shutdown
raggi Feb 28, 2026
142ce99
.github/workflows: rename tidy workflow to match what it is
raggi Mar 1, 2026
48e0334
tsnet: fix Listen for unspecified addresses and ephemeral ports
raggi Feb 27, 2026
2743e0b
.github/actions/go-cache: check for pre-built cigocacher (#18833)
tomhjp Mar 2, 2026
3e8913f
licenses: update license notices
Mar 2, 2026
e0ca836
.github: Bump github/codeql-action from 4.32.3 to 4.32.5
dependabot[bot] Mar 2, 2026
eeb1fa0
.github: Bump actions/setup-go from 6.2.0 to 6.3.0
dependabot[bot] Mar 2, 2026
5a2168d
scripts/installer.sh: handle KDE Linux (#18861)
Erisa Mar 2, 2026
8fd02bb
types/geo: fix floating point bug causing NaN returns in SphericalAng…
amalscale Mar 3, 2026
0cca3bd
wgengine/magicsock: improve error message for moving Mullvad node keys
alexwlchan Feb 27, 2026
2d21dd4
wgengine/magicsoc,net/tstun: put disco key advertisement behind a nob…
cmol Mar 3, 2026
120f27f
feature/conn25: stop adding multiple entries for same domain+dst
franbull Feb 20, 2026
d42b374
net/porttrack: add net.Listen wrapper to help tests allocate ports ra…
bradfitz Mar 4, 2026
dab8922
go.mod: bump github.com/cloudflare/circl version (#18878)
awly Mar 4, 2026
26ef46b
util/linuxfw,wgengine/router: add connmark rules for rp_filter workar…
mikeodr Mar 4, 2026
2c9ffdd
cmd/tailscale,ipn,net/netutil: remove rp_filter strict mode warnings …
mikeodr Mar 4, 2026
30adf45
feature/portlist: address case where poller misses CollectServices up…
bradfitz Mar 4, 2026
ea1f161
.github/workflows: enable natlab in CI
cmol Feb 26, 2026
26951a1
ipn/ipnlocal: skip writing netmaps to disk when disabled (#18883)
creachadair Mar 4, 2026
d58bfb8
net/udprelay: use GOMAXPROCS instead of NumCPU for socket count
dpaneda Mar 4, 2026
87bf76d
net/porttrack: change magic listen address format for Go 1.26
bradfitz Mar 5, 2026
d784dcc
go.toolchain.branch: switch to Go 1.26
bradfitz Mar 4, 2026
faf7f2b
cmd/k8s-operator: remove deprecated TS_EXPERIMENTAL_KUBE_API_EVENTS (…
BeckyPauley Mar 5, 2026
d82e478
cli: `--json` for `tailscale dns status|query`
kradalby Feb 18, 2026
1b53c00
clientupdate,net/tstun: add support for OpenWrt 25.12.0 using apk (#1…
cmol Mar 5, 2026
19e2c8c
cmd/k8s-proxy: use L4 TCPForward instead of L7 HTTP proxy (#18179)
rajsinghtech Mar 5, 2026
c17ec8c
VERSION.txt: this is v1.97.0 (#18898)
barnstar Mar 5, 2026
9657a93
tstest/natlab: add test for no control and rotated disco key (#18261)
cmol Mar 5, 2026
2810f0c
all: fix typos in comments
bradfitz Mar 5, 2026
8cfbaa7
go.mod: bump staticcheck to version that supports Go 1.26
bradfitz Mar 5, 2026
2a64c03
types/ptr: deprecate ptr.To, use Go 1.26 new
bradfitz Mar 5, 2026
bb45b2e
nix: update flakes to get a nixpkgs version with go 1.26
kradalby Mar 6, 2026
8e3d176
control/controlbase: deflake, speed up TestConnMemoryOverhead
bradfitz Mar 6, 2026
40858a6
ipnext,ipnlocal: add ExtraWireGuardAllowedIPs hook
mzbenami Mar 2, 2026
3cc7b85
prober: fix queuing delay probe txRecords overflow under high DERP se…
mikeodr Mar 6, 2026
4453cc5
go.mod: bump to Go 1.26.1
bradfitz Mar 6, 2026
bd2a2d5
all: use Go 1.26 things, run most gofix modernizers
bradfitz Mar 5, 2026
e400d5a
cmd/testwrapper: make test tolerant of a GOEXPERIMENT being set
bradfitz Mar 6, 2026
ac74dfa
util/osuser: extend id command fallback for group IDs to freebsd
neinkeinkaffee Mar 5, 2026
6a19995
tailcfg: reintroduce UserProfile.Groups
neinkeinkaffee Feb 17, 2026
a4614d7
appc,feature/conn25: conn25: send address assignments to connector
franbull Feb 27, 2026
633e892
ssh/tailssh: fix race between termination message write and session t…
bradfitz Mar 9, 2026
8d3efd4
go.mod: bump for internal/poll: move rsan to heap on windows
nickkhyl Mar 9, 2026
0023f1a
.github/workflows: use tailscale/go for Windows CI too
bradfitz Mar 9, 2026
9522619
cmd/k8s-operator: use correct tailnet client for L7 & L3 ingresses (#…
davidsbond Mar 10, 2026
16c4780
go.toolchain.next.rev: update to final Go 1.26.1 [next] (#18939)
jasonodonnell Mar 10, 2026
32adca7
pull-toolchain.sh: advance the next hash if it's behind
bradfitz Mar 10, 2026
525f7a1
types/key: add NodePrivate.Raw32 and DiscoPrivateFromRaw32
bradfitz Mar 9, 2026
021de2e
util/linuxfw: fix nil pointer panic in connmark rules without IPv6 (#…
mikeodr Mar 10, 2026
99bde5a
tstest/integration: deflake TestCollectPanic
bradfitz Mar 10, 2026
99e3e9a
ssh/tailssh: mark TestSSHRecordingCancelsSessionsOnUploadFailure as f…
bradfitz Sep 17, 2025
f905871
ipn/ipnlocal, feature/ssh: move SSH code out of LocalBackend to feature
bradfitz Mar 10, 2026
16fa81e
wgengine: add API to force a disco key for experiments, testing
bradfitz Mar 10, 2026
7a43e41
client/web: signal need to wait for auth across tabs
neinkeinkaffee Mar 11, 2026
95a135e
cmd/{containerboot,k8s-operator}: reissue auth keys for broken proxie…
tomhjp Mar 11, 2026
70de111
wgengine/magicsock: fix three race conditions in TestTwoDevicePing
bradfitz Mar 9, 2026
607d01c
net/batching: clarify & simplify single packet read limitations
jwhited Mar 11, 2026
dd1da0b
wgengine: search randomly for unused port instead of in contiguous ra…
kari-ts Mar 11, 2026
4c7c109
netns: add Android callback to bind socket to network (#18915)
kari-ts Mar 11, 2026
073a9a8
wgengine{,/magicsock}: add DERP hooks for filtering+sending packets
bradfitz Mar 11, 2026
0c53cf7
.github: Bump actions/upload-artifact from 6.0.0 to 7.0.0
dependabot[bot] Mar 2, 2026
224305b
.github: Bump actions/download-artifact from 7.0.0 to 8.0.0
dependabot[bot] Mar 2, 2026
0a4e0e2
.github: Bump github/codeql-action from 4.32.5 to 4.32.6
dependabot[bot] Mar 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
59 changes: 59 additions & 0 deletions .github/actions/go-cache/action.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/usr/bin/env bash
#
# This script sets up cigocacher, but should never fail the build if unsuccessful.
# It expects to run on a GitHub-hosted runner, and connects to cigocached over a
# private Azure network that is configured at the runner group level in GitHub.
#
# Usage: ./action.sh
# Inputs:
# URL: The cigocached server URL.
# HOST: The cigocached server host to dial.
# Outputs:
# success: Whether cigocacher was set up successfully.

set -euo pipefail

if [ -z "${GITHUB_ACTIONS:-}" ]; then
echo "This script is intended to run within GitHub Actions"
exit 1
fi

if [ -z "${URL:-}" ]; then
echo "No cigocached URL is set, skipping cigocacher setup"
exit 0
fi

BIN_PATH="$(PATH="$PATH:$HOME/bin" command -v cigocacher || true)"
if [ -z "${BIN_PATH}" ]; then
echo "cigocacher not found in PATH, attempting to build or fetch it"

GOPATH=$(command -v go || true)
if [ -z "${GOPATH}" ]; then
if [ ! -f "tool/go" ]; then
echo "Go not available, unable to proceed"
exit 1
fi
GOPATH="./tool/go"
fi

BIN_PATH="${RUNNER_TEMP:-/tmp}/cigocacher$(${GOPATH} env GOEXE)"
if [ -d "cmd/cigocacher" ]; then
echo "cmd/cigocacher found locally, building from local source"
"${GOPATH}" build -o "${BIN_PATH}" ./cmd/cigocacher
else
echo "cmd/cigocacher not found locally, fetching from tailscale.com/cmd/cigocacher"
"${GOPATH}" build -o "${BIN_PATH}" tailscale.com/cmd/cigocacher
fi
fi

CIGOCACHER_TOKEN="$("${BIN_PATH}" --auth --cigocached-url "${URL}" --cigocached-host "${HOST}" )"
if [ -z "${CIGOCACHER_TOKEN:-}" ]; then
echo "Failed to fetch cigocacher token, skipping cigocacher setup"
exit 0
fi

echo "Fetched cigocacher token successfully"
echo "::add-mask::${CIGOCACHER_TOKEN}"

echo "GOCACHEPROG=${BIN_PATH} --cache-dir ${CACHE_DIR} --cigocached-url ${URL} --cigocached-host ${HOST} --token ${CIGOCACHER_TOKEN}" >> "${GITHUB_ENV}"
echo "success=true" >> "${GITHUB_OUTPUT}"
35 changes: 35 additions & 0 deletions .github/actions/go-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: go-cache
description: Set up build to use cigocacher

inputs:
cigocached-url:
description: URL of the cigocached server
required: true
cigocached-host:
description: Host to dial for the cigocached server
required: true
checkout-path:
description: Path to cloned repository
required: true
cache-dir:
description: Directory to use for caching
required: true

outputs:
success:
description: Whether cigocacher was set up successfully
value: ${{ steps.setup.outputs.success }}

runs:
using: composite
steps:
- name: Setup cigocacher
id: setup
shell: bash
env:
URL: ${{ inputs.cigocached-url }}
HOST: ${{ inputs.cigocached-host }}
CACHE_DIR: ${{ inputs.cache-dir }}
working-directory: ${{ inputs.checkout-path }}
# https://github.com/orgs/community/discussions/25910
run: $GITHUB_ACTION_PATH/action.sh
2 changes: 1 addition & 1 deletion .github/workflows/checklocks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
runs-on: [ ubuntu-latest ]
steps:
- name: Check out code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Build checklocks
run: ./tool/go build -o /tmp/checklocks gvisor.dev/gvisor/tools/checklocks/cmd/checklocks
Expand Down
73 changes: 73 additions & 0 deletions .github/workflows/cigocacher.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Build cigocacher

on:
# Released on-demand. The commit will be used as part of the tag, so generally
# prefer to release from main where the commit is stable in linear history.
workflow_dispatch:

jobs:
build:
strategy:
matrix:
GOOS: ["linux", "darwin", "windows"]
GOARCH: ["amd64", "arm64"]
runs-on: ubuntu-24.04
env:
GOOS: "${{ matrix.GOOS }}"
GOARCH: "${{ matrix.GOARCH }}"
CGO_ENABLED: "0"
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Build
run: |
OUT="cigocacher$(./tool/go env GOEXE)"
./tool/go build -o "${OUT}" ./cmd/cigocacher/
tar -zcf cigocacher-${{ matrix.GOOS }}-${{ matrix.GOARCH }}.tar.gz "${OUT}"

- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: cigocacher-${{ matrix.GOOS }}-${{ matrix.GOARCH }}
path: cigocacher-${{ matrix.GOOS }}-${{ matrix.GOARCH }}.tar.gz

release:
runs-on: ubuntu-24.04
needs: build
permissions:
contents: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
with:
pattern: 'cigocacher-*'
merge-multiple: true
# This step is a simplified version of actions/create-release and
# actions/upload-release-asset, which are archived and unmaintained.
- name: Create release
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const fs = require('fs');
const path = require('path');

const { data: release } = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: `cmd/cigocacher/${{ github.sha }}`,
name: `cigocacher-${{ github.sha }}`,
draft: false,
prerelease: true,
target_commitish: `${{ github.sha }}`
});

const files = fs.readdirSync('.').filter(f => f.endsWith('.tar.gz'));

for (const file of files) {
await github.rest.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.id,
name: file,
data: fs.readFileSync(file)
});
console.log(`Uploaded ${file}`);
}
10 changes: 5 additions & 5 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,17 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

# Install a more recent Go that understands modern go.mod content.
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: go.mod

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
Expand All @@ -66,7 +66,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
uses: github/codeql-action/autobuild@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6

# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
Expand All @@ -80,4 +80,4 @@ jobs:
# make release

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6
29 changes: 29 additions & 0 deletions .github/workflows/docker-base.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: "Validate Docker base image"
on:
workflow_dispatch:
pull_request:
paths:
- "Dockerfile.base"
- ".github/workflows/docker-base.yml"
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: "build and test"
run: |
set -e
IMG="test-base:$(head -c 8 /dev/urandom | xxd -p)"
docker build -t "$IMG" -f Dockerfile.base .

iptables_version=$(docker run --rm "$IMG" iptables --version)
if [[ "$iptables_version" != *"(legacy)"* ]]; then
echo "ERROR: Docker base image should contain legacy iptables; found ${iptables_version}"
exit 1
fi

ip6tables_version=$(docker run --rm "$IMG" ip6tables --version)
if [[ "$ip6tables_version" != *"(legacy)"* ]]; then
echo "ERROR: Docker base image should contain legacy ip6tables; found ${ip6tables_version}"
exit 1
fi
4 changes: 1 addition & 3 deletions .github/workflows/docker-file-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@ on:
branches:
- main
pull_request:
branches:
- "*"
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: "Build Docker image"
run: docker build .
6 changes: 3 additions & 3 deletions .github/workflows/flakehub-publish-tagged.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ jobs:
id-token: "write"
contents: "read"
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: "${{ (inputs.tag != null) && format('refs/tags/{0}', inputs.tag) || '' }}"
- uses: "DeterminateSystems/nix-installer-action@main"
- uses: "DeterminateSystems/flakehub-push@main"
- uses: DeterminateSystems/nix-installer-action@c5a866b6ab867e88becbed4467b93592bce69f8a # v21
- uses: DeterminateSystems/flakehub-push@71f57208810a5d299fc6545350981de98fdbc860 # v6
with:
visibility: "public"
tag: "${{ inputs.tag }}"
20 changes: 14 additions & 6 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ name: golangci-lint
on:
# For now, only lint pull requests, not the main branches.
pull_request:

paths:
- ".github/workflows/golangci-lint.yml"
- "**.go"
- "go.mod"
- "go.sum"
# TODO(andrew): enable for main branch after an initial waiting period.
#push:
# branches:
Expand All @@ -23,17 +27,21 @@ jobs:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: go.mod
cache: false
cache: true

- name: golangci-lint
uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0
uses: golangci/golangci-lint-action@b7bcab6379029e905e3f389a6bf301f1bc220662 # head as of 2026-03-04
with:
version: v2.0.2
version: v2.10.1

# Show only new issues if it's a pull request.
only-new-issues: true

# Loading packages with a cold cache takes a while:
args: --timeout=10m

4 changes: 2 additions & 2 deletions .github/workflows/govulncheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:

steps:
- name: Check out code into the Go module directory
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install govulncheck
run: ./tool/go install golang.org/x/vuln/cmd/govulncheck@latest
Expand All @@ -24,7 +24,7 @@ jobs:

- name: Post to slack
if: failure() && github.event_name == 'schedule'
uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1
with:
method: chat.postMessage
token: ${{ secrets.GOVULNCHECK_BOT_TOKEN }}
Expand Down
22 changes: 17 additions & 5 deletions .github/workflows/installer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ on:
- scripts/installer.sh
- .github/workflows/installer.yml
pull_request:
branches:
- "*"
paths:
- scripts/installer.sh
- .github/workflows/installer.yml
Expand Down Expand Up @@ -60,6 +58,14 @@ jobs:
# Check a few images with wget rather than curl.
- { image: "debian:oldstable-slim", deps: "wget" }
- { image: "debian:sid-slim", deps: "wget" }
- { image: "debian:stable-slim", deps: "curl" }
- { image: "ubuntu:24.04", deps: "curl" }
- { image: "fedora:latest", deps: "curl" }
# Test TAILSCALE_VERSION pinning on a subset of distros.
# Skip Alpine as community repos don't reliably keep old versions.
- { image: "debian:stable-slim", deps: "curl", version: "1.80.0" }
- { image: "ubuntu:24.04", deps: "curl", version: "1.80.0" }
- { image: "fedora:latest", deps: "curl", version: "1.80.0" }
runs-on: ubuntu-latest
container:
image: ${{ matrix.image }}
Expand Down Expand Up @@ -93,22 +99,28 @@ jobs:
contains(matrix.image, 'parrotsec') ||
contains(matrix.image, 'kalilinux')
- name: checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: run installer
run: scripts/installer.sh
env:
TAILSCALE_VERSION: ${{ matrix.version }}
# Package installation can fail in docker because systemd is not running
# as PID 1, so ignore errors at this step. The real check is the
# `tailscale --version` command below.
continue-on-error: true
- name: check tailscale version
run: tailscale --version
run: |
tailscale --version
if [ -n "${{ matrix.version }}" ]; then
tailscale --version | grep -q "^${{ matrix.version }}" || { echo "Version mismatch!"; exit 1; }
fi
notify-slack:
needs: test
runs-on: ubuntu-latest
steps:
- name: Notify Slack of failure on scheduled runs
if: failure() && github.event_name == 'schedule'
uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1
with:
webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
webhook-type: incoming-webhook
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/kubemanifests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
runs-on: [ ubuntu-latest ]
steps:
- name: Check out code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Build and lint Helm chart
run: |
eval `./tool/go run ./cmd/mkversion`
Expand Down
Loading