All the routes can also receive and return JSON. Just pass a JSON payload and/or put JSON into your
Accept header. You can use
httpie, for examploe.
This workspace includes both the
server and a companion
cli, on their respective subdirectories.
I was a little burned out fixing older code at work, so i just wanted to make a nice real world app in a weekend, without having to deal with legacy codebases or databases. Just my clean new shiny schema.
I really recommend doing stuff like this (specially in the exact same stack you use at work). Making stuff from scratch makes it easier to plan out a nicer architecture, getting insights you can't get on an older codebase.
This is a fully server-side rendered web application.
I dislike class-heavy HTML/CSS, so the styling is based on the awesome Pico.css sheet. Both Pico.css and my own customizations are SCSS, which is compiled at build-time (and included into the executable) using grass.
It should be really easy to build and run.
Just grab rustc and cargo (usually through either rustup or your distro's packages, if they're recent enough). If you're using nix, just run
nix develop to get a shell with everything you need.
Get a PostgreSQL instance up and running (should be available on your distro's repo, or use docker). Either socket or password auth will work just fine.
Populate your schema using the
.sql files in
db/. These have a version number, so if you're upgrading just run the new ones.
url section and set it to your psql connection string. Or set
ROCKET_DATABASES environment variable to
You can change bind
template_dir as well. Either add the key (lowercase) to
[default] session (easier when hacking), or set
ROCKET_FOO_BAR env variables (better for deployment).
If you're planning on deploying, you need a stable secret (for signing auth cookies). You can generate a nice one with
openssl rand -base64 32, add it to your
ROCKET_SECRET_KEY variable and you're good to go.
cargo run -p paste-misterio-me to run debug mode. Add in
--release for a optimised (but slower compilling) version. If you just want the executable, use
cargo build -p paste-misterio-me instead.
If you run NixOS, there's a NixOS module available.
pmis is available on crates.io, on the AUR, and there's also a nix flake in the repo for usage with nix.
cargo install pmis, or clone this repo and run
cargo build --release -p pmis.
You can generate completions using
pmis completions <SHELL> (check your distro docs on where to install them).
You can get a shell with
nix shell github:misterio77/paste-misterio-me#cli.
For a more permanent solution, you should add
pmis to your flake inputs, add the overlay, and put it wherever you usually put packages (i recommend using
home-manager, we even have a module you can import).
If you want to avoid compiling,
pmis is cached on cachix:
cachix use misterio.
Completions are provided through the derivation.
Use your favorite AUR helper:
paru -S pmis.
Completions are provided through the package.
The default API URL is
https://paste.misterio.me, you can switch to another (if you're self hosting an instance, for example) using
All commands and options are fully documented through
pmis download <ID>. The output is pretty printed using
bat (unless it is piped, or if you use
Do keep in mind pastes can easily be downloaded using many utilities, such as
curl https://paste.misterio.me/p/ID/raw. This makes it easy to get them on any barebones system or to share with friends that don't use
You can list a users public pastes (or all of them, if you're authenticated and the user is you) using
pmis list [OWNER]. You can ommit
OWNER if you're authentiucated. If you just want the IDs, add
You should generate a key, and then use
pmis upload [FILE]. The title of the paste is the filename, by default. You can ommit
FILE to read from stdin. Use
--description to add a description, and
--unlisted if you don't want it to appear on your profile. When the upload is complete the link and ID will be output, you can get just the link by piping or using
You can delete your pastes by using
pmis delete <ID>.