
“It's a dangerous business, going out your door, and pasting your text into a strange tool.”
One HTML file. No build step. No dependencies. No servers.
Open it in a browser and you're in.
Bag End is a self-contained, single-file web app for transforming, obfuscating, and formatting text — wrapped in a warm Hobbit-hole aesthetic (round green door and all). It ships as one index.html you can double-click to run, keep on a USB stick, or drop on any static host.
It has two personalities:
| 📜 The Toolkit | Pick a trick from the side panel; paste text in the left box, get the result on the right. |
| 🗝️ Burglar Mode | Arm a trick, then type — everything you type comes out already transformed. Switch tricks mid-sentence to weave hybrid text, then export. |
∅ markers on-screen, while the copied text stays truly invisible..md or .pdf straight from the workspace.| Trick | Badge | What it does |
|---|---|---|
| Leet / Upper | 13 |
Uppercases and swaps A→4 E→3 I→1 O→0 S→5 T→7. |
| Injector | !! |
Wraps text with instruction-style framing and censors a keyword list — for prompt-injection research. |
| Invisible Unicode | ∅ |
Inserts / weaves zero-width characters (ZWSP, ZWNJ, ZWJ, WJ, ZWNBSP). Preview shows them; copy hides them. |
| Zalgo / Eldritch | Z |
Corrupts text with stacked combining marks. A Crazy Level slider summons more chaos. |
| Glitch | ▓ |
Broken-signal corruption — lookalike glyphs, static blocks, strikethroughs and stutters. |
| URL Encoding | % |
Percent-encodes text, optionally embedded into a URL template via {}. |
| Dynamic Reconstruction | 0x |
Rebuilds a string as runtime code (chr() join, \x/\u escapes, bytes.fromhex(), JS fromCodePoint()) so static string/regex filters never see the literal. |
| Markdown | M↓ |
Full Markdown → live rendered preview, with a toolbar to wrap selections and a one-click cheat-sheet. |
In Burglar Mode the same tricks become armed styles: the option controls (level slider, invisible-char picker, reconstruction format) adapt to whichever trick you arm.
# Option 1 — just open it
double-click index.html
# Option 2 — serve it (any static server works)
python -m http.server 8000
# then visit http://localhost:8000
That's the whole install. There is no step 2.
.md or .pdf.Special behaviours:
This toolkit includes techniques (prompt-injection framing, static-analysis evasion, invisible characters) intended for authorized security testing, CTF challenges, and educational research. Use it only against systems you own or are permitted to test. You are responsible for how you use it.
bag end/
├── index.html ← the entire application
└── README.md ← you are here
Made under the Hill. Mind the step on your way out. 🚪