# ShunCai/QZoneExport for Offline QQ Zone Backups

> QZoneExport is a TypeScript browser extension for exporting QQ Zone content into local files. It includes an offline viewer, resumable backups, and multiple media download methods, with browser-specific storage behavior.

**ShunCai/QZoneExport** — QQ空间导出助手，用于备份QQ空间的说说、日志、私密日记、相册、视频、留言板、QQ好友、收藏夹、分享、最近访客为文件，便于迁移与保存

- Repository: https://github.com/ShunCai/QZoneExport
- Website: http://lvshuncai.com
- Stars: 1,892 · Forks: 210
- Language: TypeScript
- License: Apache-2.0
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/shuncai-qzoneexport

## What QZoneExport Archives

QZoneExport addresses a specific preservation problem: QQ Zone content is distributed across posts, logs, diaries, albums, videos, messages, contacts, favorites, shares, and visitor records. The project presents these as exportable modules rather than as a general QQ management client. It is aimed at people who want a local copy for migration, archiving, or later viewing, including users who want to retain content that is otherwise tied to QQ Space and its web interface.

The scope is broader than a screenshot archive. According to the README, related comments, likes, recent visits, QQ expression images, and avatars can also be downloaded. A backup that preserves only the main text could leave out the surrounding interaction record or the media that gives the archive its meaning. The README also describes an offline viewer with a data dashboard, interaction analysis, a visitor map, and image and video galleries. Those features are part of the exported local experience, not a separate hosted service described by the repository.

The project is intended for personal learning, research, and data backup. The README places responsibility for exported content on the user, including the requirement to export only data that the user is authorized to access. It does not describe server-side synchronization, a replacement QQ API, or a guarantee that every QQ Zone page can be captured in every account configuration.

## Extension Architecture and Backup Flow

The repository layout shows a browser extension built around separate entrypoints, core TypeScript logic, and a Vue-based viewer. The extension runs in Chromium-based browsers and Firefox using Manifest V3. Core logic handles collection, downloading, exporting, and storage, while `entrypoints/` contains background code, content scripts, the backup panel, popup, options, and welcome interfaces. The viewer is built separately through Vite and placed into the extension output.

The documented user flow begins with opening QQ Space in a supported browser and logging in. A backup window then presents modules to select. The extension writes text content locally, and media can be handled through one of several methods. Progress is presented in a dedicated backup panel. The README states that the backup can continue in the background without the user remaining on the QQ Space page.

Persistence is described as incremental. The extension skips data that has already been backed up and supports resuming after interruption, which is aimed at large spaces. The documented viewer is opened from an exported `index.html`, so the output is intended to remain usable without the original QQ Space page. The repository also includes `tests/`, Vitest configuration, and TypeScript compilation scripts, indicating that the collection, download, storage, and viewer code are separated into testable or type-checked modules.

## Chromium and Firefox Storage Differences

Browser support does not mean identical storage behavior. On Chrome and Edge, the README describes File System Access writing text directly to a directory selected by the user. Firefox uses `downloads.download` and writes to the browser download directory under `QQ空间备份_<uin>/`. The account identifier appears in that Firefox path, which can be useful when maintaining more than one archive.

Media selection is independent from text placement. Chromium users can choose assistant direct writing, the browser downloader, or Aria2. Firefox offers the browser downloader or Aria2, but does not offer assistant direct writing. Direct writing on Chromium places text and media in the selected directory. Browser downloads place media in the browser download directory. Aria2 places media in the Aria2 configuration directory, so the user must merge those files into the backup directory when the viewer expects them there.

Firefox has a similar distinction. With the browser downloader, media and text share the same root under the documented backup directory. With Aria2, media is written elsewhere and must still be merged. The README says ZIP packaging has been removed because text and the viewer are written directly to disk. This is a practical constraint: a completed text export is not necessarily a complete archive until external media has been placed in the expected location.

## Installation and First Backup

The README provides official installation channels for Chrome, Edge, 360 Application Market, and Firefox. It also points to GitHub Releases for offline packages. Firefox support is documented as Manifest V3. For development, the repository specifies Node.js 22 or later and npm, with `package-lock.json` present in the repository.

Install the development dependencies with npm. The `postinstall` script runs `wxt prepare` automatically. This prepares the WXT development environment before the extension is built.

```bash
npm install
```

For a local Chromium build, the documented command builds the viewer first and then creates the Chrome production package. The output directory is `.output/QZoneExport-chrome-mv3`.

```bash
npm run build
```

For Firefox, use the separate build command documented in the README. It also builds the viewer first and produces `.output/QZoneExport-firefox-mv3`.

```bash
npm run build:firefox
```

In the browser UI, open QQ Space, log in, select the modules in the backup window, and choose a save directory when prompted. After the progress panel finishes, open the saved directory and load `index.html`. On Firefox, the text backup is placed under the browser download directory in `QQ空间备份_<uin>/`. If Aria2 is selected, the README requires the user to merge its media files into that backup directory before expecting the complete local viewer to find them.

## Development Checks and Maintenance Cost

The project provides separate commands for TypeScript checks, viewer type checks, unit tests, linting, formatting, development, packaging, and Firefox signing. The documented checks include `npm run compile`, `npm run compile:viewer`, `npm run test`, `npm run lint`, and `npm run format`. These commands provide concrete maintenance paths for contributors working on the extension or viewer.

The package uses WXT, TypeScript, Vue 3, Naive UI, Pinia, ECharts, PhotoSwipe, IndexedDB through `idb`, `chrome.storage`, and `chrome.cookies`. The `package.json` marks the package as private and identifies the license as Apache-2.0. The repository is not archived. Its last push was on 2026-10-01, and the recent release list includes V3.0 dated 2026-08-23. That indicates recent project activity, but it does not remove the ordinary maintenance burden of browser compatibility changes, QQ Space interface changes, dependency updates, and separate Firefox packaging.

The README describes `npm run sign:firefox` as a signing command for a Firefox build. It uses `web-ext sign` with local AMO credentials and is intended for self-distribution. Store publication does not require that step according to the README. Contributors should also account for the fact that Firefox and Chromium builds have different output behavior and that viewer changes require rebuilding the viewer before packaging.

## Limitations and Appropriate Alternatives

The clearest limitation is that the export workflow depends on a logged-in QQ Space session and a supported browser. The README does not document a server-side export API, cross-device synchronization, or a guarantee of uninterrupted collection if the browser session expires. It also does not say that Aria2 is bundled or configured automatically. Users selecting Aria2 must already have a working setup and must manage the separate media directory.

Aria2-based workflows can be a better fit for users who already want external download management, retry queues, or control over a download client. QZoneExport itself supports Aria2 as one media path, so the real alternative is not another product named in the repository. It is a separate approach: use the browser downloader for a self-contained local backup, or use Aria2 and accept an additional file-management step. A manual export method could also be appropriate for a small amount of content, but the repository does not document a separate manual exporter, and the viewer depends on the extension's generated structure.

The offline viewer is a feature only if the exported files remain together in the expected layout. Selecting the wrong media path can leave the text archive readable while images or videos remain elsewhere. Before adopting the extension for a large archive, verify the browser, download method, destination directory, and viewer path together rather than checking only whether text was exported.

## Conclusion

Adopt QZoneExport when you need a local archive of QQ Zone content and can manage browser storage and export directories. Do not choose it as a general-purpose QQ client replacement or assume every media path is automatic. Verify first that the extension can access the account, that the selected media method matches your browser, and that the resulting `index.html` opens locally with the expected files.

## FAQ

### Which browsers support QZoneExport?

The README documents support for Chrome, Edge, other Chromium-based browsers, and Firefox. Firefox support uses Manifest V3, while storage and media options differ between Firefox and Chromium-based browsers.

### How do I start the first QZoneExport backup?

Open QQ Space in a supported browser, log in, select modules in the backup window, and click the backup start control. Choose a save directory when prompted, then open `index.html` from the completed backup directory.

### Does QZoneExport resume interrupted backups?

The README states that backups support incremental operation and breakpoint continuation. It says already backed up data is skipped and an interrupted backup can continue.

### Why are my Aria2 media files not in the QZoneExport viewer directory?

Aria2 writes media to its configured directory, while the text backup is written according to the browser-specific backup location. The README says to merge the external media files into the backup directory yourself.

### How do I build the Firefox version?

The documented command is `npm run build:firefox`. It builds the viewer first and outputs the Firefox production package to `.output/QZoneExport-firefox-mv3`.

## Sources

- [License: Apache-2.0](https://github.com/ShunCai/QZoneExport/blob/master/LICENSE)
- [Project website](http://lvshuncai.com)
- [README](https://github.com/ShunCai/QZoneExport/blob/master/README.md)
- [Releases](https://github.com/ShunCai/QZoneExport/releases)
- [ShunCai/QZoneExport on GitHub](https://github.com/ShunCai/QZoneExport)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/shuncai-qzoneexport
