PHPackages                             tomkyle/tuplo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [CLI &amp; Console](/categories/cli)
4. /
5. tomkyle/tuplo

ActiveLibrary[CLI &amp; Console](/categories/cli)

tomkyle/tuplo
=============

Configurabe upload script for use with CLI and/or Typora

1.0.9(2y ago)013[3 PRs](https://github.com/tomkyle/tuplo/pulls)MITPHPPHP ^8.1

Since Sep 21Pushed 2y ago1 watchersCompare

[ Source](https://github.com/tomkyle/tuplo)[ Packagist](https://packagist.org/packages/tomkyle/tuplo)[ RSS](/packages/tomkyle-tuplo/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (15)Versions (14)Used By (0)

tuplo
=====

[](#tuplo)

[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](https://opensource.org/licenses/MIT) [![Tests passing](https://github.com/tomkyle/tuplo/actions/workflows/php.yml/badge.svg)](https://github.com/tomkyle/tuplo/actions/workflows/php.yml)

**tuplo is a CLI upload tool. It can be configured with YAML files. Currently, these upload methods are supported:**

- FTP
- SFTP with username/password
- SFTP with SSH key

---

Installation
------------

[](#installation)

### Using Composer

[](#using-composer)

Install *tuplo* as global command:

```
$ composer global require tomkyle/tuplo
```

Do not forget to make sure Composer’s global commands are available in `$PATH`:

```
# Unix, Linux, et al.
export PATH="/home/username/.config/composer/vendor/bin:${PATH}"
# MacOS
export PATH="/Users/you/.composer/vendor/bin:${PATH}"
```

### Linux, Unix et.al.

[](#linux-unix-etal)

Grab repo content and install dependencies. You may want to symlink it in your `~/bin` directory:

```
$ git clone git@github.com:tomkyle/tuplo.git
$ cd tuplo

# Symlink if needed
$ ln -s "${PWD}/bin/tuplo" ~/bin/tuplo
```

### MacOS

[](#macos)

**To be done, I'm working on it.**

---

Configuration
-------------

[](#configuration)

Upload configurations can be stored in a `.tuplo.yaml` file, either in `$HOME` directory or in current work directory; with the latter preceding the first. See **[tuplo.dist.yaml](./tuplo.dist.yaml)** for examples – here an example for a plain old FTP upload. In this example, “typora” is the name of a single upload configuration, it is used as CLI parameter.

```
typora:
	description : Just a plain FTP example
    method      : ftp
    downloadUrl : "https://test.com/typora"
    host        : 'ftp.test.com'
    port        : 21
    ssl         : false
    root        : 'path/to/typora'
    username    : 'ftp-username'
    password    : 'ftp-password'
```

---

Usage
-----

[](#usage)

According to the above configuration sample, CLI usage goes like this.

```
$ tuplo typora  [file] ...
```

---

Development and testing
-----------------------

[](#development-and-testing)

This repo contains **custom Git hooks** to automate *composer installs* after *composer.lock* has changed after *git pull*. Read more [here.](./git-hooks/README.md)

### Bugs and issues

[](#bugs-and-issues)

Any hints are welcome and appreciated! Open a ticket on GitHub’s [issue tracker.](https://github.com/tomkyle/tuplo/issues)

### Unit tests

[](#unit-tests)

Default configuration is **[phpunit.xml.dist](./phpunit.xml.dist).** If you like, create a custom **phpunit.xml** to apply your own settings. Also visit [phpunit.readthedocs.io](https://phpunit.readthedocs.io/) · [Packagist](https://packagist.org/packages/phpunit/phpunit)

```
$ composer phpunit
# ... or
$ vendor/bin/phpunit
```

### PhpStan

[](#phpstan)

Default configuration is **[phpstan.neon.dist](./phpstan.neon.dist).** If you like, create a custom **phpstan.neon** to apply your own settings. Also visit [phpstan.org](https://phpstan.org/) · [GitHub](https://github.com/phpstan/phpstan) · [Packagist](https://packagist.org/packages/phpstan/phpstan)

```
$ composer phpstan
# ... which includes
$ vendor/bin/phpstan analyse
```

### PhpCS

[](#phpcs)

Default configuration is **[.php-cs-fixer.dist.php](./.php-cs-fixer.dist.php).** If you like, create a custom **.php-cs-fixer.php** to apply your own settings. Also visit [cs.symfony.com](https://cs.symfony.com/) · [GitHub](https://github.com/FriendsOfPHP/PHP-CS-Fixer) · [Packagist](https://packagist.org/packages/friendsofphp/php-cs-fixer)

```
$ composer phpcs
# ... which aliases
$ vendor/bin/php-cs-fixer fix --verbose --diff --dry-run
```

Apply all CS fixes:

```
$ composer phpcs:apply
# ... which aliases
$ vendor/bin/php-cs-fixer fix --verbose --diff
```

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~33 days

Recently: every ~65 days

Total

9

Last Release

1070d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/412560?v=4)[Carsten Witt](/maintainers/tomkyle)[@tomkyle](https://github.com/tomkyle)

---

Top Contributors

[![tomkyle](https://avatars.githubusercontent.com/u/412560?v=4)](https://github.com/tomkyle "tomkyle (57 commits)")

---

Tags

cliuploadcliuploaduploadertypora

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/tomkyle-tuplo/health.svg)

```
[![Health](https://phpackages.com/badges/tomkyle-tuplo/health.svg)](https://phpackages.com/packages/tomkyle-tuplo)
```

###  Alternatives

[acmephp/acmephp

Let's Encrypt client written in PHP

649155.1k](/packages/acmephp-acmephp)[n98/magerun

Tools for managing Magento projects and installations

1.4k264.7k7](/packages/n98-magerun)[n98/magerun2

Tools for managing Magento projects and installations

928244.3k6](/packages/n98-magerun2)[ymirapp/cli

Ymir command-line tool

2619.6k](/packages/ymirapp-cli)[j13k/yaml-lint

A compact command line utility for checking YAML file syntax

161.1M19](/packages/j13k-yaml-lint)[adrianfalleiro/slim-cli-runner

Run command line tasks for Slim PHP

4290.6k2](/packages/adrianfalleiro-slim-cli-runner)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
