Skip to content

ENV variables

NameDescription
HTML2RSS_SECRET_KEYrequired in production; development/test gets a temporary default
HTML2RSS_ACCESS_TOKENtoken for the main feed-creation flow; paste the same value into the web UI when prompted
HEALTH_CHECK_TOKENoptional bearer token for authenticated GET /api/v1/health; not part of the first-run quickstart; use /api/v1/health/ready for standard readiness checks
BUILD_TAGrelease metadata used in logs; published Docker images set this to the release version
GIT_SHAdeployed commit metadata used in logs; published Docker images set this to the released commit
SENTRY_DSNoptional; enables Sentry errors/logs when set
BROWSERLESS_IO_WEBSOCKET_URLoptional; Browserless websocket endpoint for harder sites when you add Browserless later
BROWSERLESS_IO_API_TOKENoptional unless you explicitly add Browserless to your stack or point at a custom Browserless endpoint
AUTO_SOURCE_ENABLEDtrue by default in development/test, false otherwise
ASYNC_FEED_REFRESH_ENABLEDoptional boolean; default false
ASYNC_FEED_REFRESH_STALE_FACTORoptional integer >= 1; default 3
FEEDS_CACHE_MAX_SIZEoptional integer >= 1; default 500; maximum number of feeds to cache in memory before eviction
RATE_LIMIT_ENABLEDoptional boolean; default true (except false in test); enables or disables client IP rate limiting
RATE_LIMIT_MAX_REQUESTSoptional integer >= 1; default 60; maximum requests allowed per IP per window
RATE_LIMIT_WINDOW_SECONDSoptional integer >= 1; default 60; rate limiter sliding window duration in seconds
RETRY_AFTER_TIMEOUT_SECONDSoptional integer >= 1; default 300; Retry-After header backoff duration returned on timeouts
PORTapp listen port; compose uses 4000
RACK_ENVRack environment; quickstart uses development, production examples use production
RACK_TIMEOUT_SERVICE_TIMEOUToptional; total web-request timeout in seconds; default 30
HTML2RSS_TOTAL_TIMEOUT_SECONDSoptional; internal gem request timeout in seconds; default 25

When fetching feeds from complex websites, multiple components work together. To prevent premature request termination, ensure your timeouts are configured in a “chain” where the outer layers wait longer than the inner layers.

For an overall 30-second budget:

  1. Botasaurus Scraper (SCRAPE_TIMEOUT_SECONDS): Set to 20s. This is the time allowed for the browser to fetch and render the page.
  2. html2rss Gem (HTML2RSS_TOTAL_TIMEOUT_SECONDS): Set to 25s. This allows the gem enough time to wait for Botasaurus and process the results.
  3. html2rss-web (RACK_TIMEOUT_SERVICE_TIMEOUT): Set to 30s. This is the total time the web server will wait before killing the request.

Older environment-variable examples from previous docs revisions are obsolete. Use only the supported table above and the Environment & Runtime Flags table in docs/README.md.