Skip to content

no-offset-pagination

Prefer keyset pagination for embedded SQL queries using OFFSET.

Why

Offset pagination scans skipped rows and shifts page boundaries under concurrent writes.

Fix

Consider a keyset cursor that preserves the query's complete ordering, tie-breakers, and filters.

Examples

Before — flagged Do not page by offset
src/runs.ts
db.query(`SELECT id FROM runs ORDER BY id LIMIT ? OFFSET ?`);
After — preferred Page from a stable cursor
src/runs.ts
db.prepare(`SELECT id FROM runs WHERE id > ? ORDER BY id LIMIT ?`).all();