Skip to content

v3.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 13 Nov 02:39
· 2 commits to main since this release
0de5c7d
Flare

A modern, lightning-fast file sharing platform built for self-hosting

✨ New Features and Changes

Flare 3.1 is here! 2.0 and 3.0 were both huge, and they changed a lot of Flare in a short time. This one is about making all of that solid. I went through the app path by path, fixed what was fragile, and measured what was slow until it wasn't. On top of that there are proper embed controls and a pass over almost every screen.

I'm really proud of this one. Flare works the way you're used to, it just works better, looks better, and holds up with a big library.

🛡️ Reliability

  • Fewer surprise errors. I rebuilt how every API route handles sign-in, permissions, request bodies, and errors, so they all behave the same way. Dozens of cases that used to answer 500 now give a clear answer: malformed JSON, a short link that drew a code someone else had, a file that's missing from storage, an account deleted mid-edit, and more.
  • Settings can't quietly break storage. Saving settings through the older API wiped the saved S3 keys and OIDC client secret. Incomplete S3 settings are now refused when you save, and ones an earlier version already saved fail loudly instead of quietly writing files to local disk.
  • Uploads hold up under load. Uploading lots of files at once to a big library could time out, answer 500, and throw the files away. In testing on a 100,000-file library, a burst of 48 screenshots lost up to 12 before the fix; now all 48 are stored. Upload-time expiration dates in any valid format apply too, instead of only one exact format.
  • Calmer startup and background work. One database pool per process instead of up to three. A failed migration stops the container with its real error instead of "Could not connect to database after 30 attempts", and the health check gives a slow start 150 seconds before calling it unhealthy. Background jobs start independently, so one failing doesn't stop the others, and expiration jobs retry after 1, 5, and 30 minutes.
  • A database outage looks like one. Flare shows an error page and lets you try again, instead of sending you to the setup screen.
  • Up-to-date foundations. Flare now runs on Next.js 16 and React 19, since Next.js 15 is out of support. Along the way, builds stopped copying the whole uploads folder into the build output and fonts stopped downloading twice. The Docker image is pinned to Node.js 24, after node:lts moved to a release without Corepack and broke every build.
  • Smaller fixes that add up. Custom favicons show up reliably in every browser and can be removed, and replaced ones are cleaned up from storage. Data exports no longer flood the log after you leave the page. Custom head HTML goes in the real <head> instead of throwing a React error on every page. Share pages only count a view once the visitor actually has access.
  • More tests guarding all of it: about 2,950 now, up from about 1,600 at 3.0.1, and the real-browser suites still run against production builds. Docker CI now fails unless the image actually reports itself healthy.

⚡ Performance

Flare used to get slower as a library grew. I measured the same requests and page loads on the same data (one account with 100,000 files among 120,000) before and after the performance work, then fixed the slow parts one at a time. "Before" here is the build just ahead of that work, which already had the other 3.1 changes.

Before and after for eleven measurements, from opening a 100,000-file library to uploading 48 screenshots at once

  • The library opens 3.2× faster on a phone connection (8.1 s → 2.5 s) and downloads a tenth as much (7.6 MB → 766 KB). Cards used to load whole original images; Flare now makes small thumbnails itself, including for private and password-protected files.
  • Shared screenshots show up 2.2× faster, because a share page now loads only the viewer its file needs (711 KB of script → 259 KB).
  • The server does a lot less per request. A signed-in request reads the account once instead of making about ten database round trips first, a library page went from 99 ms to 12 ms, and listing file types from 147 ms to 7 ms.

The benchmark scripts are in the repo under scripts/perf/ if you want to run them yourself.

🔗 Embeds

Links you paste into Discord, Slack, X, Mastodon, and other apps now preview the way you want them to.

  • Two modes. Direct media (the default) keeps images and videos showing on their own like before. Rich embed shows a card for every link, with the image or video inside it.
  • Write your own card. Set the site name, author, title, description, and accent color with placeholders like {{filename}}, {{size}}, and {{uploader}}, with a live preview as you type. Admins set this in Settings → Appearance → Embeds. People who can share files can make their own in Profile → Embeds, unless you turn Let people design their own off.
  • Previews that work in more places. Flare now recognizes each app by name instead of anything with "bot" in it. PDFs, archives, and text files get a card instead of nothing, image links preview on X, LinkedIn, Mastodon, and Bluesky, and video previews on S3 storage keep playing instead of expiring after six hours.
  • Privacy carries over. Anything you hide from share pages (like uploader names) stays out of every embed, whoever wrote the card.

🎨 A pass over the whole interface

  • Easier to read. Red text, field outlines, and focus rings are much easier to see (some red text was below 2:1 before), the default dark theme is deeper with clearer layers (instances that never changed it, Midnight included, switch over on their own), and theme presets recolor the whole interface instead of half of it.
  • One consistent look. Panels, menus, dialogs, buttons, and status colors work the same everywhere, page titles match the navigation, and long forms keep their actions in view.
  • A shorter navigation bar. Admin pages live in one Admin menu and your profile is on your avatar, so the full bar shows from 768 px wide (900 px with the Admin menu) instead of 1280.
  • Share pages rebuilt. Every file opens centered in one card with its actions right beside it: previews get a header with the name, type, size, and expiration, and audio and other files get a compact card. The page holds its shape while the file loads, and your appearance settings still decide which details visitors see. Video and audio play in Flare's own player, with keyboard shortcuts, speed controls, and your theme's colors.
  • Better on phones. Files show in the first screen of the library, Upload and Paste lead with what you're adding, the gallery uses two columns, and filters fold away.
  • Little things. Upload progress shows your speed and stays in the notification corner. The image viewer can copy a link and open the share page. The file type filter is searchable. File cards are all the same height. Reset to Flare defaults puts the theme back in one click.

There's also a new handbook homepage and a rebuilt README, both matching the app.

📸 Demo

These are captures from real Flare builds with demonstration accounts and generated sample files.

3.0.1 next to 3.1

One demo instance set up on 3.0.1, then upgraded in place to 3.1, at the same screen size: 3.0.1 on the left, 3.1 on the right.

The file library on 3.0.1 with nine navigation pills and folders listed above the files, and on 3.1 with an Admin menu and folders in a compact menu

Settings, Appearance on 3.0.1 and on 3.1, with the shorter navigation bar, the new Embeds tab and the share page preview in its new layout

A shared video on 3.0.1 with the browser's own controls, and on 3.1 in Flare's player with the name, type, size, expiration and actions in the header

A shared audio file on 3.0.1 with the browser's audio bar, and on 3.1 with Flare's audio player in its own panel and full-width actions below it

Embeds

Set the instance's embed in Settings, or your own in Profile, with a live preview of how a chat app and a link card will show it.

Settings, Appearance, Embeds with Rich embed selected, a custom author, title, description and accent color, and a preview of the card

Profile, Embeds with a personal card and placeholder buttons

Embeds guide

Share pages and the media player

A shared photo in one centered card with its name, type, size and actions in the header

Flare's video player with its timeline, volume, speed, picture-in-picture and full-screen controls

Flare's audio player in its own panel on a share page

Sharing guide

The library opening on a phone connection

The same 100,000-file library opening on throttled Fast 4G, 2, 3, 5, and 8 seconds after the request, before and after the performance work.

Filmstrip of the library loading before and after the performance work at 2, 3, 5 and 8 seconds

❤️ Thanks

Thanks to @evapey for asking for rich embeds way back. They're finally done properly now!

Thanks also to everyone running Flare, testing rolling builds, and telling me what's broken or missing. A lot of this release came from paying attention to the small stuff people mentioned. If anything's giving you trouble after updating, lmk!

⬆️ Updating

Back up your database and uploads, then update the image as usual. Nobody is signed out, and there's one migration that adds database indexes, so expect a short pause on a big instance.

  • Rollback: once you save any setting on 3.1, 3.0.1 can't read the saved appearance. Go back only with the backup you took before upgrading.
  • Browsers: Flare now needs Chrome, Edge, or Firefox 111 or later, or Safari 16.4 or later (3.0.1 supported back to Safari 12).
  • Behind a CDN or proxy: keep the query string in the cache key for thumbnails, pass User-Agent through, and don't cache share pages by address alone, so link previews work.
  • Embeds: Let people design their own starts on, so anyone who can share files can write their own card. Turn it off in Settings → Appearance → Embeds if you want one embed for every link.
  • S3 storage: if an earlier version saved incomplete S3 settings, Flare quietly wrote files to local disk. Now uploads and downloads stop until you fix them in Settings → Storage, so check yours.
  • Custom CSS: share page markup, the media players, and the font files changed, so check your share pages.
  • Custom API clients: unreadable requests now answer 400, 413, or 415 with JSON instead of 500, some error messages changed, and uploads or short-link writes that rely on a browser cookie from another origin, sibling subdomains included, now get 403 (use a token).
  • New, optional: FLARE_CORS_ORIGINS lets web apps on other sites call the token API.

Upgrade guide: 3.0.1 → 3.1 · Full changelog: v3.0.1 → v3.1.0

📦 Download & Deploy

AMD64 and ARM64 images:

# Docker Hub
docker pull docker.io/flintsh/flare:3.1.0

# GitHub Container Registry
docker pull ghcr.io/flintsh/flare:3.1.0

Deploy on Railway