Show HN: Pbnj – A minimal, self-hosted pastebin you can deploy in 60 seconds
48 points
11 hours ago
| 3 comments
| pbnj.sh
| HN
I'm sure folks here have seen pastebins a thousand times. There's no innovation left in this space – and that's kind of the point.

When I wanted to self-host a pastebin, every option I found was too much. Git-based version control, OAuth, elaborate admin panels. I just wanted something I could deploy in under a minute with a CLI that actually works.

So I built pbnj (yes, like the sandwich).

What it is:

- A minimal, beautiful pastebin with syntax highlighting for 100+ languages

- One-click deploy to Cloudflare (free tier gives you ~100,000 pastes)

- CLI-first: pbnj file.py → get a URL, copied to clipboard

- Memorable URLs: crunchy-peanut-butter-sandwich instead of x7f9a2

- Private pastes with optional secret keys

- Web UI for when you're not in a terminal

What it isn't:

- No accounts, no OAuth, no git integration

- No multi-user support (fork it and run your own)

- No expiring pastes, no folders, no comments

- Not trying to replace Gist or be a "platform"

Why not just use Gist? Maybe you want to own your data. Maybe you enjoy self-hosting things. Or maybe you're a little autistic like me and just like having your own stuff.

Live demo: https://pbnj.sh GitHub: https://github.com/bhavnicksm/pbnj CLI: npm install -g @pbnjs/cli

If this scratches an itch for you, I'd appreciate a star on GitHub. Happy to answer any questions!

indigodaddy
8 hours ago
[-]
This is really well done, but the problem I have with (most) selfhosted bins is that anyone can use it, and I don’t want to be responsible for the content that might show up.

This is super neat though, and could almost be used as a blog replacement (if of course I could prevent others from using it/posting to it :) )

reply
thunderbong
7 hours ago
[-]
Usually, for these kind of programs, I put them behind a proxy with basic auth.

Also, when I tried to add something on the demo site, it asked me for an auth key.

Looking at the code, the package.json file has an entry for AUTH_KEY (in the Cloudflare config) to prevent random people from pasting stuff.

reply
indigodaddy
6 hours ago
[-]
Ah, well that's kinda perfect actually
reply
0_____0
8 hours ago
[-]
I'm planning to set up a VPN into my home network for stuff like this. Services, NAS, etc. that I want remote access to but don't want exposed to the deep dark ocean of the internet.
reply
Tt6000
7 hours ago
[-]
Hey there, first of all congratulations, it's really nice and minimal and Illove it!

But Cloudflare is not self hosting!

reply
bhavnicksm
1 hour ago
[-]
Yes, that's quite fair re:Cloudflare!

I couldn't find the right words to describe this, in comparison to something like Github Gist. I suppose "Own-your-data" since the D1 db generated is yours completely.

Happy to change the branding to be more reflective of this!

reply
davidcollantes
7 hours ago
[-]
HOWTO without CloudFlare, is it possible?
reply
bhavnicksm
1 hour ago
[-]
Hey!

Right now, some things are somewhat hard-coded to be Cloudflare compatible. If someone's willing, you can just deploy this without Cloudflare, but you'd need to dig into the code a little.

In the future releases, I'll make it possible to host it on VPCs and release a Dockerfile along with it, so that should help a little.

Thanks for checking the project out!

reply
som
2 hours ago
[-]
I use CloudFlare a lot for "self hosting" .. but I also run an old pi from home with Bun in place of workers. Suprisingly compatible and low lift.

Not exactly "without CloudFlare", but for true compat you can probably also self host workerd itself which is open source: github.com/cloudflare/workerd

reply
thunderbong
7 hours ago
[-]
pnpm run build

should do it

reply
davidcollantes
6 hours ago
[-]
That creates `dist` with:

404.png .assetsignore _astro/ bread.png favicon.png favicon.svg jelly.png lock.png logo.png og-image.png pbnj.png peanut.png _routes.json styles/ _worker.js/

In it. What comes next?

reply
catapart
6 hours ago
[-]
- navigate to dist directory

- run pnpm dlx http-serve

- navigate to one of the provided ip addresses

(this uses the tunnl.gg service and is not necessary for local network access)

- [optional, for access via internet] run ssh -t -R 80:[provided ip address including port] proxy.tunnl.gg

reply
davidcollantes
5 hours ago
[-]
That gave me some other errors. I am giving up. Thanks for helping!
reply
Numerlor
4 hours ago
[-]
Fwiw if you want a simple pastebin, I've been running pinnwand for a couple years without any issues off of a single short docker compose file, I think running it on host also shouldn't be complicated
reply
mervz
5 hours ago
[-]
Crazy that people really need instructions on how to self-host stuff these days... this stuff used to be something most devs could figure out.
reply