CLI tool
whyour/qinglong avatar
whyour/qinglong

Qinglong: A Multi-Language Cron Platform That Puts Scripts First

支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台(Timed task management platform supporting Python3, JavaScript, Shell, Typescript).

19,869 stars3,234 forksTypeScriptApache-2.0

At a glance

What is it?
Qinglong is a self-hosted timed task manager for Python3, JavaScript, Shell, and TypeScript. It trades enterprise scheduling features for a script-centric workflow, and its Docker images carry a root-user caveat you should read before deploying.
Who is it for?
Adopt Qinglong if you manage many small scripts across multiple languages and want a web UI for editing, logging, and scheduling them without writing cron files. Do not adopt it if you need enterprise scheduling features like distributed workers, complex dependencies, or audit trails, and avoid the alpine image if your container must run as a non-root user.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

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

DEEP OPEN-SOURCE ANALYSIS

The Niche: Script Scheduling Without a Cronfile

Qinglong solves a specific, common annoyance: managing dozens of small automation scripts that live in different languages. Most cron implementations force you to edit crontab files, track environment variables separately, and read logs through the shell. Qinglong wraps all of that in a web interface. The README lists support for Python3, JavaScript, Shell, and TypeScript, plus online management of scripts, environment variables, and config files. It also offers second-level task scheduling, system notifications, dark mode, and mobile operation. The target user is someone who runs personal or small-team automation, not a company with a formal job orchestration stack. This is a tool for the person who has five Python scripts, two Node scripts, and a shell cleanup routine, and wants one place to see them all.

How It Works: A Web Front End Over Cron and a Built-in API

The architecture is not documented in the README beyond the feature list, but the repository layout and the built-in API link reveal the shape. The front end uses Ant Design Pro and Umijs, which suggests a React-based admin panel. The backend, written in TypeScript, exposes a built-in API that scripts can call, and a set of built-in commands for common operations. The data flow is straightforward: you create a task in the web UI, the platform stores it, and a cron-like scheduler triggers it on the second-level schedule you set. The built-in commands and API let scripts interact with the platform itself, such as reading environment variables or sending notifications. The README does not specify whether the scheduler is a custom implementation or wraps system cron, but the alpine image's crond requirement hints that the scheduler may rely on the system cron daemon in some images. That is a meaningful detail for anyone who wants to understand failure modes.

Getting It Running: Docker Images and npm Package

The README gives two deployment paths. The Docker path is the primary one. Pull the image with docker pull whyour/qinglong:latest for the alpine-based build, or whyour/qinglong:debian for the debian-slim build. A minimal run command for the debian image is: docker run -d -v /path/to/ql/data:/ql/data -p 5700:5700 --user qinglong --name qinglong whyour/qinglong:debian. The -v flag mounts a data directory, and the -p flag exposes port 5700. The npm path is npm i @whyour/qinglong, but it requires you to install node, npm, python3, pip3, and pnpm yourself. The development setup is also documented: git clone, copy .env.example to .env, install pnpm 8.3.1 globally, run pnpm install, then pnpm start. The web UI then appears at http://127.0.0.1:5700. The README points to the full installation guide at qinglong.online, so the exact first-run setup steps live there, not in the README.

The Alpine Root-User Trap and Other Limitations

The README contains a warning that is easy to miss: the alpine image's crond requires root privileges. If you need to run Docker as a non-root user, you must use the debian image and specify --user qinglong. That is a genuine constraint, not a minor detail. Alpine-based containers are popular for their small size, but this project explicitly says the alpine image will not work in a non-root context. Another limitation is dependency availability. The README advises using the debian image if you need dependencies that alpine does not support. That means your script's Python or Node dependencies may not be installable in the default image, and you will need to either switch to debian or build a custom image. The README also does not mention any authentication or multi-user access control, so you should assume this is a single-operator tool. If you need to give multiple people access with different permissions, Qinglong likely does not offer that out of the box.

Alternatives: Plain Cron Versus a Full Scheduler

The most direct alternative is system cron itself, possibly with a web front end like crontab-ui, which the README lists in its links section. crontab-ui gives you a browser interface for editing cron jobs, but it does not manage environment variables or provide a built-in API for scripts. The difference in approach is significant: crontab-ui stays close to the cron model, while Qinglong adds a layer of script management, notifications, and a built-in command set. On the other end, a full job scheduler like Apache Airflow or a cloud cron service would handle complex dependencies, retries, and distributed execution, but those are heavier and require more setup. Qinglong sits in the middle: it is lighter than Airflow but more integrated than plain cron. If your tasks are simple and self-contained, Qinglong is a reasonable fit. If you need workflow DAGs or parallel execution across machines, it is the wrong tool.

Maintenance and Upgrade Cost

The README does not provide explicit upgrade instructions, but the project's active development branch and npm package suggest a regular release cycle. Upgrading via Docker likely means pulling a new image and restarting the container, with the data volume preserving your scripts and configs. The npm path requires you to manage node, python3, and pnpm versions yourself, which adds maintenance burden. The project is licensed under Apache-2.0, which permits commercial use and modification, but you should review the license text for any specific conditions. The README names its origin in Chinese mythology, but that has no bearing on maintenance. One practical cost is the dependency on the base image: if you use alpine, you must track which dependencies are available in that image and update your own scripts when they change. The built-in API and commands are documented only via links, so you will need to read those pages to understand what changes between versions.

Who Should Skip It and What to Verify

If you already have a working cron setup and only need to schedule a few scripts, Qinglong adds a web UI and a data directory without much benefit. If you run scripts that need system packages not present in the base images, you will spend time building custom images. The README does not mention any backup or export mechanism, so you should verify that your data directory is backed up separately. Before adopting Qinglong, check the built-in API documentation to see whether it exposes the endpoints your scripts need. Also confirm that the second-level scheduling actually meets your needs; the README says it supports second-level tasks, but it does not specify the minimum interval or jitter. Finally, if you plan to run as a non-root user, test the debian image with --user qinglong in a staging environment first. The project looks solid for its niche, but the root-user warning alone is enough to justify a trial run before you commit.

Editorial conclusion

Adopt Qinglong if you manage many small scripts across multiple languages and want a web UI for editing, logging, and scheduling them without writing cron files. Do not adopt it if you need enterprise scheduling features like distributed workers, complex dependencies, or audit trails, and avoid the alpine image if your container must run as a non-root user. Before deploying, verify that your required script dependencies exist in the alpine or debian-slim base images, and check the built-in API documentation to confirm it exposes the endpoints your scripts expect.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
Community notes

Community notes