29 min read

Self-Host Wastebin with Docker and Localtonet

Install Wastebin with Docker Compose, persist its SQLite database, verify it locally, and configure controlled HTTP access through Localtonet.

Wastebin running in Docker with persistent SQLite storage and a Localtonet tunnel to a remote browser.
Wastebin runs locally in Docker while Localtonet provides the remote HTTP path.
Self-Hosting ยท Wastebin ยท Docker Compose ยท Localtonet ยท 2026

Run a persistent private pastebin locally, verify every layer, then add remote HTTP access

Wastebin is a compact self-hosted pastebin with a browser interface, SQLite storage, syntax highlighting, Markdown rendering, paste expiration, and optional paste encryption. In this guide, we install it with Docker Compose, persist its database outside the container, test its core behavior, and cover routine maintenance and troubleshooting. Once the local installation is working, we connect it to an HTTP tunnel with Localtonet. Because Wastebin does not provide user accounts or comprehensive denial-of-service protection, we also explain what remote exposure does and does not secure.

๐Ÿ”’ Persistent SQLite data and exposure precautions ๐ŸŒ Local service on TCP port 8088 โšก Docker Compose installation and Localtonet access

What you are self-hosting

Wastebin is a minimal pastebin application backed by SQLite. It runs as a single server process and provides a browser interface for creating and reading text pastes. The application compresses stored pastes with zstd and supports syntax highlighting for more than 170 languages through syntect. Pastes using an md or markdown extension can also be displayed as rendered Markdown.

Its Markdown renderer supports GitHub-flavored features such as tables, task lists, admonitions, and highlighted fenced code blocks. Raw HTML in Markdown is sanitized. Safe elements such as <details>, <summary>, and <kbd> can be retained, while scripts, inline event handlers, and javascript: URLs are removed. The Content Security Policy permits external images on rendered Markdown routes, while other routes retain the stricter default policy.

Wastebin also supports expiration, deletion after reading, deletion by an anonymous owner, QR-code display, nine light and dark themes, and password-protected encrypted entries. Paste encryption uses ChaCha20Poly1305, while user-provided passwords used for encryption are hashed with Argon2. These paste-level capabilities are useful, but they must not be confused with application access control. Wastebin does not provide user authentication, user accounts, or administrator functionality.

๐Ÿ“ Focused paste workflow Create text pastes through a compact browser interface, select a language, choose an expiration, and optionally use burn-after-reading behavior.
๐Ÿ—„๏ธ SQLite storage Wastebin uses SQLite. The Docker Compose configuration in this guide stores the database as /data/state.db inside the container and bind-mounts that directory from the host.
๐ŸŽจ Code and Markdown presentation More than 170 syntax definitions, rendered Markdown, line wrapping, multiple themes, and keyboard shortcuts make the service practical for code and formatted notes.
๐Ÿ” Optional paste encryption Individual entries can be password-protected and encrypted, but this does not add a login wall in front of the overall Wastebin service.

What Wastebin intentionally does not include

The project identifies user authentication, administrator functionality, arbitrary file uploads, and comprehensive denial-of-service mitigations as non-features. This matters when deciding who should be able to reach the service. Anyone who can reach an exposed instance can potentially submit requests and create pastes unless another component enforces access restrictions before traffic reaches Wastebin.

Do not treat an unlisted public URL as authentication

A Localtonet HTTP tunnel gives the service a public HTTPS address, but the supplied product information does not establish that the tunnel adds a Wastebin login system or inbound rate limiting. Wastebin's maintainers advise against placing the application directly on the internet without inbound rate limiting through firewall rules or a properly configured reverse proxy. For long-running public access, put an appropriate protective layer in front of Wastebin and tunnel to that protected endpoint.

Why use Docker Compose for this installation?

Wastebin can be installed in several ways, but Docker Compose makes the service definition, port publication, restart policy, database path, and persistent host directory visible in one file. It also makes it straightforward to stop and recreate the container without replacing the SQLite database.

Installation path Documented requirement When it fits
Docker Compose Docker with Compose support and a writable persistent directory A reproducible service with explicit storage and port configuration
Prebuilt container The quxfoo/wastebin image and a container runtime A direct container launch without maintaining a Compose file
Prebuilt binary A downloaded statically compiled Linux or macOS binary A host installation without a container runtime
Nix Nix with flake support Systems already managed through Nix
Build from source Rust 2024 toolchain containing Rust 1.85 Development, source inspection, or a custom build workflow

This guide uses the published container image and Docker Compose. It does not require a Rust toolchain, a source checkout, or a locally built image.

Prerequisites and deployment plan

Prepare a machine that can run Docker containers and that has enough persistent disk space for the pastes you intend to retain. The extracted project documentation does not state a minimum CPU, memory, or storage allocation, so we do not invent one here. Actual storage use depends on the number, size, compression ratio, and retention period of your pastes.

You need the following:

  • Docker Engine or Docker Desktop with the docker compose command available.
  • A working directory where the Compose file and persistent data directory will be stored.
  • Permission to create directories and adjust their ownership or write permissions.
  • TCP port 8088 available on the host, unless you deliberately select another host-side port.
  • A web browser for functional testing.
  • For remote access, the Localtonet client running on the Wastebin host or on another device that can reach the published host port.

Understand the network path before installing

Wastebin listens on 0.0.0.0:8088 by default inside its runtime environment. The official Compose example publishes host port 8088 to container port 8088. With the mapping 8088:8088, Docker normally publishes the service on the host's available interfaces, subject to the host operating system, Docker networking mode, and firewall configuration.

If the Localtonet client runs on the same host, you can restrict the Docker publication to loopback by changing the port mapping to 127.0.0.1:8088:8088. The local browser and Localtonet client can then use 127.0.0.1:8088, while other devices on the LAN cannot connect directly through the host's LAN address. This is a Docker port-publication choice, not a Wastebin setting.

If the Localtonet client runs on a separate machine, loopback-only publication will not work because 127.0.0.1 always refers to the machine making the connection. In that topology, publish Wastebin on an interface reachable from the Localtonet client and use host firewall rules to restrict access to the required source.

Choose the target topology now

The simplest arrangement is to run Wastebin, Docker, and the Localtonet client on the same machine. In that case, a loopback-only Docker port mapping reduces unnecessary LAN exposure. If the components are on different devices, verify local network reachability before creating a tunnel.

Install Wastebin with Docker Compose

Docker Compose creates the Wastebin container while SQLite data remains in persistent host storage.
The container can be recreated without replacing the persisted SQLite data.

The installation below follows the project's documented Compose configuration: it uses the published quxfoo/wastebin:latest image, sets the database path to /data/state.db, publishes port 8088, mounts ./data at /data, and uses an automatic restart policy.

1

Create a project directory

Create a dedicated directory for the Compose file and its persistent data. Run the remaining Docker Compose commands from this directory so that the relative ./data bind mount resolves consistently.

2

Create the persistent data directory

Create a directory named data. The container image runs as user ID 10001, so this directory must be writable by that user. How ownership is managed differs between native Linux filesystems, rootless Docker, Docker Desktop, and network-mounted storage.

3

Create the Compose file

Save the documented service definition as compose.yaml. Use the standard port mapping for initial compatibility, or use the loopback-only variant described immediately after the file when the Localtonet client will run on this host.

4

Validate the resolved configuration

Ask Docker Compose to parse the file before starting the service. This catches YAML indentation problems, an unavailable Compose installation, and malformed configuration without requiring Wastebin to start successfully.

5

Start Wastebin

Launch the service in detached mode. Docker pulls the image if it is not already available, creates the container, mounts the host data directory, and publishes the configured port.

6

Inspect status and startup output

Confirm that the service remains running, then inspect its logs for database, permission, port-binding, or migration errors before opening the browser interface.

Create the directories

mkdir wastebin
cd wastebin
mkdir data

On a native Linux host, check the directory's numeric ownership and permissions:

ls -ldn data

The project specifically requires ./data to be writable by user ID 10001. If it is not writable, adjust ownership or permissions using the administrative method appropriate for your host. For example, changing the owner to numeric user ID 10001 is one possible Linux approach:

sudo chown 10001 data

Do not make the directory world-writable merely to silence a permission error. It contains the SQLite database and should be accessible only to the accounts and services that need it. On Docker Desktop, host-to-container permission behavior differs from native Linux, so first try the bind mount and inspect the logs before making broad permission changes.

Create compose.yaml

services:
  wastebin:
    restart: always
    environment:
      - WASTEBIN_DATABASE_PATH=/data/state.db
    ports:
      - "8088:8088"
    volumes:
      - "./data:/data"
    image: "quxfoo/wastebin:latest"

If Docker and the Localtonet client are on the same machine and you do not need direct LAN access, replace the port entry with a loopback-only publication:

ports:
  - "127.0.0.1:8088:8088"

Keep only one of those mappings. Do not include both unless you have a specific networking reason to publish the same service twice.

Validate and start the service

docker compose config
docker compose up -d
docker compose ps
docker compose logs wastebin

The configuration command should print the normalized Compose model without reporting a parsing error. The status command should show the Wastebin service running. Startup logs should not show an inability to create or migrate the database, and they should not report that port 8088 is already allocated.

The latest tag can change

The official example uses quxfoo/wastebin:latest, which is convenient for an initial installation but does not permanently identify one release. For a controlled production workflow, select a version tag that is actually published in the image registry, test it, and record that exact tag in the Compose file. Do not assume that changing the image reference also updates an existing container until you explicitly pull and recreate it.

Configure storage, limits, cookies, and presentation

The minimal Compose file is sufficient to start a persistent instance, but Wastebin exposes environment variables for important runtime behavior. Add only settings you understand, validate the resulting Compose file, and recreate the service after making a change.

Variable Documented default Purpose
WASTEBIN_ADDRESS_PORT 0.0.0.0:8088 Controls the address and port on which Wastebin listens inside its runtime environment.
WASTEBIN_BASE_URL Not specified in the supplied evidence Sets the base URL used when displaying a QR code for a paste.
WASTEBIN_CACHE_SIZE 128 Controls the number of rendered items cached. A value of 0 disables the cache.
WASTEBIN_DATABASE_PATH :memory: Selects the SQLite database file. The Compose deployment overrides this with /data/state.db for persistence.
WASTEBIN_HTTP_TIMEOUT 5 Sets the maximum number of seconds a request is processed before Wastebin responds with HTTP 408.
WASTEBIN_MAX_BODY_SIZE 1048576 Sets the maximum accepted POST body size in bytes. The default is 1 MB.
WASTEBIN_PASSWORD_SALT somesalt Provides the salt used when hashing passwords supplied for encrypted pastes.
WASTEBIN_PASTE_EXPIRATIONS Project-defined list Defines selectable expiration periods as comma-separated seconds or duration values.
WASTEBIN_SIGNING_KEY Randomly generated at startup Signs cookies. A configured key must be at least 64 bytes long.
WASTEBIN_THEME Project theme default Selects one of the documented themes, including ayu, base16ocean, catppuccin, coldark, gruvbox, monokai, onehalf, rosepine, or solarized.

Database persistence

Wastebin's application default is an in-memory database. An in-memory database disappears when the process exits, so it is not suitable when pastes must survive a container restart. The Compose file deliberately sets:

WASTEBIN_DATABASE_PATH=/data/state.db

The bind mount maps the host's ./data directory to /data in the container. As a result, state.db is created on persistent host storage rather than only in the container's writable layer. Recreating the container does not remove that host file.

Persistence is not the same as backup. File deletion, filesystem corruption, operator error, failed storage, or a damaged SQLite database can still cause data loss. Back up the host data directory using a process appropriate for SQLite. Coordinate backups to avoid copying a database in an inconsistent state while it is being modified. The Wastebin evidence supplied for this article does not prescribe a backup command or online-backup procedure, so test your chosen method and its restoration behavior before relying on it.

Signing key and owner cookies

If WASTEBIN_SIGNING_KEY is not configured, Wastebin generates a random signing key at startup. That means cookies created before a restart become invalid. In particular, paste creators can lose the cookie-based ability to delete pastes they anonymously created.

For consistent cookie behavior across restarts, configure a stable, secret signing key of at least 64 bytes. Generate and store it through your normal secret-management process. Do not paste a real signing key into documentation, source control, container logs, chat messages, or a publicly shared Compose file.

Password salt

The documented default for WASTEBIN_PASSWORD_SALT is somesalt. For an installation where password-protected pastes will be used, replace that public default with a deployment-specific secret value. Treat it as sensitive configuration and decide how it will be preserved during migration and disaster recovery.

Request size and timeout

The default maximum POST body is 1048576 bytes, or 1 MB. If a paste submission exceeds that limit, increasing a reverse proxy's request limit alone will not change Wastebin's own application limit. Conversely, increasing Wastebin's limit does not automatically change limits in a proxy placed in front of it.

The default HTTP processing timeout is five seconds. Raising body-size or timeout limits increases the resources that individual requests may consume. Any change should be considered alongside reverse-proxy limits, expected users, available resources, and abuse controls.

Base URL for QR codes

Wastebin can display a paste URL as a QR code. WASTEBIN_BASE_URL determines the base URL used for that feature. After Localtonet assigns the public HTTPS address, you can set this variable to that exact address if you want QR codes to point to the remote URL rather than a local address.

If the public address later changes, update the base URL and recreate the Wastebin container. Do not guess the Localtonet hostname before a tunnel has assigned it.

Verify the local installation before tunneling it

A running Wastebin container and its page responding through a local browser address.
Confirm the container and local page work before configuring external access.

Remote-access troubleshooting is much easier when the application has already passed local checks. Verify the container, network port, browser interface, paste creation, and persistence before opening the Localtonet dashboard.

1

Confirm that the container stays running

Run docker compose ps. If the service repeatedly restarts or exits, inspect its logs before testing the network.

2

Open the local web interface

On the Docker host, browse to http://127.0.0.1:8088/. You should receive the Wastebin interface rather than a connection error or an unrelated service.

3

Create a test paste

Enter non-sensitive sample text, choose an appropriate language and expiration, submit it, and save the resulting paste URL. Do not use burn-after-reading for the persistence test because the first read can intentionally remove that paste.

4

Check the persistent database file

Confirm that the host data directory now contains state.db. Its presence shows that the configured bind mount and database path are being used.

5

Test restart persistence

Stop and start the Compose service, then revisit the saved paste URL. The paste should remain available if it has not expired and was not configured for deletion after reading.

docker compose ps
docker compose logs wastebin
docker compose stop
docker compose start

You can also make a basic HTTP GET request from the Docker host:

curl http://127.0.0.1:8088/

This is only a reachability check. Wastebin's browser workflow provides the more useful functional test because it confirms that a paste can be created, retrieved, rendered, and retained.

Useful browser controls

When viewing a paste, Wastebin supports keyboard shortcuts. Press r for the raw paste, n for the index page, y to copy the current URL, c to copy the content, q to show a QR code, p for formatted output, w to toggle line wrapping, and m to toggle rendered Markdown. Press ? to display the available keybindings. The paste editor also accepts Ctrl+S to submit text.

Routine operation, updates, and recovery planning

Start, stop, and inspect Wastebin

docker compose up -d
docker compose stop
docker compose start
docker compose ps
docker compose logs wastebin

Stopping the service leaves the container and bind-mounted database in place. Starting it resumes the same service. The configured restart: always policy instructs Docker to restart the container according to that policy, but it does not repair an invalid configuration, a non-writable database directory, or a host port conflict.

Apply configuration changes

After editing compose.yaml, validate it and ask Compose to reconcile the running service:

docker compose config
docker compose up -d

Some environment changes require the container to be recreated before the process receives them. Check the service status and logs after every configuration change, then repeat the browser and persistence tests if the change affects storage, networking, cookies, expiration, or request handling.

Update the container image

If you use latest, updating is an explicit operational action. Pull the configured image and recreate the service:

docker compose pull
docker compose up -d
docker compose ps
docker compose logs wastebin

Back up the persistent data before an update. Review the target release and test restoration before depending on the updated instance. Do not remove the old backup until you have verified paste creation, retrieval, expiration behavior, owner actions, and restart persistence.

Pin a tested version

A pinned image tag makes deployments more predictable by preventing a later pull from silently selecting a different application release. Wastebin publishes versioned images using the quxfoo/wastebin:<VERSION> naming pattern. Verify that your intended version is published, replace latest with that exact tag, and test it in your environment.

Preserve the whole deployment state

A usable recovery plan needs more than state.db. Preserve the Compose file, the database, and any deployment-specific secrets such as the signing key and password salt. Store secrets separately from public source repositories. Document the host-side directory and ownership requirements so a replacement container can write to the restored database.

Expose the verified service with Localtonet

HTTP traffic passing through Localtonet to a private Wastebin container while its SQLite storage remains unexposed.
The tunnel exposes the Wastebin HTTP service without directly exposing Docker or SQLite storage.

After Wastebin works locally, Localtonet can provide a public HTTPS address for its HTTP service. Our client establishes an outbound connection to a Localtonet relay server, so this workflow does not require inbound router port forwarding, a public IP address, VPN setup, or inbound firewall changes.

The local target remains Wastebin's host and port. If our client runs on the Docker host, use 127.0.0.1 and port 8088. If it runs elsewhere, use an address that the client device can actually reach and test that address from the client device before creating the tunnel.

1

Install and run the Localtonet client

Install the current Localtonet application for the operating system on the device that can reach Wastebin. Run the client and keep it connected. Per-platform commands can change, so use the current package and instructions rather than copying an unverified command.

2

Authenticate or select the client device

Use the device-specific authentication token associated with the client. Never place that token in the Compose file, this article, a public repository, screenshots, or support messages.

3

Select an available relay server

Choose from the relay servers or regions currently shown in the Localtonet dashboard. Available values can vary, so do not hardcode a server code copied from an unrelated deployment.

4

Create an HTTP tunnel to Wastebin

Configure the local target as the Wastebin address and port. For a same-host deployment, the target is normally 127.0.0.1:8088. Select the appropriate HTTP process type from the options currently available in your dashboard.

5

Start the tunnel and test its public URL

Creating a tunnel does not start it. Press Start, wait for the tunnel to run, and open the assigned public HTTPS address. Create a non-sensitive test paste and retrieve it through that same public origin.

HTTP and File Server tunnels can use a generated subdomain, a selected subdomain where supported, or a custom domain. Exact availability can vary. If you intend to use a custom domain, check the current DNS instructions before creating records because the authoritative setup details are not supplied here.

For the current dashboard sequence and available settings, consult our Localtonet HTTP tunnel documentation.

A tunnel has a runtime lifecycle

A configured tunnel is not automatically reachable. The selected Localtonet client must be connected and the tunnel must be running. If either stops, the public endpoint stops forwarding traffic. You can stop the tunnel when remote Wastebin access is no longer needed and delete it when the configuration is no longer required.

Test the complete request path

Use separate checks so you know which layer failed:

  1. Open http://127.0.0.1:8088/ on the Docker host.
  2. If our client is on another device, open the Wastebin host's reachable address from that client device.
  3. Confirm that the Localtonet client is connected.
  4. Confirm that the HTTP tunnel is started.
  5. Open the assigned public HTTPS URL from a different network or device.
  6. Create and retrieve a disposable, non-sensitive paste.

This sequence distinguishes an application failure from a Docker publication issue, a local network problem, a disconnected client, or a stopped tunnel.

Security boundaries and safer exposure patterns

Self-hosting controls where the application and SQLite database run, but it does not automatically make every access pattern private. Once a public tunnel is active, requests from the public internet can reach its configured local target. Wastebin's own documented limitations therefore remain relevant.

๐Ÿ‘ค No user login Wastebin does not provide user authentication or an administrator interface. Paste passwords protect selected paste contents, not access to the application as a whole.
๐Ÿšฆ Rate limiting is still needed Wastebin does not claim comprehensive denial-of-service mitigation. Its maintainers recommend inbound rate limiting before public internet exposure.
๐Ÿ”‘ Secrets need persistence Preserve a stable signing key if owner cookies must survive restarts, and replace the documented default password salt for a real deployment.
โน๏ธ Temporary access reduces exposure Start the Localtonet tunnel only when remote access is required, then stop it afterward. The tunnel is unavailable when it is stopped or its selected client disconnects.

Temporary sharing

For occasional personal access, keep the Docker port on loopback, start the Localtonet HTTP tunnel only when needed, avoid storing sensitive material, and stop the tunnel when finished. This shortens the exposure window but does not transform an unauthenticated service into an authenticated one.

Long-running or public access

For persistent public availability, place a properly configured reverse proxy or another suitable access-control layer in front of Wastebin. Configure rate limiting there, and consider authentication, request-size restrictions, connection limits, logging, and any IP policy appropriate to your users. Point Localtonet at the protected proxy endpoint rather than bypassing it and targeting Wastebin directly.

This article does not prescribe a particular proxy configuration because no proxy product or verified policy has been supplied. Rate-limit values are workload-specific, and inventing universal thresholds would create a false sense of safety.

Minimize direct host exposure

When all components run on one host, bind the Docker publication to 127.0.0.1. If a separate Localtonet client must connect over the LAN, restrict the host firewall to that source where possible. Avoid exposing port 8088 through router forwarding in parallel with the tunnel, since that creates a second public path outside the intended workflow.

Do not put sensitive values in pastes

Even when using encrypted paste entries, apply normal secret-handling rules. Avoid copying authentication tokens, signing keys, private endpoints, production credentials, recovery codes, or customer data into a service merely for convenience. Encryption features reduce certain risks but do not remove endpoint security, password quality, availability, retention, backup, and operator-access concerns.

Troubleshooting Wastebin and the tunnel

The container exits or repeatedly restarts

Start with status and logs:

docker compose ps
docker compose logs wastebin

Look for a database write failure, migration error, invalid environment value, or occupied port. Validate the Compose file again with docker compose config. A restart policy can make a failure look busy without resolving its cause.

Wastebin cannot create state.db

Confirm that WASTEBIN_DATABASE_PATH is /data/state.db, the bind mount maps ./data to /data, and the host directory is writable by container user ID 10001. Inspect numeric ownership on Linux:

ls -ldn data
ls -ln data

Also confirm that data is a directory rather than a regular file and that the underlying filesystem supports the operations SQLite requires.

Database migration fails with extended SQLite error 6410

The Wastebin image is based on scratch. It does not contain a shell, and TMPDIR is not set by default. If migration fails with extended SQLite error code 6410, set TMPDIR to a directory SQLite can write to.

The existing /data mount is intended to be writable, so it can also be used as the temporary directory:

environment:
  - WASTEBIN_DATABASE_PATH=/data/state.db
  - TMPDIR=/data

Revalidate and recreate the service after editing the file:

docker compose config
docker compose up -d
docker compose logs wastebin

Docker reports that port 8088 is already allocated

Another process or container is using the host port. Stop the conflicting service or choose a different host-side port while leaving the container-side port at 8088. For example, a host port of 8090 would map to container port 8088. You would then test the host on port 8090 and configure Localtonet to target that host port.

The extracted evidence establishes Wastebin's internal default as port 8088. Changing only the left side of a Docker port mapping does not require changing Wastebin's internal listener.

The local page does not open

Verify that the container is running and that you are using the published host port. If the mapping is loopback-only, open it from the Docker host itself. A request from another device cannot use the Docker host's 127.0.0.1.

If Docker is running inside a virtual machine, remote development environment, or subsystem, its definition of the host may differ from your desktop's. Confirm where the port is published before changing Wastebin settings.

Pastes disappear after a restart

Confirm that the running container has WASTEBIN_DATABASE_PATH=/data/state.db and that the bind mount is active. If the variable was omitted, Wastebin's documented default is :memory:, which does not persist process state. Also verify that the paste did not expire and was not configured for deletion after reading.

The creator can no longer delete a paste after restart

Wastebin generates a random signing key at startup when WASTEBIN_SIGNING_KEY is not configured. Restarting then invalidates existing owner cookies. Configure and preserve a stable signing key of at least 64 bytes if this owner workflow needs to survive restarts.

Local access works but the public URL does not

Check the layers in order:

  • Our client is running and connected.
  • The selected device token corresponds to that client.
  • The tunnel is started, not merely created.
  • The selected relay server is currently available in the dashboard.
  • The tunnel type is HTTP.
  • The local target address is valid from the client device.
  • The target port matches Docker's host-side published port.
  • No local firewall blocks the client-to-Wastebin path.

If our client and Docker share a host, test http://127.0.0.1:8088/ there. If our client is remote, test the exact LAN address and port from that client device. Do not configure a remote client to target 127.0.0.1 unless Wastebin is also running on that remote client device.

The public page works, but QR codes show the wrong origin

Set WASTEBIN_BASE_URL to the current assigned public HTTPS address, validate the Compose file, and recreate the service. If the public hostname changes later, update this value again.

Frequently asked questions

Does Wastebin require an external database server?

No. Wastebin uses SQLite. In this Compose deployment, the database is stored as /data/state.db inside the container and persisted through the host's ./data directory. No separate PostgreSQL or MySQL service is required.

Why not use Wastebin's default database configuration?

Its documented database-path default is :memory:. That is useful for temporary execution but does not retain data when the process exits. Setting WASTEBIN_DATABASE_PATH=/data/state.db and mounting persistent host storage allows pastes to survive container replacement and restarts.

Does Wastebin have user accounts or an administrator login?

No. User authentication and administrator functionality are documented non-features. Password-protecting a paste encrypts that entry, but it does not require visitors to authenticate before reaching the Wastebin application.

Is a Localtonet URL private just because it is difficult to guess?

No. URL secrecy is not authentication. When the tunnel is running, its public address forwards requests to the configured target. Use temporary tunnel operation for limited sharing, or put suitable authentication and rate limiting in front of Wastebin for longer-running access.

Do I need router port forwarding for this setup?

No. Our client creates an outbound connection to a Localtonet relay server. The workflow does not require an inbound router port forward, a public IP address, VPN setup, or an inbound firewall change.

Can the Localtonet client run on a different computer?

Yes, provided that computer can reach Wastebin's host address and published port. In that arrangement, do not use 127.0.0.1 as the tunnel target because it would refer to the client computer itself. Use a reachable address and restrict the local network path appropriately.

What happens when the Localtonet client or tunnel stops?

The public tunnel becomes unavailable when the selected client disconnects or the tunnel is stopped. Wastebin can continue running locally, and its SQLite data remains on the host, but requests are no longer forwarded through that public endpoint.

Can I upload arbitrary files to Wastebin?

Arbitrary file uploads are a documented non-feature. Wastebin is designed as a text paste service with code highlighting and Markdown rendering, not as a general file-sharing system.

Why do owner cookies stop working after a restart?

Without an explicitly configured signing key, Wastebin generates a random key at startup. Existing cookies then become invalid after a restart. Configure a stable WASTEBIN_SIGNING_KEY of at least 64 bytes and preserve it securely if anonymous owners need consistent deletion rights.

Connect your verified Wastebin instance with Localtonet

Install our client on a device that can reach Wastebin, create an HTTP tunnel to the tested local port, and start the tunnel only when you are ready for remote access. Keep Wastebin's lack of application-wide authentication and comprehensive rate limiting in mind before leaving the endpoint publicly available.

Get Started Free โ†’

Localtonet is a secure multi-protocol tunneling and proxy platform designed to expose localhost, devices, private services, and AI agents to the public internet supporting HTTP/HTTPS tunnels, TCP/UDP forwarding, mobile proxy infrastructure, file server publishing, latency-optimized game connectivity, and developer-ready AI agent endpoint exposure from a single unified control plane.

support