Hey everyone! ![]()
I just published my first hex package that solves a common UX issue in Phoenix LiveView applications, and I’d love to share it with the community!
The Problem
Flash messages in Phoenix LiveView applications often stick around until the user navigates away or manually dismisses them. This can lead to cluttered UIs and poor user experience, especially for success messages like “Data saved!” that should naturally disappear after being read.
The Solution
PhoenixLiveViewFlashTimer automatically clears flash messages after a configurable timeout (default: 5 seconds). It handles both:
- Controller-set flash messages (after form submissions, redirects, etc.)
- LiveView
put_flashcalls
Quick Start
Add to your dependencies:
{:phoenix_liveview_flash_timer, "~> 0.1.0"}
For LiveView flash messages only:
def live_view do
quote do
use Phoenix.LiveView
use PhoenixLiveViewFlashTimer
# ... rest of your code
end
end
For both controller AND LiveView flash messages:
def live_view do
quote do
use Phoenix.LiveView
use PhoenixLiveViewFlashTimer
on_mount PhoenixLiveViewFlashTimer # Add this for controller flash support
# ... rest of your code
end
end
That’s it! Flash messages will now auto-disappear after 5 seconds.
Configuration
# config/config.exs
config :phoenix_liveview_flash_timer,
default_timeout: 3000 # Custom timeout in milliseconds
Examples
elixir# In a LiveView - automatically cleared after 5 seconds
socket = put_flash(socket, :info, "Data saved successfully!")
# In a LiveView - custom timeout
socket = put_flash(socket, :error, "Something went wrong", 10000)
# In a controller - cleared when LiveView mounts (requires on_mount)
conn
|> put_flash(:info, "Account created successfully!")
|> redirect(to: ~p"/dashboard")
Features
Zero configuration required
Works with existing Phoenix LiveView apps
Configurable timeout per message or globally
Handles both controller and LiveView flash messages
Uses on_mount hook for universal coverage
Simple drop-in solution
Technical Details
The package uses Phoenix LiveView’s on_mount hook to automatically start timers for controller flash messages, and overrides put_flash to set timers for LiveView flash messages. It’s implemented as a simple macro that you can drop into any existing LiveView application without changing your existing code.
This was born out of a real need - I kept manually implementing flash message clearing in every LiveView project, so I decided to package it up and share it with the community!
I’m excited to hear your thoughts and feedback! This is my first hex package, so any suggestions are very welcome.
Thanks! ![]()
Links
Hex: phoenix_liveview_flash_timer | Hex
Docs: phoenix_liveview_flash_timer v0.1.0 — Documentation






















