# Beste UI

> Beautiful, accessible blocks, pieces and components for shadcn/ui and Tailwind CSS, built for React and Next.js. Install one with the shadcn CLI and the code is yours to edit: no runtime dependency, nothing to upgrade.

Markdown rendition of https://ui.beste.co/tools/text-diff. Every page on the site has one: add `.md` to any address, or send `Accept: text/markdown`.

Whole catalog for LLMs: https://ui.beste.co/llms.txt. Registry index: https://ui.beste.co/r/registry.json

---
[tools](/tools)/[text](/tools/category/text)

# Text diff

Compare two versions of text or code line by line, see exactly what was added and what was removed, and copy the result as a unified diff patch.

Before4

export function Button({ label, tone }) { const classes = cn("rounded-lg px-4 py-2", tone); return <button className={classes}>{label}</button>; }

After4

export function Button({ label, tone = "primary", size = "md" }) { const classes = cn(buttonVariants({ tone, size })); return <button className={classes}>{label}</button>; }

Ignore whitespace

Ignore case

2 added, 2 removed, 2 unchanged.

1 \-export function Button({ label, tone }) {

2 \- const classes = cn("rounded-lg px-4 py-2", tone);

1+export function Button({ label, tone = "primary", size = "md" }) {

2+ const classes = cn(buttonVariants({ tone, size }));

33  return <button className={classes}>{label}</button>;

44 }

patch.diffdiff

-export function Button({ label, tone }) {
-  const classes = cn("rounded-lg px-4 py-2", tone);
+export function Button({ label, tone = "primary", size = "md" }) {
+  const classes = cn(buttonVariants({ tone, size }));
   return <button className={classes}>{label}</button>;
 }

## Questions

How is the difference worked out?+

By the longest common subsequence, the same idea git uses. Lines both sides share stay in place, so a change reads as a change rather than as everything after it having moved.

What do the two numbers on each row mean?+

The line number on each side. A removed line has only a left number and an added line only a right one, which is what makes it obvious where the two files stopped agreeing.

Can I paste the result into a pull request?+

Yes. The patch below the comparison is in unified format, so it renders as a diff anywhere markdown is read.

## Related tools

[JSON formatter and validatorFormat, validate, sort or minify JSON. Unquoted keys, trailing commas and comments are accepted, so a pasted console log works as well as a strict file.](/tools/json-formatter)[Line toolsSort A to Z, deduplicate, reverse, shuffle, trim or number a list of lines in one pass, then copy the result without opening a spreadsheet.](/tools/line-tools)[Case converterTurn any text into every case at once, with the words found properly so XMLHttpRequest and user\_id both come out right.](/tools/case-converter)

Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · Ship it · 

## The tools are free. So is most of the library.

1935 blocks and 989 pieces for shadcn/ui and Tailwind, built on the same tokens these tools write. Install one with a command and the code is yours.

[Browse the blocksBrowse the blocks](/blocks)

No signup for the tools. MIT for free blocks, commercial licence for Pro.

## Ship the interface, keep the code.

New blocks, pieces and components every week. Install one with a command and it is yours to edit. No runtime dependency, no upgrade path to fight.

[Browse the libraryBrowse the library](/blocks)[See pricingSee pricing](/pricing)

### Library

* [Blocks](/blocks)
* [Pages](/pages)
* [Pieces](/pieces)
* [Components](/components)
* [Search](/search)

### Learn

* [Docs](/docs)
* [AI & MCP](/docs/mcp)
* [Blog](/blog)
* [Free tools](/tools)
* [What's new?](/changelog)
* [Website Builder](https://beste.co)

### More

* [Pricing](/pricing)
* [Referrals](/referrals)
* [License](/license)
* [GitHub](https://github.com/beste-co/beste-ui)

### Shadcn Blocks

* [Shadcn Hero Blocks](/blocks/hero)
* [Shadcn Feature Blocks](/blocks/feature)
* [Shadcn Pricing Blocks](/blocks/pricing)
* [Shadcn CTA Blocks](/blocks/cta)
* [Shadcn FAQ Blocks](/blocks/faq)
* [Shadcn About Blocks](/blocks/about)
* [Shadcn Stats Blocks](/blocks/stats)
* [Shadcn Footer Blocks](/blocks/footer)
* [Shadcn Navigation Blocks](/blocks/navigation)
* [Shadcn Auth Blocks](/blocks/auth)
* [Shadcn Ecommerce Blocks](/blocks/ecommerce)
* [Shadcn Portfolio Blocks](/blocks/portfolio)
* [Shadcn Showcase Blocks](/blocks/showcase)
* [Shadcn Careers Blocks](/blocks/careers)
* [Shadcn Onboarding Blocks](/blocks/onboarding)
* [Shadcn Coming Soon Blocks](/blocks/coming-soon)
* [Shadcn Post Blocks](/blocks/post)
* [Shadcn Legal Blocks](/blocks/legal)
* [Shadcn Workflow Blocks](/blocks/workflow)
* [Shadcn News Blocks](/blocks/news)

© 2026, [Beste](https://beste.co). All rights reserved.