PHPackages                             hasinhayder/tyro-login - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Templating &amp; Views](/categories/templating)
4. /
5. hasinhayder/tyro-login

ActiveLibrary[Templating &amp; Views](/categories/templating)

hasinhayder/tyro-login
======================

Tyro Login - Beautiful, customizable authentication views for Laravel 12 &amp; 13

v2.12.1(1mo ago)2508.1k↓21.4%271MITPHPPHP ^8.2CI passing

Since Nov 30Pushed 1w ago4 watchersCompare

[ Source](https://github.com/hasinhayder/tyro-login)[ Packagist](https://packagist.org/packages/hasinhayder/tyro-login)[ RSS](/packages/hasinhayder-tyro-login/feed)WikiDiscussions main Synced 2w ago

READMEChangelogDependencies (68)Versions (46)Used By (1)

Tyro Login
==========

[](#tyro-login)

[![Packagist](https://camo.githubusercontent.com/1a63985239b8c5d541017a871fe47c6894bd5d1846d94c6bfff2887dcc5e0f74/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f686173696e6861796465722f7479726f2d6c6f67696e3f7374796c653d666f722d7468652d6261646765266c6f676f3d7061636b6167697374266c6f676f436f6c6f723d7768697465266c6162656c3d5061636b6167697374)](https://packagist.org/packages/hasinhayder/tyro-login) [![Tests](https://camo.githubusercontent.com/b9d71c59a0824b28c55103ecd9e6bdc612d45e4d11aed6f84acacbb6a9f002bd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f686173696e6861796465722f7479726f2d6c6f67696e2f74657374732e796d6c3f7374796c653d666f722d7468652d6261646765266c6162656c3d5465737473)](https://github.com/hasinhayder/tyro-login/actions/workflows/tests.yml) [![Laravel](https://camo.githubusercontent.com/5f32f51d9268f45b7376428e4a0bd33a004cdf420f9f92f2228a8e8a827a95e5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322e782d4646324432303f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c)](https://laravel.com) [![Laravel](https://camo.githubusercontent.com/912dc8f051cbb50fe34e91773952abac9b43ff027bc748c393fc44fcf8ea8a42/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31332e782d4646324432303f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c)](https://laravel.com) [![PHP](https://camo.githubusercontent.com/233addbd8bc6c491cd7a929fd0305ab4d0144a078f8f346dfeb9421d929ac128/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322b2d3737374242343f7374796c653d666f722d7468652d6261646765266c6f676f3d706870)](https://php.net) [![License](https://camo.githubusercontent.com/153acf9dff19deb8abfc598c53bac50a4ceae0f5c83a552711060d3d78d2c057/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e3f7374796c653d666f722d7468652d6261646765)](LICENSE) [![CLI Ready](https://camo.githubusercontent.com/3d63ad72c92d59cda5c87d8715bb5cfa97c820a1e416b46a0b44657112ee36a1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f434c492d52656164792d3245413434463f7374796c653d666f722d7468652d6261646765266c6f676f3d7465726d696e616c266c6f676f436f6c6f723d7768697465)](https://github.com/hasinhayder/tyro-login)

[Website](https://hasinhayder.github.io/tyro-login/) | [Documentation](https://hasinhayder.github.io/tyro-login/doc.html) | [GitHub](https://github.com/hasinhayder/tyro-login)

**Tyro Login** is a beautiful, production-ready authentication UI kit for Laravel 12 and 13. It gives you professional login and registration pages with 10 premium layouts, social OAuth, passkeys, TOTP 2FA, email OTP, magic links, invitations, lockout protection, captcha, and beautiful emails, all with zero build step and seamless integration with the [Tyro](https://github.com/hasinhayder/tyro) package.

Features
--------

[](#features)

FeatureDescription**10 Premium Layouts**centered, split-left, split-right, fullscreen, card, youtube-video, animated-birds, aurora-waves, particle-network, tidal**Social Login**Google, Facebook, GitHub, Twitter/X, LinkedIn, Bitbucket, GitLab, Slack via Laravel Socialite**Passkeys**Passwordless WebAuthn sign-in (Face ID, Touch ID, security keys) via `laravel/passkeys`**TOTP 2FA**Time-based one-time passwords compatible with Google Authenticator, Authy, Microsoft Authenticator**Email OTP**Two-factor login via email verification codes with resend cooldown**Magic Links**Passwordless email login links**Invitation/Referral System**Per-user invitation links with automatic signup tracking**Email Verification**Optional verification with signed, expiring links**Password Reset**Full forgot/reset flow with beautiful UI and emails**Lockout Protection**Cache-based brute-force protection with configurable attempts and duration**Math Captcha**Simple addition/subtraction captcha on login and registration**Beautiful Emails**Sleek HTML templates for OTP, reset, verification, welcome, and magic links**Dark/Light Theme**Automatic theme detection with manual toggle**Tyro Integration**Automatic role assignment for new users when Tyro is installed**Zero Build Step**No npm or webpack, just install and useRequirements
------------

[](#requirements)

- PHP 8.2 or higher
- Laravel 12.0 or higher

Installation
------------

[](#installation)

```
composer require hasinhayder/tyro-login
php artisan tyro-login:install
```

That's it! Visit `/login` to see your new authentication pages.

Want more from the start?

```
# With social login (Laravel Socialite)
php artisan tyro-login:install --with-social

# With passkey (WebAuthn) login
php artisan tyro-login:install --with-passkeys
```

> **Updating to 2.3.0+?** Run `php artisan migrate` to set up the invitation/referral system.

Quick tour
----------

[](#quick-tour)

### Layouts

[](#layouts)

10 layouts are one env var away:

```
TYRO_LOGIN_LAYOUT=centered        # or: split-left, split-right, fullscreen, card,
                                  #     youtube-video, animated-birds, aurora-waves,
                                  #     particle-network, tidal
TYRO_LOGIN_BACKGROUND_IMAGE=https://your-app.com/bg.jpg   # for split/fullscreen layouts
```

### Email OTP (two-factor via email)

[](#email-otp-two-factor-via-email)

```
TYRO_LOGIN_OTP_ENABLED=true
TYRO_LOGIN_OTP_LENGTH=6
TYRO_LOGIN_OTP_EXPIRE=5
```

### TOTP 2FA (authenticator apps)

[](#totp-2fa-authenticator-apps)

```
TYRO_LOGIN_2FA_ENABLED=true
TYRO_LOGIN_2FA_ALLOW_SKIP=false   # force setup after login
TYRO_LOGIN_2FA_FORCED_ROLES=admin,superadmin
```

### Social login

[](#social-login)

```
TYRO_LOGIN_SOCIAL_ENABLED=true
TYRO_LOGIN_SOCIAL_GOOGLE=true
TYRO_LOGIN_SOCIAL_GITHUB=true
# add client credentials to config/services.php
```

### Passkeys (passwordless WebAuthn)

[](#passkeys-passwordless-webauthn)

```
php artisan tyro-login:setup-passkeys
```

Add the `PasskeyAuthenticatable` trait and `PasskeyUser` contract to your User model, then enable:

```
TYRO_LOGIN_PASSKEYS_ENABLED=true
```

### Magic links

[](#magic-links)

```
TYRO_LOGIN_ENABLE_MAGIC_LINKS=true
```

### Lockout protection

[](#lockout-protection)

```
TYRO_LOGIN_LOCKOUT_MAX_ATTEMPTS=5
TYRO_LOGIN_LOCKOUT_DURATION=15
```

CLI at a glance
---------------

[](#cli-at-a-glance)

### Install &amp; Setup

[](#install--setup)

CommandDescription`tyro-login:install`Install the package and publish configuration`tyro-login:install --with-social`Install with social login support`tyro-login:install --with-passkeys`Install with passkey (WebAuthn) support`tyro-login:setup-passkeys`Enable passkeys on an existing installation`tyro-login:setup-ai-skill`Install the Tyro AI skill for your agent`tyro-login:status`Show configuration and feature status### Publishing &amp; Maintenance

[](#publishing--maintenance)

CommandDescription`tyro-login:publish`Publish config, views, email templates, and assets`tyro-login:publish-style`Publish styles (theme + components)`tyro-login:publish-style --theme-only`Publish only theme variables`tyro-login:update-style`Update published styles`tyro-login:update-config`Sync the latest config values### User Management

[](#user-management)

CommandDescription`tyro-login:verify-user`Verify a user's email (by ID/email or `--all`)`tyro-login:unverify-user`Remove email verification (by ID/email or `--all`)`tyro-login:reset-2fa`Reset a user's 2FA (by ID or email)`tyro-login:invite-links`Create, list, remove, or flush invitation links`tyro-login:magic-links`Create, list, remove, or flush magic links### Info

[](#info)

CommandDescription`tyro-login:version`Display the installed version`tyro-login:doc`Open the documentation`tyro-login:star`Open GitHub to star the repositoryRun `php artisan list tyro-login` to see every available command.

Configuration
-------------

[](#configuration)

All options are env-configurable. Publish the config to customize further:

```
php artisan tyro-login:publish --config
```

### General

[](#general)

Env varDefaultDescription`TYRO_LOGIN_USER_MODEL``App\Models\User`User model Tyro Login operates on`TYRO_LOGIN_DEBUG``false`Privacy-safe debug logging (never enable in production)### Layouts

[](#layouts-1)

Env varDefaultDescription`TYRO_LOGIN_LAYOUT``centered`Auth page layout (10 options)`TYRO_LOGIN_BACKGROUND_IMAGE`Unsplash defaultBackground image for split/fullscreen layouts#### Video background

[](#video-background)

Env varDefaultDescription`TYRO_LOGIN_VIDEO_URL`default videoYouTube URL or ID for the video layout`TYRO_LOGIN_VIDEO_BLUR``0px`Video background blur`TYRO_LOGIN_VIDEO_OVERLAY_COLOR``#111827`Video overlay color`TYRO_LOGIN_VIDEO_OVERLAY_OPACITY``0.1`Video overlay opacity`TYRO_LOGIN_VIDEO_SOUND``false`Play video with sound#### Animated backgrounds

[](#animated-backgrounds)

Env varDefaultDescription`TYRO_LOGIN_BIRDS_COLOR``#f7f2ec`Animated birds scene color`TYRO_LOGIN_AURORA_COLOR``#0b1020`Aurora waves base color`TYRO_LOGIN_AURORA_SPEED``1`Aurora animation speed multiplier`TYRO_LOGIN_AURORA_INTENSITY``0.5`Aurora ribbon opacity/intensity`TYRO_LOGIN_PARTICLE_COLOR``#0f172a`Particle network base color`TYRO_LOGIN_PARTICLE_DENSITY``80`Particle density (approx count at 1280x720)`TYRO_LOGIN_PARTICLE_LINK_DISTANCE``130`Max px distance for node links`TYRO_LOGIN_PARTICLE_INTERACTIVE``true`Nodes react to the mouse cursor`TYRO_LOGIN_TIDAL_COLOR``#1f7a8c`Tidal primary water color`TYRO_LOGIN_TIDAL_SPEED``1`Tidal wave animation speed multiplier`TYRO_LOGIN_TIDAL_BUBBLES``true`Show rising bubbles### Branding

[](#branding)

Env varDefaultDescription`TYRO_LOGIN_APP_NAME``Laravel`App name shown on auth pages`TYRO_LOGIN_LOGO``null`Logo URL (null uses text logo)`TYRO_LOGIN_LOGO_DARK``null`Dark-mode logo URL`TYRO_LOGIN_LOGO_HEIGHT``48px`Logo display height`TYRO_LOGIN_LOGO_BORDER_RADIUS``0`Logo corner radius (e.g. `50%`)### Routes &amp; redirects

[](#routes--redirects)

Env varDefaultDescription`TYRO_LOGIN_ROUTE_PREFIX``''`Prefix for all auth routes`TYRO_LOGIN_REDIRECT_AFTER_LOGIN``/`Redirect after successful login`TYRO_LOGIN_REDIRECT_AFTER_LOGOUT``/login`Redirect after logout`TYRO_LOGIN_REDIRECT_AFTER_REGISTER``/`Redirect after registration`TYRO_LOGIN_REDIRECT_AFTER_EMAIL_VERIFICATION``/login`Redirect after email verification### Registration &amp; verification

[](#registration--verification)

Env varDefaultDescription`TYRO_LOGIN_REGISTRATION_ENABLED``true`Enable or disable registration`TYRO_LOGIN_REGISTRATION_AUTO_LOGIN``true`Log in users automatically after registration`TYRO_LOGIN_REQUIRE_EMAIL_VERIFICATION``false`Require email verification after registration`TYRO_LOGIN_VERIFICATION_EXPIRE``60`Email verification token expiry (minutes)`TYRO_LOGIN_PASSWORD_RESET_EXPIRE``60`Password reset token expiry (minutes)### Login &amp; magic links

[](#login--magic-links)

Env varDefaultDescription`TYRO_LOGIN_FIELD``email`Login field: `email`, `username`, or `both``TYRO_LOGIN_REMEMBER_ME``true`Show remember-me checkbox`TYRO_LOGIN_FORGOT_PASSWORD``true`Show forgot-password link`TYRO_LOGIN_DISABLE_PASSWORD``false`Disable password login entirely`TYRO_LOGIN_ENABLE_MAGIC_LINKS``false`Enable magic link login`TYRO_LOGIN_MAGIC_LINK_EXPIRE``5`Magic link expiry (minutes)### Passwords

[](#passwords)

Env varDefaultDescription`TYRO_LOGIN_PASSWORD_MIN_LENGTH``8`Minimum password length`TYRO_LOGIN_PASSWORD_MAX_LENGTH``null`Maximum password length`TYRO_LOGIN_PASSWORD_REQUIRE_CONFIRMATION``true`Require password confirmation`TYRO_LOGIN_PASSWORD_REQUIRE_UPPERCASE``false`Require an uppercase letter`TYRO_LOGIN_PASSWORD_REQUIRE_LOWERCASE``false`Require a lowercase letter`TYRO_LOGIN_PASSWORD_REQUIRE_NUMBERS``false`Require a number`TYRO_LOGIN_PASSWORD_REQUIRE_SPECIAL_CHARS``false`Require a special character`TYRO_LOGIN_PASSWORD_CHECK_COMMON``false`Block common or compromised passwords`TYRO_LOGIN_PASSWORD_DISALLOW_USER_INFO``false`Reject passwords containing user info### Passkeys

[](#passkeys)

Env varDefaultDescription`TYRO_LOGIN_PASSKEYS_ENABLED``false`Enable passkey (WebAuthn) login`TYRO_LOGIN_PASSKEYS_CDN``https://esm.sh/@laravel/passkeys`Browser client URL (override to self-host)`TYRO_LOGIN_PASSKEYS_ROUTE``passkeys-setup`Auth-guarded setup page path (relative to prefix)`TYRO_LOGIN_PASSKEYS_REMOVE_ROUTE``remove-passkeys`Auth-guarded manage/remove page path`TYRO_LOGIN_PASSKEYS_DIVIDER``or continue with email`Divider under the passkey button`TYRO_LOGIN_PASSKEYS_LOGIN_BUTTON``Sign in with a passkey`Login button label`TYRO_LOGIN_PASSKEYS_SETUP_TITLE``Create a Passkey`Setup page title`TYRO_LOGIN_PASSKEYS_SETUP_SUBTITLE``Set up a passkey for faster, passwordless sign-in.`Setup page subtitle`TYRO_LOGIN_PASSKEYS_SETUP_BUTTON``Create passkey`Setup button label`TYRO_LOGIN_PASSKEYS_REMOVE_TITLE``Your Passkeys`Manage page title`TYRO_LOGIN_PASSKEYS_REMOVE_SUBTITLE``Review and remove the passkeys linked to your account.`Manage page subtitle`TYRO_LOGIN_PASSKEYS_REMOVE_BUTTON``Remove`Remove button label`TYRO_LOGIN_PASSKEYS_EMPTY_TEXT``You don't have any passkeys yet.`Empty state text### Email OTP

[](#email-otp)

#### Settings

[](#settings)

Env varDefaultDescription`TYRO_LOGIN_OTP_ENABLED``false`Enable email OTP login`TYRO_LOGIN_OTP_LENGTH``4`OTP length (4-8 digits)`TYRO_LOGIN_OTP_EXPIRE``5`OTP expiry (minutes)`TYRO_LOGIN_OTP_MAX_RESEND``3`Maximum OTP resends`TYRO_LOGIN_OTP_RESEND_COOLDOWN``60`Seconds between resends#### Texts

[](#texts)

Env varDefaultDescription`TYRO_LOGIN_OTP_TITLE``Enter Verification Code`Page title`TYRO_LOGIN_OTP_SUBTITLE``We've sent a :length-digit code to :email`Page subtitle (`:email` placeholder)`TYRO_LOGIN_OTP_LABEL``Verification Code`Input label`TYRO_LOGIN_OTP_PLACEHOLDER``Enter code`Input placeholder`TYRO_LOGIN_OTP_SUBMIT_BUTTON``Verify`Submit button text`TYRO_LOGIN_OTP_RESEND_BUTTON``Resend Code`Resend button text`TYRO_LOGIN_OTP_ERROR``Invalid or expired verification code.`Error message`TYRO_LOGIN_OTP_RESEND_SUCCESS``A new verification code has been sent to your email.`Resend success message`TYRO_LOGIN_OTP_MAX_RESEND_ERROR``Maximum resend attempts reached. Please try logging in again.`Max-resend error message`TYRO_LOGIN_OTP_BG_TITLE``Almost There!`Split-layout background title`TYRO_LOGIN_OTP_BG_DESCRIPTION``Enter the verification code we sent to your email to complete the login process.`Split-layout background description### TOTP 2FA

[](#totp-2fa)

Env varDefaultDescription`TYRO_LOGIN_2FA_ENABLED``false`Enable TOTP two-factor authentication`TYRO_LOGIN_2FA_ALLOW_SKIP``false`Allow users to skip 2FA setup`TYRO_LOGIN_2FA_IGNORE_COOKIE_DAYS``30`Days the skip-and-ignore cookie lasts`TYRO_LOGIN_2FA_FORCED_ROLES``''`Comma-separated roles that must set up 2FA`TYRO_LOGIN_2FA_SETUP_TITLE``Two Factor Authentication`Setup page title`TYRO_LOGIN_2FA_SETUP_SUBTITLE``Scan the QR code with your authenticator app.`Setup page subtitle`TYRO_LOGIN_2FA_CHALLENGE_TITLE``Two Factor Authentication`Challenge page title`TYRO_LOGIN_2FA_CHALLENGE_SUBTITLE``Enter the code from your authenticator app.`Challenge page subtitle### Captcha

[](#captcha)

Env varDefaultDescription`TYRO_LOGIN_CAPTCHA_LOGIN``false`Enable math captcha on login`TYRO_LOGIN_CAPTCHA_REGISTER``false`Enable math captcha on registration`TYRO_LOGIN_CAPTCHA_LABEL``Security Check`Captcha label text`TYRO_LOGIN_CAPTCHA_PLACEHOLDER``Enter the answer`Captcha placeholder text`TYRO_LOGIN_CAPTCHA_ERROR``Incorrect answer. Please try again.`Error message`TYRO_LOGIN_CAPTCHA_MIN``1`Minimum number in the math operation`TYRO_LOGIN_CAPTCHA_MAX``10`Maximum number in the math operation### Lockout protection

[](#lockout-protection-1)

Env varDefaultDescription`TYRO_LOGIN_LOCKOUT_ENABLED``true`Enable lockout protection`TYRO_LOGIN_LOCKOUT_MAX_ATTEMPTS``5`Failed attempts before lockout`TYRO_LOGIN_LOCKOUT_DURATION``15`Lockout duration (minutes)`TYRO_LOGIN_SHOW_ATTEMPTS_LEFT``false`Show remaining attempts in error messages`TYRO_LOGIN_LOCKOUT_AUTO_REDIRECT``true`Auto-redirect to login when lockout expires`TYRO_LOGIN_LOCKOUT_MESSAGE``Too many failed login attempts. Please try again in :minutes minutes.`Lockout page message (`:minutes` placeholder)`TYRO_LOGIN_LOCKOUT_TITLE``Account Temporarily Locked`Lockout page title`TYRO_LOGIN_LOCKOUT_SUBTITLE``For your security, we've temporarily locked your account.`Lockout page subtitle### Email notifications

[](#email-notifications)

Env varDefaultDescription`TYRO_LOGIN_EMAIL_OTP``true`Send OTP email`TYRO_LOGIN_EMAIL_OTP_SUBJECT``Your Verification Code`OTP email subject`TYRO_LOGIN_EMAIL_PASSWORD_RESET``true`Send password reset email`TYRO_LOGIN_EMAIL_PASSWORD_RESET_SUBJECT``Reset Your Password`Password reset email subject`TYRO_LOGIN_EMAIL_VERIFY``true`Send email verification email`TYRO_LOGIN_EMAIL_VERIFY_SUBJECT``Verify Your Email Address`Verification email subject`TYRO_LOGIN_EMAIL_WELCOME``true`Send welcome email`TYRO_LOGIN_EMAIL_WELCOME_SUBJECT``null`Welcome email subject (null = app name default)`TYRO_LOGIN_EMAIL_MAGIC_LINK``true`Send magic link email`TYRO_LOGIN_EMAIL_MAGIC_LINK_SUBJECT``Your Magic Login Link`Magic link email subject### Social login

[](#social-login-1)

Env varDefaultDescription`TYRO_LOGIN_SOCIAL_ENABLED``false`Enable social login`TYRO_LOGIN_SOCIAL_GOOGLE``false`Enable Google provider`TYRO_LOGIN_SOCIAL_FACEBOOK``false`Enable Facebook provider`TYRO_LOGIN_SOCIAL_GITHUB``false`Enable GitHub provider`TYRO_LOGIN_SOCIAL_TWITTER``false`Enable Twitter/X provider`TYRO_LOGIN_SOCIAL_LINKEDIN``false`Enable LinkedIn provider`TYRO_LOGIN_SOCIAL_BITBUCKET``false`Enable Bitbucket provider`TYRO_LOGIN_SOCIAL_GITLAB``false`Enable GitLab provider`TYRO_LOGIN_SOCIAL_SLACK``false`Enable Slack provider`TYRO_LOGIN_SOCIAL_LINK_EXISTING``true`Link social accounts to existing users by email`TYRO_LOGIN_SOCIAL_AUTO_REGISTER``true`Auto-create users from social login`TYRO_LOGIN_SOCIAL_AUTO_VERIFY_EMAIL``true`Auto-verify email after social login`TYRO_LOGIN_SOCIAL_DIVIDER``Or continue with`Text above social buttons### Tyro integration

[](#tyro-integration)

Env varDefaultDescription`TYRO_LOGIN_ASSIGN_DEFAULT_ROLE``true`Assign default role to new users (Tyro integration)`TYRO_LOGIN_DEFAULT_ROLE_SLUG``user`Default role slug for new users### Page text

[](#page-text)

#### Titles &amp; subtitles

[](#titles--subtitles)

Env varDefaultDescription`TYRO_LOGIN_VERIFY_EMAIL_TITLE``Verify Your Email`Verify-email page title`TYRO_LOGIN_VERIFY_EMAIL_SUBTITLE``We've sent a verification link to your email address.`Verify-email page subtitle`TYRO_LOGIN_EMAIL_NOT_VERIFIED_TITLE``Email Not Verified`Email-not-verified page title`TYRO_LOGIN_EMAIL_NOT_VERIFIED_SUBTITLE``Please verify your email address to continue.`Email-not-verified page subtitle`TYRO_LOGIN_FORGOT_PASSWORD_TITLE``Forgot Password?`Forgot-password page title`TYRO_LOGIN_FORGOT_PASSWORD_SUBTITLE``Enter your email and we'll send you a reset link.`Forgot-password page subtitle`TYRO_LOGIN_RESET_PASSWORD_TITLE``Reset Password`Reset-password page title`TYRO_LOGIN_RESET_PASSWORD_SUBTITLE``Enter your new password below.`Reset-password page subtitle#### Split-layout background copy

[](#split-layout-background-copy)

Env varDefaultDescription`TYRO_LOGIN_BG_TITLE``Welcome Back!`Login page background title`TYRO_LOGIN_BG_DESCRIPTION``Sign in to access your account and continue where you left off. We're glad to see you again.`Login page background description`TYRO_LOGIN_REGISTER_BG_TITLE``Join Us Today!`Register page background title`TYRO_LOGIN_REGISTER_BG_DESCRIPTION``Create your account and start your journey with us. It only takes a minute to get started.`Register page background description`TYRO_LOGIN_VERIFY_EMAIL_BG_TITLE``Check Your Email`Verify-email background title`TYRO_LOGIN_VERIFY_EMAIL_BG_DESCRIPTION``We've sent a verification link to your email address. Click the link to verify your account.`Verify-email background description`TYRO_LOGIN_EMAIL_NOT_VERIFIED_BG_TITLE``Email Verification Required`Email-not-verified background title`TYRO_LOGIN_EMAIL_NOT_VERIFIED_BG_DESCRIPTION``Your email address needs to be verified before you can access your account.`Email-not-verified background description`TYRO_LOGIN_FORGOT_PASSWORD_BG_TITLE``Forgot Your Password?`Forgot-password background title`TYRO_LOGIN_FORGOT_PASSWORD_BG_DESCRIPTION``No worries! Enter your email and we'll send you a link to reset your password.`Forgot-password background description`TYRO_LOGIN_RESET_PASSWORD_BG_TITLE``Reset Your Password`Reset-password background title`TYRO_LOGIN_RESET_PASSWORD_BG_DESCRIPTION``Create a new secure password for your account.`Reset-password background descriptionCustomization
-------------

[](#customization)

Publish views, email templates, or everything:

```
php artisan tyro-login:publish --views
php artisan tyro-login:publish --emails
php artisan tyro-login:publish
```

Theme via shadcn CSS variables (publish-only-theme workflow):

```
php artisan tyro-login:publish-style --theme-only
```

Edit `resources/views/vendor/tyro-login/partials/shadcn-theme.blade.php`, or use the visual editor at [tweakcn.com](https://tweakcn.com).

Security
--------

[](#security)

Tyro Login ships with industry-standard security out of the box:

- **Encrypted storage** for OAuth tokens at rest (Laravel encryption)
- **Cryptographically secure** OTP generation (`random_int`)
- **Session regeneration** on login and logout to prevent fixation attacks
- **CSRF-protected** forms and logout (POST only)
- **Lockout protection** against brute-force attempts (cache-based)
- **Signed, expiring URLs** for email verification and password reset
- **Privacy-safe debug logging** with masked email addresses

Integration with Tyro
---------------------

[](#integration-with-tyro)

Tyro Login integrates seamlessly with the [Tyro](https://github.com/hasinhayder/tyro) package: when a new user registers, Tyro Login can automatically assign a default role. Ensure your User model uses the `HasTyroRoles` trait:

```
use HasinHayder\Tyro\Concerns\HasTyroRoles;

class User extends Authenticatable
{
    use HasTyroRoles;
}
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security
--------

[](#security-1)

If you discover any security-related issues, please email  instead of using the issue tracker.

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE) for more information.

Credits
-------

[](#credits)

- [Hasin Hayder](https://github.com/hasinhayder)

---

Made with love for the Laravel community by Hasin Hayder

###  Health Score

59

—

FairBetter than 98% of packages

Maintenance95

Actively maintained with recent releases

Popularity46

Moderate usage in the ecosystem

Community24

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 99% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~5 days

Total

44

Last Release

46d ago

Major Versions

v1.6.3 → v2.0.02025-12-07

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/490779?v=4)[Hasin Hayder](/maintainers/HasinHayder)[@hasinhayder](https://github.com/hasinhayder)

---

Top Contributors

[![hasinhayder](https://avatars.githubusercontent.com/u/490779?v=4)](https://github.com/hasinhayder "hasinhayder (194 commits)")[![faisalahammad](https://avatars.githubusercontent.com/u/13257516?v=4)](https://github.com/faisalahammad "faisalahammad (1 commits)")[![phplime](https://avatars.githubusercontent.com/u/56013523?v=4)](https://github.com/phplime "phplime (1 commits)")

---

Tags

authenticationjavascriptlaravelloginphpsanctumsocial-logintyrolaraveluiauthAuthenticationbladeoauthsocialiteloginregister

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/hasinhayder-tyro-login/health.svg)

```
[![Health](https://phpackages.com/badges/hasinhayder-tyro-login/health.svg)](https://phpackages.com/packages/hasinhayder-tyro-login)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.7M3.4k](/packages/craftcms-cms)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.4M354](/packages/psalm-plugin-laravel)[hasinhayder/tyro-dashboard

Tyro Dashboard - Beautiful admin dashboard for managing Tyro roles, privileges, users, and settings

5495.1k](/packages/hasinhayder-tyro-dashboard)[barryvdh/laravel-debugbar

PHP Debugbar integration for Laravel

19.3k136.0M827](/packages/barryvdh-laravel-debugbar)[statamic/cms

The Statamic CMS Core Package

4.9k3.8M1.2k](/packages/statamic-cms)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9922.4M146](/packages/roots-acorn)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
