Self-hosted service
Qexo/Qexo avatar
Qexo/Qexo

Qexo: Online Management for Static Blog Workflows

A fast, powerful and beautiful online manager for all static blog frameworks.

1,955 stars405 forksPythonGPL-3.0

At a glance

What is it?
Qexo is a GPL-3.0 Django application for managing static blog sites through a web interface, with support for Hexo, Hugo, Valaxy, hosted and local Git environments, image storage providers, cache invalidation, and deployment targets such as Vercel.
Who is it for?
Qexo fits static blog operators who want a browser-based management layer and already use one of the supported frameworks, Git services, or image storage systems. It is a less suitable choice for a non-Django application, a blog framework outside the documented list, or a team that cannot operate a persistent Python web service and its database.
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?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

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

Editorial analysis

Qexo and the Static Blog Management Gap

Qexo addresses the operational work that sits around a static blog: editing posts, maintaining pages, changing site configuration, uploading images, and connecting the site to a hosting or Git workflow. The project describes itself as an online static blog editor and manager, not as a replacement for the static site generator itself. Hexo, Hugo, and Valaxy remain visible as the framework layer, while Qexo supplies a Django-based control surface for managing content and related services. That distinction matters for adoption decisions. Qexo is aimed at people who already publish or intend to publish a static blog and want a single interface for common administration tasks. It is not presented as a general-purpose CMS for arbitrary applications, a database-backed publishing system, or a framework-independent replacement for every static site generator.

The supported environment is broad enough to include different deployment models. The README names GitHub, GitLab, and Local as host options, while also mentioning deployment on platforms such as Vercel. For image assets, it lists GitHub, S3, FTP, and remote API graph-bed protocols. That gives an operator several choices for where source content and uploaded files live. It also creates a dependency on access credentials, provider-specific behavior, and persistence. The repository includes Docker and Vercel-related files, but the README excerpt does not claim that every provider works in every deployment arrangement.

Qexo's Django Control Plane and Content Data Flow

The repository layout identifies Django as the application foundation through manage.py, core/, db/, templates/, and the Django package listed in requirements.txt. The visible dependency set includes Django 5.2.11, django-mongodb-backend 5.2.3, PyMySQL, psycopg2-binary, and gunicorn 25.1.0. This indicates that Qexo is a server-side Python application with support represented for several database and serving paths. The repository also includes configuration files such as configs.example.py and .env.example. The latter contains worker and server timing settings:

bash
WORKERS=4
THREADS=4
TIMEOUT=600

These settings are associated with the Docker runtime shown in the repository. The documentation says Qexo caches articles, pages, and configuration indexes in a database, and that a webhook can clear the cache automatically. The exact request and event sequence is not documented in the README, but the stated architecture is clear enough to identify the flow: the browser manages content through the web application, Qexo stores or caches indexed content, and a webhook can request cache invalidation after a change. Git providers, image services, and notification services are external integrations rather than local implementation details.

The project also lists API expansion as a feature. That suggests the web interface is not the only possible integration surface, but the README does not document the API paths, authentication model, or extension mechanism. Engineers should not assume a public API contract without consulting the full documentation.

Qexo Editing, Media, and Notification Features

Qexo's feature list goes beyond basic post editing. The version 3.0 redesign introduced a new post editing interface, and the README specifically calls out multiple image uploads. It also lists Markdown editing with multiple editing interfaces and a what-you-see-is-what-you-get description. Site operators can use customized fields, site statistics, page management, and configuration editing, according to the README. These are administrative capabilities aimed at a single site operator or a small publishing workflow, not a documented multi-tenant permission model.

Image storage is deliberately decoupled from the generator. The listed graph-bed protocols include GitHub, S3, FTP, and remote APIs. This is useful when a blog needs uploaded images stored separately from generated site files, but it also means an administrator must configure the appropriate provider. The README does not explain credential names, upload limits, file naming behavior, deletion semantics, or how provider failures are surfaced. Those omissions are material for a production blog because an upload failure can affect editorial work even if the Git commit succeeds.

Notification integrations include Bark, Telegram, Pushdeer, and WeChat. Comment notification and logo generation are also listed. These features extend Qexo beyond Markdown editing, but the README does not specify which events trigger each notification, whether retries exist, or whether delivery failures block a publishing operation. The reCaptcha Spam Prevention item should likewise be treated as an available feature rather than a documented security guarantee. Qexo does not replace the need to configure accounts, secrets, and spam controls correctly.

Installing Qexo and Reaching a First Management Screen

The README directs users to the project documentation for installation and first-use instructions. The available repository files show the container shape, but they do not include a documented end-user command for pulling, building, starting, or initializing Qexo. Therefore, this article does not invent a Docker run command or an initialization flag. The documented starting point is the online documentation linked from the README:

bash
https://oplog.cn/qexo/

The English documentation is linked separately as:

bash
https://oplog.cn/qexo/en/

The repository's Dockerfile establishes the expected runtime shape. It builds from `python:3.12.12-alpine3.23`, installs the dependencies from `requirements.txt`, sets `DOCKER=1`, and exposes port `8000`. The runtime environment sets `WORKERS=4`, `THREADS=4`, and `TIMEOUT=600`.

dockerfile
FROM python:3.12.12-alpine3.23 AS build

The Dockerfile then creates a production stage from `python:3.12.12-alpine3.23`, copies the built application and Python runtime, exposes `8000`, and starts `/app/entrypoint.sh`. This confirms that Qexo is packaged as a Python service with a persistent or externally configured application state, but the excerpt does not specify the required database, secret keys, volume mounts, or first administrator setup. Those details belong to the linked documentation and must be checked before treating the container as a complete deployment recipe.

Where Qexo Is the Wrong Choice

Qexo is the wrong tool when the site is built with a framework not covered by its stated integrations. The README explicitly names Hexo, Hugo, and Valaxy, and says support includes, but is not limited to, its listed environments. It does not provide evidence for arbitrary generators, server-rendered applications, or non-blog sites. A team needing a conventional content management system with structured relational publishing, scheduling, and editorial workflows may find the static-blog focus too narrow.

There is also a deployment boundary. Qexo is a Django application and the repository includes a Docker image definition, but the README does not document database durability, backup procedures, horizontal scaling, or behavior during provider outages. A cache can improve access speed, yet a cache is not a substitute for a documented backup strategy. Likewise, automatic cache clearing through a webhook depends on a reachable webhook provider and correct endpoint configuration, neither of which is detailed here.

Qexo does not appear to be a source-code hosting service or a general deployment CI system. It connects to Git hosting and can support platform deployment, but the documentation excerpt does not describe branch protection, merge workflows, secret rotation, rollback, or recovery after a failed generation. Engineers who need those controls should treat them as separate responsibilities.

Qexo Compared with Direct Static Blog Administration

The real alternative is direct administration through the static site generator's own command-line workflow, files, and Git hosting interface. That approach keeps the content in the repository and uses the generator's native build and deployment process. It avoids adding a web application, a database-backed management layer, and provider integrations, but it also means that image uploads, editing convenience, cache-backed indexes, notifications, and the Qexo interface are no longer centralized.

Qexo's approach is different because it places a Django control plane between the editor and the static blog workflow. Its value is operational convenience for supported frameworks and connected services. Its cost is a larger runtime with more integration points: Git credentials, image storage, notifications, deployment targets, database configuration, and webhook behavior all become relevant. Neither approach is universally better. Direct administration is simpler when one person already knows the generator and has a reliable deployment pipeline. Qexo is more relevant when browser-based management and connected publishing services justify another service to operate.

License implications should also be considered. Qexo uses GPL-3.0. That identifies the project's license, but the README excerpt does not explain how it interacts with a particular hosting arrangement or deployment workflow. Users should review the repository `LICENSE` and the licenses of bundled or integrated components separately. The presence of GPL-3.0 alone does not answer every deployment question.

Editorial conclusion

Qexo fits static blog operators who want a browser-based management layer and already use one of the supported frameworks, Git services, or image storage systems. It is a less suitable choice for a non-Django application, a blog framework outside the documented list, or a team that cannot operate a persistent Python web service and its database. Before adoption, verify the documented installation path, persistence requirements, provider credentials, webhook behavior, and the migration path from the current Qexo version. The repository was last pushed on 2026-08-30 and lists releases 4.2.0, 4.1.1, and 4.0.1, so the maintenance record is current, but the README does not describe a compatibility matrix or a formal upgrade procedure.

Frequently asked questions

How do I install Qexo?

The README directs users to the documentation at `https://oplog.cn/qexo/` or `https://oplog.cn/qexo/en/` for installation instructions. The repository includes a Dockerfile and Python dependency files, but the README excerpt does not provide an end-user installation command.

Which static blog frameworks does Qexo support?

The README names Hexo, Hugo, and Valaxy, and says that support includes multiple hosts such as GitHub, GitLab, and Local. It does not claim universal support for every static site generator.

Can Qexo upload images and connect to external services?

According to the README, Qexo supports multiple image uploading and lists GitHub, S3, FTP, and remote APIs for graph-bed protocols. It also lists Bark, Telegram, Pushdeer, and WeChat for push notifications, but does not document setup details in the README excerpt.

Official sources

  1. License: GPL-3.0
  2. Project website
  3. Qexo/Qexo on GitHub
  4. README
  5. Releases
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/qexo-qexo.svg)](https://hysenlabs.com/projects/qexo-qexo)

Was this useful?