Repository Embed

A web component for embedding code repositories on the web.

Zero-dependency, configurable `` web component for displaying (mainly Git) repository details with links to the forge. It supports GitHub, GitLab, Gitea, Forgejo, Codeberg, Bitbucket, Tangled, SourceHut, Azure DevOps, and self-hosted instances. _This package is not affiliated with any of the supported forges._ - [Available on NPM](https://npmx.dev/package/repository-embed) ## Usage Install the web component by whatever means you prefer, then import it: ```html ``` Use the web component: ```html ``` ## Attributes | Attribute | Required | Description | Values | | --------- | -------- | ---------------------------------------------- | -------------------------------------------------------------------------------------------------- | | `repo` | Yes | The repository to display. | `owner/repo`, a forge-prefixed shorthand, a repository URL, or a clone URL | | `host` | No | The forge host for shorthand references. | A hostname such as `git.example.com` | | `forge` | No | Force a specific forge implementation. | `github`, `gitlab`, `gitea`, `forgejo`, `bitbucket`, `tangled`, `sourcehut`, `azure`, or `generic` | | `api` | No | Override the forge API base URL. | For example `https://git.example.com/api/v1` | | `branch` | No | The branch to display and use for branch data. | Any branch name; defaults to the repository's default branch | | `details` | No | The metadata fields to display. | `stars,forks,language` (default), `all`, `""`, or a comma-separated list | `repo` accepts an `owner/repo` shorthand, a forge prefix (`github:`, `gitlab:`, `bitbucket:`, `tangled:`, `codeberg:`, `gitea:`, `forgejo:`, `sourcehut:`, or `azure:`), a repository URL, or a clone URL. A plain `owner/repo` reference requires `host` unless `forge` or `api` supplies a default. For self-hosted instances, set `host` and `forge`, plus `api` when the API is on a subpath: ```html ``` Unknown hosts are probed for a supported API and fall back to a link-only card. SourceHut and Azure DevOps are rendered as link-only cards. Use `forge="generic"` to request this behaviour explicitly. Setting `branch` validates the branch and uses its latest commit for `updated` and `pushed` where supported. Invalid branches show an error while link-only cards display the name without validation. Available `details` fields: `stars`, `forks`, `watchers`, `issues`, `pulls`, `language`, `licence`/`license`, `release`, `branch`, `updated`, `created`, `pushed`, `size`, `topics`, `homepage`, `clone`, `owner`, `forge`, `archived`, `mirror`, `visibility`, `image`. Fields that a forge does not expose are omitted. ## Supported forges | Forge | Hosts | Notes | | ------------------------ | ---------------------------------------- | ------------------------------------------------------------------ | | GitHub | `github.com`, GitHub Enterprise | REST API. Unauthenticated requests are rate limited. | | GitLab | `gitlab.com`, self-hosted | API v4. Nested groups supported. | | Gitea / Forgejo | `gitea.com`, `codeberg.org`, self-hosted | API v1. Including Gogs. | | Bitbucket Cloud | `bitbucket.org` | API 2.0. Watchers are shown as stars. | | Tangled | `tangled.org`, `tangled.sh` | Uses the appview and repository knot; some fields are unavailable. | | SourceHut / Azure DevOps | `git.sr.ht`, `dev.azure.com` | Link-only. | | Other hosts | Any | Auto-detected, with a link-only fallback. | ## Theming By default, each supported host supplies its own light/dark palette. Unknown hosts use the generic palette below. Override any property to customise the card: ```css repo-card { --repo-bg: light-dark(oklch(100% 0 0), oklch(17.1% 0 0)); --repo-border: light-dark(oklch(85.14% 0 0), oklch(26.9% 0 0)); --repo-border-width: 1px; --repo-border-hover: light-dark(oklch(71.5% 0 0), oklch(37.1% 0 0)); --repo-border-strong: light-dark(oklch(71.5% 0 0), oklch(37.1% 0 0)); --repo-bg-muted: light-dark(oklch(95.5% 0.001 286.76), oklch(23.6% 0 0)); --repo-text: light-dark(oklch(4.6% 0 0), oklch(98.2% 0 0)); --repo-muted: light-dark(oklch(19.8% 0 0), oklch(84.9% 0 0)); --repo-subtle: light-dark(oklch(28% 0 0), oklch(77.3% 0 0)); --repo-accent: light-dark(oklch(52% 0.14 48), oklch(79% 0.12 58)); --repo-danger: light-dark(oklch(50.5% 0.213 27.518), oklch(70.4% 0.191 22.216)); --repo-radius: 0.5rem; --repo-radius-sm: 0.375rem; --repo-radius-xs: 0.25rem; --repo-font: "Comic Sans"; --repo-font-mono: "Comic Mono"; } ``` `--repo-border-width` controls the thickness of the card border. `--repo-radius` controls the card radius. `--repo-radius-sm` and `--repo-radius-xs` control tags, small details, and the preview image radius. The Geist and Geist Mono fonts are used when available, with system fallbacks otherwise.