A simple, light and standalone pastebin, URL shortener and file-sharing service that hosts files, redirects links and stores texts.
- Easy to use. Installation and set-up take less than a minute and a built-in web UI is provided.
- Standalone. No external dependencies required, everything that is needed is packed into the binary.
- Light and fast. The Rust web framework Actix is used under the hood, providing great speed with a minimal footprint.
- Get the binary either from the releases page or using Cargo
- Run it a first time and follow the instructions
- Edit your config file, check the dedicated section for details
- Run the binary again and you're good to go, just browse to http://localhost:8080 (don't forget to replace
8080
with the port specified in your config) - Optionally, set up a reverse proxy
When asked for a login, use whatever username you want and the password you provided during setup. Usage is pretty straightforward using the web UI, but here are some tips.
- Make sure to allow popups to allow created links to open in a new tab
- Press space in the URL input to generate a random one
- If the entered URL is already in use, the input will have a yellow outline
Details for programmatic usage are provided in the dedicated section.
- Decent test suite
- TLS support
- Opt-in stats (visits per element over time)
- Opt-in syntax highlighting for text
- Multiple users and passwords
- Simple admin page
- systemd service generation
The config is located at ~/.filite/config.toml
and follows the following format. Most of the time, the defaults are reasonable.
# Port to listen on
port = 8080
# SQLite database URL
database_url = "database.db"
# Database connection pool size
pool_size = 4
# Path to the directory where files will be stored, relative or absolute
files_dir = "files"
# Max allowed size for file uploads, in bytes
max_filesize = 10000000
Don't forget to replace 8080
with the port specified in your config and example.com
with your own domain.
server {
listen 80;
listen [::]:80;
server_name example.com;
location / {
proxy_pass http://localhost:8080;
}
}
Send a PUT request with a JSON body following the following schemes. Don't forget to set the Content-Type
header to application/json
and the Authorization
header to a valid value (username isn't important).
PUT /f/id
{
"base64": "Base64-encoded file",
"filename": "Filename"
}
PUT /l/id
{
"forward": "URL to forward to"
}
PUT /t/id
{
"contents": "Text contents"
}
The response will be a JSON array following the following schemes
GET /f
[
{
"id": "ID (URL) as an integer",
"filepath": "Absolute path to the stored file",
"created": "Creation timestamp"
}
]
GET /l
[
{
"id": "ID (URL) as an integer",
"forward": "URL to forward to",
"created": "Creation timestamp"
}
]
GET /t
[
{
"id": "ID (URL) as an integer",
"contents": "Text contents",
"created": "Creation timestamp"
}
]
The project is open to contributions! Before submitting a PR, make sure your changes work both with and without the dev
feature enabled.
- The Rust toolchain
- diesel_cli with the
sqlite
feature enabled
- Copy
.env.example
to.env
and set the variables to your liking - Run
diesel database setup
- Build or run with the
dev
feature enabled
filite is licensed under the MIT License.