
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
Find the canonical URL for any web feed by comparing actual content. Turn messy feed URLs into their cleanest form.
Find the canonical URL for any web feed by comparing actual content. Turn messy feed URLs into their cleanest form.
Many URLs can point to the same feed, varying by protocol, www prefixes, trailing slashes, order of params, or domain aliases. Feedcanon compares actual feed content, respects the feed's declared self URL, and tests simpler URL alternatives to find the cleanest working one.
Perfect for feed readers to deduplicate subscriptions when users add the same feed via different URLs.
Read full docs ↗ · Quick Start
The 9 URLs below all work and return identical content. None redirect to each other, normally making each appear unique. Feedcanon compares content, normalizes URLs and resolves them to a single URL.
'http://feeds.kottke.org/main' ──────────┐
'http://feeds.kottke.org/main/' ─────────┤
'https://feeds.kottke.org/main' ─────────┤
'https://feeds.kottke.org/main/' ────────┤
'https://feeds.kottke.org///main/' ──────┼──→ 'https://feeds.kottke.org/main'
'http://feeds.feedburner.com/kottke' ────┤
'http://feeds.feedburner.com/kottke/' ───┤
'https://feeds.feedburner.com/kottke' ───┤
'https://feeds.feedburner.com/kottke/' ──┘
This is a simplified flow. For complete details, see How It Works in the docs.
Feedcanon is designed to be flexible. Every major component can be replaced or extended.
onFetch, onMatch, and onExists callbacks.existsFn to check if a URL already exists in your database.Basic installation and common usage patterns. For a full overview, visit the documentation website.
npm install feedcanon
When you just need to clean up a feed URL and get its canonical form.
import { findCanonical } from 'feedcanon'
const url = await findCanonical('http://www.example.com/feed/?utm_source=twitter')
// 'https://example.com/feed'
Returns undefined if the feed is invalid or unreachable.
When you want to log the canonicalization process for debugging. Or store all URL aliases that resolve to the same feed.
import { findCanonical } from 'feedcanon'
const aliases = []
const url = await findCanonical('http://www.example.com/feed/', {
onMatch: ({ url }) => {
aliases.push(url)
},
})
// url: 'https://example.com/feed'
// aliases: [
// 'http://www.example.com/feed/',
// 'https://www.example.com/feed/',
// 'https://example.com/feed',
// ]
FAQs
Find the canonical URL for any web feed by comparing actual content. Turn messy feed URLs into their cleanest form.
We found that feedcanon demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.