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: 78

Used By

Total: 0


v2018.10.03 - 2018-10-03 21:46:14

Configure All the Things!


  • new-commit configuration for auto committing when a new project is generated.
  • update-commit configuration for auto committing when a project's packages are updated.
  • version-latest-commit configuration for auto committing when a project's dependencies are all updated to their latest versions.
  • version-set-commit configuration for auto committing when a project's dependency's version is updated.


  • JSON key used to get license info during package search

v2018.09.08 - 2018-09-06 18:58:57

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.

v2018.08.11 - 2018-08-11 22:38:57

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.

v2018.06.15 - 2018-06-15 22:59:59

Hang the Fetch!

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

v2018.05.25 - 2018-05-25 17:13:53

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.

v2018.05.22 - 2018-05-22 22:44:19

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.

v2018.05.18 - 2018-05-18 22:08:12

Rewrite All the Things!

And that is just what we did. The Ether CLI has been re-built using the Console 3.0, Ether-CLI/Manifest, and Package Catalog API!

Most of the changes are internal, not much changing on the outside. There are a couple things to note:

  • There are more confirmations before. This is to help keep the packages and their versions that are installed more predictable.
  • Fetching data is slower. Because IBM deprecated their Package Catalog, we had to move to GitHub's GraphQL API, which is a bit slower.

v1.10.0 - 2018-02-16 23:36:48

All Set? Nope, Just One.

The version set command was added, allowing you to set the version of a single package.

v1.9.2 - 2017-11-27 19:09:33

Vaccination Against Faulty Code Injection

Fixed a bug that broke the manifest file when you installed the first dependency for a project.

v1.9.1 - 2017-11-17 16:34:25

Killed Sneaky Loading Bars

The Xcode regeneration loading bar is now initialized only if the xcode flag is passed, that way it doesn't close from nowhere when the command finishes running.

Xcode projects are also now opened if you regenerate it.

v1.9.0 - 2017-11-15 15:05:54

Short Xcode Fetch

Three new additions to Ether!

  1. Short flags for command options are now available.
  2. Xcode flags for commands that update the projects packages, to regenerate the Xcode project.
  3. Pre-fetching when updating the project's packages. This speeds up the instillation time, which is very helpful for projects with large or many dependencies.

v1.8.0 - 2017-11-06 15:17:59

Worm Speed

In an attempt to make installations go faster, the cache clearing has been removed from the install and remove commands, and has been placed in the fix-install command.

v1.7.0 - 2017-10-24 20:54:45

S(lick) P(erpetual) M(otion) 4

Ether now supports the SPM 4 API!

v1.6.2 - 2017-09-18 14:04:49

Hit the Target

Fixes a bug causing the dependencies array to be create multiple times or in the wrong place when the targets array was present in the package manifest.

v1.6.1 - 2017-09-15 22:03:38

No Dependencies? No Problem!

Fixed a bug that caused install to fail if the Package dependencies array was empty or non-existent.

v1.6.0 - 2017-08-02 12:01:07

Checking Package Versions

The version all command has been added, allowing you to check the version of each package install.

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

v1.5.2 - 2017-07-31 15:13:50

See the tag before the last one.

v1.5.1 - 2017-07-31 15:13:24

See previous tag.

v1.5.0 - 2017-07-31 15:12:54

What version am I using anyway?

You can now pass in the -v or --version flag to Ether to see the current version you are using.

v1.4.2 - 2017-06-02 12:07:46

Auto-Updating after Auto-Updating

version latest now updates the packages after updating their versions.

v1.4.1 - 2017-06-02 11:50:40

Reflastorizin' My Code

Created a default synchronous get(url parameters) method.

version latest only rewrites Package.swift once, instead of every time a package version is updated.

v1.4.0 - 2017-06-02 11:22:31

The Newest, or the Latest?

Added version latest to update all packages to their latest version.

v1.3.0 - 2017-05-31 17:42:36

Get the New Thing!

You can now create new projects with the swift package template, the swift executable template, or a custom saved template.

v1.2.1 - 2017-05-31 17:41:07

Minor Text Changes

The shell() method now has proper attribution.

The old version failure message for template no longer has a trailing 'å'.

v1.2.0 - 2017-05-30 18:12:48


You can now save the current state of your project as a template.

ether template <name>
ether template <name> --remove

v1.1.0 - 2017-05-25 20:29:57

Update Me

Ether can now update itself with ether update --self.

Help. Not.

It looks like the help didn't need any help.

v1.0.1 - 2017-05-25 20:05:56

Can You Help Me?

ether --help is actually helpful know 😄 .

v1.0.0 - 2017-05-25 16:21:41


I though 'Haze' could use a better name, so I settled on 'Ether.'

v0.4.0 - 2017-05-25 16:20:57

Remove Them From My Sight!

Removing packages made easier:

haze remove PerfectlySoft/Perfect

v0.3.0 - 2017-05-25 16:18:31

Update if You Didn't

haze update