Laravel Tinker

A powerful REPL console for interacting with a full Laravel application from the command line

Tool
Composer
vv3.0.2
7,441 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
67 /100 Good
Development Activity 64
Maintenance 48
Community 56
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
77 /100 Good
Architecture 75
Code Quality 82
Innovation 60
Learning Curve 92

Laravel Tinker is the official REPL (read-eval-print loop) for Laravel, built on top of PsySH, that boots a full Laravel application and drops the developer into an interactive PHP shell with access to Eloquent models, service container bindings, config, and helper functions exactly as they exist at runtime.

It ships as the php artisan tinker command and is included by default in every new Laravel application, making it the standard way to quickly query the database, test a snippet of business logic, or inspect application state without writing a throwaway script or route.

What You Get

  • The php artisan tinker command, wired in automatically via TinkerServiceProvider on every Laravel app
  • A PsySH-backed REPL with tab completion, multi-line editing, and Laravel-aware value casters (TinkerCaster) for pretty-printing Eloquent models and collections
  • A whitelist of safe Artisan commands (migrate, env, optimize, etc.) runnable directly from inside the shell
  • A ClassAliasAutoloader that lets classes be referenced by short alias names inside the REPL session
  • An --execute flag for running a single expression non-interactively and returning raw output, useful for scripting

Common Use Cases

  • Quickly querying or updating records via Eloquent models during local debugging without writing a route
  • Exploring an unfamiliar Laravel codebase’s models, relationships, and config interactively
  • Testing a snippet of business logic (e.g. a scope, an event dispatch) before committing it to a controller
  • Running one-off data fixes or investigations in production/staging via artisan tinker --execute

Under The Hood

Architecture — The package is deliberately small: TinkerServiceProvider registers the tinker Artisan command and merges the package’s config/tinker.php (which whitelists both safe Artisan commands and auto-aliased namespaces); Console/TinkerCommand does the real work, building a PsySH Configuration from the current input, registering TinkerCaster so the shell can render Eloquent models/collections nicely, and handing control to Psy\Shell::run() for the interactive loop. ClassAliasAutoloader implements PHP’s autoloading SPL interface to resolve short class aliases (e.g. App\Models\User as User) declared in config. Tech Stack — PHP 8.1+, built directly on psy/psysh (the underlying REPL engine) and symfony/var-dumper for value formatting, with illuminate/console/illuminate/contracts/illuminate/support as the Laravel-framework integration points; supports Laravel 8 through 13 via a broad version constraint. Code Quality — The codebase is four source files total, each single-responsibility (service provider, command, caster, autoloader), with a PHPUnit test suite (ClassAliasAutoloaderTest, TinkerCasterTest) and phpstan.neon.dist for static analysis, reflecting Laravel core’s typical maintenance bar for first-party packages. API Design — There is effectively zero setup: the command is auto-registered and auto-discovered by Laravel’s package-discovery mechanism, and the whitelisted-commands/auto-alias config is the only surface a developer needs to touch, which keeps the tool’s learning curve close to zero for anyone already using Artisan.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers