Lightweight, minimal and fast pastebin with an SQLite backend.
Deploy this app to Linode with a free $100 credit!
A minimal pastebin with a design shamelessly copied from bin.
DEMO (resets every day)
Install a Rust 2021 toolchain with rustup and run the server binary with
$ cargo run --release
You can also download pre-built, statically compiled Linux
binaries. After extraction run the
contained wastebin
binary.
Alternatively, you can run a pre-built Docker image pushed to quxfoo/wastebin
.
Here is how to persist the database as state.db
via the
WASTEBIN_DATABASE_PATH
environment variable and a bind mount to
/path/for/storage
:
$ docker run -e WASTEBIN_DATABASE_PATH=/data/state.db -v /path/for/storage:/data quxfoo/wastebin:latest
NOTE: The image is based on scratch which means it neither comes with a
shell nor is TMPDIR
set. If database migrations fail with an extended sqlite
error code 6410, pass TMPDIR
pointing to a location, sqlite can use to write.
When viewing a paste, you can use
The following environment variables can be set to configure the server and run-time behavior:
WASTEBIN_ADDRESS_PORT
string that determines which address and port to bind
a. If not set, it binds by default to 0.0.0.0:8088
.WASTEBIN_BASE_URL
string that determines the base URL for the QR code
display. If not set, the user agent's Host
header field is used as an
approximation.WASTEBIN_CACHE_SIZE
number of rendered syntax highlight items to cache.
Defaults to 128 and can be disabled by setting to 0.WASTEBIN_DATABASE_PATH
path to the sqlite3 database file. If not set, an
in-memory database is used.WASTEBIN_MAX_BODY_SIZE
number of bytes to accept for POST requests. Defaults
to 1 MB.WASTEBIN_SIGNING_KEY
sets the key to sign cookies. If not set, a random key
will be generated which means cookies will become invalid after restarts and
paste creators will not be able to delete their pastes anymore.WASTEBIN_TITLE
overrides the HTML page title. Defaults to wastebin
.RUST_LOG
influences logging. Besides the typical trace
, debug
, info
etc. keys, you can also set the tower_http
key to some log level to get
additional information request and response logs.POST a new paste to the /
endpoint with the following JSON payload:
{
"text": "<paste content>",
"extension": "<file extension, optional>",
"expires": <number of seconds from now, optional>,
"burn_after_reading": <true/false, optional>
}
After successful insertion, you will receive a JSON response with the path to the newly created paste:
{"path":"/Ibv9Fa.rs"}
To retrieve the raw content, make a GET request on the /:id
route and an
accept header value that does not include text/html
. If you use a client that
is able to handle cookies you can delete the paste once again using the cookie
in the Set-Cookie
header set during redirect after creation.
Use the wastebin.nvim plugin and paste
the current buffer or selection with :WastePaste
.
We can use the API POST endpoint to paste clipboard data easily from the command
line using xclip
, curl
and jq
. Define the following function in your
.bashrc
and you are good to go:
function waste-paste() {
local URL=$(\
jq -n --arg t "$(xclip -selection clipboard -o)" '{text: $t}' | \
curl -s -H 'Content-Type: application/json' --data-binary @- http://0.0.0.0:8088 | \
jq -r '. | "http://0.0.0.0:8088\(.path)"')
xdg-open $URL
}
Please login to review this project.
No reviews for this project yet.
Comments (0)
Please login to join the discussion on this project.