finds.dev

carrierwaveuploader/carrierwave

Classier solution for file uploads for Rails, Sinatra and other Ruby web frameworks

View on GitHubHomepage ↗

★ 8,767Rubyupdated Oct 2026

// the take

CarrierWave is a mature file-upload library for Rails (and other Rack apps) that mounts uploaders on model columns, handling caching, storage backends, and derived versions (thumbnails, format conversions). It's for teams that need more control over upload/processing pipelines than Rails' built-in ActiveStorage gives them, or that are maintaining older apps that predate ActiveStorage.

The version system is genuinely well thought out: you can nest versions, generate one version from another (e.g. a 20px thumb derived from a 280px thumb instead of the original, which is real processing savings at scale), and gate versions on arbitrary model/image conditions. Storage is properly pluggable (local file, S3/GCS/Rackspace via Fog) without leaking storage-specific code into uploader logic. It takes upload security seriously and documents it rather than hand-waving: content_type_allowlist as the only effective mitigation for CVE-2016-3714, explicit filename sanitization, SSRF protection on remote URL downloads. Direct-to-cloud upload support (bypassing your app servers for the actual bytes) is a feature a lot of upload libraries still don't offer cleanly.

The gemspec only declares a minimum Rails/Ruby version, not a ceiling, so Bundler will happily resolve a CarrierWave version alongside a Rails release it was never tested against — the README's own compatibility table exists because this bites people at boot time after a routine Rails upgrade. By default it doesn't persist what was actually stored; it re-derives filenames and re-evaluates conditional versions on every retrieval, which can give a different answer than what's on disk and costs a request per record against remote storage unless you opt into the metadata_column feature yourself. Image processing is entirely BYO — you're on the hook for installing and operating ImageMagick, libvips, or RMagick outside the gem, and RMagick in particular has a long history of memory bloat in long-running processes. It's also increasingly a legacy choice: Rails ships ActiveStorage by default now, and new projects have to actively justify reaching for CarrierWave instead rather than the other way around.

We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →

// at a glance

Stars
8,767
Forks
1,642
Language
Ruby
Last commit
12 Oct 2026

// nearby

If carrierwave isn't quite it.

All repos →