fatedier and GitHub
12b0093ccf
chore: prepare v0.71.1 release notes ( #5564 )
2026-10-13 10:46:29 +08:00
fatedier and GitHub
2542d11a62
fix(net): coordinate websocket handoff with listener shutdown ( #5563 )
2026-10-10 19:58:05 +08:00
fatedier and GitHub
1cc2dd8a23
fix(vhost): avoid request body access after CONNECT hijack ( #5562 )
2026-10-09 23:53:05 +08:00
fatedier and GitHub
1dbd44edd3
fix(msg): interrupt control reads during dispatcher shutdown ( #5561 )
2026-10-09 17:46:31 +08:00
fatedier and GitHub
55107d003d
fix: synchronize service startup and shutdown ( #5560 )
2026-10-09 12:27:12 +08:00
fatedier and GitHub
4cd4747525
fix: use Go 1.26 new expressions for pointer initialization ( #5559 )
2026-10-08 22:28:31 +08:00
fatedier and GitHub
d20a232996
test: strengthen health check coverage ( #5528 )
2026-09-10 01:28:26 +08:00
fatedier and GitHub
b0d840858f
ci: upgrade CircleCI config to 2.1 ( #5530 )
2026-09-10 00:17:12 +08:00
fatedier and GitHub
c5508627c4
docs: add rapidproxy as gold sponsor ( #5529 )
2026-09-10 00:02:51 +08:00
fatedier and GitHub
ebb4773c2c
docs: update release notes ( #5521 )
2026-08-29 14:41:43 +08:00
fatedier and GitHub
23ec9b4979
vnet: serialize VirtualNet route lifecycle ( #5512 )
...
* vnet: serialize virtual net route lifecycle
* test: remove fixed virtual net helper parameters
2026-08-28 10:56:05 +08:00
fatedier and GitHub
758f07d59e
deps: migrate to fatedier/yamux v0.2.0 ( #5498 )
2026-08-18 00:24:11 +08:00
fatedier and GitHub
25a4ba306a
ci: pin golangci-lint to v2.12.2 ( #5496 )
2026-08-17 00:48:09 +08:00
fatedier and GitHub
6c8a8d0a97
web: patch vulnerable transitive dependencies ( #5490 )
2026-08-13 01:12:34 +08:00
fatedier and GitHub
da04e1e07a
log: improve prefix handling ( #5489 )
2026-08-12 23:56:00 +08:00
fatedier and GitHub
71a2bf30f9
docs: add release note for domain validation fix ( #5475 )
2026-08-09 23:04:09 +08:00
fatedier and GitHub
a6a782bed4
config: reject case-insensitive subdomain domains ( #5474 )
2026-08-09 22:52:30 +08:00
fatedier and GitHub
223b44336c
ssh: serialize tunnel channel writes ( #5473 )
2026-08-09 19:12:12 +08:00
fatedier and GitHub
f6688e2a0d
client: reject invalid work connection addresses ( #5472 )
2026-08-09 18:39:21 +08:00
fatedier and GitHub
f666d97b64
limit: clamp bandwidth limiter burst ( #5471 )
2026-08-09 17:30:39 +08:00
fatedier and GitHub
5b68148f11
udp: handle closed forwarding channel ( #5470 )
2026-08-09 15:31:11 +08:00
fatedier and GitHub
1a3a872bd2
fix(frpc): respect feature gates in verify ( #5465 )
2026-08-04 12:53:10 +08:00
fatedier and GitHub
290017cb53
update version to 0.71.0 ( #5464 )
2026-08-03 23:37:36 +08:00
fatedier and GitHub
2291e8835f
feat: use binary codec for SUDP packets ( #5461 )
2026-07-31 16:53:16 +08:00
fatedier and GitHub
1ab59e763c
server: validate control pool counts ( #5459 )
2026-07-30 23:30:16 +08:00
fatedier and GitHub
9d45a55720
docs: add release note for #5456 ( #5458 )
2026-07-30 14:40:54 +08:00
fatedier and GitHub
effa496859
feat: add negotiated binary UDP packets ( #5456 )
2026-07-30 13:19:55 +08:00
fatedier and GitHub
5c6d761c12
chore(web): upgrade frontend dependencies ( #5454 )
2026-07-28 19:36:44 +08:00
fatedier and GitHub
3d89ab7ff1
build(web): upgrade auto import plugins ( #5453 )
2026-07-28 17:09:46 +08:00
fatedier and GitHub
f3828cbfdb
build(web): upgrade ESLint to v10 ( #5452 )
2026-07-28 16:10:29 +08:00
fatedier and GitHub
00c24e39bb
test(web): add frontend unit test baseline ( #5451 )
2026-07-28 01:27:35 +08:00
fatedier and GitHub
2175557d48
web: fix Vite config tsconfig includes ( #5450 )
2026-07-27 19:21:28 +08:00
fatedier and GitHub
de4b483710
web: patch vulnerable transitive dependencies ( #5449 )
2026-07-27 14:57:58 +08:00
fatedier and GitHub
2d63f6b1f9
web/frpc: fix visitor plugin validation for sudp ( #5448 )
2026-07-27 12:04:00 +08:00
fatedier and GitHub
18eef83b69
fix(client): synchronize graceful shutdown duration ( #5442 )
2026-07-23 13:55:00 +08:00
fatedier and GitHub
466a94f5d1
update quic-go dependency to v0.60.0 ( #5443 )
2026-07-23 12:28:10 +08:00
fatedier and GitHub
0e53833a2c
refactor: use standard library HKDF ( #5440 )
2026-07-23 01:17:37 +08:00
fatedier and GitHub
c23934bb67
web: update vulnerable transitive dependencies ( #5441 )
2026-07-23 01:16:40 +08:00
fatedier and GitHub
23512f577e
fix: upgrade go-oidc to v3.18.0 ( #5439 )
2026-07-23 00:00:47 +08:00
fatedier and GitHub
84b907a198
deps: bump golib to v0.8.1 ( #5437 )
2026-07-22 21:47:36 +08:00
fatedier and GitHub
f8fc3c6b1b
server: drop HTTP/1.1 h2c upgrade handling ( #5436 )
...
Use net/http Server.Protocols and the merged golib listener path instead of the deprecated h2c handler. Keep HTTP/1.1 and cleartext HTTP/2 prior-knowledge support, while intentionally dropping HTTP/1.1 Upgrade: h2c.
2026-07-22 19:55:42 +08:00
fatedier and GitHub
7dc7be930e
ssh: fix malformed exec payload panic ( #5428 )
2026-07-21 23:04:56 +08:00
fatedier and GitHub
d486018885
fix(server): prevent control replacement lifecycle leaks ( #5424 )
2026-07-21 18:09:09 +08:00
fatedier and GitHub
fe79598ee4
fix: fail fast on cross-compile errors ( #5420 )
2026-07-16 16:40:48 +08:00
fatedier and GitHub
269a26c5d5
fix(nathole): migrate STUN client to golib ( #5419 )
2026-07-16 13:11:45 +08:00
fatedier and GitHub
2886393f5b
ci: remove unsupported s390x image target ( #5412 )
2026-07-11 22:44:45 +08:00
fatedier and GitHub
5396947c7c
remove retired Go Report Card badge ( #5409 )
2026-07-11 15:59:51 +08:00
fatedier and GitHub
fe61093bc2
bump version to 0.70.0 ( #5406 )
2026-07-11 14:28:19 +08:00
fatedier and GitHub
54aeb2a7b0
feat(server): add typed frps v2 proxy specs ( #5405 )
2026-07-11 10:34:04 +08:00
fatedier and GitHub
84be1938e4
api: expose v2 proxy timestamps as unix seconds ( #5402 )
2026-07-09 14:47:19 +08:00
fatedier and GitHub
becee40715
docs: update API v2 release notes ( #5400 )
2026-07-08 15:54:16 +08:00
fatedier and GitHub
17e788d43b
refactor: clean up frps v2 frontend models ( #5399 )
2026-07-08 13:10:55 +08:00
fatedier and GitHub
68509f5d44
Add frps proxy traffic API v2 ( #5398 )
2026-07-08 02:05:28 +08:00
fatedier and GitHub
5cd722b177
feat: add system prune API v2 ( #5395 )
2026-07-07 13:00:53 +08:00
fatedier and GitHub
5876beceac
feat: add system info API v2 ( #5394 )
2026-07-07 02:00:44 +08:00
fatedier and GitHub
7fe152e3aa
web/frps: use API v2 for client and proxy details ( #5386 )
2026-06-30 01:33:57 +08:00
fatedier and GitHub
7c343fc6e7
web: bump esbuild to 0.28.1 and remove unused ElPopover type ( #5385 )
2026-06-29 23:21:22 +08:00
fatedier and GitHub
a3b3b35b69
feat(ui): default proxies view to all tab ( #5384 )
2026-06-29 22:49:08 +08:00
fatedier and GitHub
ae1c0504ec
feat(dashboard): add v2 client detail status ( #5381 )
2026-06-26 21:15:30 +08:00
fatedier and GitHub
393a533744
docs: add release note for duplicate config names ( #5379 )
2026-06-24 15:03:22 +08:00
fatedier and GitHub
940bde5c46
docs: update release notes ( #5377 )
2026-06-23 17:06:16 +08:00
fatedier and GitHub
14628df63c
test: cover tls2raw proxy protocol header ( #5376 )
2026-06-23 00:04:38 +08:00
fatedier and GitHub
54c6ccdfec
feat: remove proxies client filter ( #5375 )
2026-06-22 22:53:57 +08:00
fatedier and GitHub
9bde0b07de
feat: paginate dashboard clients and proxies via API v2 ( #5354 )
...
Move the frps dashboard Clients and Proxies views to the paginated
/api/v2/clients and /api/v2/proxies endpoints instead of fetching all
data at once, and extend server-side proxy search so the search box
keeps working under pagination.
Frontend:
- Add V2Envelope/V2Page types and getV2 HTTP helper to api/http.ts
- Add v2 paginated fetch functions to api/client.ts and api/proxy.ts
- Add ClientV2Info and ProxyV2Info types for v2 API responses
- Rewrite Clients.vue with server-side pagination, status/user search
filtering, and ElPagination component
- Rewrite Proxies.vue with server-side pagination, type tabs, client
dropdown filter, and a search box that passes q to the API
- Default page size 10, selectable sizes [10, 20, 50, 100]
Backend:
- Extend /api/v2/proxies q matching to also cover online proxy spec
fields: TCP/UDP remotePort and HTTP/HTTPS/TCPMux customDomains and
subdomain, so dashboard search no longer needs to scan every page
- Add controller_v2 tests for the new spec-field matching
2026-06-03 14:08:45 +08:00
fatedier and GitHub
c6c545289c
fix: normalize web package lockfile ( #5353 )
2026-06-02 13:39:37 +08:00
fatedier
503afe78b7
feat: add dashboard API v2 pagination endpoints ( #5351 )
2026-06-01 20:09:25 +08:00
fatedier and GitHub
9ea1d86f03
test: handle wire v2 compatibility baselines ( #5349 )
2026-06-01 17:52:57 +08:00
fatedier
ac3e82db4e
Release v0.69.1 ( #5348 )
2026-06-01 16:22:34 +08:00
fatedier
0773938d70
feat: bridge mixed wire protocol SUDP payloads ( #5347 )
...
SUDP payload codec follows transport wireProtocol; same-protocol v1/v1 and v2/v2 keep raw join; only mixed proxy/visitor protocols use message-aware bridge; no new capability/selection field.
2026-06-01 16:22:34 +08:00
fatedier
9bacce22a2
feat: use wire v2 framing for XTCP NatHoleSid ( #5343 )
2026-06-01 16:22:34 +08:00
fatedier
7f8d68b666
feat: use wire v2 framing for UDP workConn payload ( #5340 )
2026-06-01 16:22:34 +08:00
fatedier and GitHub
3e19ef9bfd
feat(ui): add xtcp tab to frps dashboard ( #5322 )
2026-05-21 22:18:00 +08:00
fatedier and GitHub
e20f974d61
feat(ui): add all proxies tab to frps dashboard ( #5321 )
2026-05-20 16:20:58 +08:00
fatedier and GitHub
a88e0e9a49
refactor: clean up code ( #5308 )
2026-05-12 11:13:50 +08:00
fatedier and GitHub
8666e3643f
protocol: add AEAD encryption negotiation to v2 wire control channel ( #5304 )
2026-05-06 10:43:47 +08:00
fatedier and GitHub
57bb9e80fe
test/e2e: add compatibility test suite for wire protocol version negotiation ( #5297 )
2026-04-27 18:28:22 +08:00
fatedier and GitHub
cef71fb949
plugin/http_proxy: fix fragmented CONNECT method detection and add read deadline ( #5296 )
2026-04-27 02:30:29 +08:00
fatedier and GitHub
410c4861c4
update Release.md ( #5295 )
2026-04-27 01:31:10 +08:00
fatedier and GitHub
e9464919d1
protocol: add v2 wire protocol with binary framing and capability negotiation ( #5294 )
2026-04-27 00:17:00 +08:00
fatedier and GitHub
e8dfd6efcc
web/frpc: use static imports for proxy and visitor route components ( #5286 )
2026-04-14 01:18:31 +08:00
fatedier and GitHub
a9a4416ecf
vhost/http: fix auth bypass when routeByHTTPUser is used with proxy-style requests ( #5285 )
2026-04-14 00:58:19 +08:00
fatedier and GitHub
d667be7a0a
update architecture pic ( #5270 )
2026-03-30 03:22:35 +08:00
fatedier and GitHub
31c3deb4f7
deps: bump golib to v0.6.0 ( #5269 )
2026-03-30 00:29:17 +08:00
fatedier and GitHub
31e271939b
test/e2e: allocate dynamic ports outside whitelist ranges in server whitelist test ( #5268 )
2026-03-30 00:21:30 +08:00
fatedier and GitHub
061c141756
update README.md ( #5267 )
2026-03-29 23:53:17 +08:00
fatedier and GitHub
76abeff881
ci: remove security vulnerability scan workflow ( #5266 )
2026-03-29 22:55:52 +08:00
fatedier
5ed02275da
docker: copy shared web directory for npm workspace builds
2026-03-20 14:39:35 +08:00
fatedier
60c4f5d4bd
ci: bump github actions to latest major versions ( #5251 )
2026-03-20 14:39:00 +08:00
fatedier and GitHub
d20e384bf1
doc: add agent runbooks directory with release process ( #5248 )
...
* web: remove redundant SCSS and CSS files superseded by shared
* doc: add agent runbooks directory with release process
2026-03-20 13:52:12 +08:00
fatedier and GitHub
c95dc9d88a
web: remove redundant SCSS and CSS files superseded by shared ( #5247 )
2026-03-20 13:08:18 +08:00
fatedier and GitHub
38a71a6803
web/frps: redesign frps dashboard with sidebar nav, responsive layout, and shared component workspace ( #5246 )
2026-03-20 03:33:44 +08:00
fatedier and GitHub
6cdef90113
web: bump dev dependencies in frpc and frps package-lock.json ( #5239 )
2026-03-16 23:22:42 +08:00
fatedier and GitHub
85e8e2c830
web/frpc: redesign frpc dashboard with sidebar nav, proxy/visitor list and detail views ( #5237 )
2026-03-16 09:44:30 +08:00
fatedier and GitHub
ff4ad2f907
auth/oidc: fix eager token fetch at startup, add validation and e2e tests ( #5234 )
2026-03-15 22:29:45 +08:00
fatedier and GitHub
6b1be922e1
add AGENTS.md and CLAUDE.md, remove them from .gitignore ( #5232 )
2026-03-12 00:21:31 +08:00
fatedier and GitHub
4f584f81d0
test/e2e: replace sleeps with event-driven waits in chaos/group/store tests ( #5231 )
...
* test/e2e: replace sleeps with event-driven waits in chaos/group/store tests
Replace 21 time.Sleep calls with deterministic waiting using
WaitForOutput, WaitForTCPReady, and a new WaitForTCPUnreachable helper.
Add CountOutput method for snapshot-based incremental log matching.
* test/e2e: validate interval and cap dial/sleep to remaining deadline in WaitForTCPUnreachable
2026-03-12 00:11:09 +08:00
fatedier and GitHub
9669e1ca0c
test/e2e: replace RunProcesses client sleep with log-based proxy readiness detection ( #5226 )
...
* test/e2e: replace RunProcesses client sleep with log-based proxy readiness detection
Replace the fixed 1500ms sleep in RunProcesses with event-driven proxy
registration detection by monitoring frpc log output for "start proxy
success" messages.
Key changes:
- Add thread-safe SafeBuffer to replace bytes.Buffer in Process, enabling
concurrent read/write of process output during execution
- Add Process.WaitForOutput() to poll process output for pattern matches
with timeout and early exit on process termination
- Add waitForClientProxyReady() that uses config.LoadClientConfig() to
extract proxy names, then waits for each proxy's success log
- For visitor-only clients (no deterministic readiness signal), fall back
to the original sleep with elapsed time deducted
* test/e2e: use shared deadline for proxy readiness and fix doc comment
- Use a single deadline in waitForClientProxyReady so total wait across
all proxies does not exceed the given timeout
- Fix WaitForOutput doc comment to accurately describe single pattern
with count semantics
2026-03-09 22:28:23 +08:00
fatedier and GitHub
48e8901466
test/e2e: optimize RunFrps/RunFrpc with process exit detection ( #5225 )
...
* test/e2e: optimize RunFrps/RunFrpc with process exit detection
Refactor Process to track subprocess lifecycle via a done channel,
replacing direct cmd.Wait() in Stop() to avoid double-Wait races.
RunFrps/RunFrpc now use select on the done channel instead of fixed
sleeps, allowing short-lived processes (verify, startup failures) to
return immediately while preserving existing timeout behavior for
long-running daemons.
* test/e2e: guard Process against double-Start and Stop-before-Start
Add started flag to prevent double-Start panics and allow Stop to
return immediately when the process was never started. Use sync.Once
for closing the done channel as defense-in-depth against double close.
2026-03-09 10:28:47 +08:00
fatedier and GitHub
bcd2424c24
test/e2e: optimize e2e test time by replacing sleeps with TCP readiness checks ( #5223 )
...
Replace the fixed 500ms sleep after each frps startup in RunProcesses
with a TCP dial-based readiness check that polls the server bind port.
This reduces the e2e suite wall time from ~97s to ~43s.
Also simplify the RunProcesses API to accept a single server template
string instead of a slice, matching how every call site uses it.
2026-03-08 23:41:33 +08:00
fatedier and GitHub
c7ac12ea0f
server/group: refactor with shared abstractions and fix concurrency issues ( #5222 )
...
* server/group: refactor group package with shared abstractions and fix concurrency issues
Extract common patterns into reusable components:
- groupRegistry[G]: generic concurrent map for group lifecycle management
- baseGroup: shared plumbing for listener-based groups (TCP, HTTPS, TCPMux)
- Listener: unified virtual listener replacing 3 identical implementations
Fix concurrency issues:
- Stale-pointer race: isCurrent check + errGroupStale + controller retry loops
- Worker generation safety: pass realLn and acceptCh as params instead of reading mutable fields
- Connection leak: close conn on worker panic recovery path
- ABBA deadlock in HTTP UnRegister: consistent lock ordering (group.mu -> registry.mu)
- Round-robin overflow in HTTPGroup: use unsigned modulo
Add unit tests (17 tests) for registry, listener, and baseGroup.
Add TCPMux group load balancing e2e test.
* server/group: replace tautological assertion with require.NotPanics
* server/group: remove blank line between doc comment and type declaration
2026-03-08 18:57:21 +08:00