finds.dev← search

// the find

shrinerb/shrine

★ 3,277 · Ruby · MIT · updated Jun 2026

File Attachment toolkit for Ruby applications

Shrine is a file attachment library for Ruby that takes a plugin-based approach, letting you load only what you actually need. It handles the full lifecycle: temporary cache storage during form submission, promotion to permanent storage on save, background processing, and metadata extraction. Aimed at Ruby developers who find CarrierWave too opinionated and Active Storage too Rails-coupled.

The plugin architecture is genuinely well-designed — you opt into backgrounding, derivatives, direct S3 uploads, etc. rather than getting it all shoved in by default. Direct upload support with Uppy integration is first-class and the presign_endpoint plugin makes client-side-to-S3 uploads straightforward without reinventing the wheel. The attacher abstraction is decoupled from any ORM, so Sequel, ROM, and Hanami users aren't second-class citizens the way they are with most alternatives. Test coverage is thorough — per-plugin test files, integration tests for backgrounding, and a storage linter that third-party backends can run against.

Still on 3.x with no signals of what v4 looks like; the derivatives plugin replaced versions but the old versions plugin is still shipping, which means the upgrade story for existing apps is a migration project not a version bump. The on-the-fly derivation endpoint requires mounting a Rack app, which is fine in Roda but awkward in Rails and not obvious from the docs. No built-in CDN URL rewriting — you configure url_options per-storage but there's no concept of a CDN prefix that automatically applies everywhere without per-uploader setup. The backgrounding plugin punts entirely on job deduplication, so concurrent form submissions can race to promote the same file.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →