The catalog is a frontend-base application: a library that plugs into the Open edX frontend shell, rather than a standalone micro-frontend bundled with its own webpack build.
The catalog serves the public-facing Home, Course About, and Course
Catalog pages — the intended replacement for the corresponding legacy
views in edx-platform.
This app is published to NPM by semantic-release, and its branches
follow OEP-10 ADR 0002:
master- Unstable. Every merge publishes a prerelease on the
alphadist-tag. Breaking changes land here with no DEPR process and no warning, so it is not supported in production. All changes, including bug fixes, should target this branch first. stable- Carries the newest stable major and owns the
latestdist-tag. Changes arrive here as backports frommaster, and no breaking change lands after publication. n.xandn.m.x- Maintenance branches for majors and minors that
stablehas moved past. Each owns the dist-tag matching its own name, so consumers select a maintained line by semver range, e.g."1.x".
stable has not been cut yet: until this app is first ready for
production use, master and its alphas are all there is. Both
.releaserc and the Release CI workflow already know the whole
layout, including the maintenance branch patterns, so a new line starts
publishing as soon as it is pushed.
This repository is no longer branched or tagged for Open edX releases in its own right. It participates by published version instead, per OEP-10 ADR 0003.
The micro-frontend this app replaces goes on living on legacy-mfe,
which is where any further release/RELEASENAME branches for it are
cut, for as long as a supported release still ships it.
A running Open edX instance is needed to serve this app's backend APIs.
Tutor in development mode is the usual choice, and
site.config.dev.tsx already points at its default hostnames.
Unlike a micro-frontend, this app is neither built nor served by
tutor-mfe. The dev server below runs on the host.
Clone the repo:
git clone https://github.com/openedx/frontend-app-catalog.gitUse the version of Node specified in the
.nvmrcfile.Using other major versions of Node may work, but is unsupported. This repository includes an
.nvmrcfile to help set the correct Node version via nvm.Install npm dependencies:
cd frontend-app-catalog && npm installStart the dev server:
npm run dev
The dev server defaults to PORT=1998 PUBLIC_PATH=/catalog (set in
the dev script in package.json) and is available at
http://apps.local.openedx.io:1998/catalog.
Configuration used by the dev server is defined in
site.config.dev.tsx at the repo root.
To develop this app and a local checkout of frontend-base in
tandem, use the built-in npm workspace support:
mkdir -p packages/frontend-base
sudo mount --bind /path/to/frontend-base packages/frontend-base
npm install
npm run dev:packagesBind mounts are used instead of symlinks because Node resolves
symlinks to their real paths, which breaks hoisted dependency
resolution. When you are done, unmount with
sudo umount packages/frontend-base.
The catalog app declares the following AppConfig fields (defaults
live in src/app.ts). Sites can override any of them by spreading
over catalogApp.config in site.config.*.tsx:
| Field | Purpose |
|---|---|
ENABLE_COURSE_DISCOVERY |
Show the Discover / Explore links in the header. |
ENABLE_PROGRAMS |
Show the Programs link in the header. |
ENABLE_COURSE_SORTING_BY_START_DATE |
Enable start-date sorting in the catalog search. |
HOMEPAGE_COURSE_MAX |
Maximum number of courses to render on the homepage list
(default 9). |
HOMEPAGE_PROMO_VIDEO_YOUTUBE_ID |
YouTube video id for the homepage promo video. |
NON_BROWSABLE_COURSES |
When truthy, hides catalog links for authenticated users. |
INFO_EMAIL |
Support email address shown on the catalog error page. |
SUPPORT_URL |
URL of the support / help page linked from the catalog. |
LEARNING_BASE_URL |
Base URL for course-outline links from the course-about page. |
COURSE_ABOUT_TWITTER_ACCOUNT |
Twitter handle used by the course-about sidebar's share widget. |
See site.config.dev.tsx in this repo for a worked example of
overriding these for local development.
This app offers a number of slots for operators to customize its pages. See src/slots/ for the current list and per-slot READMEs with usage examples.
The layout follows the standard frontend-base app layout:
src/app.ts— the app configuration imported bysite.config.*.tsx.src/constants.ts— the app'sappIdand role identifiers.src/index.ts— the package's public exports (this is a library).src/routes.tsx— the app's react-router routes.src/Main.tsx— the root component for the app's routes.src/slots.tsx— the slot operations the app applies to the shell.src/slots/— the slots this app offers to consumers.src/style.scss— app-scoped runtime styles.
For more, see the frontend-base migration how-to.
Library build
npm run build compiles the library into dist/ via tsc and
tsc-alias. This is what gets published and consumed by sites.
CI build
npm run build:ci runs openedx build against
site.config.ci.tsx so webpack traverses the full app graph. This
catches issues (like broken lazy-loaded imports) that tsc and
Jest would not surface.
Please refer to the frontend-base i18n howto for documentation on internationalization.
If you're having trouble, we have discussion forums at https://discuss.openedx.org where you can connect with others in the community.
Our real-time conversations are on Slack. You can request a Slack invitation, then join our community Slack workspace. Because this is a frontend repository, the best place to discuss it would be in the #wg-frontend channel.
For anything non-trivial, the best path is to open an issue in this repository with as many details about the issue you are facing as you can provide.
https://github.com/openedx/frontend-app-catalog/issues
For more information about these options, see the Getting Help page.
The code in this repository is licensed under the AGPLv3 unless otherwise noted.
Please see LICENSE for details.
Contributions are very welcome. Please read How To Contribute for details.
This project is currently accepting all types of contributions, bug fixes, security fixes, maintenance work, or new features. However, please make sure to have a discussion about your new feature idea with the maintainers prior to beginning development to maximize the chances of your change being accepted. You can start a conversation by creating a new issue on this repo summarizing your idea.
All community members are expected to follow the Open edX Code of Conduct.
The assigned maintainers for this component and other project details
may be found in Backstage. Backstage pulls this data from the
catalog-info.yaml file in this repo.
Please do not report security issues in public, and email security@openedx.org instead.