A trigger is the condition under which a commitment becomes executable. fillr supports three variants.

JupiterRoutable

Fill as soon as Jupiter has a route. The most common choice. Set min_liquidity_usd as a soft floor — this is guidance for keepers, not an on-chain enforced bound. The real enforcement happens in execute_commitment via min_fill and max_price: if Jupiter finds a route but it's too thin, the on-chain checks reject the swap.

use whenYou want to buy as early as possible — typically right at launch.
on-chain enforcesNothing trigger-specific. Min fill + max price are still enforced.
fieldmin_liquidity_usd: u64 — informational; for keeper UIs.

TimeOnly

Fill at or after a specific Unix timestamp. Useful for unlocks where you know exactly when liquidity goes live and don't want to depend on Jupiter's indexer noticing — the keeper executes the instant time has passed regardless of routing latency.

use whenThere's a known launch timestamp and you want guaranteed timing.
on-chain enforcesReverts with TriggerNotReached if now < unlock_ts.
fieldunlock_ts: i64 — Unix seconds.
Caveat
TimeOnly does not check Jupiter routability. If you set a timestamp and Jupiter doesn't have a route at that time, the keeper's attempt fails — the commitment remains active until a route exists.

JupiterRoutableAfter

Both conditions ANDed. Time has passed AND Jupiter is routable. The strongest constraint — fill only when both are true.

use whenYou know the launch time but want to avoid filling on a pre-launch test pool with thin liquidity.
on-chain enforcesReverts with TriggerNotReached if now < earliest_ts.
fieldsmin_liquidity_usd: u64 + earliest_ts: i64

What the program actually enforces

The trigger gate is an early-revert in execute_commitment. The load-bearing enforcement is the post-CPI bounds check: regardless of trigger, the program reads the buyer's target-ATA balance after the Jupiter swap completes and reverts if either tokens_received < min_fill or effective_price > max_price. The trigger field is ordering — it can't open you up to a bad fill.