Run it anywhere. Read every answer.

Tinkr is a desktop app for Laravel Tinker and PHP. This is everything it does, in the order you meet it.

Connections

A connection is where your code runs. Tinkr has five kinds.

  • Local: a project folder on this machine. The session starts with php artisan tinker, or any command you set.
  • Container: Docker, Podman, Sail or kubectl. Pick the container and the project inside it from what is running, and Tinkr builds the exec command.
  • SSH: any server you can reach with a key or a password. A password is kept in a file only you can read, answered by the app itself, and never shown again.
  • A container on a server: what a Dokploy, Coolify or compose deploy is. The session goes over SSH and then into the container.
  • Laravel Cloud: paste an API token in Settings, pick an application and one of its environments, and the code runs inside it, with the same readings, queries and dry runs.

Tag a connection as production and Tinkr asks before a run writes to it.

Editor

Monaco, the editor inside VS Code, with suggestions for your project's own classes and their methods after ::, read from the project itself, locally and over SSH. Keyboard first: run with Ctrl R, search snippets with Ctrl K.

Snippet forms

Variables at the top of a snippet become a form. Fill it in and run, and the snippet works like a small admin panel you wrote in a minute.

Snippets and history

Save the code you come back to as a snippet of its connection. Every run is kept across restarts: the last fifty of each connection, each with its outcome, so the history reads as a ledger of what returned, what printed and what threw.

Readings

A result is read the way its value wants to be read: a tree for any structure, a table for a list of records, a graph for anything with something under it, a frame for markup, and the raw text the run printed. Copy a table, or save it as CSV.

Tinkr's main window: a PHP snippet on the left and the returned array as an expandable tree on the right
A returned array, read as a tree.

Queries

Every statement the run sent to the database, with its bindings, the time each one took, and the connection it went to.

Dry run

Run inside a transaction you can keep or take back, so a write can be looked at before it is committed. A sandbox run goes further: mail goes to the array transport, jobs and the bus to their fakes, the HTTP client answers only what it was given, every disk is faked, the cache is an array store, and the log records instead of writing. The result tells you what was caught.

Stop

A run that is going can be stopped. Run becomes Stop, and the PHP behind it is killed, inside a container or on a server.

Log viewer

Your application's logs, from storage/logs or anywhere else, in a window of their own so the editor keeps its width. Filter by any of monolog's eight levels, by a term and by a span of time. Follow a file live, or scroll back through it: older pages load as you reach the top, and only a bounded window is held, so a file larger than memory still opens.

Dark and light

One palette in two readings, across the whole app: the editor, the terminal and every pane read the same colours.

Tinkr in its light palette
The light palette.

AI completions and the AI panel

Complete snippets with OpenAI, Claude, Ollama, OpenRouter, OpenCode Zen and Go, or your own endpoint. Ask the panel about the code in front of you: the last result goes along, @ pulls in project files, and the code it proposes drops into the editor.

The AI panel in Tinkr proposing a snippet, with the last run's result attached as context
The AI panel, with your last result as context.

MCP server

Claude Code, Cursor, VS Code and other MCP clients run PHP through the same connections you use, with the same guards.

Set up the MCP server

Ready when you are.

Download Tinkr

v0.4.3 · Free and open source · All platforms