# knowledge-grab pulls classroom resources out of a Chinese smart education portal

> knowledge-grab is a Tauri 2 and Vue 3 desktop app for downloading electronic textbooks and course video from the National Smart Education Platform for Primary and Secondary Schools, with batch downloads, a download pool, resumable transfers and in-app updates. It suits a parent or teacher who wants the material locally, and it depends on a platform access token that expires about once a week.

**alterem/knowledge-grab** — knowledge-grab 是一个基于 Tauri 和 Vue 3 构建的桌面应用程序，方便用户从 国家中小学智慧教育平台 (basic.smartedu.cn) 下载各类教育资源。

- Repository: https://github.com/alterem/knowledge-grab
- Stars: 566 · Forks: 51
- Language: Rust
- License: MIT
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/alterem-knowledge-grab

## One portal, one desktop app

knowledge-grab is a desktop application built on Tauri and Vue 3 that helps users download educational resources from the National Smart Education Platform for Primary and Secondary Schools, hosted at basic.smartedu.cn. The primary language of the repository is Rust, and the licence is MIT. The release history shows active development, with v2.2.0 in July 2026, v2.3.0 in August 2026 and v2.3.1 in October 2026, and the last push to the repository was on 2026-10-21. The scope is deliberately narrow. This is not a general downloader for arbitrary sites and not a video platform of its own; it is a focused client for one Chinese government education portal, and the repository also lists the author's own Tauri templates for Vue with Naive UI, Vue with Element Plus and React with Ant Design, which tells you the app is built from a house template and that the template is a reusable part of the project.

## The stack: Vue 3, Vite, Tauri and pnpm

The technical stack section names four things. The framework is Vue 3 using the Composition API, the build tool is Vite, the desktop application framework is Tauri, and the package manager is pnpm. The package manifest confirms it and adds detail. The frontend dependencies are Vue 3, vue-router, element-plus with its icon set, Tailwind CSS 4, and the Tauri API packages for the dialog, filesystem and process plugins. The dev dependencies carry the Tauri CLI, vite 8, the Vue plugin for Vite, vue-tsc, TypeScript, and a rollup plugin for obfuscator, which is the sort of addition that appears when a desktop app needs to hide its internals from casual inspection. The scripts are conventional: dev runs vite, build runs vue-tsc for the type check and then vite build, preview serves the built output, and there are clean scripts that call a shell script under scripts/ with a --all or --deps flag, plus a bump script that also does the version bump for a release. The Tauri side lives in src-tauri/ and the Vue side in src/, with the workspace file listing both.

## Running it from source in development mode

The development path is documented in three commands. The environment requirements are Node.js, the recommended LTS version, Rust, which the Tauri framework needs, and the other dependencies for building a Tauri application, with a link to the Tauri prerequisites documentation. You clone the repository and change into it.

```bash
    git clone https://github.com/alterem/knowledge-grab
    cd knowledge-grab
```

Then you install the project dependencies.

```bash
    pnpm install
```

And you start the Tauri development mode, which starts the frontend dev server and the Rust backend together.

```bash
    pnpm tauri dev
```

The application window opens and changes to the frontend code are reflected live. The dev server port is configured through the environment, with the .env.example file setting ALTEREM_PORT to 15173, and a comment in that file noting it has to be kept in sync with the devUrl setting in src-tauri/tauri.conf.json. That coupling is the kind of detail that usually bites on a fresh checkout, and the project is explicit about it.

## Building a release build of the desktop app

Packaging is a single command once the dependencies are in place.

```bash
    pnpm tauri build
```

The documentation explains that this builds the frontend project and compiles the Rust backend into an executable, producing an installer or executable for the operating system, and that the built files usually end up under src-tauri/target/release/bundle/. The distribution is therefore a normal desktop application with platform installers, and the macOS build carries a specific caveat that the FAQ answers in detail. Because the application is not signed by Apple, the first launch can be blocked with a cannot verify developer message, which is macOS Gatekeeper doing its job. The documented workaround strips the quarantine attribute from the installed bundle.

```bash
xattr -rd com.apple.quarantine /Applications/KnowledgeGrab.app
```

The path in that command has to be adjusted to the real install location. For a project distributing to end users, that is a meaningful rough edge, since the fix requires a user to run a command in a terminal before the application will open.

## The download pipeline: batch queues, retries and resumable transfers

The feature list is where this app differs from a plain downloader, and there are four parts to it. The first is bulk download by course or by textbook: you paste a directory page link from the platform's sync classroom section, or a whole textbook page link, and the application lists every lesson in that volume, lets you tick the ones you want, and adds them to the download queue. The second is global download management: clicking download adds the item to a pool that schedules the work, switching pages does not interrupt it, and you can pause, resume, retry a failure, delete a task or clear the records. The third is resumable transfer, with courseware resuming by byte and video resuming by already downloaded slice, and after the application restarts an unfinished task is marked as interrupted so you can continue it with one click. The fourth is batch download with saving by category. Video handling has an extra step worth noting: the course video is an encrypted stream that the application decrypts automatically, and configuring ffmpeg lets it then compose an MP4.

## The access token, and the week it leaves you with

The FAQ entry on 403 and 401 errors is the most important operational detail in the documentation. The platform has been redesigned and electronic textbook resources moved to servers that require login authentication, so downloading teaching material now needs a valid Access Token, which is a login credential. The application offers two routes. You can click the option to log in to the platform and obtain the token automatically, completing the login in the official login window that pops up, and the application captures and saves the token. Or you can follow the manual steps, which involve running a script in the browser console and pasting the token in. The documentation is clear about the lifetime: the token is stored only on your machine, it expires in about a week, and when it expires you get it again the same way. It also describes the failure mode during a long download, where an expired token pauses the remaining tasks automatically, and once you refresh the token you continue in the download manager, with what was already downloaded kept and the resume picking up where it stopped. That is a sensible design, but it means the tool is a weekly routine rather than a set and forget archive.

## In-app updates, and the mirror that fixes a slow one

The application checks for a new version on startup, and offers a one-click download and install. The update packages are hosted on GitHub Releases, and the documentation acknowledges that some network environments cannot reach GitHub quickly. There is a setting for a custom update source, under the section for about and updates, where you enter a mirror acceleration address as the full URL of the latest.json file. The example given looks like this.

```
https://gh-proxy.com/https://github.com/alterem/knowledge-grab/releases/latest/download/latest.json
```

The same problem, GitHub access being slow or restricted, is what the token flow and the update source both work around, and the documentation offers the Releases page as a third route, downloading the installer by hand. For a user in a slow network, the practical setup is therefore to configure the update mirror once and to expect to refresh the platform token weekly. The auto-update behaviour is worth naming precisely, because it is a silent check on launch rather than a prompt, which suits a tool that people install and forget.

## Where knowledge-grab is the wrong choice

The limits follow from the design rather than from gaps in it. The first is the dependency on a single portal, and a portal that is being redesigned around it, since the token requirement came from a platform migration and may change again. The second is the weekly credential, which means the tool cannot be scheduled unattended on a server without a human in the loop. The third is the platform, because the only documented distribution is a desktop application, so there is no headless or scripted mode for a server side or a NAS. The fourth is macOS friction, since an unsigned build that needs a terminal command before it will open is a real barrier for the parents and teachers this is aimed at, and the Windows and Linux paths are not described in the README at all. The fifth is the video pipeline, because decrypting an encrypted stream and muxing it with ffmpeg is a chain with several failure points, and the documentation does not describe what happens when the platform changes the stream format. For a one-off download of a few textbooks, the portal's own browser flow is probably simpler. For collecting a full course library offline, the batch queue and resume support are worth the setup.

## Conclusion

Adopt knowledge-grab if you want the electronic textbooks and lesson video from the National Smart Education Platform saved locally for offline use, and you are prepared to sign in to that platform from the app to obtain an access token. Do not adopt it if you need a stable long term data source, because the documentation states that the token is stored only on your machine and expires in about a week, and do not adopt it expecting other platforms, since it targets one portal. Verify two things before you rely on it: that ffmpeg is configured if you want merged MP4 course video, since the video is an encrypted stream that the application decrypts and then muxes, and that the access token flow works in your region, because the documentation says the platform moved textbook resources behind login authentication and that a token is now required to download teaching material. The practical first step is to install the released build, sign in through the app's own login window, and download one lesson before queueing a whole textbook.

## FAQ

### What is knowledge-grab?

It is a desktop application built on Tauri and Vue 3 that downloads electronic textbooks and course video or courseware from the National Smart Education Platform for Primary and Secondary Schools at basic.smartedu.cn, with a global download pool, batch downloads and resumable transfers.

### How do I build knowledge-grab from source?

Install Node.js and Rust, clone the repository, run pnpm install, then use pnpm tauri dev for the development mode or pnpm tauri build for a release build, whose output usually lands under src-tauri/target/release/bundle/.

### Why does knowledge-grab need an Access Token?

The platform was redesigned and electronic textbook resources moved to servers requiring login authentication, so downloading teaching material needs a valid token. You can log in through the app's own login window to have it captured automatically, or fetch it manually with the documented browser console steps. The token is stored only on your machine and expires in about a week.

### Why will the macOS build not open on first launch?

The application is not signed by Apple, so Gatekeeper blocks it with a cannot verify developer message. The documented fix is to remove the quarantine attribute from the installed bundle, adjusting the path to your real install location, after which the application opens normally.

### Does knowledge-grab need ffmpeg?

Only for course video. The video is an encrypted stream that the application decrypts automatically, and configuring ffmpeg is what lets it then compose the result into an MP4.

### How do I fix a slow in-app update in knowledge-grab?

The update packages are hosted on GitHub Releases, which some networks reach slowly. You can set a custom update source in the settings under about and updates, giving the full URL of the latest.json file on a mirror, or download the installer manually from the Releases page.

## Sources

- [alterem/knowledge-grab on GitHub](https://github.com/alterem/knowledge-grab)
- [Issues](https://github.com/alterem/knowledge-grab/issues)
- [License: MIT](https://github.com/alterem/knowledge-grab/blob/main/LICENSE)
- [README](https://github.com/alterem/knowledge-grab/blob/main/README.md)
- [Releases](https://github.com/alterem/knowledge-grab/releases)

---

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