Minimal pastebin for both textual and binary files shipped in a single statically linked binary.
Deploy this app to Linode with a free $100 credit!
A minimal pastebin which also accepts binary files like Images, PDFs and ships multiple clients.
It does not require you to host a SQL server and everything is self-contained in a statically linked binary (the docker image runs on scratch !), which makes it extremely easy to deploy.
Try it out on: https://basedbin.fly.dev
You can paste
Normal Text
Paste Images from clipboard:
Files by drag and drop:
Get the client from this repository or from my deployed paste:
curl -o pst https://bin.wantguns.dev/client
chmod +x pst
or manually copy the following at a file in your path.
#!/bin/bash
# Change the url accordingly
URL="https://basedbin.fly.dev"
FILEPATH="$1"
FILENAME=$(basename -- "$FILEPATH")
EXTENSION="${FILENAME##*.}"
RESPONSE=$(curl --data-binary @${FILEPATH:-/dev/stdin} --url $URL)
PASTELINK="$URL$RESPONSE"
[ -z "$EXTENSION" ] && \
echo "$PASTELINK" || \
echo "$PASTELINK.$EXTENSION"
You have the option to remove the /client
description / help in the
landing page. To show the /client
description, run the bin
binary
with either BIN_CLIENT_DESC
env variable or a -c
flag. More on
arguments later
It just works.
$ pst somefile.txt
$ cat someimage.png | pst
nnoremap <leader>p :!pst %<CR>
Use <leader> + p
paste.
Currently, builds for the following target triples are shipped: - x86_64-unknown-linux-gnu (amd64) - aarch64-unknown-linux-gnu (arm64)
The builds shipped are statically linked, so you don't even need a libc to run
the binary !
The docker manifest labelled
wantguns/bin:latest
includes the images for both amd64 and arm64 images.
$ docker run -p 6162:6162 wantguns/bin
version: '3.3'
services:
pastebin:
image: wantguns/bin
container_name: pastebin
ports:
- 127.0.0.1:6163:6163
environment:
- BIN_PORT=6163 # Defaults to 6162
- BIN_LIMITS={form="16 MiB"}
- BIN_CLIENT_DESC=placeholder
volumes:
- ./upload:/upload # upload folder will have your pastes
Build on your own:
# A statically linked build
$ cargo build --release
Execute the binary as is, no extra shenanigans needed:
$ ./bin
USAGE:
bin [OPTIONS]
OPTIONS:
-a, --address <ADDRESS>
Address on which the webserver runs [default: 127.0.0.1]
-b, --binary-upload-limit <BINARY_UPLOAD_LIMIT>
Binary uploads file size limit (in MiB) [default: 100]
-c, --client-desc
Include client description [env: CLIENT_DESC=]
-h, --help
Print help information
-p, --port <PORT>
Port on which the webserver runs [default: 6162]
-u, --upload <UPLOAD>
Path to the uploads folder [default: ./upload]
-V, --version
Print version information
This pastebin utilizes a custom configuration provider from Rocket. Apart from the essential arguments, you can also use environment variables, which have the highest preference in order.
Everything from the official Rocket doc is supported, just that you have to prefix the env variable with "BIN_":
BIN_PORT=6163
BIN_ADDRESS=0.0.0.0
BIN_LIMITS={form="16 MiB"}
BIN_WORKERS=8
BIN_IDENT=false
...
GET /<id>
Get raw pastes
GET /p/<id>
Get highlighted pastes
GET /p/<id>.<ext>
Get syntax highlighted pastes.
E.g. https://basedbin.fly.dev/p/foobaz.cpp should return a C++ syntax
highlighted paste
POST /
Post binary data
This pastebin:
$ cp -a tools/prepush .git/hooks/pre-push
Alternately, just run ./tools/prepush
yourself before pushing.
Please login to review this project.
No reviews for this project yet.
Simple and fast terminal based pastebin, with optional code…
A dead-simple application to securely communicate passwords…
Code snippets manager with attractive tag-oriented interfac…
Comments (0)
Please login to join the discussion on this project.