feat: i2p support addition (#35)#499
Merged
cameri merged 11 commits intocameri:mainfrom Apr 18, 2026
Merged
Conversation
Collaborator
2057f5d to
5f2dc4c
Compare
Contributor
Author
|
hey @cameri , i removed the local ci checks for the docker compose i2p and tor testing. you can check once. |
There was a problem hiding this comment.
Pull request overview
Adds an I2P access path for Nostream via a Docker Compose sidecar (i2pd), mirroring the existing Tor sidecar approach, plus operator scripts and docs to run/inspect the setup.
Changes:
- Added an
i2pdcompose overlay and minimal I2P router/tunnel configuration files. - Added helper scripts + npm scripts to start with I2P and guide hostname discovery; updated stop script to include the I2P overlay.
- Updated docs and base compose networking (static IP) to support the tunnel target.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
test/unit/utils/nip05.spec.ts |
Enables sinon-chai assertions in the NIP-05 unit tests. |
scripts/stop |
Includes the I2P compose overlay during teardown. |
scripts/start_with_i2p |
New start helper for running the stack with the I2P overlay. |
scripts/print_i2p_hostname |
New helper output for locating the I2P destination/hostname. |
package.json |
Adds npm script aliases for I2P start/stop/hostname (mirrors Tor). |
i2p/tunnels.conf |
Defines an i2pd tunnel that forwards to the relay WebSocket port. |
i2p/i2pd.conf |
Minimal i2pd runtime configuration for the sidecar. |
docker-compose.yml |
Assigns a static IP to nostream to match the I2P tunnel target. |
docker-compose.i2p.yml |
New compose overlay adding the i2pd sidecar with static IP + persisted data/config mounts. |
README.md |
Adds quick-start instructions for I2P; removes a stray separator line. |
CONFIGURATION.md |
Documents I2P sidecar-based operation and where configs/keys live. |
.env.example |
Adds operator notes for enabling I2P via the helper script. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Owner
|
@archief2910 please address copilot comments |
Contributor
Author
|
hey @cameri , i resolved the comments . you can check once |
cameri
approved these changes
Apr 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This pull request adds I2P access to Nostream using the same pattern as Tor: an i2pd sidecar that exposes the relay’s WebSocket port over the I2P network. No application-level I2P code is required; routing is handled entirely in Docker.
Changes include:
docker-compose.i2p.yml—purplei2p/i2pdservice with persisted data volume and a fixed IPv4 on the compose network for predictable peering with the relay container.i2p/i2pd.confandi2p/tunnels.conf— minimal router limits and an HTTP server tunnel targeting the Nostream service (aligned with the static address assigned tonostreamin the base compose file).scripts/start_with_i2pandscripts/print_i2p_hostname, plus updates toscripts/stopso teardown includes the I2P overlay when used..env.example,CONFIGURATION.md, andREADME.mdupdated with operator-facing instructions.i2p:docker:compose:start,i2p:hostname,i2p:docker:compose:stop(mirroring the Tor scripts).scripts/verify-compose-overlays.mjs(and shell wrapper) to ensuredocker-compose.ymlmerges cleanly with Tor and I2P overlays; workflow job runs this in CI.Related Issue
Closes #35
Motivation and Context
Nostream already supports Tor via a sidecar. Operators who prefer or require I2P for censorship-resistant access should be able to run the relay behind i2pd without forking or patching application code. This change documents and automates that deployment path and keeps compose overlays merge-safe as the stack evolves.
How Has This Been Tested?
npm run build:check— TypeScript compiles.npm run lint— Biome lint passes (warnings only in unrelated upstream files if any).npm run test:unit— full unit suite passes.npm run compose:validate— verifiesdocker compose configfor:nostreamappeared in the i2pd web UI with a.b32.i2pdestination forwarding to the relay port, confirming the sidecar and tunnel config are active (not dead configuration).Environment: Windows / Docker Desktop and Linux-compatible compose; scripts follow the same conventions as the existing Tor helpers.
Screenshots (if appropriate)
N/A
Types of changes
Checklist