Takeout
Docker-based development-only dependency manager. macOS, Linux, and WSL2-only and installs via PHP's Composer... for now.
Install / Use
/learn @tighten/TakeoutREADME

Takeout
Takeout is a CLI tool for spinning up tiny Docker containers, one for each of your development environment dependencies.
It's meant to be paired with a tool like Laravel Valet. It's currently compatible with macOS, Linux, Windows 10 and WSL2.
With takeout enable mysql you're running MySQL, and never have to worry about managing or fixing Homebrew MySQL again.
But you can also easily enable ElasticSearch, PostgreSQL, MSSQL, Mongo, Redis, and more, with a simple command. For a current list of services, look at the classes available in this directory: https://github.com/tighten/takeout/tree/main/app/Services
Requirements
- macOS, Linux, Windows 10 or WSL2
- Docker installed (macOS: Docker for Mac, Windows: Docker for Windows)
If you opt for the PHP/Composer installation (not recommended), you also need:
- PHP installed (latest major version)
- Composer installed
Installation
The recommended way to install Takeout is the dockerized version via an alias (add this to your ~/.bashrc, ~/.zshrc or equivalent).
On Linux or macOS, use:
alias takeout="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --add-host=host.docker.internal:host-gateway -it tighten/takeout:latest"
On Windows 10|11, if you're using Bash, use:
alias takeout="docker run --rm -v //var/run/docker.sock:/var/run/docker.sock --add-host=host.docker.internal:host-gateway -it tighten/takeout:latest"
On Windows 10|11, if you're using PowerShell, use:
function takeout { docker run --rm -v //var/run/docker.sock:/var/run/docker.sock --add-host=host.docker.internal:host-gateway -it tighten/takeout:latest $args }
That's it. You may now use Takeout on your terminal. The first time you use this alias, it will pull the Takeout image from Docker Hub.
To update the image, run docker pull tighten/takeout when you want to get the newest release.
Otherwise, if you have a PHP environment available, you may install Takeout via Composer:
composer global require "tightenco/takeout:~2.9"
If you use the PHP/Composer installation, make sure you're on the latest version of PHP. We'll only support the current major version of PHP using this installation approach.
Usage
Run takeout and then a command name from anywhere in your terminal.
One of Takeout's primary benefits is that it boots ("enables") or deletes ("disables") Docker containers for your various dependencies quickly and easily.
Because Docker offers persistent volume storage, deleting a container (which we call "disabling" it) doesn't actually delete its data. That means you can enable and disable services with reckless abandon.
Enable a service
Show a list of all services you can enable.
takeout enable
Enable specific services
Passed the short name of one or more services, enable them.
takeout enable mysql
takeout enable redis meilisearch
Enable services with default parameters
If you want to skip over being asked for each parameter and just accept the defaults. This also works with multiple services in one command.
takeout enable mysql --default
takeout enable redis meilisearch --default
Passthrough Container Arguments
You may specify extra arguments to the container after a -- sepatator:
takeout enable mysql -- -hsome.mysql.host -usome-user
Notice that these are arguments for the container Entrypoint, not extra docker run options (see below).
Extra docker run Options
Under the hood, the takeout enable command generates a docker run command. Sometimes you may want to specify extra options to the docker run command such as an extra environment variable or an extra volume mapping. You can pass a string with all the extra docker run options using the --run= option:
takeout enable mysql --run="{docker-run-options}"
Which would generate the following command:
docker run {docker-run-options} {service-options} mysql/mysql-server
Where {docker-run-options} are the options you specify inside the --run option and {service-options} are generated based on the default options for that service.
Mixing docker run Options With Container Arguments
You may mix and match the run options with the container arguments:
takeout enable mysql --run="{docker-run-options}" -- -hsome.mysql.host -usome-user
Disable a service
Show a list of all enabled services you can disable.
takeout disable
Disable specific services
Passed the short name of one or more services, disable the enabled services that match them most closely.
takeout disable mysql
takeout disable redis meilisearch
Disable all services
takeout disable --all
Start a stopped container
Show a list of all stopped containers you can start.
takeout start
Start specific stopped containers
Passed the container ID of one or more stopped containers, start the stopped containers that matches them.
takeout start {container_id}
takeout start {container_id1} {container_id2}
Start all containers
You may pass the -all flag to start all enabled containers.
takeout start --all
Stop a running container
Show a list of all running containers you can stop.
takeout stop
Stop specific running containers
Passed the container ID of one or more running containers, stop the running containers that matches them.
takeout stop {container_id}
takeout stop {container_id1} {container_id2}
Get a shell inside any Takeout container
To get a shell inside any container that is started with Takeout, you may run:
takeout shell {service}
Here are some examples:
takeout shell mysql
takeout shell neo4j
takeout shell pgvector
This will open a shell inside the running container for the service you provide. Takeout will start either a bash or a sh process inside the container, depending on what the container supports.
Running multiple versions of a dependency
Another of Takeout's benefits is that it allows you to have multiple versions of a dependency installed and running at the same time. That means, for example, that you can run both MySQL 5.7 and 8.0 at the same time, on different ports.
Run takeout enable mysql twice; the first time, you'll want to choose the default port (3306) and the first version (5.7), and the second time, you'll want to choose a second port (3307), the second version (8.0) and a different volume name (so that they don't share the same mysql_data).
Now, if you run takeout list, you'll see both services running at the same time.
+--------------+----------------+---------------+-----------------------------------+
| CONTAINER ID | NAMES | STATUS | PORTS |
+--------------+----------------+---------------+-----------------------------------+
| 4bf3379ab2f5 | TO--mysql--5.7 | Up 2 seconds | 33060/tcp, 0.0.0.0:3306->3306/tcp |
| 983acf46ceef | TO--mysql--8.0 | Up 35 seconds | 33060/tcp, 0.0.0.0:3307->3306/tcp |
+--------------+----------------+---------------+-----------------------------------+
Network Details
Takeout containers are automatically added to a Docker network named takeout. This allows you to use the same aliasing and base aliasing that is used for the other containers.
Each container is given two aliases on this network:
- A base_alias based on the core dependency name (e.g. mysql, postgres)
- A full_alias combining the base alias and version (e.g. mysql8.0, postgres13)
Other containers on the takeout network can access Takeout containers by their aliases. Check this article on how you can use sail and takeout together
FAQs
<details> <summary><strong>Will this enable the PHP drivers for me via PECL?</strong></summary>Sadly, no.
</details> <details> <summary><strong>If I disable a service but Takeout still shows the port as taken, how do I proceed?</strong></summary>First, run lsof -i :3306 (where 3306 is the port that's unavailable.)
If you see output like this:
com.docke 936 mattstauffer 52u IPv6 0xc0d6f0b06d5c4efb 0t0 TCP localhost:mysql->localhost:62919 (FIN_WAIT_2)
TablePlus 96155 mattstauffer 16u IPv4 0xc0d6f0b0b6dccf6b 0t0 TCP localhost:62919->localhost:mysql (CLOSE_WAIT)
The solution is to just close your database GUI, and then it should be released.
</details> <details> <summary><strong>Why would you use this instead of `docker-compose`?</strong></summary>Using docker-compose sets up your dependencies on a project-by-project basis, which is a perfectly fine way to do things. If it makes more sense to you to have a single copy of each of your dependencies for your entire global environment, Takeout makes more sense.
Nope! Your data will stick around! By default
Related Skills
node-connect
330.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
prose
330.3kOpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.
frontend-design
81.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
sonoscli
330.3kControl Sonos speakers (discover/status/play/volume/group).
