Swiftpack.co - Package - Ether-CLI/Ether


Mentioned in Awesome Vapor Built with Swift 4.2

What is it?

Ether is a CLI the integrates with SPM (Swift Package Manager), similar to NPM's command-line tool.

How do I install it?

With Homebrew:

brew tap Ether-CLI/tap
brew install ether

If you don't have, want, or can't use Homebrew, you can run the following script to install Ether:

curl https://raw.githubusercontent.com/calebkleveter/Ether/master/install.sh | bash

What features does it have?


Searches for available packages:

ether search <name>

Example result:

Searching [Done]
vapor/vapor: 💧 A server-side Swift web framework.
License: MIT License
Stars: 13906

vapor/toolbox: Simplifies common command line tasks when using Vapor
License: MIT License
Stars: 111

matthijs2704/vapor-apns: Simple APNS Library for Vapor (Swift)
License: MIT License
Stars: 289

vapor-community/postgresql: Robust PostgreSQL interface for Swift
License: MIT License
Stars: 99



Installs a package with its dependencies:

ether install <name>

Example output:

Installing Dependency [Done]
📦  10 packages installed


dependencies: [
    .package(url: "https://github.com/vapor/console.git", from: "3.0.0"),
    .package(url: "https://github.com/vapor/core.git", from: "3.0.0"),
    .package(url: "https://github.com/vapor/vapor.git", from: "3.0.0") <=== Added Package


The install command has a rather interesting method of getting the proper package. Because you can have packages with the same name by different authors, Ether will run a search based on the argument you pass in and get the most stared result. If the name contains a slash (/), then the URL will be created directly without a search like this:


Note that this is case insensitive.

Fix Install

Fixes the install process when an error occurs during install, such as a git conflict.

ether fix-install

Example Output:

This may take some time...
Fixing Installation [Done]


Removes the package and its dependencies from the project:

ether remove <name>

Example output:

Removing Dependency [Done]
📦  2 packages removed


Updates the packages. This only needs to be run if packages are manually added.

ether update

Example output:

Updating Packages [Done]

You can pass in the --self flag to update Ether to the latest version:

ether update --self

Example output:

Updating Ether [Done]

Template Create

Saves the current state of the project as a template that can be used later when creating a new project.

ether template create <name>

Example output:

Saving Template [Done]

Template Remove

Saves the current state of the project as a template that can be used later when creating a new project.

ether template remove <name>

Example output:

Deleting Template [Done]

Template List

Saves the current state of the project as a template that can be used later when creating a new project.

ether template list

Example output:

- Vapor


Creates a project. It can be a Swift package, a Swift executable, or a project from a previously saved template.

ether new <name>

Example output:

Generating Project [Done]

Version Latest

Sets all packages to their latest versions:

ether version latest

Example output:

Updating Package Versions [Done]

Version All

Outputs the name of each package installed and its version

ether version all

Example output:

Getting Package Data [Done]
Bits: v1.0.0
Console: v2.1.0
Core: v2.0.2
Debugging: v1.0.0
JSON: v2.0.2
Node: v2.0.4

How do I make my package available?

If they are on GitHub, they already are! Ether uses GitHub's GraphQL API to fetch projects with a Package.swift file in the project root.

What license is it under?

Ether is under the MIT license.


Stars: 39
Help us keep the lights on


2018.09.08 - Sep 6, 2018

Deliver the Packages to a Playground

Added a -p,--playground option to the install command to install dependencies to an Xcode Playground instead of an SPM project. Playground installs do not support packages the use C module maps.

Also added a -t,--targets flag to the install command, which specifies which targets the new dependency will be added to.

2018.08.11 - Aug 11, 2018

Testing, Testing, Testing...


  • new command no longer fails when cleaning new project's manifest.
  • Dependency writing when last dependency has a trailing comma.
  • White space when adding first dependency to manifest.


  • --print/-p flag to config command to output config values.
  • test command, for formatted output when running swift test.

2018.06.15 - Jun 15, 2018

Hang the Fetch!

Execution of certain commands would hang while fetching package data. That should be resolved now.

2018.05.25 - May 25, 2018

Auto-Committed Template Group List

The template command was broken out to multiple commands and placed in a command group:

ether template create <NAME>
ether template remove <NAME>
ether template list

There are also more configurations available. These ones are for auto commits after installing or uninstalling a package:

  • install-commit: The commit message to use on package install. Use &0 as package name placeholder.
  • remove-commit: The commit message to use on when a package is removed. Use &0 as package name placeholder.
  • signed-commits: If set to a truthy value (true, yes, y, 1), auto-commits will pass in the -S flag

If the commit messages are not set, Ether will not commit the changes.

2018.05.22 - May 22, 2018

Config Exists

Previously an error was thrown when the config file didn't exists and access was attempted. Now we just create the file 👍.

Also, the feature list was added to the README instead of having it in a separate wiki.