// the take
Scrivener.Ecto bolts page-based pagination onto Ecto queries for Phoenix/Elixir apps — call Repo.paginate(query, params) and get back entries plus page_number, page_size, total_pages, and total_entries. It's aimed at anyone building a standard paginated list view (admin panels, API endpoints) on top of Postgres.
The API is minimal and idiomatic: it's a thin wrapper that returns a plain Ecto query result plus pagination metadata, so it composes with where/order_by/preload instead of fighting them. Defaults (page_size, params parsing from "page"/"page_size") cover the common Phoenix controller case with almost no boilerplate. Mature and stable — a decade-old, widely-used library means the behavior is well understood and unlikely to surprise you.
It's explicitly in low-maintenance mode — the author only triages PRs and breaking issues, so don't expect new features or fast turnaround on non-critical bugs. Only works with Ecto adapters that support subqueries, which in practice means Postgres; MySQL/SQLite users are out of luck. Offset-based pagination (COUNT + LIMIT/OFFSET) doesn't scale well on large tables — deep pages get slow and the total_entries count is a full table scan on every call, so there's no cursor-based option for high-volume datasets.
We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →