-
v0.3.3 Stable
released this
2026-02-11 21:18:41 +00:00 | 0 commits to main since this releaseAdded
- Enforce
enabled: falsein.pagesFile: Sites can now be fully disabled by settingenabled: false- When
enabled: falseis set, the site returns 404 "Site is not available" for all requests - Enabled check runs before password check and content cache for immediate blocking
- Enabled status cached with 60-second TTL to avoid API calls on every request
- All cached data is automatically cleaned up when a site is disabled (custom domain mappings, Traefik routers, redirect middleware, content cache, password/enabled/settings cache)
- Cleanup occurs on three paths: pages domain requests, custom domain requests, and
registerCustomDomain - New functions:
deregisterSite(),deregisterTraefikRouter(),cleanupRedirectMiddleware()
- When
DeleteByPrefixCache Method: Pattern-based cache deletion for bulk key removal- Added
DeleteByPrefix(prefix string)to theCacheinterface MemoryCache: iterates map and deletes keys with matching prefixRedisCache: uses cursor-basedSCANwithMATCHpattern (non-blocking), thenDEL
- Added
Fixed
- Disabled Site Content Cache Bypass: Enabled check now runs before content cache lookup, eliminating the window where stale content could be served after setting
enabled: false - Disabled Site Password Cache Leak: Enabled check now runs before password check, preventing password cache from being re-populated for disabled sites
- Reaper Script Key Casing: Fixed incorrect Redis key casing (
entrypoints→entryPoints,certresolver→certResolver) - Reaper Script
enabled: falseSupport: Reaper now checks if sites are disabled and cleans them up accordingly
Tests
- Added 12 new tests covering deregistration, disabled sites, cache prefix deletion, and Redis integration
Documentation
- Added "Disabling a Site" sections to README.md, wiki, and troubleshooting docs
- Updated reaper documentation with corrected key casing and
enabled: falsesupport
Downloads
-
Source code (ZIP)
10 downloads
-
Source code (TAR.GZ)
10 downloads
- Enforce
-
v0.3.2 Stable
released this
2026-01-30 22:46:20 +00:00 | 5 commits to main since this releaseRelease v0.3.2 - Branch Subdomains, Passwords, Landing Page, Auto Router Registration
Added
-
Automatic PagesDomain Router Registration: Register the base pagesDomain as a Traefik router on startup
- Automatically creates Traefik router configuration in Redis during plugin initialization
- Enables SSL certificate generation for the base pages domain (e.g.,
pages.example.com) - No manual Traefik router configuration needed for the base pages domain
-
Landing Page for Base Domain: Serve a landing page when accessing the base pagesDomain URL
- Add
public/index.htmlto error pages repository to create a landing page - Serves at base domain URL (e.g.,
https://pages.example.com/)
- Add
-
Branch Subdomain Password Protection: Per-repository password protection for branch subdomains
- Add
branchesPasswordfield to.pagesfile with SHA256 hash - Protects all branch subdomains (e.g.,
stage.example.com,qa.example.com) - Main branch sites are NOT affected by
branchesPassword
- Add
-
Branch Subdomains: Serve content from specific Git branches as subdomains
- Add
enable_branchesarray to.pagesfile - Example:
stage.example.comserves fromstagebranch
- Add
Documentation
- Full wiki documentation (7 pages)
- Updated README.md with comprehensive feature documentation
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
-
released this
2026-01-29 11:13:22 +00:00 | 12 commits to main since this releaseAdded
- Configurable Redis Connection Pooling: New configuration options to prevent Redis connection exhaustion under high load
redisPoolSize(default: 10) - Size of the idle connection pool per cache instanceredisMaxConnections(default: 20) - Maximum total connections allowed per cache instanceredisConnWaitTimeout(default: 5) - Seconds to wait for a connection when pool is exhausted- Implements semaphore-based connection limiting with blocking
- Graceful fallback to in-memory cache when connection wait times out
- Prevents unbounded connection creation that could exhaust Redis server resources
- Note: With 3 cache instances (content, custom domain, password), total max connections = 3 × redisMaxConnections
Fixed
- Redis Connection Exhaustion: Fixed issue where unlimited connections could be created under high load
- Previously, when the connection pool was empty, new connections were created without limit
- Now respects
redisMaxConnectionslimit and waits for available connections - Connections are properly reused from the pool instead of creating new ones unnecessarily
Installation
Update your Traefik static configuration:
experimental: plugins: pages-server: moduleName: github.com/sqcows/pages-server version: v0.1.5Configuration Example
http: middlewares: pages-server: plugin: pages-server: redisHost: localhost redisPort: 6379 redisPoolSize: 10 # Idle connections per cache redisMaxConnections: 20 # Max connections per cache redisConnWaitTimeout: 5 # Seconds to wait before fallbackFull Changelog
https://github.com/sqcows/pages-server/compare/v0.1.4...v0.1.5
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
- Configurable Redis Connection Pooling: New configuration options to prevent Redis connection exhaustion under high load
-
released this
2025-12-15 17:50:46 +00:00 | 15 commits to main since this releaseAdded
- Plugin Icon for Traefik Plugin Catalog: Added visual branding to improve plugin identification
- Added
.assets/icon.pngwith SquareCows logo for plugin catalog display - Added
iconPathconfiguration to.traefik.ymlpointing to plugin icon - Enhances plugin visibility and recognition in Traefik Plugin Catalog
- Uses official SquareCows branding (black text cutout logo)
- Added
Installation
Add the plugin to your Traefik static configuration:
experimental: plugins: pages-server: moduleName: github.com/sqcows/pages-server version: v0.1.4For complete installation and configuration instructions, see the README.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
- Plugin Icon for Traefik Plugin Catalog: Added visual branding to improve plugin identification
-
released this
2025-12-15 17:43:27 +00:00 | 16 commits to main since this releaseChanges
This release removes the unused external dependency (
github.com/go-acme/lego/v4) fromgo.mod, ensuring full compliance with Traefik plugin requirements.Changed
- Removed External Dependencies: Removed unused external dependency from
go.mod- Ensures full compliance with Traefik plugin requirements (standard library only)
- Plugin now exclusively uses Go standard library packages
- No functional changes to plugin behavior
- Reduces potential security surface and dependency management overhead
- Improves plugin compatibility with Traefik's Yaegi interpreter
Installation
Update your Traefik static configuration:
experimental: plugins: pages-server: moduleName: github.com/sqcows/pages-server version: v0.1.3Upgrade Notes
This is a maintenance release with no breaking changes. Simply update the version number in your Traefik configuration to upgrade.
Full Changelog
https://github.com/sqcows/pages-server/compare/v0.1.2...v0.1.3
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
- Removed External Dependencies: Removed unused external dependency from
-
released this
2025-12-15 17:29:52 +00:00 | 18 commits to main since this releaseRepository Migration to GitHub
This release migrates the repository from
code.squarecows.com/SquareCows/pages-servertogithub.com/sqcows/pages-serverto comply with Traefik Plugin Catalog requirements.Changed
- Repository Migration to GitHub: Migrated repository from
code.squarecows.com/SquareCows/pages-servertogithub.com/sqcows/pages-server- Updated module path in
go.modto reflect new GitHub location - Updated all repository references in documentation to point to GitHub
- Migration required for Traefik Plugin Catalog compatibility
- Traefik requires plugins to be hosted on GitHub for proper plugin discovery and installation
- No functional changes to the plugin code
- All existing features and functionality remain unchanged
- Updated module path in
Installation
Update your Traefik configuration to use the new GitHub module path:
experimental: plugins: pages-server: moduleName: github.com/sqcows/pages-server version: v0.1.2Full Changelog: https://github.com/sqcows/pages-server/compare/v0.1.1...v0.1.2
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
- Repository Migration to GitHub: Migrated repository from
-
released this
2025-12-04 19:37:37 +00:00 | 20 commits to main since this releaseWhat's New in v0.1.1
This release adds two major security and functionality features to Bovine Pages Server.
DNS TXT Record Verification for Custom Domains
A new optional security feature to prevent domain hijacking:
- Ownership Verification: Requires DNS TXT record to prove domain ownership before registering custom domains
- Security: SHA256 hash with constant-time comparison prevents timing attacks
- Format:
bovine-pages-verification=<SHA256_HASH>where hash = SHA256(owner/repository) - Configuration: Enable with
enableCustomDomainDNSVerification: true(disabled by default) - Backward Compatible: Existing domains continue working when disabled
- Helper Script:
examples/generate-dns-verification-hash.shfor generating hashes - Comprehensive Tests: Full test coverage for hash generation and DNS verification
Custom Domain Redirects
A powerful URL redirect system for custom domains:
- Simple Configuration:
.redirectsfile in repository root withFROM:TOformat - Easy Activation: Visit
/LOAD_REDIRECTSendpoint to activate redirects - Traefik Integration: Automatically creates Traefik
redirectregexmiddleware - Persistent Storage: Stores middleware configuration in Redis
- Security: Configurable
maxRedirectsparameter (default: 25) prevents resource exhaustion - Flexible Format: Supports comments (#) and empty lines
- Safe Regex: Automatic escaping of special characters
- Permanent Redirects: 301 status for all redirects
- Custom Domains Only: Works only on custom domains, not pages domain URLs
- Redis Required: Requires Redis cache for middleware storage
- User-Friendly: Beautiful HTML success/error pages with detailed instructions
- Well Tested: >90% test coverage for redirects module
Example: DNS Verification Setup
# 1. Generate verification hash ./examples/generate-dns-verification-hash.sh squarecows bovine-website # Output: 73bb8214899661e7f7900c77714586cc51702e6cf26a58c62e17fa9d88f3d3d3 # 2. Add DNS TXT record TXT bovine.squarecows.com bovine-pages-verification=73bb8214899661e7f7900c77714586cc51702e6cf26a58c62e17fa9d88f3d3d3 # 3. Add to .pages file enabled: true custom_domain: bovine.squarecows.com # 4. Visit pages URL to register https://squarecows.pages.example.com/bovine-websiteExample: Custom Domain Redirects Setup
# .redirects file in repository root # Redirect old blog to new location /old-blog:/blog /about-us:/about # Visit to activate https://yourdomain.com/LOAD_REDIRECTSBreaking Changes
None - both features are opt-in and backward compatible.
Configuration
DNS Verification (optional):
enableCustomDomainDNSVerification: true # default: falseRedirects (optional):
maxRedirects: 25 # default: 25, max redirects per domainFull Changelog
See CHANGELOG.md for complete details.
🤖 Generated with Claude Code
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
released this
2025-12-04 13:42:30 +00:00 | 27 commits to main since this releaseDocumentation Improvements
This release focuses on enhancing project documentation through comprehensive wiki updates.
Wiki Updates
- Cache Management Page: Created comprehensive guide for managing Redis/Valkey cache including key structures, manual cache management commands, and troubleshooting tips
- Quick Start Guide Enhancements: Improved getting started experience with clearer installation steps and configuration examples
- Custom Domains Documentation Updates: Enhanced custom domain setup documentation with detailed DNS verification flow for the upcoming 0.1.0 release
- Home Page Improvements: Restructured wiki home page for better navigation and accessibility
Notes
This is a documentation-only release with no code changes to the plugin itself. The wiki improvements provide better guidance for administrators and users deploying and managing the pages-server plugin.
Installation
No changes to installation process. Continue using v0.0.3 for production deployments.
📚 Generated with Claude Code
Downloads
-
Source code (ZIP)
3 downloads
-
Source code (TAR.GZ)
1 download
-
released this
2025-12-03 20:24:24 +00:00 | 29 commits to main since this releaseHighlights
This release adds directory listings functionality and improves custom domain management with several bug fixes.
New Features
Directory Index (Apache-style directory listings)
- Enable Apache-style directory listings for directories without index.html
- Configure per-repository with
directory_index: truein.pagesfile - Beautiful responsive HTML listing with file names, types, and sizes
- Color-coded icons for files and folders
- Parent directory navigation
- Mobile-responsive design
- Cached for 60 seconds for optimal performance
Cache Reaper Script
- Python script for automated cleanup of stale domain mappings
- Connects to Redis and validates domain mappings against Forgejo API
- Dry-run mode for safe testing
- Designed for cron scheduling (hourly, daily, etc.)
- Exit codes for monitoring and alerting
- Full documentation in
reaper/directory
Custom Domain Conflict Prevention
- Validates custom domain ownership during registration
- Prevents domain hijacking by checking existing mappings
- Allows re-registration for the same repository (updates mappings)
Bug Fixes
Reaper Script: Added missing
prioritykey to Traefik router cleanup- Now properly deletes all 6 Traefik router configuration keys
- Prevents orphaned keys from remaining in Redis
Custom Domain Reverse Mapping: Added persistent reverse mapping cache
- Caches both forward (
custom_domain:domain -> username:repository) and reverse (username:repository -> domain) mappings - Prevents custom domain resolution failures when forward mapping expires
- Both mappings use TTL=0 (persistent storage) for reliability
Documentation
- Comprehensive wiki documentation for directory listings feature
- Enhanced Quick Start guide with Traefik and Docker setup
- Added Redis/Valkey requirement documentation
- Architecture diagrams using Mermaid.js
- Rebranded to "Bovine Pages Server"
Installation
Add to your Traefik configuration:
experimental: plugins: pages-server: moduleName: code.squarecows.com/SquareCows/pages-server version: v0.0.8See the Quick Start Guide for complete setup instructions.
Full Changelog
See CHANGELOG.md for complete details.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
released this
2025-12-01 21:15:59 +00:00 | 37 commits to main since this releaseRelease v0.0.7
🎉 What's New
🔒 Password Protection
Protect your websites with secure password authentication:
- Add
password:field in.pagesfile with SHA256 hash - Automatic login page with beautiful gradient UI
- Secure HMAC-signed cookies (HttpOnly, Secure, SameSite=Strict)
- Configurable auth cookie duration (default: 1 hour)
- Password hash caching with 60-second TTL
- Per-repository authentication
🐛 Critical Bug Fixes
- CRITICAL: Traefik Router Expiration: Fixed bug where router configurations were expiring after 10 minutes
- Changed default
traefikRedisRouterTTLfrom 600 seconds to 0 (persistent) - Router configurations now persist until explicitly deleted
- Prevents custom domain sites from disappearing from Traefik
- External reaper process should clean up stale routers
- Changed default
📚 Documentation
- Moved CUSTOM_DOMAINS.md to wiki for better organization
- Added comprehensive password protection documentation to README and wiki
- Updated configuration examples with new auth parameters
📦 Installation
Update your Traefik configuration to use v0.0.7:
experimental: plugins: pages-server: moduleName: code.squarecows.com/SquareCows/pages-server version: v0.0.7🔗 Links
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
- Add