Frank is a robust, feature-rich authentication server built with Go and EntGO that provides a comprehensive identity management solution. It combines all the best features of modern authentication providers like ClerkJS into a self-hosted solution.
-
Multiple Authentication Methods
- Traditional email/password
- Passwordless (Email and SMS)
- Multi-factor authentication (TOTP, SMS, Email)
- Passkeys (WebAuthn)
- OAuth2/OIDC (Social login)
- Enterprise SSO (SAML)
-
Organization Support
- Multi-tenancy
- Custom features per organization
- Member management and roles
-
API Keys Management
- For machine-to-machine authentication
- Scoped permissions
- Expiration management
-
OAuth2 Provider
- Use Frank as an identity provider for your applications
- Full OAuth2 and OpenID Connect support
-
Webhook System
- Real-time notifications for auth events
- Custom payload formats
- Retry logic
-
Security Features
- CSRF protection
- Rate limiting
- Session management
- CORS configuration
- Go - Fast and efficient programming language
- EntGO - Entity framework for Go
- PostgreSQL - Secure and reliable database
- Redis - For session and cache management
- Go 1.18+
- PostgreSQL 13+
- Redis 6+
- Docker and Docker Compose (optional)
-
Clone the repository:
git clone https://github.com/juicycleff/frank.git cd frank
-
Copy the example environment file:
cp .env.example .env
-
Edit the
.env
file to configure your environment. -
Initialize the development environment:
make dev-init
-
Start the development server:
make dev
To run Frank using Docker Compose:
docker-compose up -d
This will start the Frank Auth server along with PostgreSQL, Redis, and MailHog for email testing.
Frank is highly configurable. See the .env.example
file for available configuration options.
Once running, API documentation is available at:
http://localhost:8080/api/docs
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Clerk - For the inspiration
- EntGO - For the amazing entity framework
- Go-Swagger - For API documentation