CatalogTools ›Everyday

Word & Character Counter — instant text stats

Respecting a character limit — a social post, an ad, an essay abstract — means knowing exactly how long a text is, not just guessing. Paste your text here and the app counts words, characters and sentences instantly, without sending anything to a server: the text stays in your browser.

▶ Use this app

word countercharacter counttextwritingword count

What it records

  • Paste or write your text here

How it works

This is a Reactive app: a plain text document that your browser turns into a working app — forms, live data, tables, statistics and even charts, with nothing to install or configure.

  1. Use it right away. Hit “Use this app”: it opens right in your browser, ready to go, with data saved only on your device.
  2. Your data stays yours. Everything is stored locally on your device, kept separate for each app: no account, no server, nothing to set up.
  3. Make it your own. The text below is the entire app: copy it, tweak fields, views and words, and your changes become interactive instantly.
  4. Share it as a file. An app is a simple file: save it, export it or share it with a link; and with encrypted collaboration several people edit the same data in real time.
The app’s source
# 🔤 Word & Character Counter

Respecting a character limit — a social post, an ad, an essay abstract —
means knowing exactly how long a text is, not just guessing. Paste your text
here and the app counts words, characters and sentences instantly, without
sending anything to a server: the text stays in your browser.

::::form{path="texts" id="fte"}
::input{form="fte" field="text" type="text" placeholder="Paste or write your text here" required="true"}
::add-form{form="fte" path="texts" label="Count"}
::::

## Result

:::python{data="texts"}
```
rows = data["texts"]
if rows:
    text = rows[-1]["text"]
    words = len(text.split())
    chars_with_spaces = len(text)
    chars_no_spaces = len(text.replace(" ", ""))
    sentences = sum(text.count(p) for p in (".", "!", "?"))
    if sentences == 0 and text.strip():
        sentences = 1
    print(f"Words: {words}")
    print(f"Characters (with spaces): {chars_with_spaces}")
    print(f"Characters (without spaces): {chars_no_spaces}")
    print(f"Sentences (approx.): {sentences}")
else:
    print("Write or paste a text and press Count to see the stats.")
```
:::

The count updates only when you press Count: no history of pasted texts
stays visible on the page, just the result of the last count.