Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

236 Commits
236 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Limen — Composable authentication for Go

A modern, composable authentication library for Go, inspired by better-auth.

Documentation · Issues · X (@limenauth)

Go reference npm version GitHub stars

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.

Documentation

Full guides, configuration reference, and plugin documentation are available at limenauth.dev.

Requirements

  • Go 1.25+

Installation

go get github.com/thecodearcher/limen

Then add the adapter and plugins your application needs:

go get github.com/thecodearcher/limen/adapters/gorm
go get github.com/thecodearcher/limen/plugins/credential-password

Quick Start

package 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.

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

Curious what's being built, what's open for contribution, and what's out of scope? See ROADMAP.md. If you're planning to contribute, check there and open an issue first.

Security

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.

License

MIT License — see LICENSE for details.

Releases

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.