TTL Plugin (Early Access)
Scheduled unpublish for demos and previews.
TTL is an optional Early Access plugin. FounderBooster core works without it.
What it is
- Scheduled unpublish for a recorded FQDN.
- TTL metadata attached to your app/env state.
- Designed for demos, previews, and temporary exposure.
What it does NOT do
- Does not stop your runtime by default.
- Does not delete local state unless you purge.
- Does not change other DNS records.
When TTL is useful
Client demos.
Temporary previews.
Sales environments.
Homelabs.
“Don’t forget to clean this up” scenarios.
Installation
Requires Early Access. Core remains fully usable without the plugin.
fb activate <license-key>
fb plugin install ttl
Quickstart
fb ttl bootstrap --ttl 1h -d demo.example.com --hosts root
fb ttl status
fb ttl run
Scheduling
TTL is enforced only when fb ttl run executes. Use a scheduler.
cron (every minute)
* * * * * /usr/local/bin/fb ttl run --all
GitHub Actions (every 5 minutes)
on:
schedule:
- cron: "*/5 * * * *"
jobs:
ttl:
runs-on: ubuntu-latest
steps:
- run: fb ttl run --all
Lifecycle integration
fb bootstrap→ publish (DNS + tunnel/connector).fb ttl run→ unpublish on TTL expiry.fb app down→ manual unpublish.fb app up→ re-publish.fb app down --purge→ delete local state.
Publish/unpublish is separate from runtime (docker compose or local servers).
Safety guarantees
- Only deletes DNS records for recorded FQDNs.
- Does not modify other DNS records in the zone.
- Shared tunnel deletion is guarded by explicit flags.
FAQ
Why did it not expire automatically?
TTL expiry is enforced only when fb ttl run executes. Add a scheduler.
Why are my containers still running?
TTL does not stop runtime by default. Use your own runtime controls.
I got a 502 after TTL ran.
This usually means the runtime is down but the tunnel is still up.
Is TTL required?
No. Core works without it.