{"id":15724418,"url":"https://github.com/cldellow/datasette-mutable-downloads","last_synced_at":"2026-01-21T10:36:03.718Z","repository":{"id":65962918,"uuid":"603536505","full_name":"cldellow/datasette-mutable-downloads","owner":"cldellow","description":"Enable downloading mutable databases from Datasette","archived":false,"fork":false,"pushed_at":"2023-02-20T02:22:34.000Z","size":14,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-09T05:40:01.647Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cldellow.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":"2023-02-18T20:09:22.000Z","updated_at":"2023-02-18T21:10:55.000Z","dependencies_parsed_at":"2023-02-22T15:01:02.803Z","dependency_job_id":null,"html_url":"https://github.com/cldellow/datasette-mutable-downloads","commit_stats":{"total_commits":9,"total_committers":1,"mean_commits":9.0,"dds":0.0,"last_synced_commit":"779af19a43b0939d80b189aaf4b05fedd01b6326"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/cldellow/datasette-mutable-downloads","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cldellow%2Fdatasette-mutable-downloads","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cldellow%2Fdatasette-mutable-downloads/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cldellow%2Fdatasette-mutable-downloads/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cldellow%2Fdatasette-mutable-downloads/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cldellow","download_url":"https://codeload.github.com/cldellow/datasette-mutable-downloads/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cldellow%2Fdatasette-mutable-downloads/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28631936,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":[],"created_at":"2024-10-03T22:16:34.010Z","updated_at":"2026-01-21T10:36:03.701Z","avatar_url":"https://github.com/cldellow.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# datasette-mutable-downloads\n\n[![PyPI](https://img.shields.io/pypi/v/datasette-mutable-downloads.svg)](https://pypi.org/project/datasette-mutable-downloads/)\n[![Changelog](https://img.shields.io/github/v/release/cldellow/datasette-mutable-downloads?include_prereleases\u0026label=changelog)](https://github.com/cldellow/datasette-mutable-downloads/releases)\n[![Tests](https://github.com/cldellow/datasette-mutable-downloads/workflows/Test/badge.svg)](https://github.com/cldellow/datasette-mutable-downloads/actions?query=workflow%3ATest)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/cldellow/datasette-mutable-downloads/blob/main/LICENSE)\n\nEnable downloading mutable databases.\n\n## Installation\n\nInstall this plugin in the same environment as Datasette.\n\n    datasette install datasette-mutable-downloads\n\n## Usage\n\nYou can now download a mutable database on its database page, just as you\ncan for immutable databases.\n\nExample: https://dux.fly.dev/cooking\n\n## Notes\n\nThis is achieved by a somewhat gross monkeypatch of the `DatabaseDownload`\nview.\n\nWe detect if the database is mutable. If it is, we first create a copy via\n[`VACUUM INTO`](https://www.sqlite.org/lang_vacuum.html#vacuum_with_an_into_clause).\n\nWe then stream that file to the user, and delete it.\n\nThis requires SQLite 3.27.0 or newer (Feb 2019).\n\n\u003e **NOTE**\n\u003e\n\u003e The act of `VACUUM INTO` could be resource intensive if your\n\u003e database is large. If you expose your Datasette to the Internet,\n\u003e you may wish to restrict this to only authenticated users.\n\u003e\n\u003e To do that, add a permissions block in your metadata.json:\n\u003e \n\u003e ```\n\u003e \"permissions\": {\n\u003e   \"view-database-download\": {\n\u003e     \"gh_id\": \"*\"\n\u003e   }\n\u003e }\n\u003e ```\n\n## Development\n\nTo set up this plugin locally, first checkout the code. Then create a new virtual environment:\n\n    cd datasette-mutable-downloads\n    python3 -m venv venv\n    source venv/bin/activate\n\nNow install the dependencies and test dependencies:\n\n    pip install -e '.[test]'\n\nTo run the tests:\n\n    pytest\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcldellow%2Fdatasette-mutable-downloads","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcldellow%2Fdatasette-mutable-downloads","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcldellow%2Fdatasette-mutable-downloads/lists"}