{"id":39117136,"url":"https://github.com/gaetangr/scytalio","last_synced_at":"2026-01-17T20:17:49.513Z","repository":{"id":270380625,"uuid":"910183723","full_name":"gaetangr/scytalio","owner":"gaetangr","description":"Scytalio is an open-source API designed for storing and retrieving encrypted messages with end-to-end encryption (E2EE)","archived":false,"fork":false,"pushed_at":"2025-09-05T03:12:18.000Z","size":203,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-13T10:02:56.295Z","etag":null,"topics":["e2ee","encryption","fastapi","python","vuejs"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gaetangr.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}},"created_at":"2024-12-30T17:30:06.000Z","updated_at":"2025-07-28T20:37:40.000Z","dependencies_parsed_at":"2024-12-30T18:43:40.488Z","dependency_job_id":null,"html_url":"https://github.com/gaetangr/scytalio","commit_stats":null,"previous_names":["gaetangr/scytalio"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gaetangr/scytalio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaetangr%2Fscytalio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaetangr%2Fscytalio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaetangr%2Fscytalio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaetangr%2Fscytalio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gaetangr","download_url":"https://codeload.github.com/gaetangr/scytalio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaetangr%2Fscytalio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28517432,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T18:55:29.170Z","status":"ssl_error","status_checked_at":"2026-01-17T18:55:03.375Z","response_time":85,"last_error":"SSL_read: 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":["e2ee","encryption","fastapi","python","vuejs"],"created_at":"2026-01-17T20:17:48.590Z","updated_at":"2026-01-17T20:17:49.505Z","avatar_url":"https://github.com/gaetangr.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Scytalio - Securely send, safely receive.\n\nScytalio is an open-source API designed for storing and retrieving encrypted messages with end-to-end encryption (E2EE). The project name \"Scytalio\" is derived from the *scytale*, an ancient encryption device used by the Greeks to transmit secret messages securely. This project takes inspiration from that historical method to provide a modern platform for confidential message sharing. \n\nThe goal of Scytalio is to facilitate secure sharing of sensitive content—such as passwords, private notes, or any other personal information—between users or computers. It ensures that only the sender and the recipient can read the content, protecting against data breaches, man-in-the-middle attacks, and other security risks. The project is designed to be easy to use and is an excellent example of building a secure system with FastAPI.\n\n## Project Goals\n\n- **Secure Sharing**: Scytalio aims to facilitate secure, private communication between users, enabling the sharing of sensitive data such as passwords and private notes, with the guarantee that only the intended recipient can decrypt the information.\n- **Avoid Data Breaches**: By encrypting the content and using secure protocols, Scytalio ensures that even if the data is intercepted, it cannot be read by unauthorized parties.\n- **Open-source Contribution**: This project is open for contributions. If you'd like to help improve Scytalio or add new features, feel free to fork the project, create an issue, or submit a pull request.\n- **Burn After Reading**: Messages are automatically deleted after being read to ensure that sensitive data doesn’t linger.\n\n## Installation\n\n### Backend\n\n1. Clone the repository:\n\n    ```sh\n    git clone https://github.com/gaetangr/scytalio.git\n    cd scytalio\n    ```\n\n2. Create a virtual environment and activate it:\n\n    ```sh\n    python3 -m venv venv\n    source venv/bin/activate\n    ```\n\n3. Install the dependencies:\n\n    ```sh\n    pip install -r requirements.txt\n    ```\n\n### Frontend\n\n1. Navigate to the frontend directory:\n\n    ```sh\n    cd frontend\n    ```\n\n2. Install the dependencies:\n\n    ```sh\n    npm install\n    ```\n\n3. Create a `.env` file in the root of the frontend directory and add the following line:\n\n    ```sh\n    echo \"VITE_API_BASE_URL=http://127.0.0.1:8000\" \u003e .env\n    ```\n\n## Running the Application\n\n### Backend\n\n1. Start the FastAPI application:\n\n    ```sh\n    uvicorn app.main:app --reload\n    ```\n\n2. The API will be available at `http://127.0.0.1:8000/docs`.\n\n### Frontend\n\n1. Start the Vue.js application:\n\n    ```sh\n    npm run serve\n    ```\n\n2. The frontend will be available at `http://localhost:8080`.\n\n## Running the Application with Docker and Nginx\n\n1. Ensure Docker and Docker Compose are installed on your machine.\n\n2. Clone the repository:\n\n    ```sh\n    git clone https://github.com/gaetangr/scytalio.git\n    cd scytalio\n    ```\n\n3. Create a `.env` file in the root directory and add the following lines:\n\n    ```sh\n    echo \"DATABASE_URL=sqlite:///./scytalio.db\" \u003e .env\n    echo \"VITE_API_BASE_URL=http://localhost:8000\" \u003e\u003e .env\n    ```\n\n4. Build and start the services using Docker Compose:\n\n    ```sh\n    docker-compose up --build\n    ```\n\n5. The frontend will be available at `http://localhost`, and the API will be available at `http://localhost/api`.\n\n## Running Tests\n\n### Backend\n\n1. Run the tests:\n    ```sh\n    pytest app/tests\n    ```\n\n### Frontend\n\n1. Run the tests:\n    ```sh\n    npm run test\n    ```\n\n## API Usage\n\n### Encrypt a Message\n\nTo encrypt a message, send a POST request to the `/encrypt` endpoint with the following JSON payload:\n\n```json\n{\n  \"message\": \"your_base64_encoded_message\",\n  \"iv\": \"your_initialization_vector\"\n}\n```\n\nExample using `curl`:\n\n```sh\ncurl -X POST \"http://127.0.0.1:8000/encrypt\" -H \"Content-Type: application/json\" -d '{\"message\": \"dGVzdCBtZXNzYWdl\", \"iv\": \"dGVzdF9pdg==\"}'\n```\n\n### Decrypt a Message\n\nTo decrypt a message, send a GET request to the `/decrypt/{message_id}` endpoint, where `{message_id}` is the ID of the encrypted message.\n\nExample using `curl`:\n\n```sh\ncurl -X GET \"http://127.0.0.1:8000/decrypt/{message_id}\"\n```\n\n## Contributing\n\nScytalio is an open-source project and we welcome contributions! To get started, fork the repository and submit a pull request. Whether you want to fix bugs, improve features, or add new ones, your help is appreciated.\n\n1. Fork the repository\n2. Create a new branch (`git checkout -b feature-branch`)\n3. Make your changes\n4. Commit your changes (`git commit -m 'Add feature'`)\n5. Push to the branch (`git push origin feature-branch`)\n6. Submit a pull request\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](http://_vscodecontentref_/1) file for details.\n\n## Self-Hosting\n\nScytalio can be self-hosted, allowing you to run your own instance of the application. This is useful if you want to have full control over your data and the environment in which the application runs.\n\n### Features\n\n- **Self-Hosting**: Run your own instance of Scytalio on your server.\n- **Network Sharing**: Share encrypted messages within your network securely.\n- **Customizable**: Modify the source code to fit your specific needs.\n\nTo get started with self-hosting, follow the instructions in the \"Running the Application with Docker and Nginx\" section above.\n\n## Development Environment Setup\n\nTo set up the development environment for Scytalio, follow these steps:\n\n1. **Clone the Repository**: Start by cloning the repository to your local machine.\n\n    ```sh\n    git clone https://github.com/gaetangr/scytalio.git\n    cd scytalio\n    ```\n\n2. **Create a Virtual Environment**: Create a virtual environment to isolate the project's dependencies.\n\n    ```sh\n    python3 -m venv venv\n    source venv/bin/activate\n    ```\n\n3. **Install Backend Dependencies**: Install the required Python packages for the backend.\n\n    ```sh\n    pip install -r requirements.txt\n    ```\n\n4. **Install Frontend Dependencies**: Navigate to the frontend directory and install the required Node.js packages.\n\n    ```sh\n    cd frontend\n    npm install\n    ```\n\n5. **Set Up Environment Variables**: Create a `.env` file in the root directory and add the necessary environment variables.\n\n    ```sh\n    echo \"DATABASE_URL=sqlite:///./scytalio.db\" \u003e .env\n    echo \"VITE_API_BASE_URL=http://localhost:8000\" \u003e\u003e .env\n    ```\n\n6. **Run the Application**: Start both the backend and frontend applications.\n\n    ```sh\n    # Start the backend\n    uvicorn app.main:app --reload\n\n    # In a new terminal, start the frontend\n    cd frontend\n    npm run serve\n    ```\n\n7. **Access the Application**: The backend API will be available at `http://127.0.0.1:8000/docs`, and the frontend will be available at `http://localhost:8080`.\n\n## API Endpoints\n\nHere are some examples of how to use the API endpoints:\n\n### Encrypt a Message\n\nTo encrypt a message, send a POST request to the `/encrypt` endpoint with the following JSON payload:\n\n```json\n{\n  \"message\": \"your_base64_encoded_message\",\n  \"iv\": \"your_initialization_vector\"\n}\n```\n\nExample using `curl`:\n\n```sh\ncurl -X POST \"http://127.0.0.1:8000/encrypt\" -H \"Content-Type: application/json\" -d '{\"message\": \"dGVzdCBtZXNzYWdl\", \"iv\": \"dGVzdF9pdg==\"}'\n```\n\n### Decrypt a Message\n\nTo decrypt a message, send a GET request to the `/decrypt/{message_id}` endpoint, where `{message_id}` is the ID of the encrypted message.\n\nExample using `curl`:\n\n```sh\ncurl -X GET \"http://127.0.0.1:8000/decrypt/{message_id}\"\n```\n\n### Delete a Message\n\nTo delete a message, send a DELETE request to the `/delete/{message_id}` endpoint, where `{message_id}` is the ID of the encrypted message. You will need to include the HMAC in the Authorization header.\n\nExample using `curl`:\n\n```sh\ncurl -X DELETE \"http://127.0.0.1:8000/delete/{message_id}\" -H \"Authorization: your_hmac\"\n```\n\n### Get Website Statistics\n\nTo retrieve global statistics about website usage, send a GET request to the `/stats` endpoint.\n\nExample using `curl`:\n\n```sh\ncurl -X GET \"http://127.0.0.1:8000/stats\"\n```\n\n## Setting Up the Development Environment\n\nTo set up the development environment for Scytalio, follow these steps:\n\n1. **Clone the Repository**: Start by cloning the repository to your local machine.\n\n    ```sh\n    git clone https://github.com/gaetangr/scytalio.git\n    cd scytalio\n    ```\n\n2. **Create a Virtual Environment**: Create a virtual environment to isolate the project's dependencies.\n\n    ```sh\n    python3 -m venv venv\n    source venv/bin/activate\n    ```\n\n3. **Install Backend Dependencies**: Install the required Python packages for the backend.\n\n    ```sh\n    pip install -r requirements.txt\n    ```\n\n4. **Install Frontend Dependencies**: Navigate to the frontend directory and install the required Node.js packages.\n\n    ```sh\n    cd frontend\n    npm install\n    ```\n\n5. **Set Up Environment Variables**: Create a `.env` file in the root directory and add the necessary environment variables.\n\n    ```sh\n    echo \"DATABASE_URL=sqlite:///./scytalio.db\" \u003e .env\n    echo \"VITE_API_BASE_URL=http://localhost:8000\" \u003e\u003e .env\n    ```\n\n6. **Run the Application**: Start both the backend and frontend applications.\n\n    ```sh\n    # Start the backend\n    uvicorn app.main:app --reload\n\n    # In a new terminal, start the frontend\n    cd frontend\n    npm run serve\n    ```\n\n7. **Access the Application**: The backend API will be available at `http://127.0.0.1:8000/docs`, and the frontend will be available at `http://localhost:8080`.\n\n## API Endpoints\n\nHere are some examples of how to use the API endpoints:\n\n### Encrypt a Message\n\nTo encrypt a message, send a POST request to the `/encrypt` endpoint with the following JSON payload:\n\n```json\n{\n  \"message\": \"your_base64_encoded_message\",\n  \"iv\": \"your_initialization_vector\"\n}\n```\n\nExample using `curl`:\n\n```sh\ncurl -X POST \"http://127.0.0.1:8000/encrypt\" -H \"Content-Type: application/json\" -d '{\"message\": \"dGVzdCBtZXNzYWdl\", \"iv\": \"dGVzdF9pdg==\"}'\n```\n\n### Decrypt a Message\n\nTo decrypt a message, send a GET request to the `/decrypt/{message_id}` endpoint, where `{message_id}` is the ID of the encrypted message.\n\nExample using `curl`:\n\n```sh\ncurl -X GET \"http://127.0.0.1:8000/decrypt/{message_id}\"\n```\n\n### Delete a Message\n\nTo delete a message, send a DELETE request to the `/delete/{message_id}` endpoint, where `{message_id}` is the ID of the encrypted message. You will need to include the HMAC in the Authorization header.\n\nExample using `curl`:\n\n```sh\ncurl -X DELETE \"http://127.0.0.1:8000/delete/{message_id}\" -H \"Authorization: your_hmac\"\n```\n\n### Get Website Statistics\n\nTo retrieve global statistics about website usage, send a GET request to the `/stats` endpoint.\n\nExample using `curl`:\n\n```sh\ncurl -X GET \"http://127.0.0.1:8000/stats\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaetangr%2Fscytalio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgaetangr%2Fscytalio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaetangr%2Fscytalio/lists"}