{"id":35699358,"url":"https://github.com/trycourier/courier-web","last_synced_at":"2026-04-20T23:06:48.501Z","repository":{"id":301440957,"uuid":"958276084","full_name":"trycourier/courier-web","owner":"trycourier","description":"Courier's browser SDKs","archived":false,"fork":false,"pushed_at":"2026-04-13T19:30:31.000Z","size":2058,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-13T21:39:17.541Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.courier.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trycourier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-31T23:49:54.000Z","updated_at":"2026-04-13T19:28:39.000Z","dependencies_parsed_at":"2025-06-26T23:11:43.409Z","dependency_job_id":"9eb2caeb-8bfa-45bc-9a69-6d862c7a53d9","html_url":"https://github.com/trycourier/courier-web","commit_stats":null,"previous_names":["trycourier/courier-web"],"tags_count":147,"template":false,"template_full_name":null,"purl":"pkg:github/trycourier/courier-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trycourier%2Fcourier-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trycourier%2Fcourier-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trycourier%2Fcourier-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trycourier%2Fcourier-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trycourier","download_url":"https://codeload.github.com/trycourier/courier-web/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trycourier%2Fcourier-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32069442,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-06T01:12:42.410Z","updated_at":"2026-04-20T23:06:48.482Z","avatar_url":"https://github.com/trycourier.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `courier-web`\n\nA monorepo that contains all packages for Courier's browser SDKs.\n\n## Getting Started\n\n### In VSCode IDEs\n\n1. Open the `.vscode` folder, click `courier-web.code-workspace` then click the blue **\"Open Workspace\"** button in the bottom right\n![VSCode workspace selection](https://github.com/user-attachments/assets/0d7d1a5f-6664-4b9f-8071-26d1e7521cba)\n\n2. Click the **\"Sync Packages\"** button to install all dependencies\n![\"Sync Packages\" button in VSCode](https://github.com/user-attachments/assets/8326a66d-2d8a-4831-880a-d165e48a7fa4)\n\nThis will set up your development environment with all the necessary packages and configurations.\n\n\u003e You may need to click **\"Sync Packages\"** during development if some local packages get out of sync with each other.\n\n### In the console\n\nThe Courier Web monorepo uses [Yarn workspaces](https://classic.yarnpkg.com/blog/2017/08/02/introducing-workspaces/) to manage dependencies.\n\n1. Get setup with Node (using [nvm](https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating)) and [Yarn](https://classic.yarnpkg.com/lang/en/docs/install)\n\n    ```sh\n    nvm use\n    ```\n\n2. From the `courier-web` directory, install workspace dependencies. This will:\n\n    - Install top-level dependencies\n    - symlink each workspace into the top-level **node_modules**\n    - Install workspaces' dependencies in their respective **node_modules**.\n\n    ```sh\n    yarn install\n    ```\n\n3. Build the packages\n\n    ```sh\n    yarn build-packages\n    ```\n\n## Packages\n\n| Package | Description |\n|---------|-------------|\n| [`courier-js`](./@trycourier/courier-js) | The base API client and shared instance singleton for Courier's JavaScript Browser SDK |\n| [`courier-ui-core`](./@trycourier/courier-ui-core) | Web components used in UI level packages |\n| [`courier-ui-inbox`](./@trycourier/courier-ui-inbox) | Web components for Courier Inbox |\n| [`courier-ui-toast`](./@trycourier/courier-ui-toast) | Web components for Courier Toast |\n| [`courier-react-components`](./@trycourier/courier-react-components/) | Shared package of React components for `courier-react` and `courier-react-17` |\n| [`courier-react`](./@trycourier/courier-react) | React 18+ components for Courier Inbox |\n| [`courier-react-17`](./@trycourier/courier-react-17/) | React 17 components for Courier Inbox |\n\n## API Extractor\n\nThe public API specification found in [**api**](./api/) is generated by\n[API Extractor](https://api-extractor.com).\n\nMaintaining the spec programmatically helps ensure any public-facing changes to a package's implementation are intentionally added to the spec. The\n[build-package](.github/workflows/build-packages.yml) and\n[release](.github/workflows/release.yml) workflows run API Extractor and fail if the\noutput differs from the API spec in the PR.\n\n### Updating the API spec\n\nIf you make changes to the public API surface, re-run API Extractor locally to update\nthe spec in the same PR. API Extractor generates the spec from the _built_ package, rather\nthan the source files.\n\n#### Updating all packages\n\nTo update the API spec for all packages, run:\n\n```sh\nyarn generate-api-docs\n```\n\nThis will:\n1. Build all packages locally\n2. Generate API docs for all packages with the `--local` flag\n\n#### Updating a single package\n\nTo update the spec for a single package, first build the package:\n\n```sh\nyarn workspace @trycourier/courier-js run build\n```\n\nThen run API Extractor:\n\n```sh\nyarn workspace @trycourier/courier-js run generate-api-doc --local\n```\n\nThe `--local` flag automatically updates the spec in [**api**](./api/) based on the generated API. The CI runs _without_ this flag to validate the output matches the existing spec.\n\n### API Extractor warnings\n\nAPI Extractor may generate warnings on the command line or in the API spec itself.\nFor example [ae-forgotten-export](https://api-extractor.com/pages/messages/ae-forgotten-export/)\nindicates a referenced symbol isn't exported by the API.\n\nWarnings on the command line will fail a production build and must be resolved before\nmerging the updated spec. If a warning is safe to ignore, add it to the package's\nrespective **api-extractor.json** configuration to add to the API spec rather than log to the command line ([example](https://github.com/trycourier/courier-web/blob/c1a7b733d711c81cb3c472028b91462f45086ba0/%40trycourier/courier-js/api-extractor.json#L31-L34)). It is strongly preferred to resolve an instance of an error or warning\nrather than ignore all instances.\n\n\n## Versioning and releasing\n\nPackage versions and changelogs are maintained by [changesets](https://github.com/changesets/changesets).\n\n### Steps for courier-web developers\n\n1. [Add a changeset file](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md) to your PR,\n   either by running `yarn changeset` or using the [Changeset bot](https://github.com/apps/changeset-bot)\n   that validates PRs contain changeset files.\n2. Changesets will maintain a PR titled \"Version Packages\" ([example](https://github.com/trycourier/courier-web/pull/127))\n   that bumps package versions appropriately and maintains the changelog.\n3. Close then re-open the PR to trigger tests to run. This is a workaround since\n   [GitHub Actions do not run in response to PRs opened with `GITHUB_TOKEN`](https://docs.github.com/en/actions/concepts/security/github_token#when-github_token-triggers-workflow-runs).\n4. When you're ready to release, merge the \"Version Packages\" PR. Changesets will release\n   the packages with version bumps automatically via GitHub Actions to npm.\n\n### Troubleshooting releases\n\n* **The \"Version Packages\" PR was merged, but packages weren't released**\n\n  This can happen if there is a problem building packages that didn't present when the CI\n  ran for the PR or if there was an issue connecting to the npm registry.\n\n  Solution:\n\n  1. Click **Revert** on the \"Version Packages\" PR to generate a clean revert PR\n     ([example](https://github.com/trycourier/courier-web/pull/122)).\n  2. Get the revert PR approved then merge it to the **main** branch.\n  3. Make any changes to fix the build and release process in other PRs, and merge\n     those to **main**.\n  4. As the revert PR and any subsequent fixes are merged, Changesets will re-run to\n     generate a new \"Version Packages\" PR that will apply the original version bumps and\n     release packages.\n\n* **The \"Version Packages\" PR is blocked on the \"tests\" check**\n\n  Running build and test workflows on the \"Version Packages\" PR is the best way to ensure\n  the build and tests will pass when the package is deployed to npm. The repository's\n  branch protection rules prevent merging PRs if tests haven't run or failed.\n\n  GitHub Actions events triggered by `GITHUB_TOKEN` will not create a new workflow run.\n  This prevents tests from automatically running when `GITHUB_TOKEN` is used to open the\n  \"Version Packages\" PR. See the\n  [GitHub docs](https://docs.github.com/en/actions/concepts/security/github_token#when-github_token-triggers-workflow-runs) for more details.\n\n  Solution:\n\n  1. Close then re-open the PR to trigger tests to run. This is a [documented workaround](https://github.com/peter-evans/create-pull-request/blob/b4733b9419fd47bbfa1807b15627e17cd70b5b22/docs/concepts-guidelines.md#workarounds-to-trigger-further-workflow-runs).\n\n### Trusted Publishing\n\nPackages are published using [NPM's trusted publishing workflow](https://docs.npmjs.com/trusted-publishers), meaning a long-lived write token is not required to publish.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrycourier%2Fcourier-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrycourier%2Fcourier-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrycourier%2Fcourier-web/lists"}