Skip to content

Latest commit

History

115 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

goaster

toast notification component for Go web applications.

CICode coveragego report cardGitHub versiongo referencelicenseBuilt with Devbox

Features | Installation | Usage | Custom Icons | Theming | Examples | Contributing

goaster demo

Features

  • No External Dependencies: Built with native Go and the templ library - no JavaScript required.
  • Multiple Toasts: Display several notifications simultaneously.
  • Configurable: Control appearance (border, rounded), behavior, and position.
  • Variants: Accent, AccentLight, AccentDark, Filled, Outlined, Soft, Minimal, Brutalist, Retro, and Neon.
  • Themeable: Style with CSS variables to match your app's design.
  • Icon Support: Default SVG icons for common toast types - or use your own.
  • Flexible Positioning: Place toasts in any corner of the screen.
  • Auto-Dismiss Progress Bar: Visual countdown indicator for auto-dismissed toasts.
  • Smooth Animations: Built-in entrance/exit transitions, fully controllable via CSS variables. Can be disabled.

Installation

go get github.com/indaco/goaster@latest

Usage

import"github.com/indaco/goaster"

Creating a Toaster

1. Default settings

funcHandleSingle(w http.ResponseWriter, r*http.Request) {
toaster:=goaster.ToasterDefaults()
templ.Handler(pages.HomePage(toaster)).ServeHTTP(w, r)
}

2. Functional options

funcHandleSingle(w http.ResponseWriter, r*http.Request) {
toaster:=goaster.NewToaster(
goaster.WithVariant(goaster.Filled),
goaster.WithBorder(false),
goaster.WithRounded(true),
goaster.WithShowIcon(true),
goaster.WithButton(true),
goaster.WithAutoDismiss(false),
goaster.WithAnimation(true),
goaster.WithProgressBar(false),
goaster.WithPosition(goaster.TopRight),
)
templ.Handler(pages.HomePage(toaster)).ServeHTTP(w, r)
}

Options

OptionDescriptionDefault
WithVariant(Variant)Style variant (Accent, Filled, Neon, etc.)(none)
WithBorder(bool)Display border around the toasttrue
WithRounded(bool)Use rounded cornerstrue
WithShowIcon(bool)Show the toast icontrue
WithButton(bool)Show the close buttontrue
WithAutoDismiss(bool)Auto-dismiss after timeouttrue
WithAnimation(bool)Enable entrance/exit animationstrue
WithProgressBar(bool)Show auto-dismiss progress bartrue
WithPosition(Position)Screen position (TopRight, BottomLeft, etc.)BottomRight
WithIcon(Level, string)Custom SVG icon for a toast levelbuilt-in icons

3. Builder pattern

funcHandleSingle(w http.ResponseWriter, r*http.Request) {
toaster:=goaster.NewToasterBuilder().
WithVariant(goaster.Neon).
WithBorder(true).
WithRounded(true).
WithAutoDismiss(false).
WithPosition(goaster.TopRight).
Build()
templ.Handler(pages.HomePage(toaster)).ServeHTTP(w, r)
}

Displaying Toast Messages

In your templ template, call the method for the desired level:

templUserPage(toaster *goaster.Toaster) {
@toaster.Default("Sample message.")
@toaster.Success("Operation completed successfully.")
@toaster.Error("An error occurred.")
@toaster.Info("Here's some information.")
@toaster.Warning("This is a warning message.")
}

Queueing Multiple Toasts

To display multiple toasts, queue them in your handler:

toaster.PushDefault("Sample message.")
toaster.PushSuccess("Operation completed successfully.")
toaster.PushError("An error occurred.")
toaster.PushInfo("Here's some information.")
toaster.PushWarning("This is a warning message.")

Then render them all in your templ page:

templUserPage(toaster *goaster.Toaster) {
@toaster.RenderAll()
}

Custom Icons

Override the default icon for any toast level:

toaster:=goaster.NewToaster(
goaster.WithIcon(goaster.SuccessLevel, "<svg>...</svg>"),
goaster.WithIcon(goaster.ErrorLevel, "<svg>...</svg>"),
)

Theming

Theme goaster using CSS custom properties prefixed with gtt. See the CSS Custom Properties reference for full details.

html/template Integration

goaster includes HTMLGenerator for use with Go's html/template:

funcHandlePage(w http.ResponseWriter, r*http.Request) {
toaster:=goaster.ToasterDefaults()
toaster.PushSuccess("Operation completed.")
gen:=goaster.NewHTMLGenerator()
toastHTML, err:=gen.DisplayAll(r.Context(), toaster)
iferr!=nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
tmpl.Execute(w, map[string]any{
"Toasts": toastHTML,
})
}

Examples

See the examples for a complete showcase with setup instructions.

Contributing

See the Contributing Guide.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A configurable and themeable toast notification component for Go web applications.

Topics

Resources

Contributing

Stars

34 stars

Watchers

3 watching

Forks

Releases

Used by

Contributors

Languages