Skip to content
This repository was archived by the owner on Sep 24, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1028 commits
Select commit Hold shift + click to select a range
2921e13
Bump org.wiremock:wiremock-standalone from 3.10.0 to 3.13.2
dependabot[bot] Dec 29, 2025
b569b71
Feature/activity tracker logging (#668)
clescot Jan 1, 2026
c0871e1
Bump org.sonatype.central:central-publishing-maven-plugin
dependabot[bot] Jan 8, 2026
d140df3
Bump com.fasterxml.jackson:jackson-bom from 2.20.1 to 2.21.0
dependabot[bot] Jan 19, 2026
1b4c58c
Bump dnsjava:dnsjava from 3.6.3 to 3.6.4
dependabot[bot] Jan 19, 2026
b9abcbb
Bump org.codehaus.mojo:versions-maven-plugin from 2.20.1 to 2.21.0
dependabot[bot] Jan 19, 2026
9032e59
Bump org.junit.jupiter:junit-jupiter-api from 5.13.4 to 6.0.2
dependabot[bot] Jan 7, 2026
2934a99
Bump org.seleniumhq.selenium:selenium-java from 4.39.0 to 4.40.0
dependabot[bot] Jan 19, 2026
3fee314
compile&run tests with java17
asolntsev Jan 19, 2026
e9de219
move littleproxy.properties and log4j.xml in standard maven location …
clescot Jan 19, 2026
0a8498d
release LittleProxy 2.6.0
asolntsev Jan 19, 2026
765eb2a
working on LittleProxy 2.6.1
asolntsev Jan 19, 2026
444dcfe
Fix issue 680 generated jks and cert at root (#681)
clescot Jan 23, 2026
8869f86
fix flaky tests that fail because "random free port" was occupied
asolntsev Jan 23, 2026
af4dd06
Add spotless formatting plugin (#682)
clescot Jan 23, 2026
8aded16
Bump org.assertj:assertj-core from 3.27.6 to 3.27.7
dependabot[bot] Jan 26, 2026
2b1890a
Bump com.diffplug.spotless:spotless-maven-plugin from 2.46.1 to 3.2.0
dependabot[bot] Jan 26, 2026
55b99b6
Bump org.apache.maven.plugins:maven-compiler-plugin
dependabot[bot] Feb 2, 2026
9dd1111
Bump com.diffplug.spotless:spotless-maven-plugin from 3.2.0 to 3.2.1
dependabot[bot] Jan 28, 2026
a68b521
migration to log4j2 and async logging available (#684)
clescot Feb 2, 2026
8cb2385
add request handling architecture document.
Feb 2, 2026
bf1cb18
Bump com.diffplug.spotless:spotless-maven-plugin from 3.2.0 to 3.2.1
dependabot[bot] Feb 3, 2026
34485e0
Bump netty.version from 4.2.9.Final to 4.2.10.Final
dependabot[bot] Feb 6, 2026
c462036
464 little proxy authentication bug (#691)
clescot Feb 6, 2026
8006849
Stop the launcher after every test
asolntsev Feb 6, 2026
a84084d
stably wait until the server gets started and stopped
asolntsev Feb 6, 2026
975dacf
Bump org.apache.maven.plugins:maven-dependency-plugin
dependabot[bot] Feb 9, 2026
265b526
fix #56
Feb 12, 2026
168e3f1
start making thread dumps earlier for @Timeout tests
asolntsev Feb 14, 2026
38fdf8c
add test name to thread name during test execution
asolntsev Feb 14, 2026
6c834ba
quickly resolve localhost name
asolntsev Feb 14, 2026
9f4004a
Bump org.junit.jupiter:junit-jupiter from 6.0.2 to 6.0.3
dependabot[bot] Feb 16, 2026
fb9d7ff
Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.4 to 3.5.5
dependabot[bot] Feb 23, 2026
5992df3
Bump org.apache.maven.plugins:maven-surefire-report-plugin
dependabot[bot] Feb 23, 2026
743de61
Bump org.seleniumhq.selenium:selenium-java from 4.40.0 to 4.41.0
dependabot[bot] Feb 23, 2026
64ba86b
Bump com.fasterxml.jackson:jackson-bom from 2.21.0 to 2.21.1
dependabot[bot] Feb 24, 2026
2b65832
Client to proxy connection.timed out bug (#699)
clescot Feb 24, 2026
01a5f49
Migrate test logging from log4j 1.x to Log4j2
clescot Feb 26, 2026
b0649db
Add selective thread dump via @EnableThreadDump annotation
clescot Feb 26, 2026
b4f2a9a
Add @EnableThreadDump to long-running and potentially hanging tests
clescot Feb 26, 2026
3fd82d9
fix import and apply spotless plugin.
clescot Feb 26, 2026
47042f6
add Issue71NonSslConnectTest.java and apply spotless plugin.
clescot Feb 27, 2026
dbe6a42
Fix issue #71: Support CONNECT requests to non-SSL servers in MITM mode
clescot Feb 27, 2026
c1eaa21
remove dead code.
clescot Feb 27, 2026
102e4d2
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Feb 27, 2026
9ef4bcf
Add integration test for SOCKS5 upstream proxy authentication (issue …
clescot Feb 27, 2026
e88b0d5
Fix issue #77: CONNECT response not returned to HttpFilters
clescot Feb 28, 2026
ca0a79e
savepoint
clescot Mar 1, 2026
fe33452
first ProxyToServerConnectionPool.
clescot Mar 1, 2026
71a1c61
prevent pool exhaustion
clescot Mar 2, 2026
c4e49bc
add test
clescot Mar 2, 2026
6913705
add tests
clescot Mar 2, 2026
9cea670
Per-host connection limits
clescot Mar 2, 2026
9f8027d
Bump com.diffplug.spotless:spotless-maven-plugin from 3.2.1 to 3.3.0
dependabot[bot] Mar 3, 2026
36a8223
Bump org.mockito:mockito-core from 5.21.0 to 5.22.0
dependabot[bot] Mar 2, 2026
27dc46d
init pool interface and implementations
clescot Mar 3, 2026
fc7a2d5
Merge remote-tracking branch 'origin/main' into issue-83-shared-proxy…
clescot Mar 5, 2026
d61189d
extract PendingRequest.java
clescot Mar 5, 2026
22d642d
Bump org.apache.maven.plugins:maven-resources-plugin from 3.4.0 to 3.5.0
dependabot[bot] Mar 6, 2026
3dcfec6
Bump org.apache.maven.plugins:maven-shade-plugin from 3.6.1 to 3.6.2
dependabot[bot] Mar 6, 2026
8178fc0
configure spotless plugin to use default intellij settings (#722)
clescot Mar 6, 2026
8954fb5
Merge branch 'main' into issue-57-socks5-authentication-test
clescot Mar 7, 2026
32bb999
Merge branch 'main' into issue-71-connect-non-ssl-test
clescot Mar 7, 2026
f2ed7c5
fix spotless formatting
clescot Mar 7, 2026
111f57a
add pool metrics.
clescot Mar 7, 2026
4c12dcb
reduce DefaultHttpProxyServerBootstrap constructor from 26 parameters…
clescot Mar 7, 2026
6369f82
reduce DefaultHttpProxyServer constructor from 29 parameters to 2.
clescot Mar 7, 2026
00b69b8
Merge remote-tracking branch 'origin/main' into issue-83-shared-proxy…
clescot Mar 7, 2026
69551bc
extract DefaultHttpProxyServerBootstrap as an external class, to fix …
clescot Mar 7, 2026
ceaf1f6
remove redundant cast
clescot Mar 7, 2026
e692c09
Bump org.mockito:mockito-core from 5.22.0 to 5.23.0
dependabot[bot] Mar 12, 2026
a44f2c9
Bump com.diffplug.spotless:spotless-maven-plugin from 3.3.0 to 3.4.0
dependabot[bot] Mar 19, 2026
495a837
Bump netty.version from 4.2.10.Final to 4.2.11.Final
dependabot[bot] Mar 25, 2026
c7ab506
Bump com.fasterxml.jackson:jackson-bom from 2.21.1 to 2.21.2
dependabot[bot] Mar 23, 2026
0931555
Bump netty.version from 4.2.11.Final to 4.2.12.Final
dependabot[bot] Mar 26, 2026
332199b
Bump log4j.version from 2.25.3 to 2.25.4
dependabot[bot] Mar 30, 2026
91e80af
1- Add missing unit tests for existing interfaces and adapters (#706)
clescot Mar 30, 2026
cf0be03
slightly fine-tune the tests
asolntsev Mar 30, 2026
5b28fc1
Fix test SelfSignedSslEngineSource hanging on Windows and failing wit…
asolntsev Mar 30, 2026
205f493
3 - Enhance ActivityTracker interface with new lifecycle methods (#708)
clescot Apr 6, 2026
2970e74
add unit test demonstrating how to do "internal redirect" (#68) (#718)
clescot Apr 6, 2026
624509a
Fix WebSocket proxying and add frame observation hook
asolntsev Apr 6, 2026
d20aae6
make webSocketFrameReceived() parameter lazy-initialized
asolntsev Apr 6, 2026
fb13310
release LittleProxy 2.7.0
asolntsev Apr 6, 2026
20d00b1
Bump org.seleniumhq.selenium:selenium-java from 4.41.0 to 4.42.0
dependabot[bot] Apr 10, 2026
ef85036
Bump org.seleniumhq.selenium:selenium-java from 4.42.0 to 4.43.0
dependabot[bot] Apr 13, 2026
dea844b
log4j2.xml for tests : remove additivity="false" on defined loggers.
clescot Apr 13, 2026
a57d9bd
Merge branch 'main' into feature/log4j2-test-config
clescot Apr 13, 2026
0165427
Merge branch 'main' into issue-83-shared-proxy-to-server-connection-pool
clescot Apr 13, 2026
651cdf2
merge from main branch and resolve conflicts.
clescot Apr 13, 2026
01a173f
upgrade to stormpot 3.2 , the latest java 11 release available.
clescot Apr 13, 2026
b3c707b
commons-pool and stormpot marked as optional dependencies (object poo…
clescot Apr 13, 2026
4de820b
add a realistic IP address in documentation.
clescot Apr 13, 2026
78de779
CommonsPoolServerConnectionPool : Implement actual connection health …
clescot Apr 13, 2026
45287e1
Pool by upstream route, not just origin host.
clescot Apr 14, 2026
a7c2216
Changed approach: Pass InetSocketAddress instead of ChainedProxy thro…
clescot Apr 14, 2026
0751ed6
The Properties path never turns the shared pool on.
clescot Apr 14, 2026
aec9e36
Give serverConnectionPoolConfig a disabled default.
clescot Apr 14, 2026
e38f35b
The fix adds cleanup of pending requests when a connection disconnects.
clescot Apr 14, 2026
4ab890b
The fix ensures that each pipelined request uses the exact filter cha…
clescot Apr 14, 2026
b6b80d3
StormpotServerConnectionPool : The fix ensures Stormpot pool properl…
clescot Apr 14, 2026
0945529
StormpotServerConnectionPool :
clescot Apr 14, 2026
5d9cd92
connectionPool : evictionCount is declared but never incremented.
clescot Apr 14, 2026
0cebf8f
CommonsPoolServerConnectionPool : Pass the real serverHostAndPort int…
clescot Apr 14, 2026
4704100
StormpotServerConnectionPool : Don't feed the route key back into Pro…
clescot Apr 14, 2026
b84799c
ProxyToServerConnection : The fix ensures fallback chained proxies a…
clescot Apr 14, 2026
b52e73e
ConcurrentMapServerConnectionPool : Non-atomic check-then-remove may …
clescot Apr 14, 2026
17a92f6
ServerConnectionPool : fix Potential NPE when chainedProxyAddress is …
clescot Apr 14, 2026
3c00c1f
CommonsPoolServerConnectionPool : Minor race condition in queue cleanup.
clescot Apr 14, 2026
658debc
StormpotServerConnectionPool : Non-atomic check-then-remove may leak …
clescot Apr 14, 2026
2f2acb4
StormpotServerConnectionPool : fix When validation fails, rejected co…
clescot Apr 14, 2026
d852be0
StormpotServerConnectionPool : fix getMetrics() reports every pooled …
clescot Apr 14, 2026
3011122
StormpotServerConnectionPool : fix Idle eviction never advances past …
clescot Apr 14, 2026
dc8baf5
Bump com.google.guava:guava from 33.5.0-jre to 33.6.0-jre
dependabot[bot] Apr 15, 2026
b468da7
attach TLS detection to the ClientToProxyConnection
clescot Apr 15, 2026
904221a
Wait for upstream TLS before creating the client MITM engine.
clescot Apr 15, 2026
83111c5
Fix MITM client SSL engine creation to wait for server encryption
clescot Apr 15, 2026
285c6e0
Merge branch 'main' into issue-71-connect-non-ssl-test
clescot Apr 15, 2026
d0cd909
enable AI :)
asolntsev Apr 16, 2026
9f25006
Bump com.fasterxml.jackson:jackson-bom from 2.21.2 to 2.21.3
dependabot[bot] Apr 29, 2026
6d8c9eb
Fix unsupported `com.lmax.disruptor` scope
c00ler May 4, 2026
1609bf1
Bump commons-io:commons-io from 2.21.0 to 2.22.0
dependabot[bot] Apr 24, 2026
4fc4a8a
Bump netty.version from 4.2.12.Final to 4.2.13.Final
dependabot[bot] May 6, 2026
5e0522f
Bump log4j.version from 2.25.4 to 2.26.0
dependabot[bot] May 8, 2026
10f7cb5
Bump org.slf4j:slf4j-api from 2.0.17 to 2.0.18
dependabot[bot] May 13, 2026
6b28bf8
Bump org.seleniumhq.selenium:selenium-java from 4.43.0 to 4.44.0
dependabot[bot] May 13, 2026
e6485f0
Bump com.diffplug.spotless:spotless-maven-plugin from 3.4.0 to 3.5.0
dependabot[bot] May 15, 2026
1c3a0bb
Bump com.diffplug.spotless:spotless-maven-plugin from 3.5.0 to 3.5.1
dependabot[bot] May 18, 2026
ca88bdf
Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.6.2 to 3.6.3
dependabot[bot] May 19, 2026
7838556
Bump org.junit.jupiter:junit-jupiter from 6.0.3 to 6.1.0
dependabot[bot] May 20, 2026
081cef0
Bump netty.version from 4.2.13.Final to 4.2.14.Final
dependabot[bot] May 21, 2026
f8eb344
Bump org.apache.maven.plugins:maven-site-plugin from 3.21.0 to 3.22.0
dependabot[bot] May 25, 2026
4986029
Bump dnsjava:dnsjava from 3.6.4 to 3.6.5
dependabot[bot] May 25, 2026
f6db9e8
Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.5 to 3.5.6
dependabot[bot] May 28, 2026
011dfba
Bump com.diffplug.spotless:spotless-maven-plugin from 3.5.1 to 3.6.0
dependabot[bot] May 28, 2026
521f0a8
Bump org.apache.maven.plugins:maven-surefire-report-plugin
dependabot[bot] May 28, 2026
03e08cf
Bump org.apache.maven.plugins:maven-dependency-plugin
dependabot[bot] May 29, 2026
ca3962e
Bump com.fasterxml.jackson:jackson-bom from 2.21.3 to 2.22.0
dependabot[bot] Jun 1, 2026
ba5226f
Bump org.sonatype.central:central-publishing-maven-plugin
dependabot[bot] Jun 17, 2026
5cd8919
Bump org.seleniumhq.selenium:selenium-java from 4.44.0 to 4.45.0
dependabot[bot] Jun 17, 2026
677d5ec
Bump com.diffplug.spotless:spotless-maven-plugin from 3.6.0 to 3.7.0
dependabot[bot] Jun 17, 2026
aea8b69
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 19, 2026
f66d29d
Bump netty.version from 4.2.14.Final to 4.2.15.Final
dependabot[bot] Jun 17, 2026
c91bdea
Fix KeepAliveTest regression caused by Netty 4.2.15 strict HTTP line …
asolntsev Jun 24, 2026
143bc4f
release LittleProxy 2.8.0
asolntsev Jun 27, 2026
1c70eb9
Bump org.junit.jupiter:junit-jupiter from 6.1.0 to 6.1.1
dependabot[bot] Jun 29, 2026
28975f0
Bump com.diffplug.spotless:spotless-maven-plugin from 3.7.0 to 3.8.0
dependabot[bot] Jun 30, 2026
f522885
Bump log4j.version from 2.26.0 to 2.26.1
dependabot[bot] Jul 3, 2026
34d8541
Fix order of handlers in ClientToProxyConnection to support proxy pro…
BlueInf Feb 27, 2026
c5c64db
Bump com.fasterxml.jackson:jackson-bom from 2.22.0 to 2.22.1
dependabot[bot] Jul 8, 2026
be024f6
Bump netty.version from 4.2.15.Final to 4.2.16.Final
dependabot[bot] Jul 8, 2026
8bc2685
Bump org.seleniumhq.selenium:selenium-java from 4.45.0 to 4.46.0
dependabot[bot] Jul 13, 2026
3ada9f3
Bump org.junit.jupiter:junit-jupiter from 6.1.1 to 6.1.2
dependabot[bot] Jul 13, 2026
93be123
Bump org.apache.maven.plugins:maven-jar-plugin from 3.5.0 to 3.5.1
dependabot[bot] Jul 23, 2026
d0db2d5
Merge pull request #719 from clescot/issue-57-socks5-authentication-test
clescot Jul 26, 2026
83a2888
Merge pull request #715 from clescot/feature/selective-thread-dump
clescot Jul 26, 2026
43ca305
Merge pull request #721 from clescot/issue-77-connect-response-not-re…
clescot Jul 26, 2026
6cf2749
Merge branch 'main' into issue-71-connect-non-ssl-test
clescot Jul 26, 2026
aeda379
Merge pull request #717 from clescot/issue-71-connect-non-ssl-test
clescot Jul 26, 2026
803ce8a
Merge pull request #714 from clescot/feature/log4j2-test-config
clescot Jul 26, 2026
b86da18
Merge remote-tracking branch 'origin/main' into issue-83-shared-proxy…
clescot Jul 26, 2026
5146f4e
Merge branch 'main' into issue-83-shared-proxy-to-server-connection-pool
clescot Jul 26, 2026
7c52e93
Fix duplicate test-compile execution compiling tests with Java 11
asolntsev Jul 26, 2026
6875b85
Migrate Socks5ChainedProxyAuthenticationTest to SLF4J
asolntsev Jul 26, 2026
96f65f5
use generic AI file
asolntsev Jul 26, 2026
a9ee584
Fix bugs in MITM non-SSL CONNECT handling identified in PR #717 review
clescot Jul 26, 2026
5bd45b3
Add tests for MITM non-SSL CONNECT fixes and skip WebDriver test when…
clescot Jul 26, 2026
b78fb14
replace cast with pattern variable
asolntsev Jul 26, 2026
5a91b9e
ignore "logs/*.log" files generated during test run
asolntsev Jul 26, 2026
84deca7
Tag Issue71NonSslConnectTest as slow-test
clescot Jul 26, 2026
a2494e3
Fix shared server connection pool bugs
clescot Jul 26, 2026
a25217e
Fix stale BUG comment in TCP6 PROXY protocol test
clescot Jul 26, 2026
0e52cd7
Reuse shared mockProxyServer fixture in clientConnected test
clescot Jul 26, 2026
5cd538c
Replace reflection with testing hooks, close EmbeddedChannel
clescot Jul 26, 2026
b827943
Merge pull request #777 from clescot/fix/pr717-coderabbitai-bugs
clescot Jul 27, 2026
1394ce7
Merge branch 'main' into issue-83-shared-proxy-to-server-connection-pool
clescot Jul 27, 2026
5fdfcac
Bump com.diffplug.spotless:spotless-maven-plugin from 3.8.0 to 3.9.0
dependabot[bot] Jul 28, 2026
58da603
fix feedback from coderabbit : "Stormpot metrics doc contradicts actu…
clescot Jul 29, 2026
8469f71
add .opencode to .gitignore
clescot Jul 29, 2026
d89192c
add .sisyphus to .gitignore
clescot Jul 29, 2026
60492d0
fix from coderabbit : "Extract the pooled/dedicated decision into one…
clescot Jul 29, 2026
5989143
fix from coderabbit : "Wholesale removal of the per-key maps races wi…
clescot Jul 29, 2026
b61093d
fix from coderabbit : "Pooled upstreams are excluded from client-side…
clescot Jul 29, 2026
13b904f
fix from coderabbit : "Pool key is recomputed from mutable connection…
clescot Jul 29, 2026
a54e33a
fix from coderabbit : "closeAll() still leaks the eviction scheduler …
clescot Jul 29, 2026
4d96a4e
fix from coderabbit : "Busy-but-connected connections are silently dr…
clescot Jul 29, 2026
422332f
fix from coderabbit : "Nullness contract violation: this setter is ca…
clescot Jul 29, 2026
d98214d
add more unit tests.
clescot Jul 29, 2026
6894561
fix from coderabbit : "getServerConnectionPool() serializes every poo…
clescot Jul 29, 2026
6157d5b
fix from coderabbit : "gMake connectionPool private final and @Nullab…
clescot Jul 29, 2026
d9dde83
fix from coderabbit : "No change needed for the pipelining queue acce…
clescot Jul 29, 2026
f7bccd0
fix from coderabbit : "Setters silently swallow invalid input; missin…
clescot Jul 29, 2026
3377bb0
fix from coderabbit : "Move ConnectionContext out of ThreadLocal for …
clescot Jul 29, 2026
febae53
fix from coderabbit : "Move ConnectionContext out of ThreadLocal for …
clescot Jul 29, 2026
8855660
fix from coderabbit : "A hard-coded 1 ms claim timeout will spuriousl…
clescot Jul 29, 2026
cf3555e
fix from coderabbit : "A hard-coded 1 ms claim timeout will spuriousl…
clescot Jul 29, 2026
5ab6172
fix from coderabbit : "Mark this timing-sensitive test as slow."
clescot Jul 29, 2026
cc36df7
fix from coderabbit : "Assert actual reuse in both pooling tests. Sta…
clescot Jul 29, 2026
8dcb6b1
fix javaodc for test
clescot Jul 29, 2026
e4e424d
phase 1 ok
clescot Jul 29, 2026
a9760e3
phase 2 ok
clescot Jul 29, 2026
acd484b
phase 3 ok
clescot Jul 29, 2026
9b3d8ff
test metrics
clescot Jul 29, 2026
2a42ccb
add docs/pooling-features.md
clescot Jul 29, 2026
d3875c2
fix issue
clescot Jul 29, 2026
149dd56
fix issue "Missing @AfterEach teardown leaks pool background resource…
clescot Jul 29, 2026
c2a8881
fix issue "Read idleTimeout dynamically on eviction."
clescot Jul 29, 2026
9a30be4
fix issue "Unbounded CountDownLatch.await() risks an indefinite CI ha…
clescot Jul 29, 2026
d86fafc
update doc
clescot Jul 29, 2026
9846bcc
update doc
clescot Jul 29, 2026
06b34a9
update doc
clescot Jul 30, 2026
bd8bb3f
fix javadoc
clescot Jul 30, 2026
96f85fc
fix issue "Clear outstanding requests when a flow ends without a resp…
clescot Jul 30, 2026
d46f5cc
Bump org.jspecify:jspecify from 1.0.0 to 1.0.1
dependabot[bot] Jul 30, 2026
b9e8c0f
cancel previous build when a new build gets triggered from the same b…
asolntsev Aug 3, 2026
9039687
improve ProxyToServerConnectionTest
asolntsev Aug 6, 2026
670c1e7
improve ClientToProxyConnectionTest
asolntsev Aug 6, 2026
439efaa
release LittleProxy 2.9.0
asolntsev Aug 6, 2026
8b6ae11
[security] ask GPG password every time instead of reading from plain …
asolntsev Aug 6, 2026
e63c3f5
workng on LittleProxy 2.10.0
asolntsev Aug 6, 2026
1419aba
Bump netty.version from 4.2.16.Final to 4.2.17.Final
dependabot[bot] Aug 10, 2026
0e1d685
Bump org.junit.jupiter:junit-jupiter from 6.1.2 to 6.1.3
dependabot[bot] Aug 11, 2026
c576d81
Bump org.seleniumhq.selenium:selenium-java from 4.46.0 to 4.47.0
dependabot[bot] Aug 14, 2026
76ece9d
Document project scope in CONTRIBUTING.md
asolntsev Aug 16, 2026
fd2563e
Bump com.fasterxml.jackson:jackson-bom from 2.22.1 to 2.22.2
dependabot[bot] Aug 20, 2026
fbca9a0
Bump com.google.guava:guava from 33.6.0-jre to 33.7.0-jre
dependabot[bot] Aug 21, 2026
a585fe5
Bump com.diffplug.spotless:spotless-maven-plugin from 3.9.0 to 3.10.0
dependabot[bot] Aug 21, 2026
56145df
Bump com.google.guava:guava from 33.7.0-jre to 33.7.1-jre
dependabot[bot] Aug 24, 2026
29157f4
Bump actions/setup-java from 5 to 6
dependabot[bot] Aug 27, 2026
90223ed
2.9.1: Bump Selenium from 4.47.0 to 4.48.0
asolntsev Aug 27, 2026
2608d99
Allow SslEngineSource to control client certificate authentication mode
Aug 14, 2026
521d822
workng on LittleProxy 2.10.0
asolntsev Aug 28, 2026
578ba39
Bump com.diffplug.spotless:spotless-maven-plugin from 3.10.0 to 3.10.1
dependabot[bot] Aug 31, 2026
6997649
Bump org.apache.maven.plugins:maven-surefire-report-plugin
dependabot[bot] Sep 4, 2026
bcec904
Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.6 to 3.6.0
dependabot[bot] Sep 4, 2026
ac63b97
Bump org.apache.maven.plugins:maven-compiler-plugin
dependabot[bot] Sep 3, 2026
80bae26
Bump org.slf4j:slf4j-api from 2.0.18 to 2.0.19
dependabot[bot] Sep 8, 2026
19616de
Bump com.diffplug.spotless:spotless-maven-plugin from 3.10.1 to 3.10.2
dependabot[bot] Sep 8, 2026
87559ad
remove storpot and commons-pool 2 implementations
clescot Sep 11, 2026
9a28732
Merge pull request #724 from clescot/issue-83-shared-proxy-to-server-…
clescot Sep 11, 2026
68f8643
remove stormpot and commons-pool 2 references in README.md
clescot Sep 11, 2026
3c4e353
Merge branch 'main' into issue-83-shared-proxy-to-server-connection-pool
clescot Sep 11, 2026
cf72532
Merge pull request #799 from clescot/issue-83-shared-proxy-to-server-…
clescot Sep 11, 2026
e7ed218
Bump org.seleniumhq.selenium:selenium-java from 4.48.0 to 4.49.0
dependabot[bot] Sep 14, 2026
7f75ff1
Bump netty.version from 4.2.17.Final to 4.2.18.Final
dependabot[bot] Sep 14, 2026
2e7d861
Bump org.codehaus.mojo:versions-maven-plugin from 2.21.0 to 2.22.0
dependabot[bot] Sep 15, 2026
adcf195
Bump org.codehaus.mojo:taglist-maven-plugin from 3.2.2 to 3.2.3
dependabot[bot] Sep 15, 2026
a6fcb14
Bump org.apache.maven.plugins:maven-install-plugin from 3.1.4 to 3.2.0
dependabot[bot] Sep 16, 2026
aaccf5b
Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.4 to 3.2.0
dependabot[bot] Sep 16, 2026
d969210
Merge remote-tracking branch 'upstream/main' into sync-upstream-main-…
jstoneburner Sep 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: 2
updates:
- package-ecosystem: maven
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10
84 changes: 84 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: Java CI with Maven

on:
push:
branches: [ main ]
paths-ignore:
- '.idea/**'
- '.run/**'
- '**/*.md'
- 'src/site/**'
- '**/.editorconfig'
- '**/.gitattributes'
- '**/.gitignore'
- '/*.txt'
- '/*.bash'
- 'release'
pull_request:
paths-ignore:
- '.idea/**'
- '.run/**'
- '**/*.md'
- 'src/site/**'
- '**/.editorconfig'
- '**/.gitattributes'
- '**/.gitignore'
- '/*.txt'
- '/*.bash'
- 'release'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
strategy:
matrix:
platform: [ubuntu-latest, macos-latest, windows-latest]
fail-fast: false

runs-on: ${{ matrix.platform }}
timeout-minutes: 7

steps:
- uses: actions/checkout@v7
- name: Set up JDK 17
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Check Java
run: java -version
- name: Check Maven
run: mvn --batch-mode --version
- name: Compile code
run: mvn --batch-mode compile
- name: Branch name [env]
run: echo running on branch ${GITHUB_REF##*/}
- name: Run smoke tests
run: mvn --batch-mode package -Psmoke-test
- name: Run slow tests
if: success()
run: mvn --batch-mode package -Pslow-tests

- name: Generate Maven test report
if: failure()
run: mvn --batch-mode surefire-report:report-only
- name: Upload test report
uses: actions/upload-artifact@v7
if: failure()
with:
name: test-report-${{matrix.platform}}
retention-days: 5
path: |
target/surefire-reports
target/site
target/*.hprof
target/*.txt
target/*.jks
target/*_cert*
8 changes: 5 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
log.txt
*.swp
*.settings
*.classpath
Expand All @@ -9,10 +8,13 @@ log.txt
*.DS_Store
*.orig
target/
.idea/
dependency-reduced-pom.xml
jmeter.log
lib/
LittleProxy.pro
/bin
/*.jks
performance/site/
.claude/settings.local.json
/logs
/.opencode
/.sisyphus
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 35 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions .run/tests.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="tests" type="JUnit" factoryName="JUnit">
<module name="littleproxy.test" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="org.littleshoot.proxy.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="org.littleshoot.proxy" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<option name="VM_PARAMETERS" value="-ea -Xmx128m" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
10 changes: 0 additions & 10 deletions .travis.yml

This file was deleted.

64 changes: 64 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project

LittleProxy is a high-performance HTTP/HTTPS proxy library written on top of Netty.
It is consumed as an embedded library (`io.github.littleproxy:littleproxy`) and can also run as a standalone
executable via the shaded jar (`Launcher` main class).

The active fork is maintained at https://github.com/LittleProxy/LittleProxy.

## Build & Test Commands

- Build & run all tests: `mvn test`
- Package (produces the shaded runnable jar): `mvn clean package`
- Skip tests while packaging: `mvn clean package -DskipTests`
- Smoke tests only (fast subset, excludes `slow-test` tag): `mvn package -Psmoke-test`
- Slow tests only (tagged `@Tag("slow-test")`): `mvn package -Pslow-tests`
- Single test class: `mvn test -Dtest=MitmProxyTest`
- Single test method: `mvn test -Dtest=MitmProxyTest#testProxyConnects`
- Run the shaded jar locally: `./run.bash --server --config ./config/littleproxy.properties` (wraps `mvn package -Dmaven.test.skip=true` + `java -jar`)

CI (`.github/workflows/main.yml`) runs `-Psmoke-test` then `-Pslow-tests` on Ubuntu/macOS/Windows with JDK 17.

## Toolchain Constraints

- **Main source targets Java 11** (`<release>11</release>`); **tests compile with Java 17** (`compile-tests-with-java17` execution). New main-source code must not use language features newer than Java 11.
- Source is auto-formatted by **Spotless (google-java-format 1.28.0)** in the `compile` phase — it rewrites files on every build. Don't hand-align imports; just run the build.
- **ErrorProne** runs during compilation with `-Xep:MissingSummary:OFF -Xep:JdkObsolete:OFF -Xep:ReferenceEquality:OFF -Xep:OperatorPrecedence:OFF`. Other checks are active.
- `maven-enforcer-plugin` bans `junit:junit` and `org.hamcrest:hamcrest-core` — use JUnit Jupiter + AssertJ.

## High-Level Architecture

The proxy is built around two mirror Netty channel handlers and a small state machine.

- **`DefaultHttpProxyServer`** (`impl/`) — bootstrap/entry point; owns the `ServerGroup` (shared Netty event loops), `HttpFiltersSource`, optional `MitmManager`, `ChainedProxyManager`, and `ProxyAuthenticator`. `HttpProxyServerBootstrap` is the fluent builder users interact with.
- **`ClientToProxyConnection`** (`impl/`) — one per inbound client channel. Decodes HTTP requests, runs the filter chain, resolves/reuses a per-(host,port) `ProxyToServerConnection`, and writes responses back to the client. Also handles `CONNECT` (tunnel vs. MITM branch) and proxy auth.
- **`ProxyToServerConnection`** (`impl/`) — one per upstream target. Drives `ConnectionFlow` during setup, then proxies request/response chunks. Caches chained-proxy fallback state.
- **`ConnectionFlow` / `ConnectionFlowStep`** (`impl/`) — ordered async step machine used to set up outbound connections: `ConnectChannel` → optional chained-proxy handshake (HTTP CONNECT / SOCKS4 / SOCKS5) → optional `StartTunneling` or `EncryptChannel` (MITM) → `RespondCONNECTSuccessful` → `MitmEncryptClientChannel`. Each step returns a Netty `Future` and advances via callbacks.
- **`ProxyConnection`** (`impl/`) — abstract base for both connections; owns the `ConnectionState` transitions (`AWAITING_INITIAL`, `AWAITING_CHUNK`, `CONNECTING`, `HANDSHAKING`, `NEGOTIATING_CONNECT`, `AWAITING_PROXY_AUTHENTICATION`, `DISCONNECT_REQUESTED`, `DISCONNECTED`). Saturation callbacks implement backpressure (pause client reads when any upstream is saturated, and vice versa).
- **`HttpFilters` / `HttpFiltersSource`** (top-level package) — primary extension point. A new `HttpFilters` instance is created per request via `filterRequest(...)`. Callback order (request → server connect → response) is documented in `LittleProxy_Request_Handling_Architecture.md`; returning a non-null `HttpResponse` from `clientToProxyRequest`/`proxyToServerRequest` short-circuits the request.
- **`MitmManager` + `SslEngineSource`** — supply `SSLEngine`s for HTTPS interception. The in-tree `extras/SelfSignedMitmManager` is demo-grade; production setups typically plug in `LittleProxy-mitm` or the BrowserMob `mitm` module (see README).
- **`ChainedProxyManager` / `ChainedProxy`** — per-request upstream proxy selection. Returning `ChainedProxyAdapter.FALLBACK_TO_DIRECT_CONNECTION` or an empty queue fails over to a direct connection; otherwise connection failures walk the queue.
- **Netty pipelines** — client-side: `HAProxyMessageDecoder?` → `HttpRequestDecoder` → optional `HttpObjectAggregator` → monitors → `IdleStateHandler` → `ClientToProxyConnection`. Server-side mirrors this with `HttpRequestEncoder` / `HeadAwareHttpResponseDecoder` plus optional `GlobalTrafficShapingHandler` for throttling. When a `CONNECT` tunnel is established (without MITM), HTTP codecs are removed and data flows as raw bytes via `readRaw`/`write`.
- **`extras/`** contains production-adjacent but optional implementations (`ActivityLogger`, `LogFormat`, `SelfSignedMitmManager`, `HAProxyMessageEncoder`, `TrustingTrustManager`). Core must not depend on `extras`.

For diagrams and the full lifecycle of CONNECT/MITM/filter callbacks, see `LittleProxy_Request_Handling_Architecture.md`.

## Testing Notes

- Always use SLF4J (`org.slf4j.Logger`/`LoggerFactory`) for logging, not log4j directly — this is the logging API used throughout the codebase.
- Tests are JUnit Jupiter + AssertJ + Mockito; Jetty and WireMock are used as real backends (do not mock them away).
- Long-running or timing-sensitive tests are marked `@Tag("slow-test")` and excluded from the default/smoke profile.
- Integration tests start real proxy instances on ephemeral ports; prefer extending `AbstractProxyTest` / `BaseProxyTest` / `BaseChainedProxyTest` rather than duplicating setup.
- Test resources include keystores and `log4j.xml` under `src/test/resources/`.
- Prefer `final` fields for test fixtures (e.g. `private final Foo foo = mock();`) over non-final fields assigned in `@BeforeEach`.
- Prefer initializing fields inline at declaration over assigning them in `@BeforeEach`, when possible (e.g. only fall back to `@BeforeEach` when a value depends on another mock's stubbing or on a checked exception).
- Never use `any()`/`any(Class)` in a `verify(...)` clause — pass the actual expected argument instead, e.g. `verify(throwingTracker).serverDisconnected(fullFlowContext, hostAddress);` not `verify(throwingTracker).serverDisconnected(any(), any());`. `any()` in `verify` only checks that some call happened, not that it happened with the right arguments.
- Avoid reflection to reach a private field/method from a test. Best: test through the class's public API. If that's not practical, widen the member to package-private (test class lives in the same package) rather than reaching in via reflection — less magic, and the IDE/compiler catch renames.

## Release

Release steps (version bumps in `pom.xml` + `README.md`, `deploy.bash`, tag, publish on Sonatype Central) are documented in `CONTRIBUTING.md`. Do not bump versions unless a release is being cut.
2 changes: 2 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# CLAUDE.md
@AGENTS.md
43 changes: 43 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@

Contribution guide for LittleProxy

## Project scope

LittleProxy is intended to be a LITTLE library, not a kitchen-sink proxy with every conceivable feature.
Before starting work on a new feature, please discuss it first in
[GitHub Discussions](https://github.com/LittleProxy/LittleProxy/discussions) or as a
[GitHub Issue](https://github.com/LittleProxy/LittleProxy/issues), so we can agree whether it fits the
project's scope before you invest time implementing it.

If you need a richer feature set, consider [BrowserUp Proxy](https://github.com/valfirst/browserup-proxy),
which is built on top of LittleProxy and provides more functionality.

## How to start

git clone git@github.com:LittleProxy/LittleProxy.git
cd LittleProxy
mvn test

## Release

* Update the release notes (file RELEASE_NOTES.md)
* Change version in the pom.xml file (e.g. "2.4.5-SNAPSHOT" -> "2.4.5")
* Change version in README.md (e.g. "2.4.4" -> "2.4.5")
* Run `mvn clean install`
* Run `deploy.bash` (takes a while, showing "Waiting until Deployment **** is published")
* Log into https://central.sonatype.com/publishing/deployments and ensure that the deployment status is "Published".
* Commit the changes (e.g. with message "release LittleProxy 2.4.5") and make sure the CI build passes
* Run `git tag v2.4.5 && git push --tags`
* Create a new release in GitHub (go to `https://github.com/LittleProxy/LittleProxy/releases/new`)
* Update the version in the pom.xml file to the next SNAPSHOT version (e.g. "2.4.5" -> "2.4.6-SNAPSHOT").
* Commit the pom.xml change (e.g. with commit message "working on LittleProxy 2.4.6")
* Announce the release in https://groups.google.com/forum/#!forum/littleproxy2

## How-to

### Check the built JAR target version
> mvn clean package -DskipTests
> javap -verbose -classpath target/littleproxy-*SNAPSHOT.jar org.littleshoot.proxy.ProxyAuthenticator | grep "major"

* major version: 55 -> Java 11
* major version: 61 -> Java 17
Loading
Loading