uw-course
A browser-based University of Waterloo course planner backed by the live MongoDB
course database. Search courses, browse sections, build a weekly timetable, and
import/export plans — with auto-resolution for course-only plans like CS 341.
Install
pip install uw-course
Run
uw-course
Starts the web app at http://127.0.0.1:31415 and opens it in your default browser.
Environment variables: UW_COURSE_HOST, UW_COURSE_PORT, UW_COURSE_DEBUG,
UW_COURSE_NO_BROWSER, MONGODB_URI.
Plan format
Class2026Winter
CS 341
MATH 239
STAT 230, 1234
- first line: the term collection name (must match a real collection exactly)
COURSE CODE— auto-resolve a section for this courseCOURSE CODE, CLASS_ID— lock this exact section
Development
The UI is a React + Vite app in frontend/; the backend is Flask.
pip install -e . # editable backend install
./scripts/build_frontend.sh # build the UI into the package, then run `uw-course`
npm --prefix frontend run dev # live UI development (proxies /api to Flask)
The published package and Docker image bundle the compiled UI, so a PyPI install runs with no build step. The release workflow builds the frontend automatically before packaging.
Web API
GET /api/terms · GET /api/courses?term=&q= · GET /api/courses/<code>?term= ·
POST /api/schedule · POST /api/plan/parse · POST /api/plan/export ·
POST /api/plan/resolve
License
MIT — see LICENSE.
Metadata
Release files for uw-course 3.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| uw_course-3.2.1.tar.gz | 2.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| uw_course-3.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 5.1 MB
Release files / uw_course-3.2.1.tar.gz
| Download URL | uw_course-3.2.1.tar.gz |
|---|---|
| Size | 2.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1317550976603f4e7ba69e5fa95bb1301b2e949bbae105273133b4c208a107aa
|
|
BLAKE2b-256 checksum How to use checksums |
fdb30d079c28fb6a6d5f25ed4fc61e9a13da9900a94e40efc86993298053bdbd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency logRelease files / uw_course-3.2.1-py3-none-any.whl
| Download URL | uw_course-3.2.1-py3-none-any.whl |
|---|---|
| Size | 2.5 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
81343df63ccd56cf487f1cb2afa3cd4241fb34af795fc4bdb95be687fa3e53c5
|
|
BLAKE2b-256 checksum How to use checksums |
94e8509d0fa253e5be4a57546e9e7454bd10ead06a1e8948b7699b132dc20ae0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency log