Six moments a component is yours one date picker, six Mondays
the same component in every panel — the only variable is where its source lives
It has a bug ON
monday, 9:12
week view swaps Sat/Sun in ja-JP locale
you own it Open the file, fix the line, ship it today.
ui/calendar.tsx · +2 −2
renting it File an upstream issue, subscribe, wait — or fork, and maintain the fork forever.
The brand tokens change ON
rebrand week
--primary moves from blue to teal
you own it Nothing to do — the component already reads your tokens.
0 files changed
renting it A specificity war against node_modules CSS, fought with !important and lost on the next update.
You need half of it ON
scope cut
range mode, presets, footer — all unused
you own it Delete the half you do not use.
−214 lines
renting it Hide it with CSS and ship the dead code anyway — every user downloads the features you turned off.
Upstream ships v3 ON
release day
new anatomy, better keyboard nav, breaking props
you own it Read the changelog, merge the keyboard nav, skip the breakage. Upgrade by capability.
one cherry-pick
renting it Migrate on their schedule, breaking changes included — or stay behind and lose the fixes too.
The agent edits it ON
this era's moment
“make the week-view rows 32px”
you own it It reads the source that actually runs, in your repo, and edits that.
grounded in ui/calendar.tsx
renting it It reasons from a memory of some version — a plausible edit against code you cannot even open.
A prop is missing ON
the api gap
you need weekStartsOn per-instance
you own it Add the prop. It is your component.
+1 prop, typed
renting it A wrapper around a wrapper — each layer re-exporting props, none of them the one you need.
Owning the source is not building from scratch, and it is not forking either: upstream stays a diff SOURCE — read its changelog, merge the capabilities worth having into your component. The unit of an upgrade is a capability, not a version. What is actually expensive is the middle position: not owning it and still needing to bend it.