{"library":"storage3","title":"Supabase Storage client for Python","description":"storage3 is the Python client library for interacting with Supabase Storage. It allows developers to manage files and folders within Supabase buckets. As of version 2.28.3, it provides both synchronous and asynchronous APIs for seamless integration. The library is actively maintained by Supabase, with frequent releases to add features and address issues.","language":"python","status":"active","last_verified":"Wed May 20","install":{"commands":["pip install storage3"],"cli":null},"imports":["from storage3 import AsyncStorageClient","from storage3 import SyncStorageClient"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom storage3 import AsyncStorageClient\nimport asyncio\n\n# Replace with your Supabase project URL and API Key\nSUPABASE_URL = os.environ.get('SUPABASE_URL', 'https://your-project-id.supabase.co/storage/v1')\nSUPABASE_KEY = os.environ.get('SUPABASE_KEY', 'your_anon_public_key')\n\n# Headers are required for authentication\nHEADERS = {\"apiKey\": SUPABASE_KEY, \"Authorization\": f\"Bearer {SUPABASE_KEY}\"}\n\nasync def main():\n    storage_client = AsyncStorageClient(SUPABASE_URL, HEADERS)\n    \n    print(\"Listing buckets...\")\n    try:\n        buckets = await storage_client.list_buckets()\n        if buckets:\n            print(f\"Found {len(buckets)} bucket(s): {[b['name'] for b in buckets]}\")\n        else:\n            print(\"No buckets found. Attempting to create one...\")\n            new_bucket = await storage_client.create_bucket('my-test-bucket-py', {'public': True})\n            print(f\"Created bucket: {new_bucket['name']}\")\n            buckets = [new_bucket]\n\n        if buckets:\n            bucket_name = buckets[0]['name']\n            print(f\"Using bucket: {bucket_name}\")\n\n            # Example: Uploading a dummy file (requires a file_object, e.g., from an open file)\n            # For a real scenario, replace `b'Hello, Supabase Storage!'` with actual file data\n            file_content = b'Hello, Supabase Storage from Python!'\n            file_name = 'hello_world.txt'\n            \n            print(f\"Uploading file '{file_name}' to bucket '{bucket_name}'...\")\n            upload_response = await storage_client.from_(bucket_name).upload(\n                f'public/{file_name}', \n                file_content,\n                {'content-type': 'text/plain'}\n            )\n            print(f\"Upload successful: {upload_response}\")\n            \n            # Example: Listing files in the bucket\n            print(f\"Listing files in bucket '{bucket_name}'...\")\n            files = await storage_client.from_(bucket_name).list(path='public/')\n            print(f\"Files in bucket '{bucket_name}': {[f['name'] for f in files]}\")\n\n            # Example: Downloading the file\n            print(f\"Downloading file '{file_name}' from bucket '{bucket_name}'...\")\n            downloaded_data = await storage_client.from_(bucket_name).download(f'public/{file_name}')\n            print(f\"Downloaded content: {downloaded_data.decode()}\")\n\n            # Example: Deleting the file\n            print(f\"Deleting file '{file_name}' from bucket '{bucket_name}'...\")\n            delete_response = await storage_client.from_(bucket_name).remove([f'public/{file_name}'])\n            print(f\"Delete successful: {delete_response}\")\n\n    except Exception as e:\n        print(f\"An error occurred: {e}\")\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n","lang":"python","description":"This quickstart demonstrates how to initialize the `AsyncStorageClient`, list existing buckets (and optionally create one), upload a file, list files within a bucket, download a file, and finally delete the uploaded file. Ensure you have your Supabase project URL and API key set as environment variables (SUPABASE_URL and SUPABASE_KEY) for authentication.","tag":null,"tag_description":null,"last_tested":"2026-04-24","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","last_tested":"2026-05-20","installed_version":"2.30.0","pypi_latest":"2.30.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":8.9,"avg_import_s":2.68,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":2.44,"mem_mb":35.3,"disk_size":"88.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.6,"mem_mb":35.2,"disk_size":"88.2M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":9.9,"import_time_s":1.87,"mem_mb":35.3,"disk_size":"95M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.1,"mem_mb":35.2,"disk_size":"95M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":3.08,"mem_mb":38.2,"disk_size":"98.4M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.5,"mem_mb":38.1,"disk_size":"98.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":8.8,"import_time_s":2.75,"mem_mb":38.2,"disk_size":"105M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.87,"mem_mb":38.1,"disk_size":"105M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":2.88,"mem_mb":37.5,"disk_size":"88.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.29,"mem_mb":37.4,"disk_size":"88.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":7.3,"import_time_s":2.95,"mem_mb":37.5,"disk_size":"96M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.85,"mem_mb":37.4,"disk_size":"96M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":2.52,"mem_mb":36.4,"disk_size":"88.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.56,"mem_mb":36.4,"disk_size":"88.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":7.5,"import_time_s":2.41,"mem_mb":36.5,"disk_size":"95M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.19,"mem_mb":36.4,"disk_size":"95M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":2.21,"mem_mb":34.7,"disk_size":"73.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.43,"mem_mb":34.7,"disk_size":"73.5M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":11.2,"import_time_s":2.08,"mem_mb":34.7,"disk_size":"73M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"storage3","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.04,"mem_mb":34.7,"disk_size":"72M"}]}}