
Security News
CVE Volume Surges Past 48,000 in 2025 as WordPress Plugin Ecosystem Drives Growth
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.
A tiny React library that normalizes logo visuals — like stacking wooden blocks neatly
A tiny React library that makes logos look good together — like stacking wooden blocks neatly.
Real-world logos are messy. Some have padding, some don't. Some are dense and blocky, others are thin and airy. Put them in a row and they look chaotic.
Kubbe fixes this automatically.
npm install kubbe
import { KubbeStrip } from "kubbe";
function LogoStrip() {
return (
<KubbeStrip
logos={["/logos/acme.svg", "/logos/globex.svg", "/logos/initech.svg"]}
/>
);
}
That's it! Kubbe will analyze each logo and normalize them to look visually balanced.
gapSpace between logos. Default is 16.
<KubbeStrip logos={logos} gap={24} />
baseSizeHow big the logos should be, in pixels. Default is 48.
<KubbeStrip logos={logos} baseSize={64} />
densityAware and densityFactorKubbe measures the "visual weight" of each logo. Dense, solid logos get scaled down. Light, thin logos get scaled up. This is on by default.
densityAware={false} — Turn it offdensityFactor — How strong the effect is (0 = off, 0.5 = default, 1 = strong)// Stronger density compensation
<KubbeStrip logos={logos} densityFactor={0.8} />
// Turn it off
<KubbeStrip logos={logos} densityAware={false} />
scaleFactorHow to handle logos with different shapes (wide vs tall). Default is 0.5.
Imagine you have two logos:
scaleFactor = 0 → Same width for all logos
scaleFactor = 1 → Same height for all logos
scaleFactor = 0.5 → Balanced (default)
<KubbeStrip logos={logos} scaleFactor={0.5} />
alignByHow to align logos. Default is "bounds".
"bounds" — Align by geometric center (bounding box)"visual-center" — Align by visual weight center (accounts for asymmetric logos)"visual-center-x" — Align by visual weight center horizontally only"visual-center-y" — Align by visual weight center vertically only<KubbeStrip logos={logos} alignBy="visual-center" />
cropToContentWhen enabled, logos are cropped to their content bounds and returned as base64 images. This removes any whitespace/padding baked into the original image files. Default is false.
<KubbeStrip logos={logos} cropToContent />
For custom layouts, use the useKubbe hook directly:
import { useKubbe } from "kubbe";
function CustomGrid() {
const { isLoading, normalizedLogos } = useKubbe({
logos: ["/logo1.svg", "/logo2.svg"],
});
if (isLoading) return <div>Loading...</div>;
return (
<div className="grid">
{normalizedLogos.map((logo) => (
<img
key={logo.src}
src={logo.src}
width={logo.normalizedWidth}
height={logo.normalizedHeight}
/>
))}
</div>
);
}
getVisualCenterTransformWhen using the hook, you can apply visual center alignment with the getVisualCenterTransform helper:
import { useKubbe, getVisualCenterTransform } from "kubbe";
function CustomGrid() {
const { normalizedLogos } = useKubbe({ logos });
return (
<div className="grid">
{normalizedLogos.map((logo) => (
<img
key={logo.src}
src={logo.src}
width={logo.normalizedWidth}
height={logo.normalizedHeight}
style={{ transform: getVisualCenterTransform(logo, "visual-center") }}
/>
))}
</div>
);
}
Use with Next.js Image or any custom component:
import Image from "next/image";
<KubbeStrip
logos={logos}
renderImage={(props) => (
<Image
src={props.src}
alt={props.alt}
width={props.width}
height={props.height}
/>
)}
/>;
scaleFactorAll processing happens client-side using canvas. No AI, fully deterministic.
bun install
bun test
bun run storybook
MIT
FAQs
A tiny React library that normalizes logo visuals — like stacking wooden blocks neatly
We found that kubbe 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
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.

Security News
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.

Security News
Tailwind Labs laid off 75% of its engineering team after revenue dropped 80%, as LLMs redirect traffic away from documentation where developers discover paid products.