Pagy is the ultimate pagination gem that outperforms the others in each and every benchmark and comparison.
The best way to quickly get an idea about Pagy is comparing it to the other well known gems.
The values shown in the charts below have been recorded while each gem was producing the exact same output: same environment conditions, same task, just different gems (see the Detailed Gems Comparison)
The IPS/Kb ratio is calculated out of speed (IPS) and Memory (Kb): it shows how well each gem uses any Kb of memory it allocates/consumes.
- Pagy is just ~100 lines of simple ruby, organized in 3 flat modules very easy to understand and use (see more...)
- No dependencies: it produces its own HTML, URLs, pluralization and interpolation with its own specialized and fast code (see why...)
- 100% of its methods are public API, accessible and overridable right where you use them (no need of monkey-patching)
- It doesn't need to know anything about your models, ORM or storage, so it doesn't add any code to them (see why...)
- It works with all kinds of collections, even pre-paginated, records, Arrays, JSON data... and just whatever you can count (see how...)
- It works with all Rack frameworks (Rails, Sinatra, Padrino, ecc.) out of the box (see more...)
- It works with any possible non-Rack environment by just overriding one or two two-lines methods (see more...)
- It works with collections/scopes that already used
limitandoffset(see how...) - It works with helpers or templates (see more...)
- It raises real
Pagy::OutOfRangeErrorexceptions that you can rescue from (see how...) - It does not impose any difficult-to-override logic or output (see why...)
You can use Pagy in a quite familiar way:
Paginate your collection in some controller:
@pagy, @records = pagy(Product.some_scope)Render the navigation links with a super-fast helper in some view:
<%== pagy_nav(@pagy) %>Or - if you prefer - render the navigation links with a template:
<%== render 'pagy/nav', locals: {pagy: @pagy} %>(see Quick Start)
Use the official extras, or write your own in just a few lines.
Nav helper and templates for Bootstrap pagination. (see more...)
On resize, the number of page links will adapt in real-time to the available window or container width. (see more...)
An alternative UI that combines the pagination feature with the navigation info in one compact element. (see more...)
Paginate arrays efficiently avoiding expensive array-wrapping and without any overriding. (see more...)
Pagy is a fresh project and your help would be great. If you like it, you have a few options to contribute:
- Write a tutorial or a post or even just a tweet (Pagy is young and needs to be known)
- Write a "How To" topic (the documentation is covering the basics and there is a lot of space for additions)
- Submit some cool extra
- Submit a pull request to make Pagy even faster, save more memory or improve its usability
- Create an issue if anything should be improved/fixed
master is the latest rubygem-published release (plus changes that don't affect the actual gem behavior, e.g. doc, tests). You should use it as the base branch for pull requests, because it will not be force-rebased.
dev is the development branch that is kept rebased on top of master, so expect it to be force-rebased (i.e. do not use it as the base for your commits). Use dev as a preview for trying the new code that will be merged in the next release, but please, don't use it as the base branch for pull requests.
The gem is available as open source under the terms of the MIT License.





