Secure, shareable clipboard for teams and individuals.
Table of Contents
- Overview
- Key Features
- Tech Stack
- Getting Started
- Configuration
- Usage Guide
- Contributing
- Community & Support
- License
Overview
ClipBin is a Flask-based web application for storing and sharing code snippets, configuration fragments, and other plaintext securely. It supports authenticated workflows for teams while also allowing anonymous users to create temporary clips with password protection.
Key Features
- Dark theme interface for comfortable reading.
- Anonymous and authenticated clip creation flows.
- Optional password protection with end-to-end encryption.
- Expiring links with configurable retention periods.
- Custom aliases for easy-to-remember URLs.
- File upload support for vetted text-based formats.
- User dashboard with clip management and exports.
- REST-style API endpoints for automation.
Tech Stack
Frontend
Backend
Getting Started
Prerequisites
- Python 3.10 or later
- pip 22+
- (Optional) Virtual environment tooling such as
venvorpipenv
Installation
Clone the repository and install dependencies:
git clone https://github.com/alight659/ClipBin cd ClipBin python3 -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install -r requirements.txt
Running the Development Server
Start the Flask application:
By default the server listens on http://127.0.0.1:5000. Enable debug mode locally by editing app.py and starting the app with app.run(debug=True).
Configuration
| Variable | Description | Default |
|---|---|---|
SECRET_KEY |
Session encryption key used by Flask. Must be set in production. | None (Flask will raise if unset) |
MAX_CONTENT_LENGTH |
Maximum upload size for clips and files. | 1.5 MB |
Set environment variables in your shell before launching the app, for example:
export SECRET_KEY="change-me"
The application stores data in clipbin.db, an SQLite database created on first run. Back up this file for persistence.
Or use the Makefile for easier development:
# Start development server make dev # Install dependencies make install # Run tests quickly make test-fast # View all available commands make help
To enable debugging mode, edit app.py
Testing
This project includes a comprehensive test suite using pytest. The tests cover:
- Unit Tests: Individual function testing for utility modules
- Integration Tests: Complete workflow testing
- Database Tests: SQLite operations and data integrity
- Security Tests: XSS, SQL injection prevention
- API Tests: REST API endpoints
Quick Testing with Makefile
The easiest way to run tests is using the provided Makefile:
# View all available commands make help # Run all working tests (recommended) make test-fast # Run tests with coverage report make test-coverage # Run specific test categories make test-unit # Unit tests only make test-integration # Integration tests only # Quick commands make q # Quick test (alias for test-fast) make qc # Quick test with coverage
Manual Testing
Install test dependencies (already included in requirements.txt):
pip install -r requirements.txt
Run all tests:
Run tests with coverage report:
python -m pytest --cov=. --cov-report=html
Run specific test categories:
# Run only unit tests python -m pytest tests/test_additional.py tests/test_sqlite.py # Run integration tests python -m pytest tests/test_integration.py # Run with verbose output python -m pytest -v
Use the convenient test runner script:
# Run all tests with coverage python run_tests.py # Run fast tests without coverage python run_tests.py --fast # Generate HTML coverage report python run_tests.py --html-report # Run only unit tests python run_tests.py --type unit
Test Coverage
The project maintains high test coverage standards:
- Target Coverage: 90% minimum, 100% preferred
- Current Coverage:
additional.py: 100%sqlite.py: 100%app.py: Comprehensive route and functionality testing
View detailed coverage reports:
# Generate HTML report python -m pytest --cov=. --cov-report=html open htmlcov/index.html # View in browser
Writing Tests
Tests are organized in the tests/ directory:
test_additional.py: Utility function teststest_sqlite.py: Database operation teststest_app.py: Flask application route teststest_integration.py: End-to-end workflow testsconftest.py: Test configuration and fixtures
Usage Guide
- Visit the home page and create a clip by entering a title and body or uploading a supported file.
- Optionally set a password, mark the clip as editable, choose an expiration window, or supply a custom URL alias.
- Share the resulting link. A separate
/rawendpoint is available for plaintext retrieval, and/download/<id>exposes the content as a file. - Create an account to unlock the dashboard, manage existing clips, and export content as JSON, CSV, or plain text.
Contributing
Contributions that improve documentation, add features, or streamline the user experience are welcome. To get started:
- Review the Contributing Guidelines and Code of Conduct.
- Fork the repository and create a feature branch referencing the related issue.
- Write clear commit messages and include tests or documentation updates when they apply.
- Open a pull request explaining the motivation and testing performed.
Need inspiration? Check the issue tracker for help wanted and good first issues.
We ❤️ contributions!
Community & Support
Questions, bug reports, or feature ideas are encouraged. Reach the maintainers at aanis@clipb.in or open a GitHub issue.
License
ClipBin is released under the MIT License.