# shiguangschedule: an open source timetable app built on Compose Multiplatform

> Shiguangschedule is an ad-free, minimal course timetable app for Chinese university students and staff, written in Kotlin and, since version 2.x, built on Compose Multiplatform for Android, desktop, and an experimental iOS branch. Its distinguishing feature is a community-written adaptation layer that imports course data from university administrative systems.

**ShiGuangSchedule/shiguangschedule** — 一款开源、无广告、极简的课程表 APP，支持教务导入

- Repository: https://github.com/ShiGuangSchedule/shiguangschedule
- Stars: 996 · Forks: 97
- Language: Kotlin
- License: Apache-2.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/shiguangschedule-shiguangschedule

## The problem: importing your timetable instead of retyping it

A course timetable is not data anyone wants to type in by hand. It lives in the university's administrative system, it changes every semester, and the format is different at every school. That is the problem shiguangschedule sets out to solve. The project describes itself as an open source, ad-free, minimal course timetable app that supports importing data through adaptation scripts for various academic affairs systems, so users can manage their personal timetable efficiently. The intended audience is teachers and students in Chinese higher education. The project emphasis is on openness and extensibility, and it explicitly invites community developers to contribute both adaptations and features. The repository is the main repository and holds all the source code and resources for the app. The project page links to the GitHub repository, where release tags carry the downloadable builds, and the downloads badge on the project page counts the assets published across all releases, so there is no separate distribution channel to look for.

## How the adaptation layer turns an admin system into a timetable

The interesting engineering is not the grid of coloured rectangles. It is the import path. Import runs through adaptation scripts maintained by community developers in a separate repository, shiguang_warehouse, and the app describes this as a one-click import where those developers adapt deeply for a school's class time settings. The project is explicit about the division of labour. Recognising courses and their matching schedule times is the foundational capability of an adaptation, while more advanced automation such as configuring the start date of the semester depends on whether the school has an interface that the developer can adapt. In other words, the app provides the container and the community provides the per-school knowledge, and the quality of the result for your school depends on whether someone has done that work. The wiki linked from the repository explains how to write an adaptation, and a browser test plugin, shiguang_Tester, exists to help with that work.

## Compose Multiplatform from 2.x, with platform support uneven

The version policy changed the shape of the project. From version 2.x the code moved to the Compose Multiplatform framework, and there is no longer a split between a stable release and a developer build. Developer features are instead enabled by tapping the application icon five times in the More page. Platform support is explicitly uneven. Android supports system version 8.0 and newer and is the main branch maintained. Desktop on the JVM supports Windows, macOS, and Linux and is also main branch maintained, but the current platform is described as being in an experimental stage. iOS gets experimental basic support from the dev_ios branch in this repository, is branch maintained rather than main maintained, and needs to be compiled by the user. Other platforms are described as being under development. The repository layout mirrors that split, with separate androidApp, desktopApp, and iosApp directories alongside a shared directory.

## What the app actually does day to day

The main screen has three areas. Today shows the courses for the current day. The timetable shows a full week, swiping left and right switches between weeks, and tapping the week title at the top opens a bottom picker for jumping to a week, with the week containing the current date marked. A profile tab holds the settings where all configuration lives. Timetable configuration supports binding a list of times to a timetable so that switching timetables also switches the time slots, and each timetable can define independently whether the week starts on Monday or Sunday. A separate global course management page lists all courses in the most direct way possible, with quick add and edit. In the weekly view you can long press a course block to adjust its position or height, and the page can be personalised with a custom background image, adjustable cell height, corner radius, spacing, and opacity, per-course-block colours, and configurable course block content styles.

## Widgets, calendar export, and the backup story

Beyond the grid, the app leans into the platform around it. There are multiple home screen widgets to choose from, and widgets support tomorrow's preview, except the smallest 2x1 widget which by design shows the message for the nearest upcoming class instead. For backup and portability there is JSON import and export for schedules, universal ics file export so the timetable can be imported as calendar events on many devices and platforms, and calendar account synchronisation on supported devices. Cloud backup and sync go through WebDAV. Course reminders are supported, including automatically turning on Do Not Disturb or mute during class, and the app fetches whole-year holiday data so that classes falling on holidays do not generate interruptions. Dark mode adaptation is applied everywhere it can be implemented, widgets included, and the app ships in Simplified Chinese, Traditional Chinese, and English.

## Where shiguangschedule is the wrong choice

The boundaries follow directly from the design. If your university has no adapter in the shiguang_warehouse repository, the app degrades to a manual timetable editor, and there is no fallback that reads your administrative system directly. That is the most common reason people look elsewhere. Second, the desktop build is labelled experimental in the project notes, so it is not something to standardise on for a department. Third, iOS requires you to work from a branch and compile the app yourself, which is a real cost for anyone outside the development community. Fourth, the 2.x migration to Compose Multiplatform means older knowledge about the project structure may be wrong, and the removal of a separate developer build means there is no separate channel to test against. The upstream administrator side also matters: the more advanced parts of an adaptation, such as detecting the semester start date, depend on interfaces the school exposes, which the project cannot control.

## Contributing, releases, and the licence

Participation is structured and documented. The instructions are to fork the repository and submit improvements or the callable components used for administrative system adaptations, then open a pull request and wait for review and merge. The main branch has branch protection enabled, and submissions need to go to the dev branch, which means a direct pull request against main will not merge as is. Issues and community discussion are the other route in, and there is a QQ channel for direct discussion. The release cadence is brisk. Version 2.1.0 shipped on 2026-10-06, 2.0.0 on 2026-08-16, and 1.2.5, marked as the official version, on 2026-07-13, with the last push on 2026-10-18. The project is not archived. Licensing is Apache 2.0 with the LICENSE file at the repository root, which is a permissive choice for an application you may want to fork for your own school, provided the notices and the licence text are kept in the derived work.

## Conclusion

shiguangschedule fits students and staff at Chinese universities whose administrative system has an adapter in the shiguang_warehouse repository, and who want a timetable app with no advertising and open source code they can read. It is a poor fit if your school has no adapter and no one on your side is willing to write one, because the import path is the core of the product, and it is a poor fit if you need a stable iOS build today, since iOS support lives on the dev_ios branch and requires you to compile it yourself. Before adopting it, check the adapter list for your school, confirm your Android device runs 8.0 or newer, and decide whether the desktop build being experimental matters for your setup.

## FAQ

### What platforms does shiguangschedule support?

Since version 2.x the project uses Compose Multiplatform. Android supports system version 8.0 and newer, desktop on the JVM supports Windows, macOS, and Linux but is currently in an experimental stage, and iOS has experimental basic support on the dev_ios branch and needs to be compiled by the user.

### How do I import my courses into shiguangschedule?

Course data is imported through adaptation scripts maintained by community developers in the separate shiguang_warehouse repository. Recognising courses and matching schedule times is the base capability of an adaptation, while more advanced options such as setting the semester start date depend on whether the school exposes a usable interface.

### How do I enable developer features in shiguangschedule?

From version 2.x there is no separate developer build. Developer features are enabled by tapping the application icon five times in the More page.

### Can I back up my shiguangschedule timetable?

Yes. The app supports JSON import and export for schedule backups, universal ics file export for importing into calendar apps on many devices and platforms, calendar account synchronisation on supported devices, and WebDAV cloud backup and sync.

### What licence is shiguangschedule released under?

The project is released under the Apache 2.0 licence, with the LICENSE file at the repository root. The main branch has branch protection enabled, so contributions are expected to be submitted as pull requests to the dev branch.

## Sources

- [Issues](https://github.com/ShiGuangSchedule/shiguangschedule/issues)
- [License: Apache-2.0](https://github.com/ShiGuangSchedule/shiguangschedule/blob/main/LICENSE)
- [README](https://github.com/ShiGuangSchedule/shiguangschedule/blob/main/README.md)
- [Releases](https://github.com/ShiGuangSchedule/shiguangschedule/releases)
- [ShiGuangSchedule/shiguangschedule on GitHub](https://github.com/ShiGuangSchedule/shiguangschedule)

---

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