🎓 A semester-aware timetable and coursework management plugin for Super Productivity.
Manage university courses, teaching weeks, assignments, timetable imports, and calendar exports directly inside Super Productivity.
Current version 2.7.0 lets one course meet on several weekdays, adds host dark-theme support, a phone timetable that lists the whole teaching week, attribute-safe HTML escaping, and a deterministic local/CI release ZIP. See requirements and mobile audit and the development log.
- Set semester name
- Configure the first Monday of the semester
- Set the total number of teaching weeks
- Browse the timetable week by week
- Create courses with:
- One or more weekdays
- Start and end time
- Location
- Teacher
- Start and end week
- Odd / even / custom week rules
- Keep one record for a course that meets several days a week; it appears on every selected weekday
- Store course notes
- Add optional Obsidian links
- Import courses from CSV
- Import courses from ordinary HTML tables
- Automatically skip duplicate courses
- Includes a reusable CSV import template
- Create assignment tasks directly in a selected Super Productivity project
- Keep course-related work connected with your normal task workflow
- Export the timetable as an
.icscalendar file - Import the exported calendar into compatible calendar applications
- English and Chinese translations
- Automatically follows the Super Productivity language
- Uses synced plugin storage for course data and display settings
-
Go to GitHub Releases.
-
Download
sp-study-courses.zip. -
Open Super Productivity.
-
Go to:
Settings → Plugins -
Import the ZIP file.
-
Restart Super Productivity if requested.
-
Open Courses & Timetable from the plugin entry.
Install the plugin ZIP separately on each computer or phone where you use it. Once the same plugin ID is installed and SP sync is configured, semester, course, event, exception, mapping, and display data use SP synced plugin storage. Syncing data does not install plugin code. Installation, iframe loading, file import, and export were verified on physical Android and iOS devices; version 2.6.3 also follows the host dark theme and lists the whole teaching week on a phone instead of a single day. See requirements and mobile audit for per-capability status.
Requires:
Super Productivity >= 18.21.2
A CSV template is included:
Supported Chinese headers include:
课程名称,教师,地点,星期,开始时间,结束时间,开始周,结束周,周次模式,自定义周次,颜色,备注,Obsidian链接,项目
Equivalent English headers are also accepted. The weekday column accepts one day or a list, for example 周一,周三 or Mon,Wed.
A course is treated as a duplicate and skipped when the following fields match an existing course:
- Course name
- Weekdays
- Start time
- End time
The plugin:
- Reads Super Productivity project names
- Creates assignment tasks only after user confirmation
- Stores its own course data and display settings
- Exports ICS files only when requested by the user
The plugin does not:
- Delete Super Productivity tasks
- Delete projects
- Modify unrelated task data
Mobile fallbacks: paste plain text if clipboard HTML is unavailable; use CSV/HTML or paste if the WebView cannot decompress Office files. XLSX and DOCX parsing use browser APIs and do not load a remote parser. Downloads use the Plugin API when available and a browser download fallback otherwise. The plugin does not use Electron or Node.js APIs at runtime.
This is a dependency-free iframe plugin.
The release ZIP should contain the following files at its root:
manifest.json
plugin.js
index.html
icon.svg
i18n/
course-import-template.csv
One command builds dist/, runs the smoke tests and writes the ZIP:
package.cmdThe equivalent pnpm scripts are pnpm test and pnpm run package. The ZIP lands at the repository root as sp-study-courses.zip with manifest.json at its root, and packaging the same sources twice produces the same bytes.
Pushing a vX.Y.Z tag runs the same steps in .github/workflows/package.yml and attaches the ZIP to a GitHub release; the tag must match the manifest.json version. Every other push and pull request uploads the ZIP as a build artifact.
To cut a release without editing version files by hand, run the Bump version and release workflow from the Actions tab and pick current, patch, minor or major. It runs the same smoke tests and packaging step, writes the version into manifest.json and package.json, commits it, tags it, and publishes the release with the ZIP it just built. current publishes the version already committed and skips the commit. A tag you push yourself is published by package.yml instead.
Package the generated dist/index.html, not the readable source at the repository root. The build fails if the generated file reaches Super Productivity's 100 KB iframe limit.
- 设置学期名称
- 设置学期第一周星期一
- 设置总教学周数
- 按周浏览课程表
支持为课程设置:
- 一个或多个星期(一周多次上课的课程保存为一条记录)
- 上课时间
- 上课地点
- 教师
- 起止周次
- 单周 / 双周 / 自定义周次
同时支持:
- 课程备注
- Obsidian 链接
- 支持 CSV 导入
- 支持普通 HTML 表格导入
- 自动跳过重复课程
- 提供课程导入模板
- 可将课程作业创建为 Super Productivity 任务
- 可选择作业所属的 SP 项目
- 将课程管理与日常任务管理结合
- 支持导出
.ics日历文件 - 可导入兼容 ICS 的日历应用
- 支持中文和英文
- 自动跟随 Super Productivity 的语言设置
- 使用 SP 插件同步存储保存课程数据与显示设置
-
前往 GitHub Releases
-
下载:
sp-study-courses.zip -
打开 Super Productivity
-
进入:
设置 → 插件 -
导入 ZIP 插件
-
如有提示,重启 Super Productivity
-
从插件入口打开 Courses & Timetable
电脑和手机需分别安装一次插件 ZIP。安装相同插件 ID 并配置 SP 同步后,学期、课程、事件、调课、任务对应关系和界面设置使用 SP 插件同步存储;数据同步不会自动安装插件代码。插件安装、iframe 加载、文件导入和导出已在 Android 与 iOS 真机上验证;2.6.3 起插件跟随宿主深色主题,手机端课表按整周列出有课的日期,不再只显示当天。逐项状态见 需求文档。
需要:
Super Productivity >= 18.21.2
项目中提供:
支持的中文表头包括:
课程名称,教师,地点,星期,开始时间,结束时间,开始周,结束周,周次模式,自定义周次,颜色,备注,Obsidian链接,项目
同时支持对应的英文表头。「星期」列支持单个星期或列表,例如 周一,周三、Mon,Wed。
如果以下字段均与现有课程一致,则该课程会被视为重复课程并跳过:
- 课程名称
- 星期
- 开始时间
- 结束时间
插件会:
- 读取 Super Productivity 项目名称
- 在用户确认后创建课程作业任务
- 保存插件自身的课程数据与显示设置
- 在用户主动操作时导出 ICS 文件
插件不会:
- 删除 Super Productivity 任务
- 删除项目
- 修改无关任务数据
2.4.0 已包含「课表 / 计划 / 今日」、课程事件、单周调课与停课、可逐项编辑的导入预览、冲突提示、课程任务模板、轻量统计和手机端导航。XLSX 与 DOCX 课表直接在插件内解析,不再从 CDN 加载解析库;多工作表 / 多表格会自动选择识别结果最多的一项。图片型 Word 不做 OCR。旧版 WebView 若不能解压 Office 文件,可改用 CSV、HTML 或粘贴。文件下载优先使用 Plugin API,移动端失败时提供可复制内容;插件运行时不依赖 Electron 或 Node.js。完整任务和 Android 兼容性审计见 需求文档,开发过程见 开发日志。
该插件为无外部依赖的 iframe 插件。
发布 ZIP 根目录应包含:
manifest.json
plugin.js
index.html
icon.svg
i18n/
course-import-template.csv
一条命令即可完成构建、冒烟测试和打包:
package.cmd对应的 pnpm 脚本为 pnpm test 与 pnpm run package。ZIP 输出到仓库根目录的 sp-study-courses.zip,manifest.json 位于压缩包根目录;同一份源码重复打包得到完全相同的字节。
推送 vX.Y.Z 标签后,.github/workflows/package.yml 执行相同步骤并把 ZIP 附加到 GitHub Release,标签必须与 manifest.json 版本一致;其余 push 与 pull request 会把 ZIP 作为构建产物上传。
不想手改版本号时,在 Actions 页面运行 Bump version and release 并选择 current、patch、minor 或 major:它执行同样的冒烟测试与打包,把版本写入 manifest.json 与 package.json 并提交,打上标签,再用本次构建出的 ZIP 发布 Release。选 current 表示直接发布已提交的版本,不产生提交。你自己手动推送的标签则由 package.yml 发布。
请打包生成的 dist/index.html,不要直接打包仓库根目录的可读源码。构建会检查 100 KB 限制,超限时直接报错。
Maintained by Khk-NL. The author field in manifest.json credits the same maintainer under the publishing name SCSldr.