> tent

Run dev dependencies as Podman containers. No Dockerfiles, no compose files.

$ tent start postgres -d # running in seconds
$ tent start redis mongo -d # multiple at once
$ tent stop --all # done for the day
Install GitHub

Tent is for local development only. It skips TLS, binds to all interfaces, and sets weak default passwords.

Why

The story behind Tent

If you do backend work, you know the drill. You need a database, maybe a cache, a message broker, a mail catcher. So you write a docker-compose file. Then another project needs different versions, so you write another one. Before long you have a graveyard of compose files, each slightly different, none of them quite right. Or worse, you're running services as system packages and they conflict with each other.

Compose files are great for defining application stacks, but they're overkill when all you want is a PostgreSQL instance to develop against. You shouldn't need to write a YAML file, pick an image, map ports, set environment variables, and figure out volumes just to get a database running locally.

Tent skips all of that. Type tent start postgres -d and you have a PostgreSQL instance running. Need Redis and Mongo too? tent start redis mongo -d. Want to run MySQL 5.7 alongside the latest on a different port? Just start it twice with different tags. Need to skip auth for quick local testing? Add --insecure. Want it to survive reboots? Add --restart always.

24 services, all pre-configured with sensible defaults. One binary, no runtime dependencies beyond Podman, no root access needed.

What you get

Features

24 pre-configured services

Databases, caches, search engines, message brokers, mail catchers. All ready to go with sensible defaults.

One command to start

tent start postgres -d and you're running. Start multiple services at once.

Multiple instances

Run different versions of the same service on different ports. MySQL 5.7 on 3307, latest on 3306.

Insecure mode

Skip authentication for quick local testing. Add --insecure and connect without passwords.

Restart policies

Keep services running across reboots with --restart always. Supports all Podman restart policies.

Interactive or default mode

Prompts let you pick tags, ports, and credentials. Or skip them all with -d for instant defaults.

Tab completion

Shell completions for Bash, Zsh, and Fish. Tab-complete service names on start and stop.

🔒

Rootless Podman

Runs through the user Podman socket. No sudo, no root daemon, no privilege escalation.

What's included

24 services

Cassandra

9042

ClickHouse

8123, 9000

CouchDB

5984

DynamoDB

8000

Elasticsearch

9200

InfluxDB

8086

MailHog

1025, 8025

Mailpit

1025, 8025

MariaDB

3306

Meilisearch

7700

Memcached

11211

MinIO

9000, 9001

MongoDB

27017

MSSQL

1433

MySQL

3306

Neo4j

7474, 7687

OpenSearch

9200, 9600

PostGIS

5432

PostgreSQL

5432

RabbitMQ

5672, 15672

Redis

6379

SurrealDB

8000

Typesense

8108

Valkey

6379

Get started

Installation

Download binary

Statically linked, no runtime dependencies beyond Podman. Grab the binary from the releases page.

$ chmod +x ./tent
$ sudo mv ./tent /usr/local/bin

Build from source

Requires Go 1.23+. No C compiler or system libraries needed — fully static build.

$ git clone https://github.com/fhsinchy/tent.git ~/tent
$ cd ~/tent
$ make install

Podman setup

Tent requires Podman and its user socket. If you have Podman installed:

# start the service
$ systemctl --user start podman.socket

# make it survive reboots
$ systemctl --user enable podman.socket

How it works

Usage

Starting services

Start with defaults using -d, or omit it for interactive prompts where you pick tags, ports, and credentials.

$ tent start mysql -d              # skip prompts, use defaults
$ tent start redis mongo -d        # start several at once
$ tent start postgres --insecure -d # no password
$ tent start redis -d --restart always

Stopping services

Stop a specific service or everything at once.

$ tent stop mysql                   # prompts if multiple instances
$ tent stop mysql --all             # all instances of mysql
$ tent stop --all                    # stop everything

Listing running services

$ tent list
 CONTAINER                   IMAGE                    PORTS
 tent-mysql-5.7-3307         docker.io/mysql:5.7      3307->3306/tcp
 tent-mysql-latest-3306      docker.io/mysql:latest   3306->3306/tcp

Running multiple versions

Run different versions on different ports. Everything is just a container.

$ tent start mysql -d              # latest on port 3306
$ tent start mysql                 # pick tag 5.7 and port 3307

Shell completion

Tab-complete service names in your shell.

# bash
$ tent completion bash > /etc/bash_completion.d/tent

# zsh
$ tent completion zsh > "${fpath[1]}/_tent"

# fish
$ tent completion fish > ~/.config/fish/completions/tent.fish