← Documentation

Getting started

Miru is an Elixir/Phoenix application with a PostgreSQL database and somewhere to put files. Everything else is optional.

Requirements

Component Version Notes
Elixir 1.19 or newer Miru sets a floor of ~> 1.19
Erlang/OTP 27 or newer
PostgreSQL 14 or newer The citext extension is used
libvips 8.14 or newer Image decoding, resizing, metadata
FFmpeg 6 or newer Video transcoding and thumbnails
exiftool 12 or newer RAW preview extraction
heif-convert any HEIC/HEIF decode (libheif examples)
dcraw any Fallback for RAW files with no embedded preview

Storage is either an S3-compatible bucket or a directory on disk. Neither is more supported than the other.

The short version

git clone https://forge.oddie.app/oddie-apps/miru_web.git
cd miru_web
mix deps.get
mix ecto.setup          # creates the database, migrates, seeds
mix phx.server

That gives you an instance on http://localhost:4077 storing files under priv/static/uploads, sending no email, and taking no payments. It is enough to upload a photograph and see what Miru does with it.

For anything you intend to keep, read on — particularly storage and system dependencies, which is where the platform-specific difficulties are.

What the seed data gives you

mix ecto.setup runs priv/repo/seeds.exs, which creates a handful of accounts with albums and photographs. The images are generated locally and pushed through the real media pipeline, so what you see is what an actual upload produces — variants, blurhashes, dominant colours and all.

Seeding is idempotent: running it again does nothing. To start over, use Miru.Release.reseed/0, which truncates every table first. It refuses to run against any database or host whose name contains www or prod.

Ports

Miru listens on 4077, not 4000. Set PORT to change it.

Next

  • System dependencies — the parts that differ per platform, and what breaks if they are missing
  • Storage — S3-compatible buckets and local disk
  • Configuration — every environment variable Miru reads