Library / SDK
polyrabbit/WeCron avatar
polyrabbit/WeCron

WeCron: Schedule Reminders on WeChat with Natural Language

:heavy_check_mark: 微信上的定时提醒 - Cron on WeChat

691 stars117 forksJavaScriptGPL-3.0

At a glance

What is it?
WeCron is an open-source Django application that lets WeChat users create scheduled reminders by sending natural-language messages to a WeChat Official Account, without writing cron syntax. It parses Chinese text with jieba, stores jobs in PostgreSQL, and dispatches them with APScheduler.
Who is it for?
WeCron suits developers who want to run a personal or small-team WeChat reminder service without requiring users to know cron syntax. Its GPL-3.0 license means any derivative service must also be released under GPL-3.0, which rules it out for closed-source commercial products.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What WeCron Does and Who It Is For

WeChat Official Accounts accept text messages from users and can respond programmatically. WeCron acts as a WeChat Official Account backend: a user sends a Chinese message like "remind me to call mom at 8pm tomorrow" and WeCron schedules a reminder that sends back a WeChat message at that time.

The README describes the project as a cron-on-WeChat service that has been running since 2015. It is designed for Chinese-speaking users who want conversational reminder scheduling without learning cron syntax. The target is individuals and small groups using WeChat as their primary messaging platform.

WeCron is hosted at wecron.betacat.io with a public WeChat Official Account (微定时) that demonstrates the service. The source code is GPL-3.0 licensed. The last push to the repository was on March 16, 2026.

How WeCron Parses Reminders and Fires Them

When a WeChat message arrives, WeCron extracts a time and a reminder text from the natural-language input. The parsing relies on jieba, a Chinese word segmentation library. jieba splits the input into tokens; WeCron then applies time-extraction logic to find when the reminder should fire and stores the event in PostgreSQL.

Scheduling is handled by APScheduler (version 3.0.6 in requirements.txt). APScheduler runs as a background process and dispatches reminders at their scheduled times. When a reminder fires, WeCron uses wechatpy (version 1.3.1), the WeChat Official Account SDK, to send the reminder back to the user's WeChat account.

The audio handling dependency pydub (version 0.25.1) and ffmpeg in the Dockerfile suggest that WeCron also processes voice messages, though the README does not document this path in detail. The project also uses python_dateutil and pytz for time zone handling, which is important for a service that handles reminders across different time zones.

Running WeCron Locally

WeCron requires Python, PostgreSQL, and a WeChat Official Account with webhook access. To run locally, clone the repository and install dependencies:

bash
git clone https://github.com/polyrabbit/WeCron.git
cd WeCron
pip install -r requirements.txt

Create the database and grant privileges:

bash
psql -c 'CREATE DATABASE "wecron" WITH OWNER "postgres" TEMPLATE template0 ENCODING="UTF8" CONNECTION LIMIT=-1;'
psql -c 'GRANT ALL PRIVILEGES ON DATABASE "wecron" to "postgres";'

Apply migrations and start the development server:

bash
python WeCron/manage.py migrate
python WeCron/manage.py runserver

For production, the Makefile's run-in-prod target runs the application under uWSGI. The Dockerfile uses the Python 2.7 base image from Docker Hub and exposes port 8000. The Procfile suggests deployment to platforms compatible with the Heroku build system, and the fly.toml file indicates the project has been configured for deployment on Fly.io.

An Old Stack That Requires Attention Before Deployment

The requirements.txt pins Django==1.9.1. Django 1.9 reached end-of-life in April 2017. It does not receive security patches and is incompatible with Python 3. The Dockerfile base image is python:2.7, which reached end-of-life in January 2020. A deployment based on these pinned versions would run unsupported software.

Other pinned versions include uWSGI==2.0.19, wechatpy==1.3.1, psycopg2==2.8.6, APScheduler==3.0.6, and pycrypto==2.6.1. PyCrypto in particular has known security vulnerabilities and was superseded by PyCryptodome. The Makefile's reschedule target (python WeCron/manage.py missing_reschedule) suggests a custom management command for recovering missed jobs after downtime.

The README does not document a migration path to a modern Python or Django version. Anyone running this code in production should treat it as a reference implementation and plan for dependency updates before deployment.

GPL-3.0 License Implications

WeCron uses the GNU General Public License version 3. GPL-3.0 is a copyleft license: any software that incorporates or builds on WeCron as a derivative work must also be released under GPL-3.0 when distributed. Running a modified version of WeCron as a hosted service for third-party users (software-as-a-service) triggers GPL-3.0's distribution clause, which requires making the source code available to those users.

This means building a private commercial reminder service on top of WeCron and distributing it to paying users requires releasing the modified source. Teams that need a closed-source deployment would need to either reimplement the scheduling logic independently or use a permissively licensed alternative.

The GPL-3.0 also includes a patent termination clause: any contributor who files a patent suit related to the software loses their license to the software automatically. The license does not restrict private, internal use: an organization running a modified WeCron for its own employees without distributing the software externally is not required to publish the source.

WeCron vs. EasyCron: WeChat-Native vs. HTTP-Based Scheduling

EasyCron is a hosted cron service that triggers HTTP endpoints on a schedule, defined with cron syntax. It is designed for developers who want to run server-side jobs at fixed intervals without maintaining their own scheduler infrastructure. EasyCron operates on URLs and HTTP verbs, not messaging platforms.

WeCron occupies a different space. It delivers reminders through WeChat messages to end users who interact in natural Chinese. There is no cron syntax, no URL to configure, and no webhook to expose. The primary user is a WeChat user, not a developer setting up a backend job.

The trade-off is capability versus simplicity. EasyCron handles arbitrary HTTP endpoints with full cron expressiveness across any platform. WeCron handles conversational reminders for WeChat users with natural-language input, but the delivery channel is limited to WeChat, and running it requires operating your own WeChat Official Account and server.

Editorial conclusion

WeCron suits developers who want to run a personal or small-team WeChat reminder service without requiring users to know cron syntax. Its GPL-3.0 license means any derivative service must also be released under GPL-3.0, which rules it out for closed-source commercial products. The technology stack is built on Django 1.9.1 and Python 2.7, both of which reached end-of-life years before the last push; running this on modern infrastructure requires updating the stack or accepting the security and compatibility risks of those versions. The last push to the repository was on March 16, 2026.

Frequently asked questions

What WeChat account type does WeCron require?

WeCron acts as the backend for a WeChat Official Account (公众号). You need an approved WeChat Official Account and must configure its webhook to point to your WeCron server. The wecron.betacat.io deployment provides a demo account called 微定时 that users can follow to try the service.

Does WeCron work with Python 3?

The Dockerfile uses python:2.7 and the requirements.txt pins Django==1.9.1, which is a Python 2 era stack. The repository does not document Python 3 support. Running WeCron on Python 3 would require updating Django, wechatpy, pycrypto, and several other dependencies to compatible versions.

Can WeCron be self-hosted?

Yes. The repository includes a Makefile with a run-in-prod target that starts uWSGI, a Dockerfile for containerized deployment, a fly.toml for Fly.io, and a Procfile for Heroku-compatible platforms. You need a PostgreSQL database and a WeChat Official Account configured to forward messages to your server.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. polyrabbit/WeCron on GitHub
  4. Project website
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/polyrabbit-wecron.svg)](https://hysenlabs.com/projects/polyrabbit-wecron)