Skip to content

TAVPBox — Local Development Environment ​

TAVPBox adalah local development environment seperti Lando, tapi pakai Podman (bukan Docker). Hasilnya: jauh lebih irit RAM, HTTP-only (simple!), dan mendukung migrasi dari Lando.

1 laptop = banyak "VPS mini". Tiap project = 1 container terisolasi.
Lando (Docker)TAVPBox (Podman)
RAM / 20 project~3.2 GB~1.5 GB
ProtocolHTTPS (Let's Encrypt)HTTP + HTTPS (local CA + wildcard cert)
Auto domain*.lndo.site*.tavp.my.id
Mail per-projectmail.*.lndo.sitemailpit.*.tavp.my.id
Multi-stack✓✓ (TAVP/Laravel/Python/Node/Go/...)
Lando migration—✓ (full .lando.yml support)
Auto-detect recipe—✓ (composer.json/package.json/go.mod)
TimezoneUTC✓ Asia/Jakarta default
Web Panel✓✓ (built-in)

Apa itu TAVPBox? ​

TAVPBox adalah CLI tool yang bisa:

  1. Manage local development containers — create, start, stop, destroy
  2. Auto-routing domain — *.tavp.my.id → container
  3. HTTP + HTTPS — local CA with wildcard cert, auto-trusted by browser (#25, #26)
  4. Migrasi dari Lando — parse .lando.yml otomatis
  5. Auto-detect recipe — dari composer.json, package.json, go.mod, requirements.txt
  6. Events auto-execution — events.post-start jalan otomatis saat create
  7. Timezone default — Asia/Jakarta untuk semua container
  8. Web panel — manage semua project dari browser
  9. Dynamic tooling — tavpbox artisan migrate, tavpbox composer install
  10. Multi-PHP — PHP 8.3 + 8.4 dalam satu image (#27)
  11. LAN access — Windows Firewall auto-allow, accessible dari device jaringan lain (#29)

Arsitektur ​

tavpbox (Go binary)
├── CLI (cobra)
│   ├── init, create, start, stop, restart, destroy, rebuild
│   ├── ssh, list, info, logs, expose
│   ├── tooling (dynamic subcommands)
│   ├── panel (web UI)
│   ├── proxy (reverse proxy management)
│   └── config (configuration)
├── Podman client (exec wrapper)
├── Embedded Go proxy
│   ├── HTTP :80 + HTTPS :443 (local CA, on-demand cert via SNI)
│   ├── LAN ports :8081-8999
│   └── Dynamic routes (routes.json)
├── LAN port manager (fixed ports per project)
├── Service library (15 services)
├── Recipe library (7 recipes)
├── Lando parser (.lando.yml)
└── API server (REST + embedded panel)

Prasyarat ​

  • Windows: Windows 10/11 64-bit, Podman Desktop
  • macOS: Homebrew, Podman
  • Linux: Podman
  • Tidak perlu paham nginx/docker

1. Install ​

Download dari GitHub Releases:

PlatformFile
Windowstavpbox-windows-amd64.exe
macOS (Intel)tavpbox-darwin-amd64
macOS (M1/M2)tavpbox-darwin-arm64
Linux (x64)tavpbox-linux-amd64
Linux (ARM)tavpbox-linux-arm64

Add to PATH:

powershell
# Windows
move tavpbox.exe C:\Users\<you>\AppData\Local\tavpbox\

# macOS/Linux
sudo mv tavpbox /usr/local/bin/

Option 2: Build from Source ​

bash
git clone https://github.com/tavp-stack/tavpbox.git
cd tavpbox
go build -o tavpbox .

Option 3: Go Install ​

bash
go install github.com/tavp-stack/tavpbox@latest

2. Setelah Host Restart / Shutdown ​

Setelah komputer restart, jalankan satu command:

powershell
tavpbox start --all

Output:

Starting all TAVPBox containers...
  ✓ tavp-web-id → http://tavp-web-id.tavp.my.id
  ✓ lula → http://lula.tavp.my.id

Starting proxy...

✓ 2 containers started + proxy running

Atau start per-folder:

powershell
cd ~/projects/my-app
tavpbox start

3. Project Baru (tavpbox init) ​

powershell
cd ~/projects/my-app
tavpbox init

TAVPBox auto-detect recipe dari codebase:

  • composer.json dengan laravel/framework → laravel
  • composer.json dengan phalcon/cphalcon → tavp
  • composer.json (PHP biasa) → php
  • package.json → node
  • go.mod → go
  • requirements.txt / pyproject.toml → python

TUI akan muncul dengan recipe yang sudah ter-deteksi:

Project name [my-app]:
Recipe:
    [1] tavp
  > [2] laravel (detected)
    [3] php
    [4] node
    [5] go
    [6] python
    [7] blank
Select [2]:
Services (comma/space separated):
  Available: mariadb, mysql, postgres, mongodb, redis, memcached, mailpit, mailhog, phpmyadmin, adminer, elasticsearch, rabbitmq
  Default [mariadb redis mailpit]:
Webroot [public]:
RAM limit [512MB]:
CPU cores [1]:

Setelah init, file .tavpbox.yml dibuat:

yaml
name: my-app
recipe: tavp
webroot: public
services:
  mariadb:
    enabled: true
  redis:
    enabled: true
  mailpit:
    enabled: true
tooling:
  artisan:
    cmd: php artisan
  composer:
    cmd: composer
  npm:
    cmd: npm
  npx:
    cmd: npx
  php:
    cmd: php
  test:
    cmd: php artisan test
ram: 512MB
cpu: 1

4. Create Container (tavpbox create) ​

powershell
tavpbox create

Yang dilakukan:

  1. Pull image (Ubuntu 24.04, Node 20, dll)
  2. Create container dengan volume mount
  3. Start container
  4. Install recipe (nginx + PHP + composer, dll)
  5. Install services (mariadb, redis, mailpit)
  6. Run events.post-start commands (otomatis!)
  7. Configure reverse proxy

Output:

Creating box 'my-app' (tavp recipe)...
  [1/4] Pulling image docker.io/library/ubuntu:24.04...
  [2/4] Creating container...
  [3/4] Starting container...
  [4/4] Installing tavp recipe...
  Installing mariadb...
  Installing redis...
  Installing mailpit...
  Creating startup script...
  Running post-start events...

✓ Box 'my-app' created and running!
  Direct:  http://localhost:35941
  HTTP:    http://my-app.tavp.my.id
  LAN:     http://192.168.1.100:8081
  IP:      10.89.0.27
  SSH:     tavpbox ssh

Auto-create on Start ​

tavpbox start otomatis create container jika belum ada:

powershell
cd ~/projects/my-app
tavpbox start
# Container not found. Creating...
# ✓ Box 'my-app' created and running!

Jadi cukup tavpbox start — gak perlu init + create secara terpisah.


5. Akses Project ​

URLs ​

ServiceURL
Apphttp://my-app.tavp.my.id
Mailpithttp://mailpit.my-app.tavp.my.id
phpMyAdminhttp://phpmyadmin.my-app.tavp.my.id
Directhttp://localhost:<port>
LANhttp://<host-ip>:<lan-port>

Database Credentials ​

powershell
tavpbox info
 Database:
   Host:     localhost
   User:     app
   Password: app
   Database: app

6. Perintah Harian ​

Lifecycle ​

powershell
tavpbox start --all       # Start semua containers + proxy (setelah restart)
tavpbox start              # Start container di folder ini
tavpbox stop               # Stop container (RAM balik 0)
tavpbox restart            # Restart container
tavpbox destroy            # Hapus container permanen
tavpbox rebuild            # Recreate container (data tetap)

Monitoring ​

powershell
tavpbox list               # Semua container + status
tavpbox info               # Detail project (URLs, DB creds)
tavpbox logs               # Lihat logs container

SSH ​

powershell
tavpbox ssh                # Masuk terminal container
tavpbox ssh php artisan    # Jalankan command di container

Tooling ​

powershell
tavpbox tooling            # Lihat semua tooling commands
tavpbox artisan migrate    # php artisan migrate
tavpbox composer install   # composer install
tavpbox npm run dev        # npm run dev
tavpbox test               # php artisan test
tavpbox php --version      # php --version

7. Migrasi dari Lando ​

TAVPBox mendukung penuh .lando.yml. Cukup jalankan tavpbox create di folder yang ada .lando.yml.

Yang di-support: ​

  • ✅ recipe (lamp, laravel, dll)
  • ✅ services (mariadb, mysql, redis, mailpit, phpmyadmin, dll)
  • ✅ tooling (artisan, composer, npm, mysql, dll)
  • ✅ proxy (*.lndo.site → *.tavp.my.id)
  • ✅ events.post-start (build/run commands)
  • ✅ services.*.overrides.environment (env vars)
  • ✅ services.*.creds (DB credentials)

Contoh migrasi: ​

powershell
# Project Lando
cd ~/kos-kosan.id
cat .lando.yml
# name: koskosan
# recipe: lamp
# services:
#   appserver: { type: php:8.4 }
#   database: { type: mysql:8.0, creds: { user: koskosan, password: koskosan, database: koskosan } }
#   redis: { type: redis:7 }
#   mailpit: { type: mailpit }
# proxy:
#   appserver: [koskosan.lndo.site]
#   koskosan-mailpit: [mailpit.koskosan.lndo.site]

# Migrasi ke TAVPBox
tavpbox info
# Recipe:    laravel
# Services:  mariadb, redis, mailpit
# Domain:    http://koskosan.tavp.my.id
# Database:  koskosan/koskosan/koskosan

tavpbox create
# http://koskosan.tavp.my.id → jalan!

Mapping Lando → TAVPBox ​

LandoTAVPBox
*.lndo.site*.tavp.my.id
mail.*.lndo.sitemailpit.*.tavp.my.id
pma.*.lndo.sitephpmyadmin.*.tavp.my.id
services.appserver.type: php:8.4recipe: laravel
services.database.type: mariadb:11.6services.mariadb.enabled: true
services.redisservices.redis.enabled: true
services.mailpitservices.mailpit.enabled: true
tooling.artisantooling.artisan.cmd: php artisan
services.*.credsenv.DB_*

8. Database Persistence ​

Database data otomatis persist di host. Gak hilang saat rebuild.

~/.tavpbox/volumes/<project>/mysql/     → MariaDB/MySQL data
~/.tavpbox/volumes/<project>/postgres/  → PostgreSQL data

Backup ​

powershell
podman exec tavp-<project> mysqldump -u root <database> > backup.sql

Restore ​

powershell
cat backup.sql | tavpbox ssh mysql -u root

9. Recipes ​

RecipeDescriptionImageDefault Services
tavpTAVP Stack (PHP 8.3 + Nginx + Node 20)ubuntu:24.04mariadb, redis, mailpit
laravelLaravelubuntu:24.04mariadb, redis, mailpit
phpGeneric PHPubuntu:24.04mariadb, redis
nodeNode.jsnode:20-alpineredis
goGogolang:1.22-alpine—
pythonPythonpython:3.12-slimredis
blankEmpty containerubuntu:24.04—

Recipe Detail ​

TAVP Stack (tavp) ​

  • PHP 8.3 + FPM
  • Nginx
  • Node.js 20
  • Composer
  • Phalcon (optional)
  • Webroot: public

Laravel (laravel) ​

  • PHP 8.3 + FPM
  • Nginx
  • Node.js 20
  • Composer
  • Webroot: public

PHP (php) ​

  • PHP 8.3 + FPM
  • Nginx
  • Composer
  • Webroot: public

Node.js (node) ​

  • Node.js 20
  • Nginx (reverse proxy ke port 3000)
  • Yarn, pnpm
  • Webroot: .

Go (go) ​

  • Go 1.22
  • Nginx (reverse proxy ke port 8080)
  • Webroot: .

Python (python) ​

  • Python 3.12
  • Nginx (reverse proxy ke port 8000)
  • Webroot: .

Blank (blank) ​

  • Ubuntu 24.04
  • Nginx
  • Webroot: .

9. Services ​

ServiceCategoryDescriptionPort
mariadbdatabaseMySQL-compatible RDBMS3306
mysqldatabaseMySQL3306
postgresdatabasePostgreSQL5432
mongodbdatabaseNoSQL document DB27017
rediscacheIn-memory cache6379
memcachedcacheDistributed cache11211
mailpitmailEmail testing (SMTP + web UI)8025, 1025
mailhogmailEmail testing8025, 1025
phpmyadminadminDatabase admin UI8080
admineradminLightweight DB manager8080
elasticsearchsearchSearch engine9200
rabbitmqqueueMessage broker5672, 15672
beanstalkdqueueWork queue11300
apachewebserverApache HTTP server80
varnishcacheHTTP reverse proxy cache80

Service Detail ​

MariaDB (mariadb) ​

yaml
services:
  mariadb:
    enabled: true
  • Default DB: app
  • Default User: app
  • Default Password: app

Redis (redis) ​

yaml
services:
  redis:
    enabled: true
  • Default Port: 6379

Mailpit (mailpit) ​

yaml
services:
  mailpit:
    enabled: true
  • Web UI: https://mailpit.<project>.tavp.my.id
  • SMTP: port 1025

phpMyAdmin (phpmyadmin) ​

yaml
services:
  phpmyadmin:
    enabled: true
  • Web UI: https://phpmyadmin.<project>.tavp.my.id

10. Tooling ​

Tooling commands run inside the container. Define them in .tavpbox.yml:

yaml
tooling:
  artisan:
    cmd: php artisan
  composer:
    cmd: composer
  npm:
    cmd: npm
  npx:
    cmd: npx
  php:
    cmd: php
  test:
    cmd: php artisan test
  mysql:
    cmd: mysql -u app -papp app

Use them directly:

powershell
tavpbox artisan migrate
tavpbox composer install
tavpbox npm run dev
tavpbox test
tavpbox php --version
tavpbox mysql -u app -papp app

Default Tooling per Recipe ​

RecipeTooling
tavp/laravelartisan, composer, npm, npx, php, test
phpcomposer, php, test
nodenpm, npx, yarn, pnpm, node
gogo
pythonpython, pip, pytest

11. HTTP + HTTPS ​

TAVPBox mendukung HTTP :80 + HTTPS :443 — local CA dengan wildcard cert, auto-trusted oleh browser.

How it works ​

ComponentDetail
Local CAinternal/certs/ca.go — name-constrained wildcard *.tavp.my.id
On-demand certForHost() via SNI — cert dikeluarkan saat pertama kali diakses
Browser trustCA root di-install ke system trust store Windows/macOS/Linux
Auto-renewCerts cached di ~/.tavpbox/certs/, renew otomatis saat expired

Akses ​

powershell
tavpbox create
# https://myproject.tavp.my.id → langsung jalan (HTTPS)
# http://myproject.tavp.my.id  → redirect ke HTTPS

DNS *.tavp.my.id diarahkan ke 127.0.0.1 (localhost). Proxy listen :80 + :443.


12. LAN Access ​

Akses project dari device lain di jaringan yang sama.

How it works ​

  • Setiap project dapat fixed LAN port (8081, 8082, 8083, ...)
  • Port di-assign otomatis saat tavpbox create
  • Port mapping disimpan di ~/.tavpbox/lan-ports.json
  • Container publish port sebagai -p 8081:80 (bukan random)
  • Windows Firewall auto-add inbound rules untuk port 80 + 443 (#29)

Show LAN URLs ​

powershell
tavpbox expose

Output:

🌐 LAN Access

┌─────────────────────┬──────────────────────────────────────┬───────┐
│ Project             │ URL                                  │ Port  │
├─────────────────────┼──────────────────────────────────────┼───────┤
│ tavp-web-id         │ http://192.168.18.160:8081           │ 8081  │
│ lula                │ http://192.168.18.160:8082           │ 8082  │
│ koskosan            │ http://192.168.18.160:8083           │ 8083  │
└─────────────────────┴──────────────────────────────────────┴───────┘

📋 Tambahkan ke hosts device lain (opsional):
   192.168.18.160 tavp-web-id.tavp.my.id lula.tavp.my.id koskosan.tavp.my.id

Akses dari device lain ​

  1. Buka browser di device lain
  2. Ketik: http://192.168.18.160:8081
  3. (Opsional) Tambah hosts entry untuk domain access

Kenapa HTTP, bukan HTTPS? ​

MasalahPenjelasan
SimpelGak perlu setup certificate, gak perlu domain asli
Local devTraffic lokal, gak lewat internet — HTTP aman
Zero configtavpbox start → langsung jalan

Port assignment ​

ProjectLAN Port
Pertama8081
Kedua8082
Ketiga8083
......
Terakhir8999

Port tersimpan di ~/.tavpbox/lan-ports.json dan stable (tetap sama meski restart).


13. Pre-built Images ​

TAVPBox pakai pre-built images untuk performa terbaik. Semua service udah terinstall di image, jadi tavpbox create instant.

Official Images ​

ImageRecipeServices
ghcr.io/tavp-stack/tavpbox-phptavp, laravel, phpNginx, PHP 8.2, MariaDB, Redis, Mailpit, Node.js, Composer, Phalcon
ghcr.io/tavp-stack/tavpbox-nodenodeNginx, Node.js 20
ghcr.io/tavp-stack/tavpbox-gogoNginx, Go 1.22
ghcr.io/tavp-stack/tavpbox-pythonpythonNginx, Python 3.12

Custom Images ​

Developer bisa build custom image dari container yang lagi jalan:

powershell
# Install custom packages di container
tavpbox ssh
apt-get install -y php-imagick ffmpeg
exit

# Build image
tavpbox image build --name my-php-custom

# Push ke registry
tavpbox image push ghcr.io/myuser/my-php-custom:latest

# Pakai di .tavpbox.yml
echo "image: ghcr.io/myuser/my-php-custom:latest" >> .tavpbox.yml
tavpbox create  # instant!

Image Commands ​

CommandDescription
tavpbox image buildBuild custom image dari container
tavpbox image push <image>Push image ke registry
tavpbox image pull <image>Pull image dari registry
tavpbox image listList local images

14. Web Panel ​

powershell
tavpbox panel
# Opens http://localhost:8080

Features ​

  • Dashboard — semua project dengan status
  • Create Project — wizard buat project baru
  • Project Detail — logs, URLs, DB credentials
  • Service Management — start/stop/restart
  • Recipe Browser — lihat semua recipes
  • Service Browser — lihat semua services

Custom Port ​

powershell
tavpbox panel -p 3000

Stop Panel ​

powershell
tavpbox panel:stop

15. Proxy ​

TAVPBox punya embedded reverse proxy (HTTP :80 + HTTPS :443).

Commands ​

powershell
tavpbox proxy:start     # Start proxy
tavpbox proxy:stop      # Stop proxy
tavpbox proxy:status    # Status + routes

Auto-start ​

Proxy auto-start saat tavpbox create.

Routes ​

Proxy routes di ~/.tavpbox/proxy/routes.json:

json
[
  {
    "domain": "my-app.tavp.my.id",
    "ip": "127.0.0.1",
    "port": 35941
  },
  {
    "domain": "mailpit.my-app.tavp.my.id",
    "ip": "127.0.0.1",
    "port": 35219
  }
]

16. Config ​

Global Config (~/.tavpbox/config.yml) ​

powershell
tavpbox config list
  domain_suffix:     tavp.my.id
  default_ram:       512MB
  default_cpu:       1
  default_image:     docker.io/library/ubuntu:24.04
  panel_port:        8080
  default_tz:        Asia/Jakarta

Set Config ​

powershell
tavpbox config set domain_suffix tavp.my.id
tavpbox config set default_ram 1024MB
tavpbox config set default_tz Asia/Jakarta

Get Config ​

powershell
tavpbox config get domain_suffix

Timezone ​

Default timezone untuk semua container adalah Asia/Jakarta. Bisa di-change via config:

powershell
tavpbox config set default_tz Asia/Makassar

Events ​

Events auto-dijalankan saat container create/start. Support post-start:

yaml
events:
  post-start:
    - mkdir -p storage/app/framework/cache
    - mkdir -p storage/logs
    - mkdir -p storage/framework/{sessions,views,cache}
    - chown -R www-data:www-data storage bootstrap/cache

17. Multi-Platform ​

PlatformArchitectureBinary
Windowsamd64tavpbox-windows-amd64.exe
macOSamd64tavpbox-darwin-amd64
macOSarm64 (M1/M2)tavpbox-darwin-arm64
Linuxamd64tavpbox-linux-amd64
Linuxarm64tavpbox-linux-arm64

Cross-compile ​

bash
make cross
# Output: dist/tavpbox-{os}-{arch}

18. Architecture ​

tavpbox (Go binary)
├── CLI (cobra)
│   ├── init, create, start, stop, restart, destroy, rebuild
│   ├── ssh, list, info, logs, expose
│   ├── tooling (dynamic subcommands)
│   ├── panel (web UI)
│   ├── proxy (reverse proxy management)
│   └── config (configuration)
├── Podman client (exec wrapper)
│   ├── Create, Start, Stop, Restart, Remove
│   ├── Exec, ExecInteractive, Copy
│   ├── GetIP, GetHostPort, Exists
│   ├── List, Inspect, Logs
│   └── NetworkCreate, NetworkConnect
├── Embedded Go proxy
│   ├── HTTP :80 + HTTPS :443 (local CA, on-demand cert via SNI)
│   ├── LAN ports :8081-8999
│   ├── Dynamic routes (routes.json)
│   └── httputil.ReverseProxy
├── LAN port manager (fixed ports per project)
│   ├── Auto-assign (8081-8999)
│   ├── Port mapping (lan-ports.json)
│   └── Release on destroy
├── Service library (15 services)
│   ├── Database: mariadb, mysql, postgres, mongodb
│   ├── Cache: redis, memcached, varnish
│   ├── Mail: mailpit, mailhog
│   ├── Admin: phpmyadmin, adminer
│   ├── Search: elasticsearch
│   ├── Queue: rabbitmq, beanstalkd
│   └── Webserver: apache
├── Recipe library (7 recipes)
│   ├── tavp, laravel, php
│   ├── node, go, python
│   └── blank
├── Lando parser (.lando.yml)
│   ├── Service mapper
│   ├── Tooling mapper
│   ├── Environment mapper
│   ├── Events mapper (post-start)
│   ├── Proxy mapper
│   └── Build/run executor
├── Auto-detect recipe (composer.json/package.json/go.mod/requirements.txt)
├── Nginx config writer (via podman cp — avoids $ escaping)
├── Plugin engine (~/.tavpbox/plugins/)
└── API server (REST + embedded panel)
    ├── GET /api/health
    ├── GET /api/projects
    ├── GET /api/projects/{name}
    ├── POST /api/projects
    ├── POST /api/projects/{name}/start
    ├── POST /api/projects/{name}/stop
    ├── POST /api/projects/{name}/restart
    ├── DELETE /api/projects/{name}
    ├── GET /api/projects/{name}/logs
    ├── GET /api/recipes
    └── GET /api/services

19. Troubleshooting ​

Podman not found ​

Install Podman Desktop: https://podman-desktop.io

powershell
# Windows
winget install RedHat.PodmanDesktop

# macOS
brew install podman

# Linux
sudo apt install podman

Container already exists ​

powershell
tavpbox destroy
tavpbox create

Port already in use ​

powershell
tavpbox proxy:stop
tavpbox proxy:start

Domain not resolving / "No project configured" ​

powershell
# Cek proxy routes
tavpbox proxy:status

# Jika routes kosong, rebuild dari semua container
tavpbox start --all

# Atau start dari masing-masing project folder
cd ~/projects/my-app
tavpbox start

Note: Pastikan menggunakan TAVPBox ≥ v0.12.1 yang memperbaiki bug start --all tidak registrasi routes (#10).

Container won't start ​

powershell
tavpbox logs
# Cek error di logs

Lando migration issues ​

powershell
# Cek config
tavpbox info

# Rebuild
tavpbox rebuild

20. FAQ ​

TAVPBox vs Lando? ​

TAVPBox pakai Podman (bukan Docker), lebih irit RAM, dan punya web panel. Lando pakai Docker.

TAVPBox vs Docker? ​

TAVPBox pakai Podman (rootless, daemonless), lebih ringan, dan punya auto-domain + auto-detect recipe.

Bisa pakai Docker? ​

Belum. TAVPBox pakai Podman. Docker support coming soon.

Bisa di Windows? ​

Ya. Pakai Podman Desktop.

Bisa di macOS? ​

Ya. Pakai Podman (brew install podman).

Bisa di Linux? ​

Ya. Pakai Podman (apt install podman).

HTTPS? ​

Ya. TAVPBox v0.13.0+ mendukung HTTPS — local CA dengan wildcard cert *.tavp.my.id, auto-trusted oleh browser. On-demand cert via SNI (#25, #26).

Bisa migrasi dari Lando? ​

Ya. Cukup jalankan tavpbox create di folder yang ada .lando.yml.

Bisa pakai domain sendiri? ​

Ya. Set domain_suffix di config:

powershell
tavpbox config set domain_suffix mydomain.com


License ​

MIT

Released under the MIT License.