finds.dev← search

// the find

stavro/arc

★ 1,166 · Elixir · updated Jul 2024

:paperclip: Flexible file upload and attachment library for Elixir

Arc is a file upload library for Elixir that handles storing files to S3 or local disk, with optional ImageMagick/FFmpeg transformations and Ecto integration. It's been deprecated in favor of Waffle, which is a fork with the same API. If you're starting a new Elixir project, you should use Waffle instead — Arc is a dead end.

The definition module pattern is clean: you define uploads as first-class modules with versioning, validation, and storage config co-located. Async multi-version processing via Tasks is a reasonable default. ExAws integration means you get instance role credentials and the full AWS ecosystem without reinventing it. The scope pattern (attaching files to a record) maps naturally to how most web apps actually use uploads.

Deprecated — the README says so in the first line, and the last push was mid-2024 with no activity since. Validation is extension-only; there's no content-type sniffing or magic-byte checking, so a renamed executable with a .jpg extension gets stored. The transform API shells out to system executables, which means your deployment must have ImageMagick or FFmpeg installed — that's a runtime dependency that doesn't show up in mix.exs. No built-in support for GCS, Azure, or anything beyond S3/local without a third-party package, several of which appear unmaintained.

View on GitHub →

// 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 →