Push & Ingest
Push registers your sl.config.ts schema with the service.
Ingest is the background process that reads your source, embeds records into
vectors, and indexes them so queries can run.
The two operations are intentionally separate — you can push a schema change without immediately triggering a re-index.
Push Your Config
This registers (or updates) your lenses. New lenses start with status paused — no
ingest runs yet.
--rebuild prompts for confirmation before clearing. Pass
--skip-confirmation-dangerously to bypass in CI.
What Push Does
For each lens in your config compared to the current remote state:
- Created — new lens registered, status set to
paused - Updated — schema change applied; existing vectors remain until re-ingest
- Unchanged — no-op
- Deleted — lens removed along with its indexed data
Drift Detection
Before pushing, the CLI checks whether any lenses were modified in the Console since your last push. If so, you'll see a warning:
Run semilayer export config to pull Console changes back into your local sl.config.ts
before pushing, or pass --force to skip the check.
Start Ingest
Or at push time:
Monitor Progress
You can also watch progress in the Console under Jobs.
Ingest Modes
Full ingest (default)
Reads all records from the source from scratch. Used on first push and when you pass
--rebuild.
Incremental ingest
Reads only records changed since the last ingest cursor. Requires changeTrackingColumn
on the lens (defaults to updated_at if present):
Trigger incremental manually:
Periodic sync
Keep the index fresh automatically with syncInterval:
Webhook ingest
Push specific records in real time from your application using the ingest API and an
ik_ key:
Modes: full (re-index all), incremental (since last cursor), records (specific IDs).
Pause Ingest
Ingest stops after finishing the current page. The cursor is saved so it can be resumed from where it left off.
Troubleshooting
Lens stuck in indexing — Check semilayer status for error counts, or open
Jobs in the Console for the full error message.
error status — The last ingest job failed. The most common causes are:
- Connection refused (source not reachable from the worker)
- Auth failure (connection string changed or expired)
- Schema mismatch (a declared field doesn't exist in the source)
After fixing the underlying issue, run semilayer resume --lens <name> to retry.