Ease your life by automatically performing routine actions.
This document centers on development-related things of Easer.
If you are looking for the description of Easer's functionality, please refer to the website.
There are three main topics of adding functions to Easer: mechanism, local plugin, and remote plugin.
Mechanism is the core part of Easer, and adding this requires a good understanding of Easer's code; optimization and documenting are also welcome. For most cases, what needed is to add new Event, Condition and Operation, which is done by adding local plugin or remote plugin.
Adding a local plugin needs to add your Event, Condition or Operation to the
plugins package of Easer's code. There are a few scripts to simplify the process, and existing plugins can act as examples.
Details are described in this document.
Remote Plugin is introduced in v0.7, aiming at using standalone applications to extend Easer's functionality. Each remote plugin is a stanalone app; it is in theory also possible to include multiple remote plugins in one app. Note this feature is rather new and the interface might not be stable yet (though it's unlikely the interface will change much).
Currently, only Operation can be extended as remote plugins. [This repo] is an example implementation of remote operation plugin, as well as documents. Better documentations are also welcome.
We kindly welcome anyone to contribute any amount of translation. Translations will be licensed under CC-0 by default, which effectively means they will enter Public Domain; please contact us in advance if you would like a different license.
Raising issues, commenting on issues and solving issues
If you encounter problems when using Easer, you can submit an issue. The more detail you can provide, the better -- it will let the issue be pinned down faster. You can also open an issue if you think there are features that Easer should have.
You are also welcome to comment on existing issues. If you believe you have the same problem (or idea), you can provide more information about it. Discussion is always welcome. Issue expecting ideas are labeled with RFC.
Want to do more but don't know where to start? See issues labeled with GFC (Good For Contributors) L0, L1, L2. These issues usually have clear target and involve few components; the L0, L1 and L2 are my subjective classification of the level of difficulty (ascending).
If you are a developer, you may possess the knowledge and time to solve some issues. You can fork the repo, solve the problem, and create a pull request. Then, your code can be merged, and you can be appreciated by others （and you will be listed in the Contributors list unless you don't like to). You're also welcome to create pull requests for issues not raised by others, but first, please create an issue describing what you want to do (and that you are going to do it).
If you would like to make a donation, please see DONATE.
Any amount of help is appreciated.
Copyright (c) 2016 - 2018 Rui Zhao (renyuneyun) firstname.lastname@example.org
Unless otherwise stated, the program is licensed under GPLv3+ (See LICENSE)
utils/ directory are licensed under Apache 2.0 (See
The expected functions of Easer require access to personal information (e.g. location, calendar) and networking capabilities. We would never want a tool that is expected to better facilitate our lives to spy on us, so we must prevent that from happening as best as we can. The only way to do this is to allow anyone to inspect every part of Easer, which is to say that Easer (and any derived works) must be made open source. Because of the design of Easer, functionality will eventually become modules / plugins. The GPL requires that derived works also be licensed under the GPL, and thus prevents malicious code from sneaking into these parts.
In fact, ensuring that derived works / plugins are licensed under the GPL is unnecessary -- they only need to be open source. However, GPL is the only license (that I know of) which requires that derived works / plugins are open sourced, so it's the only choice.