Outbound Fetch Relay (opt-in)
- New Fetch Relay transport for the outbound proxy (#975, by @w0fv1). Instead of a CONNECT or SOCKS proxy, provider requests can be forwarded through a relay endpoint you host, such as the Cloudflare Worker in
examples/fetch-relay-worker/. Useful when a regional block sits between you and a provider and you can deploy a Worker but not run a proxy box. - Off by default: the transport only activates when you pick it in Keys → Outbound proxy, or set
PROXY_MODE=fetch-relayalongsidePROXY_URL. ExistingPROXY_URL/HTTPS_PROXY/ALL_PROXYvalues keep the forward transport. - Relay URLs must be
https://(loopback excepted), the relay token is encrypted at rest and never returned by the API, streaming and abort pass straight through, and the Test button now reports a relay side 401/403 as a failure instead of success. - Bear in mind that a relay terminates TLS, so it sees the provider key and request body. Only point this at a relay you control. See
docs/fetch-relay.md.
Docker
- The image now starts through a small root entrypoint that fixes ownership of
/app/server/data(and the directories behindFREEAPI_DB_PATH/FREEAPI_DB_BACKUP_PATH) before dropping to thenodeuser (#972, by @hiiamwaffledev). This fixes theSQLITE_CANTOPEN/EACCESfailure on Railway, Render and similar hosts that mount persistent volumes as root. The chown is skipped when ownership is already right and never aborts startup if it cannot run. - Note for Kubernetes users: the image's default user is now root at start. The node process itself still runs as uid 1000, but a
runAsNonRoot: truepolicy will reject the image; setrunAsUser: 1000explicitly, in which case the entrypoint skips the chown.
Streaming
- When a client asks for usage via
stream_options.include_usageand the upstream never sends a usage frame, the gateway now emits one with its own estimate, flagged"estimated": trueso cost tooling can tell it apart from provider-reported numbers (#686, by @oppih). Image tokens are included in the estimate.
Desktop
- Mac builds are signed and notarized, including the DMG itself, so the right-click → Open workaround is no longer needed (#1034, #1035, #1036). Closes #373 and #943.
Full changelog: v0.8.9...v0.9.0