{"id":17477933,"url":"https://github.com/arunanshub/webbin","last_synced_at":"2026-02-11T00:31:23.487Z","repository":{"id":64378625,"uuid":"571233491","full_name":"arunanshub/WebBin","owner":"arunanshub","description":"WebBin: The Based Pastebin","archived":false,"fork":false,"pushed_at":"2025-12-12T02:49:52.000Z","size":418,"stargazers_count":1,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-13T09:49:41.989Z","etag":null,"topics":["compression","cryptography","flask","pastebin","security","sqlalchemy"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arunanshub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-11-27T15:38:56.000Z","updated_at":"2024-10-17T01:05:57.000Z","dependencies_parsed_at":"2023-02-17T02:00:35.119Z","dependency_job_id":"72c8b67a-eccb-403f-bdf8-f5082c573281","html_url":"https://github.com/arunanshub/WebBin","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/arunanshub/WebBin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arunanshub%2FWebBin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arunanshub%2FWebBin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arunanshub%2FWebBin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arunanshub%2FWebBin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arunanshub","download_url":"https://codeload.github.com/arunanshub/WebBin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arunanshub%2FWebBin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29323520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T20:44:44.282Z","status":"ssl_error","status_checked_at":"2026-02-10T20:44:43.393Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compression","cryptography","flask","pastebin","security","sqlalchemy"],"created_at":"2024-10-18T20:10:13.639Z","updated_at":"2026-02-11T00:31:23.470Z","avatar_url":"https://github.com/arunanshub.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WebBin: The Based Pastebin.\n\n[![CI](https://github.com/arunanshub/WebBin/actions/workflows/ci.yml/badge.svg)](https://github.com/arunanshub/WebBin/actions/workflows/ci.yml)\n[![Coverage Status](https://coveralls.io/repos/github/arunanshub/WebBin/badge.svg?branch=master)](https://coveralls.io/github/arunanshub/WebBin?branch=master)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![Checked with mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)\n\n![Website Image](static/website.png)\n\n## Features\n\n- Made using Bootstrap 5\n- Default high performance server thanks to [Gunicorn][gunicorn] and [Waitress][waitress]\n- Password protection of data using password-cracking resistant KDF `scrypt`\n- AES-256-GCM encryption using [PyFLocker](https://github.com/arunanshub/pyflocker)\n- `zlib` compression of data\n- Custom expiration time of pastes, including \"burn after read\"\n- Paste titles and custom paste slugs\n- Paste View Counts\n- Support for all major SQL databases thanks to [SQLALchemy][sqlalchemy]\n- Schema protection using database migration scripts\n- Website security using strict CSP policy and CSRF tokens\n- support for running WebBin behind a proxy server (see [`config.py`](./config.py))\n\n## Installation\n\nInstall WebBin using [PDM](https://pdm-project.org/):\n\n```shell\npdm install\n```\n\n\u003e I would recommend installing PDM using [`pipx`](https://pypa.github.io/pipx/).\n\n### TL;DR\n\n```sh\npdm install -G waitress,postgres\n```\n\nor if you want to use [Gunicorn][gunicorn]:\n\n```sh\npdm install -G gunicorn,postgres\n```\n\nand run with\n\n```sh\npdm deploy \u0026\u0026 pdm start\n```\n\n### Installing Database Drivers\n\nTo communicate with a database, you would need a database connector. WebBin by\ndefault provides dependencies for SQLite and Postgres. However, you may install\nthe [connectors supported by SQLALchemy.][sqlalchemy_dialects]\n\nWebBin by default provides \"extras\" dependencies for PostgreSQL. Install it\nusing:\n\n```shell\npdm install -G postgres\n```\n\n#### Why Postgres?\n\nBecause I like it.\n\n### Installing WSGI Servers\n\nWebBin by default provides \"extras\" dependencies for both [Gunicorn][gunicorn]\nand [Waitress][waitress]. Install WSGI server using:\n\nTo install Waitress:\n\n```shell\npdm install -G waitress\n```\n\n\u003e **Note**\n\u003e Waitress runs on both UNIX and Windows.\n\nor\n\nTo install Gunicorn:\n\n```shell\npdm install -G gunicorn\n```\n\n\u003e **Note**\n\u003e Gunicorn runs on UNIX only.\n\n## Running\n\n### Setting Up the environment variables\n\nYou can either set the environment variables using a `.env` file or via the\nshell. For example:\n\n```bash\nFLASK_CONFIG=\"production\"\nSECRET_KEY=\"some hard to guess secret key\"\nSSL_REDIRECT=true\nDATABASE_URL=\"postgresql://user:secret@localhost\"\n```\n\nCan be a possible configuration for production environment. See\n[configuration](#configuration) for more details.\n\n### Applying Database Migrations\n\nRun the following command to automatically migrate your database:\n\n```bash\npdm run deploy\n```\n\nThis command will not only apply migrations to your database, but also prepare\nWebBin for deployment.\n\n### Running and Deployment\n\nGunicorn is used by default.\n\nRun WebBin using [Gunicorn][gunicorn]:\n\n```bash\npdm run start\n```\n\nOr [Waitress][waitress]:\n\n```bash\npdm run start-waitress\n```\n\nOr if you want a development web server:\n\n```bash\npdm run start-dev\n```\n\n\u003e **Note**\n\u003e All `pdm run` scripts can be found in `pyproject.toml` under `tool.pdm.scripts`.\n\n## Configuration\n\n- `SECRET_KEY`: The application secret key. This must be **random**! This will\n  be used to protect WebBin from Cross-Site Request Forgery attacks.\n\n- `FLASK_CONFIG`: Configure whether you want run WebBin in a development\n    environment or a production environment. Can be either `production` or\n    `development`.\n\n- `SSL_REDIRECT`: Enable `http` to `https` redirects. Enable this only if\n  WebBin is running behind a proxy server (Default `False`)\n\n- `DATABASE_URL`: The URL to your database. If not provided, an SQLite database\n  is used. I recommend using Postgres database for production. (Defualt\n  `data.db` or `data-dev.db` depending on `FLASK_CONFIG`).\n\n  \u003e **Note**\n  \u003e For Postgres database URL, The scheme should be `postgresql` instead of\n  \u003e `postgres`.\n\n- `COMPRESSION_THRESHOLD_SIZE`: If the paste data size is greater than the\n  threshold, it will be compressed with ``zlib`` algorithm.\n\n[gunicorn]: \u003chttps://gunicorn.org\u003e\n[sqlalchemy]: \u003chttps://docs.sqlalchemy.org/\u003e\n[sqlalchemy_dialects]: \u003chttps://docs.sqlalchemy.org/en/20/dialects/\u003e\n[waitress]: \u003chttps://docs.pylonsproject.org/projects/waitress/en/latest/\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farunanshub%2Fwebbin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farunanshub%2Fwebbin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farunanshub%2Fwebbin/lists"}