- 📏 Corrected documented image size to 17.1 MB - 🖼️ Updated all image references to r3bo0tbx1/onion-relay - 🗂️ Standardized image naming across templates - 🔐 Added security and privacy notes to the Code of Conduct - 📚 Synced configuration notes for the v1.1.1 release
17 KiB
📜 Changelog
All notable changes to this project will be documented in this file. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
🎯 Planned Features
- 📊 Additional monitoring integrations (Datadog, New Relic)
- 🔄 Automatic relay configuration updates
- 🧪 Enhanced integration testing suite
1.1.1 - 2025-11-14
🚀 Major Release: Ultra-Optimized Build + Security Hardening + Configuration Enhancement
This is a major architectural release migrating from a dual-build structure (45MB) to a single ultra-optimized 17.1 MB build with busybox-only dependencies, comprehensive security hardening, simplified multi-mode operation, and enhanced configuration documentation.
✨ Core Features
- 🧅 Multi-mode relay support - Single container for guard/exit/bridge via
TOR_RELAY_MODEenvironment variable - 🌉 Bridge relay with obfs4 - Integrated lyrebird for pluggable transport (drop-in replacement for
thetorproject/obfs4-bridge) - 🔧 ENV-based configuration - Full relay setup via environment variables (TOR_*, official bridge naming compatible)
- 📊 Smart diagnostics - 4 busybox-only tools:
status,health,fingerprint,bridge-line - 📉 Image size - Reduced from ~45MB to ~17.1 MB (busybox-only, no bash/python/jq)
- 🩺 Smart healthcheck - New
healthcheck.shworks with both mounted configs and ENV variables - 🔄 Weekly rebuilds - Automated Sunday 18:30 UTC rebuilds with latest Alpine/Tor patches (same version tag, fresh packages)
📖 Configuration & Documentation Enhancements (Latest)
-
🔧 OBFS4V_ Variable Parsing (CRITICAL FIX)*
- Fixed busybox regex incompatibility causing rejection of values with spaces
- Issue:
OBFS4V_MaxMemInQueues="1024 MB"was rejected with "dangerous characters" error - Solution: Rewrote validation (docker-entrypoint.sh:309-321) with busybox-compatible commands (
wc -l,tr -d) - Impact: Bridge operators can now use advanced memory/CPU settings without errors
-
🌉 PT_PORT Support & Official Bridge Naming
- Added
PT_PORTenvironment variable for drop-in compatibility withthetorproject/obfs4-bridge - PT_PORT automatically detects and enables bridge mode (no
TOR_RELAY_MODEneeded) - Full compatibility with official bridge ENV naming:
OR_PORT,PT_PORT,EMAIL,NICKNAME - Bridge templates now reference both TOR_* and official naming conventions
- Added
-
📊 Bandwidth Configuration Clarification
- Documented
TOR_BANDWIDTH_RATE/BURST→RelayBandwidthRate/Bursttranslation - Added Option 1 vs Option 2 explanations in all example configs:
RelayBandwidthRate/Burst(relay-specific traffic only, recommended)BandwidthRate/Burst(all Tor traffic including directory requests)
- Updated all templates with inline bandwidth option comments
- Documented
-
📚 Template & Example Updates
- examples/relay-bridge.conf: Added Method 2 with PT_PORT (official naming)
- examples/relay-exit.conf: Added BandwidthRate/Burst as Option 2 with explanations
- examples/relay-guard.conf: Added BandwidthRate/Burst as Option 2 for consistency
- cosmos-compose-bridge.json: Added note about OR_PORT/PT_PORT alternative
- cosmos-compose-guard.json: Documented bandwidth options (RelayBandwidth vs Bandwidth)
- cosmos-compose-exit.json: Documented bandwidth options with recommendations
- docker-compose-bridge.yml: Added official naming alternative info
- docker-compose-guard-env.yml: Added bandwidth comment explaining options
- docker-compose-exit.yml: Added bandwidth comment explaining options
-
📝 Documentation Updates
- CLAUDE.md: Enhanced "Key Differences" section with bandwidth options
- templates/README.md: Cross-references to bandwidth configuration methods
- All templates now include comprehensive mounted config vs ENV comparison
🔒 Security Fixes
- 🔐 Fixed 32 vulnerabilities across 4 severity levels:
- 6 CRITICAL: Command injection (OBFS4V_*), health check failures, privilege escalation, validation gaps, workflow permissions, temp file races
- 8 HIGH: JSON injection, bash-specific features, permission handling
- 10 MEDIUM: Various validation and error handling improvements
- 8 LOW: Code quality and best practices
- 🛡️ Minimal attack surface - No exposed monitoring ports, all diagnostics via
docker execonly - 🔑 Input validation - Comprehensive ENV variable validation with whitespace trimming and OBFS4V_* whitelist
- 📋 Security audit - Complete vulnerability analysis documented in
SECURITY-AUDIT-REPORT.md
📚 Templates & Documentation
- Templates (13 files updated):
- All Docker Compose templates now use smart
healthcheck.shscript - Cosmos templates use
:latesttag instead of hardcoded versions - Fixed image names (tor-guard-relay → onion-relay) and broken migration doc references
- Added official bridge templates with
thetorproject/obfs4-bridgeENV compatibility
- All Docker Compose templates now use smart
- Documentation consolidation:
- Removed outdated monitoring infrastructure references (metrics ports, HTTP endpoints, old ENV vars)
- Clarified
jqusage (must be on HOST machine, not in container) - Documented weekly build strategy (overwrites version tags with fresh packages)
- Consolidated 7 migration docs into 2 canonical guides
- Complete rewrite of TOOLS.md and MONITORING.md for v1.1.1 architecture
⚙️ Configuration & Compatibility
- 🔄 Tor bootstrap logs - Real-time progress (0-100%) now visible in
docker logsfor all relay types - 🎨 Enhanced emoji logging - Clear visual feedback throughout (🔖, 💚, 🛑, 🗂️, 🔐, 🔧, 🔎, 📊, 🧩)
- 🔄 Official bridge ENV compatibility - 100% compatible with
OR_PORT,PT_PORT,EMAIL,NICKNAME,OBFS4V_*variables - 🧹 Simplified bridge config - Removed redundant
ExitPolicy reject *:*(BridgeRelay 1 is sufficient) - 📦 Build metadata -
/build-info.txtwith version, build date, and architecture
🔧 Dependency Management
- Renovate - Removed pinned package version tracking (only tracks Alpine base image), added OSV vulnerability scanning
- Dependabot - Added security labels, major version blocks, clarified unpinned package strategy
- Hadolint - Added trusted registries whitelist, comprehensive security check documentation
🗑️ Removed (Simplification)
- ❌ Monitoring ENV vars - ENABLE_METRICS, ENABLE_HEALTH_CHECK, ENABLE_NET_CHECK, METRICS_PORT (use external monitoring)
- ❌ Deprecated tools - metrics, dashboard, net-check, view-logs, setup, metrics-http (consolidated to 4 core tools)
- ❌ Built-in monitoring stack - Prometheus/Grafana/Alertmanager (use external solutions)
- ❌ Dual-build structure - Single optimized build only
🐛 Bug Fixes
- CRITICAL: Fixed TOR_CONTACT_INFO validation crash loops (whitespace handling, line count check)
- CRITICAL: Fixed missing Tor bootstrap logs in container output (added
Log notice stdout) - Fixed healthcheck failures on ENV-based deployments
- Fixed version references across all scripts and documentation
- Corrected image size documentation (~35MB → ~17.1 MB)
🔄 Migration Path
Breaking Changes:
- ENV vars
ENABLE_METRICS,ENABLE_HEALTH_CHECK,ENABLE_NET_CHECK,METRICS_PORTno longer supported - Tools
metrics,dashboard,net-check,view-logs,setup,metrics-httpremoved
Upgrade Steps:
- Remove old monitoring ENV vars from your deployment configs
- Update to use
TOR_RELAY_MODEenvironment variable (guard/exit/bridge) - Use external monitoring with
docker exec <container> healthfor JSON health data - Guard/Middle relays: Seamless upgrade with mounted configs
- Bridges from official image: Requires UID ownership fix (
chown -R 100:101)
See: docs/MIGRATION-V1.1.X.md for complete step-by-step migration instructions.
1.1.0 - 2025-11-08
✨ Added
- 🧩 Input sanitization helpers to ensure safe numeric evaluation in all status checks
- 🧱 Integrated integer guard function (
is_integer) to prevent bad-number shell errors - 🕒 Unified UTC timestamp formatting for consistent output across commands
🧰 Improvements
- 📜
view-logs: Compact single-line statistics (📊 Stats: total | errors | warnings) for cleaner display - 📊 The dashboard script now requires API token authentication for secure access and features a new notification UI for better visibility.
- 🔑 The fingerprint script has been overhauled for cleaner output, better input validation, and a more helpful guide.
- 🧰 General shell cleanup and quoting improvements for portability across BusyBox, Alpine, and Debian-based images
🐛 Fixed
- 🧹 Removed recurring
sh: 0: bad numberwarnings instatusoutput - 🧩 Fixed multi-line log stats formatting issue in
view-logs - 🔧 Corrected potential false negatives in
BOOTSTRAP_PERCENTextraction - 🧠 Resolved misinterpretation of empty variables during numeric comparisons
- 🥬 Configuration, health checks, and monitoring have been refined for better reliability and integration.
🔒 Security
- 🧩 Verified
set -esafety to prevent unintended script exits on minor grep/curl failures - 🐳 Docker Compose now includes enhanced security configurations and persistent volume support to prevent data loss.
- 📋 Cosmos templates have been updated with more secure and sensible default environment variables.
1.0.9 - 2025-11-07
🧠 Maintenance and polish release improving shell reliability, output consistency, and readability across status and log utilities. 🎨 Streamlined log viewer formatting, sanitized numeric parsing, and removed noisy shell error messages for cleaner execution.
✨ Added
- 🧩 Input sanitization helpers to ensure safe numeric evaluation in all status checks
- 🧱 Integrated integer guard function (
is_integer) to prevent bad-number shell errors - 🕒 Unified UTC timestamp formatting for consistent output across commands
🧰 Improvements
- 📜
view-logs: Compact single-line statistics (📊 Stats: total | errors | warnings) for cleaner display - 🧅
status: Sanitized bootstrap parsing and error-free numeric comparison - ⚙️ Hardened
set -ehandling with fallback defaults for missing values - 🧩 Refined whitespace and CRLF handling in log parsing for improved compatibility
- 🧰 General shell cleanup and quoting improvements for portability across BusyBox, Alpine, and Debian-based images
🐛 Fixed
- 🧹 Removed recurring
sh: 0: bad numberwarnings instatusoutput - 🧩 Fixed multi-line log stats formatting issue in
view-logs - 🔧 Corrected potential false negatives in
BOOTSTRAP_PERCENTextraction - 🧠 Resolved misinterpretation of empty variables during numeric comparisons
🔒 Security
- 🧩 Verified
set -esafety to prevent unintended script exits on minor grep/curl failures - 🛡️ Strengthened input filtering to prevent malformed log content injection into shell context
🧠 Developer Notes
- ✅ Both
statusandview-logsscripts tested under Alpine BusyBox and Debian Dash shells - 🧩 Scripts now fully pass shellcheck (
shfmt+ POSIX mode) validation - 💡 Compatible with Docker health checks and CI/CD validation hooks
🧱 Summary:
Tor Guard Relay v1.0.9 delivers a clean, error-free shell experience, better numeric safety, and a polished command-line output for monitoring and log viewing.
1.0.8 - 2025-11-07
🧠 Polish and refinement release focused on versioning automation, tag safety, and improved metadata accuracy. ⚙️ Streamlined validation logic, consistent changelog generation, and safer build workflows.
✨ Added
- 🧩 Auto-generated
Unreleasedcompare link in workflows for dynamic changelog updates - ⚙️ Added commit and tag automation helpers for PowerShell (version bump, tagging, release)
- 📦 Improved changelog consistency between main branch and GitHub Releases
- 🕒 Timezone logic refined for full
Asia/Tokyosynchronization across workflows
🧰 Improvements
- 🧱 Improved workflow dependency order to prevent tag-push race conditions
- 🔄 Cleaned up redundant trigger filters and unified workflow paths
- 🧩 Optimized
dependabot.ymlandrenovate.jsonto coordinate update frequency - ⚡ Enhanced readability and validation of Docker builds via better cache strategy
- 📜 Simplified changelog entry structure for maintainability
🐛 Fixed
- 🧩 Fixed missing newline warning in
.github/dependabot.yml - 🔧 Resolved edge cases where both validation and release workflows triggered simultaneously
- 🧹 Cleaned outdated references to removed workflows in comments and docs
- 🧱 Corrected version links and metadata for previous releases
🔒 Security
- 🛡️ Verified hardened build permissions for
trivy-actionuploads - 🧩 Ensured consistent use of
security-events: writefor all scan jobs - 🔐 Confirmed package pin integrity in Renovate configuration
🧠 Developer Notes
- ✅ Push main first, tag only after successful validation
- 🧩 Tag creation now automatically updates release notes
- 🪄 PowerShell automation script simplifies version bumping and tagging
- 🕒 All recurring jobs (Dependabot, Renovate, Weekly Build) aligned to
Asia/Tokyo
🧱 Summary:
Tor Guard Relay v1.0.8 improves workflow safety, version traceability, and automation clarity while tightening CI/CD control and metadata consistency.
1.0.7 - 2025-11-07
🧠 Stability and automation refinement release focused on smarter dependency management and workflow consistency. ⚙️ Enhanced multi-architecture build validation and coordinated dependency automation.
(See prior section for full 1.0.7 details.)
1.0.6 - 2025-11-06
🧠 Stability improvements, enhanced IPv6 diagnostics, and dashboard optimizations. 🐳 Migrated base image back to Alpine 3.22.2 for improved compatibility and reproducible builds.
1.0.5 - 2025-11-06
🐳 Downgrade base image from Alpine 3.22.2 to 3.21.5
1.0.4 - 2025-11-06
(Unchanged from prior release, retained for version history)
1.0.3 - 2025-11-06
(Unchanged from prior release, retained for version history)
1.0.2 - 2025-11-05
(Unchanged from prior release, retained for version history)
1.0.1 - 2025-11-05
(Unchanged from prior release, retained for version history)
[1.0.0] - 2025-11-01
(Unchanged from prior release, retained for version history)
📊 Release Information
-
🎉 First Release: v1.0.0 (November 1, 2025)
-
📦 Current Stable: v1.1.1 (November 13, 2025)
-
🔗 Latest Release: GitHub Releases
-
🐳 Docker Images:
🔖 Version Support
| Version | Status | Support Level |
|---|---|---|
| 1.1.1 | 🟢 🛡️ Active | Full support (current stable) |
| 1.1.0 | 🟡 🔧 Maintenance | Security + critical fixes only |
| 1.0.9 | 🟠 ⚠️ Legacy | Security patches only – upgrade recommended |
| 1.0.8 | 🔴 ❌ EOL | No support – upgrade immediately |
🔗 Release Links
🙏 Contributors
Thank you to all contributors who have helped make this project better! See CONTRIBUTORS.md for a complete list.
📝 Changelog Guidelines
This changelog follows these principles:
- ✅ Semantic Versioning (MAJOR.MINOR.PATCH)
- 📅 Chronological Order (newest first)
- 🎯 User-Focused: what changed, not how
- 🔗 Linked Releases: direct GitHub release links
- 🏷️ Categorized Changes: Added, Fixed, Security, etc.
- 📝 Keep a Changelog format compliance
📖 For upgrade instructions, see MIGRATION.md 🔒 For security-related changes, see SECURITY.md