A Laravel package for managing user invitations with polymorphic relationships, token-based access, scheduled reminders, and event-driven notifications.
- Polymorphic invitations - Invite users to any model (teams, organizations, projects)
- Bulk invitations - Invite multiple users at once with partial failure handling
- Token-based secure links - Shareable invitation URLs with secure tokens
- Status tracking - Pending, accepted, declined, expired, and cancelled states
- Automatic reminders - Scheduled reminder emails for pending invitations
- Event-driven - Events fired for all invitation lifecycle changes
- Structured exceptions - Error codes and resolution hints for easy debugging
- PHP 8.2+
- Laravel 11.0 or 12.0
composer require offload-project/laravel-invite-only
php artisan vendor:publish --tag="invite-only-config"
php artisan vendor:publish --tag="invite-only-migrations"
php artisan migrate// Team.php (or any model that can have invitations)
use OffloadProject\InviteOnly\Traits\HasInvitations;
class Team extends Model
{
use HasInvitations;
}// User.php
use OffloadProject\InviteOnly\Traits\CanBeInvited;
class User extends Authenticatable
{
use CanBeInvited;
}// Single invitation
$team->invite('user@example.com', [
'role' => 'member',
'invited_by' => auth()->user(),
]);
// Bulk invitations
$result = $team->inviteMany(
['one@example.com', 'two@example.com', 'three@example.com'],
['role' => 'member', 'invited_by' => auth()->user()]
);
$result->successful; // Collection of created invitations
$result->failed; // Collection of failures with reasonsuse OffloadProject\InviteOnly\Events\InvitationAccepted;
Event::listen(InvitationAccepted::class, function ($event) {
$team = $event->invitation->invitable;
$user = $event->user;
$role = $event->invitation->role;
$team->users()->attach($user->id, ['role' => $role]);
});// routes/console.php
Schedule::command('invite-only:send-reminders --mark-expired')->daily();- Getting Started - Step-by-step tutorial
- API Reference - All methods, events, and configuration
- Concepts - Lifecycle, architecture, and design decisions
composer testMIT License. See LICENSE for details.