A modern, composable authentication library for Go, inspired by better-auth.
Limen is a modular authentication library for Go that takes a plugin-first approach — the core ships with interfaces, session management, and security primitives, while every authentication method lives in its own importable Go module. You compose exactly the auth stack your application needs without pulling in code/dependencies you don't use.
Out of the box, Limen provides:
- Credential/password authentication
- OAuth 2.0
- Two-factor authentication
- Session management
- ...and more
Bring your own database, bring your own framework — Limen adapts to your stack, not the other way around.
Full guides, configuration reference, and plugin documentation are available at limenauth.dev.
- Go 1.25+
go get github.com/thecodearcher/limenThen add the adapter and plugins your application needs:
go get github.com/thecodearcher/limen/adapters/gorm
go get github.com/thecodearcher/limen/plugins/credential-passwordpackage main
import (
"log"
"net/http"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"github.com/thecodearcher/limen"
gormadapter "github.com/thecodearcher/limen/adapters/gorm"
credentialpassword "github.com/thecodearcher/limen/plugins/credential-password"
)
func main() {
db, err := gorm.Open(postgres.Open("your-dsn"), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
auth, err := limen.New(&limen.Config{
BaseURL: "http://localhost:8080",
Database: gormadapter.New(db),
Secret: []byte("your-32-byte-secret-key-here!!!!"),
Plugins: []limen.Plugin{
credentialpassword.New(),
},
})
if err != nil {
log.Fatal(err)
}
mux := http.NewServeMux()
mux.Handle("/api/auth/", auth.Handler())
log.Println("listening on :8080")
log.Fatal(http.ListenAndServe(":8080", mux))
}Alternatively, set the LIMEN_SECRET environment variable and omit the Secret from the struct.
For a more complete example with OAuth providers, two-factor auth, and Gin integration, see the examples.
For full configuration options, usage, and plugin APIs, visit limenauth.dev.
Contributions are welcome! Please open an issue or submit a pull request.
Found a security issue? Please do not open a public issue. Email security@limenauth.dev instead. See SECURITY.md for full details on our disclosure process.
MIT License — see LICENSE for details.