Changelog
The canonical changelog lives at packages/tax-kit/CHANGELOG.md and is generated by Changesets at release time. This page mirrors the most recent versions and surfaces the migration impact partners care about.
2.4.0
Highlights
- Inline rendering: host the Tax Kit inside your own dialog/drawer instead of the default full-viewport overlay. Opt-in and fully backward compatible — partners who don't pass a
containerare unaffected.
Added
containerprop onTaxKitProvider—HTMLElement | RefObject<HTMLElement | null>. Pass it to render the kit inline: the iframe is portaled into that node and fills it, instead of the default full-viewport overlay — so you can host it inside your own dialog. The provider can stay mounted app-wide (useTaxKit()keeps working) while the iframe renders inside a dialog that opens/closes without tearing the iframe down. Omit it for the default overlay. See Embedding in your own dialog.
2.3.0
Highlights
- Partner branding via
theme: three new optional fields let new partners ship their own logo and fonts without bundling assets into the SDK. - Behind the scenes: an iframe-side CSS fix unblocks any partner who sets
theme.light.fontSans/theme.dark.fontSans— previously a silent no-op for those values on elements using thefont-sansutility.
Added
theme.partnerLogo—string | { light: string; dark: string }. Pass a single URL or a per-mode object for inverted logos. Rendered in the iframe header as<img>; alt text is auto-derived from the partner slug. See Partner branding.theme.fonts—PartnerFontDefinition[]. Self-hosted@font-facedefinitions forwoff2/woff/ttf/otffiles served from a CORS-accessible URL.theme.fontStylesheets—string | string[]. External font stylesheet URL(s) — Google Fonts, Adobe Fonts, Bunny Fonts — injected as<link rel="stylesheet">.
Fixed
- Partner
themeContract.fontSansoverrides now actually take effect on elements using the iframe'sfont-sansutility. Previously the Tailwind v4@theme inlinedirective baked the SDK's literal default font chain into.font-sansat build time, so partner overrides were silently ignored. The--font-sans,--font-serif,--font-monotokens were moved out of@theme inlineinto a plain@themeblock; the utility now compiles tofont-family: var(--font-sans)and the wrapper-set CSS variable propagates as designed.
2.2.0
Highlights
- New grouped prop shape:
theme,options,metadata,copy. See Migration for the full mapping. - 12 props deprecated as
@deprecatedaliases. They still work; each fires oneconsole.warnper browser session. - 4 props removed entirely:
themeClassName,overridePartnerLogo,startRoute,partnerCostBasisMethodsByYear.
Added
themeobject —light/dark/mode.optionsobject —apiBaseUrl,mode,flow,overlayMode,defaultOpen,hideNavigationBar,hideBackButton,helpLinkUrl,hostPageUrl.TaxKitMetadatatype with typed reserved key (promoCode) and an index signature for arbitrary extras.
Changed
options.modetype union narrowed to'production' | 'alpha' | 'mock'(removed'splash'— no code branched on it).- 12 legacy flat props are now
@deprecatedaliases:apiBaseUrl,hostPageUrl,themeMode,helpLinkUrl,mode,flow,themeContract,hideNavigationBar,hideBackButton,defaultOpen,userPromoCode,overlayMode. When both the new and legacy shapes are passed, the new shape wins.
Removed
partnerCostBasisMethodsByYearand its iframe-side machinery (URL config field,COST_BASIS_METHODSpost-robot event, store field). The dedicated pipe was never consumed by any UI; partners that need to pass cost-basis info should usemetadata.costBasisMethodInfo(read by the iframe'sCostBasisMethodMismatchWarningOverlay).themeClassName. The iframe wrapper now derives its class directly fromtheme.mode. Side effect: partners whose dark-mode iframe previously had.ct-embedded-darkinstead of.darkwill now see base-uidark:*utilities render as designed — visual-diff your dark-mode iframe content after upgrading.startRouteand?startRoute=URL forwarding. The feature was effectively a no-op in production — canonical state-driven routing overrode it in nearly every case. If real deep-linking is needed, it will be added back as a proper feature.overridePartnerLogo. Partner identity is resolved server-side from JWT claims and surfaced asembeddedHealth.partnerId; the iframe's icon registry now uses that directly. (2.3.0 reintroduces a partner-controlled escape hatch viatheme.partnerLogofor partners not in the hardcoded registry.)
Migration
See Migrating from 2.1 for the side-by-side examples and full removal rationale.
2.1.0
Minor changes
- Add
KrakentoPartnerenum. - Add
OverlayModeprop (drawer|dialog|responsive) for device-based overlay control. - Add
PartnerCopytype and dedicatedPARTNER_COPYpost-robot event for partner-configurable legal copy strings. - Add
ConnectionWarningtype for per-integration warning messages via metadata. - Add
popover,popoverForeground,buttonRadius, andcardRadiustokens toThemeContract.
Patch changes
- Fix iframe READY race condition by adding
usePostRobotOnFromAnyWindowhook that listens without requiringchildWindow. - Refactor
childWindowhandling to useRefObject<Window>instead of storingWindowin context, preventingSecurityErrorfrom React DevTools. - Update iframe
allowattribute toclipboard-write; payment 'self'.
2.0.4
- Update loading status.
2.0.3
- Update tax kit status and provider props.
2.0.2
- Add
disconnectUser.
2.0.1
- Add promo-code prop to the SDK.
2.0.0
- Post-robot fix.
For older 1.x releases, see packages/tax-kit/CHANGELOG.md on GitHub.