visus/cuid2
PHP CUID2 generator for collision-resistant, secure, URL-safe IDs built for distributed systems. Uses SHA3-512 with time and entropy for scalable uniqueness. Supports instance or static usage plus identifier validation; GMP can improve performance.
ORDER BY id in databases)./users/{cuid}).SUBSTRING or custom indexing).uuid() or ulid() with Cuid2::generate() in model bootstraps or factories.CHAR(24) (default) or CHAR(N) for custom lengths (e.g., CHAR(10)).Route::get('/users/{cuid}', ...)).cuid + uuid columns) during transition.Cuid2::isValid() can enforce format constraints in API payloads or database constraints.ext-gmp is unavailable, performance degrades 300x (SHA3-512 + base36 conversion becomes a bottleneck). Mitigate by:
composer.json or README.phpbench).Fingerprint to include additional entropy (e.g., getmypid() + microtime()).created_at column for time-based queries.SUBSTRING(id, 2, 13) for Unix epoch).Cuid2::isValid() adds CPU cost; cache results if used frequently (e.g., in API middleware).ramsey/uuid for mixed environments.created_at).ext-gmp be installed in production? If not, is the performance tradeoff acceptable?Cuid2 as a singleton for dependency injection:
// app/Providers/AppServiceProvider.php
public function register(): void {
$this->app->singleton(Cuid2::class, fn() => new Cuid2());
}
creating() hooks:
protected static function boot(): void {
static::creating(fn($model) => $model->id = app(Cuid2::class));
}
Cuid2::generate() in factories or controllers:
// app/Http/Controllers/UserController.php
public function store(Request $request) {
$user = User::create(['id' => Cuid2::generate(), ...]);
return response()->json($user);
}
CHAR(24) columns (not VARCHAR) for fixed-length storage:
Schema::create('users', fn(Blueprint $table) => {
$table->char('id', 24)->primary();
$table->timestamps();
});
Cuid2 to return deterministic values:
$mock = Mockery::mock(Cuid2::class)->makePartial();
$mock->shouldReceive('toString')->andReturn('test123');
$this->app->instance(Cuid2::class, $mock);
cuid column to a secondary table (e.g., users_cuid).Cuid2::generate() in application logic alongside existing IDs.Schema::table()->addColumn()./users/{cuid}).Route::aliasMethod() for transitional routing.users, orders).WHERE id = ?).DB::statement() for bulk updates.invoice_id).Ramsey\Uuid\Uuid vs. Visus\Cuid2\Cuid2).spatie/laravel-activitylog support CUID2.Cuid2 generation in staging (with/without GMP).composer.json to require PHP 8.2+ and ext-gmp (if critical).phpunit, pest).How can I help you explore Laravel packages today?