Made with SvelteKit, TailwindCSS & shadcn-svelte.
The site makes requests to the GitHub API on the server side to get the latest releases for all the packages. It smartly caches the data, frequently invalidating it to always be up to date while avoiding hitting GitHub as much as possible.
Whilst the repos are manually curated, the packages are automatically discovered, either
through the published releases or the contents of the CHANGELOG.md file.
Some computations are made to generate the badges, but everything else is a simple cosmetic wrapper around GitHub releases. No data alteration is performed by the site other than for styling and rendering purposes.
For more info, visit the v2 release post.
# 1. Copy the example environment file
cp .env.example .env
# 2. Edit .env and add your GitHub token:
# GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
# 3. Install dependencies and run
pnpm i && pnpm dev
That's it: your GitHub token will do most of the job, and you can run the website like any regular SvelteKit app.
GITHUB_TOKEN: a classic GitHub token with the public_repo scope (that's it), required for API requests.REDIS_URL (optional): the TCP URL for the Redis instance. You can leave it empty; an in-memory cache is used during development.PUBLIC_POSTHOG_KEY (optional): the token for the analytics service I use, PostHog. You can leave it empty; analytics are disabled in dev environments.WEBHOOKS_REPLICATOR_TOKEN (optional): the token for webhook reception, not useful in a dev environment but has to be present still.If you think I missed a repository, you can either open an issue or directly contribute.
CHANGELOG.md file at the root of the repositoryFork the repo, edit the src/lib/repositories.ts file, and open a PR.
The site's code has been architectured to be as flexible as possible, here's how it works:
const repos = {
svelte: {/* ... */},
kit: {/* ... */},
tools: {
name: "Tooling",
description: "...",
repos: [
{
...
},
{
changesMode: "releases", // Optional line, the way to get the changes; either "releases" or "changelog", defaults to "releases"
repoOwner: "your-owner", // Optional line, the name of the owner on GitHub, defaults to "sveltejs"
repoName: "your-repo", // The name of the repo on GitHub, as it is shown in the URL: https://github.com/sveltejs/your-repo
dataFilter: ({ tag_name }) => true, // Optional line, return false to exclude a version from its tag name
metadataFromTag: tag => ["package-name", "2.4.3"], // Return the package name and version from the tag name
changelogContentsReplacer: contents => contents, // Optional line, replace the contents of the changelog file before parsing it; only used if `changesMode` is "changelog"
}
]
}
};
Add your repo where you see fit (tools or libs), and that's it! The site will automatically discover & adapt to the new package(s).