{"id":28369630,"url":"https://github.com/django-files/django-files","last_synced_at":"2026-06-14T00:04:06.679Z","repository":{"id":184940367,"uuid":"672712475","full_name":"django-files/django-files","owner":"django-files","description":" Feature Packed Self-Hosted File Sharing","archived":false,"fork":false,"pushed_at":"2026-05-17T02:48:43.000Z","size":9127,"stargazers_count":11,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-05-17T03:39:37.858Z","etag":null,"topics":["django","files","flameshot","flameshot-uploader","python","python3","sharex","sharex-server"],"latest_commit_sha":null,"homepage":"https://django-files.github.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/django-files.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2023-07-31T01:51:29.000Z","updated_at":"2026-05-17T02:48:45.000Z","dependencies_parsed_at":"2026-04-20T01:05:18.824Z","dependency_job_id":null,"html_url":"https://github.com/django-files/django-files","commit_stats":null,"previous_names":["smashedr/django-files","django-files/django-files"],"tags_count":142,"template":false,"template_full_name":null,"purl":"pkg:github/django-files/django-files","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-files%2Fdjango-files","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-files%2Fdjango-files/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-files%2Fdjango-files/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-files%2Fdjango-files/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/django-files","download_url":"https://codeload.github.com/django-files/django-files/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-files%2Fdjango-files/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33127002,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"online","status_checked_at":"2026-05-17T02:00:05.366Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["django","files","flameshot","flameshot-uploader","python","python3","sharex","sharex-server"],"created_at":"2025-05-29T05:10:49.749Z","updated_at":"2026-06-14T00:04:06.671Z","avatar_url":"https://github.com/django-files.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CI](https://img.shields.io/github/actions/workflow/status/django-files/django-files/ci.yaml?logo=github\u0026logoColor=white\u0026label=ci)](https://github.com/django-files/django-files/actions/workflows/ci.yaml)\n[![Test](https://img.shields.io/github/actions/workflow/status/django-files/django-files/test.yaml?logo=github\u0026logoColor=white\u0026label=test)](https://github.com/django-files/django-files/actions/workflows/test.yaml)\n[![Lint](https://img.shields.io/github/actions/workflow/status/django-files/django-files/lint.yaml?logo=github\u0026logoColor=white\u0026label=lint)](https://github.com/django-files/django-files/actions/workflows/lint.yaml)\n[![Coverage](https://img.shields.io/codacy/coverage/7c41f4f6526c4233ba1304bfb45981c4?label=Coverage\u0026logo=codacy\u0026logoColor=white)](https://app.codacy.com/gh/django-files/django-files/dashboard)\n[![Codacy](https://img.shields.io/codacy/grade/7c41f4f6526c4233ba1304bfb45981c4?label=Codacy\u0026logo=codacy\u0026logoColor=white)](https://app.codacy.com/gh/django-files/django-files/dashboard)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=django-files_django-files\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=django-files_django-files)\n[![GitHub Release Version](https://img.shields.io/github/v/release/django-files/django-files?logo=github)](https://github.com/django-files/django-files/releases/latest)\n[![GitHub Top Language](https://img.shields.io/github/languages/top/django-files/django-files?logo=htmx\u0026logoColor=white)](https://github.com/django-files/django-files)\n[![GitHub Last Commit](https://img.shields.io/github/last-commit/django-files/django-files?logo=github\u0026logoColor=white\u0026label=updated)](https://github.com/django-files/django-files/graphs/commit-activity)\n[![GitHub Repo Stars](https://img.shields.io/github/stars/django-files/django-files?style=flat\u0026logo=github\u0026logoColor=white)](https://github.com/django-files/django-files/stargazers)\n[![GitHub Org Stars](https://img.shields.io/github/stars/django-files?style=flat\u0026logo=github\u0026logoColor=white\u0026label=org%20stars)](https://django-files.github.io/)\n[![](https://repository-images.githubusercontent.com/672712475/52cf00a8-31de-4b0a-8522-63670bb4314a)](https://github.com/django-files/django-files?tab=readme-ov-file#readme)\n\n# Django Files\n\nA Self-Hosted File Manager designed for seamless file sharing, with built-in support for client apps like ShareX, Flameshot, [iOS](https://apps.apple.com/us/app/django-files/id6742523003) and [Android](https://github.com/django-files/android-client).\n\n🚀 Currently in Active Development – Expect breaking changes until an official major version release.\n\n🔹 Have an idea? Submit a [Feature Request](https://github.com/django-files/\n🐛 Found a bug? Report an [Issue](https://github.com/django-files/django-files/issues/new) for any bugs.\n\n- [Overview](#overview)\n  - [Getting Started](#-getting-started)\n  - [Docker Quick Start](#-quick-start-with-docker)\n  - [Docker Compose](#docker-compose)\n- [Features](#features)\n- [Screen Shots](#screen-shots)\n- [Clients](#clients)\n  - [Apple](#Apple)\n  - [Android](#Android)\n  - [Web Browser](#Web-Browser)\n- [Usage](#usage)\n  - [Files](#files)\n  - [Short URL](#short-urls)\n  - [User Settings](#user-settings)\n  - [Site Settings](#site-settings)\n- [Variables](#variables)\n- [Database](#database)\n- [Dev Deploy](#-development-deployment)\n- [Frameworks/Credits](#frameworkscredits)\n\n## Overview\n\nDjango Files is a Django-based web application with a Celery task queue, built using Bootstrap 5.3 and containerized with Docker. It enables file uploads via API or UI using Uppy, offering a robust and flexible self-hosted solution for file management.\n\n## 🚀 Getting Started\n\n\u003e ⚠️ Important Notice\n\u003e\n\u003e 🔸 This project is in Beta – Expect breaking changes without migrations.\n\u003e 🔸 If not using S3, you must mount media_dir to /data/media for file storage and SQLite database persistence.\n\nFor Extra Options See: [Variables](#variables)\n\n### Login Credentials\n\nYou **should** override the default credentials with environment variables or settings.env. You will be prompted to set your password on first login.\n\n### 🔧 Quick Start with Docker\n\nShort one-liner to run in foreground:\n\n```bash\ndocker run --rm -p 80:80 -v ./django-files:/data/media ghcr.io/django-files/django-files:latest\n```\n\nRun it in the background:\n\n```bash\ndocker run --name \"django-files\" -d --restart unless-stopped  \\\n  -p 80:80  -v ./django-files:/data/media  \\\n    ghcr.io/django-files/django-files:latest\n```\n\nOr Manually Specify a Username and Password:\n\n```bash\ndocker run --name \"django-files\" -d --restart unless-stopped  \\\n  -p 80:80  -v ./django-files:/data/media  \\\n  -e USERNAME=cooluser  \\\n  -e PASSWORD=secretpassword  \\\n    ghcr.io/django-files/django-files:latest\n```\n\n### Docker Compose:\n\n```yaml\nversion: '3'\n\nservices:\n  django-files:\n    environment:\n      USERNAME: 'cooluser'\n      PASSWORD: 'secretpassword'\n    image: ghcr.io/django-files/django-files:latest\n    volumes:\n      - media_dir:/data/media\n    ports:\n      - '80:80'\n\nvolumes:\n  media_dir:\n```\n\nThen Finally:\n\n```bash\nnano docker-compose.yaml # write your compose file\ndocker compose up --remove-orphans --force-recreate --detach\n```\n\nFor a Docker Swarm and Traefik example, see: [docker-compose-prod.yaml](docker-compose-prod.yaml)\n\n## Features\n\nDjango Files is packed with features for seamless file management and sharing. More features are in progress!\n[Request a Feature](https://github.com/django-files/django-files/discussions/new?category=feature-requests).\n\n### 🔹 Core Features\n\n- Local or S3 storage support\n- One-click integration with ShareX, Flameshot\n- [iOS Client](https://apps.apple.com/us/app/django-files/id6742523003)\n- [Android Client](https://github.com/django-files/android-client)\n- Customizable UI with light/dark mode\n- OAuth support (Discord, GitHub, Google) \u0026 two-factor authentication (Duo)\n- Web extensions for Chrome and Firefox\n- Public upload support (optional)\n\n### 🔒 Authentication \u0026 Security\n\n- Multi-user support with local \u0026 OAuth authentication options\n- Invite system for user onboarding\n- OAuth configuration via Django Admin (no restart required)\n\n### 📊 UI \u0026 File Management\n\n- Drag \u0026 Drop file uploads\n- Short URLs with vanity support\n- Private \u0026 password-protected files\n- Configurable EXIF metadata removal on upload\n- Bulk file actions\n- Albums \u0026 galleries for organizing files\n\n### 📈 Stats \u0026 Insights\n\n- Dashboard with user-friendly overview \u0026 stats\n- Graph-based analytics (work in progress)\n- File expiration \u0026 view counting\n\n### 📡 Live Streaming\n\n- Live video streaming via HLS (HTTP Live Streaming)\n- Real-time live chat with account and anonymous support\n- Viewer count/viewer list\n- Owner controls: enable/disable chat and anonymous access live\n- Push notifications for stream start via Web Push\n\n### External\n\n- Firefox Extension:https://addons.mozilla.org/addon/django-files\n- Chrome Extension: https://chrome.google.com/webstore/detail/django-files/abpbiefojfkekhkjnpakpekkpeibnjej\n\n## Screen Shots\n\nScreenshots and UI previews are available on the\n[Django Files Github Site.](https://django-files.github.io/screenshots.html) from the menu.\n\n## Clients\n\nClient Applications are available for iOS, Android, and Web Browsers.\n\n### Apple\n\n\u003ca href=\"https://apps.apple.com/us/app/django-files/id6742523003?itscg=30200\u0026itsct=apps_box_badge\u0026mttnsubad=6742523003\" style=\"display: inline-block;\"\u003e\n\u003cimg src=\"https://toolbox.marketingtools.apple.com/api/v2/badges/download-on-the-app-store/black/en-us?releaseDate=1743638400\" alt=\"Download on the App Store\" style=\"width: 246px; height: 82px; vertical-align: middle; object-fit: contain; margin-block: 8px;\" /\u003e\u003c/a\u003e\n\n### Android\n\n[![Get on GitHub](https://raw.githubusercontent.com/smashedr/repo-images/refs/heads/master/android/get80/github.png)](https://github.com/django-files/android-client/releases/latest/download/app-release.apk)\n[![Get on Obtainium](https://raw.githubusercontent.com/smashedr/repo-images/refs/heads/master/android/get80/obtainium.png)](https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://github.com/django-files/android-client)\n\n\u003cdetails\u003e\u003csummary\u003e📲 Click to View QR Codes 📸\u003c/summary\u003e\n\n[![QR Code GitHub](https://raw.githubusercontent.com/smashedr/repo-images/refs/heads/master/django-files/android/qr-code-github.png)](https://github.com/django-files/android-client/releases/latest/download/app-release.apk)\n\n[![QR Code Obtainium](https://raw.githubusercontent.com/smashedr/repo-images/refs/heads/master/django-files/android/qr-code-obtainium.png)](https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://github.com/django-files/android-client)\n\n\u003c/details\u003e\n\n### Web Browser\n\n[![Chrome](https://raw.githubusercontent.com/smashedr/logo-icons/master/browsers/chrome_48.png)](https://chromewebstore.google.com/detail/django-files/abpbiefojfkekhkjnpakpekkpeibnjej)\n[![Firefox](https://raw.githubusercontent.com/smashedr/logo-icons/master/browsers/firefox_48.png)](https://addons.mozilla.org/addon/django-files)\n[![Edge](https://raw.githubusercontent.com/smashedr/logo-icons/master/browsers/edge_48.png)](https://chromewebstore.google.com/detail/django-files/abpbiefojfkekhkjnpakpekkpeibnjej)\n[![Chromium](https://raw.githubusercontent.com/smashedr/logo-icons/master/browsers/chromium_48.png)](https://chromewebstore.google.com/detail/django-files/abpbiefojfkekhkjnpakpekkpeibnjej)\n[![Brave](https://raw.githubusercontent.com/smashedr/logo-icons/master/browsers/brave_48.png)](https://chromewebstore.google.com/detail/django-files/abpbiefojfkekhkjnpakpekkpeibnjej)\n[![Opera](https://raw.githubusercontent.com/smashedr/logo-icons/master/browsers/opera_48.png)](https://chromewebstore.google.com/detail/django-files/abpbiefojfkekhkjnpakpekkpeibnjej)\n\n## Usage\n\nDjango Files is backwards compatible with\n[Zipline](https://zipline.diced.vercel.app/docs/api/upload)\nclient upload settings.\n\n### Files\n\nUpload Endpoint: `/api/upload/`  \nResponse Type: JSON\n\n```json\n{\n  \"files\": [\"full-url\"],\n  \"url\": \"full-url\",\n  \"name\": \"file-name\",\n  \"size\": \"size-bytes\"\n}\n```\n\n### Short URLs\n\nUpload Endpoint: `/api/shorten/`  \nResponse Type: JSON\n\n```json\n{\n  \"url\": \"full-short-url\"\n}\n```\n\nYou can parse the URL with JSON keys `url` or Zipline style `files[0]`\n\n### User Settings\n\n- Avatar: Can be reuploaded if set to Local/Cloud.\n- Avatar Source: If to use oauth avatars, or local avatars. (Oauth avatars cannot be changed via django files.)\n- First Name: User's first name, for personalization of username display.\n- Timezone: User's timezone, will show times in user's local time when logged in.\n- Default Expire: The default file expiration for files uploaded with out an expiration for this user.\n- Default Upload Format: The default file name format for files uploaded without a specific file name format.\n- Strip All EXIF Data: Strips all EXIF metadata from images on upload. (Changes do not apply to existing uploads)\n- Strip GPS EXIF Data: Strips GPS meta data from images on upload. (Changes do not apply to existing uploads)\n- Private Files: Make uploads private by default unless otherwise specified. (Changes do not apply to existing uploads)\n- Password Protected File: Make uploads password protected by default unless otherwise specified. (Changes do not apply to existing uploads)\n- Enabled EXIF Embeds: If to show EXIF metadata on unfurls/embeds.\n- Appearance Embed Color: Color of embeds/unfurls for shared links.\n- Appearance Nav Colors: Color of navbar for this user and anonymous users viewing shared user files.\n- Discord Webhooks: Discord webhooks to trigger when a file is uploaded.\n\n### Site Settings\n\n- Site URL: The site url to use, used to generate links.\n- Site Title: Site title in browser and unfurls.\n- Global Storage Quota: The storage quota for the entire django files deployment.\n- User Default Storage Quota: The default storage quota for new users without a specified quota.\n- Timezone: global timezone for django files deployment. Default TZ anonymous users see.\n- Site Description: Site description shown on unfurled links for clients that show url unfurls.\n- Public Uploads: /public : When enabled anonymous users can upload.\n- Oauth Registration: When enabled ANY user may sign up via oauth login.\n- Local Authentication: When disabled, only oauth authentication can be performed. (Falls back to enabled when oauth not configured)\n\n## Variables\n\n\u003e **Important**\n\u003e\n\u003e **NO VARIABLES ARE REQUIRED!** All are optional.\n\u003e\n\u003e OAuth may be configured from the UI.  \n\u003e AWS/Duo/Sentry **require** environment variables.\n\u003e Switching between local storage and s3 is not supported and WILL cause problems.\n\n| Variable                        | Description                       | Example                                              |\n| ------------------------------- | --------------------------------- | ---------------------------------------------------- |\n| SECRET                          | App Secret                        | `JYGTKLztZxVdu5NXuhXGaSkLJosiiQyBhFJ4LAHrJ5YHigQqq7` |\n| SITE_URL                        | Site URL                          | `https://example.com`                                |\n| USERNAME                        | Local Username                    | `admin`                                              |\n| PASSWORD                        | Local Password                    | `PSZX7TgiSg6aB6sZ`                                   |\n| SUPER_USERS                     | oAuth Sup User IDs                | `111150265075298304,111148006983614464`              |\n| DISCORD_CLIENT_ID               | Discord Client ID                 | `1135676900124135484`                                |\n| DISCORD_CLIENT_SECRET           | Discord Secret                    | `HbSyPWgOBx1U38MqmEEUy75KUe1Pm7dR`                   |\n| GITHUB_CLIENT_ID                | GitHub Client ID                  | `1135676900124135484`                                |\n| GITHUB_CLIENT_SECRET            | GitHub Secret                     | `HbSyPWgOBx1U38MqmEEUy75KUe1Pm7dR`                   |\n| GOOGLE_CLIENT_ID                | Google Client ID                  | `113567690-gvasdfasdf.apps.googleusercontent.com`    |\n| GOOGLE_CLIENT_SECRET            | Google Secret                     | `GCSDPC-Tskdfix-klsjdf_r32489fj09jfsd`               |\n| OAUTH_REDIRECT_URL              | Discord Redirect                  | `https://example.com/oauth/callback/`                |\n| AWS_REGION_NAME                 | AWS Region Name                   | `us-east-1`                                          |\n| AWS_ACCESS_KEY_ID               | AWS IAM User Key                  | `AKIEAKADFGASDFASGSDAFSDF`                           |\n| AWS_SECRET_ACCESS_KEY           | AWS IAM Secret                    | `eVJsrhftrv2fcwyYcy323Sfhe5svy5436r557`              |\n| AWS_STORAGE_BUCKET_NAME         | Name of s3 bucket                 | `my-s3-bucket`                                       |\n| SIGNED_URL_TTL_SECONDS          | Gallery/static signed URL TTL (s) | `14400`                                              |\n| SIGNED_DOWNLOAD_URL_TTL_SECONDS | One-shot download signed URL TTL  | `900`                                                |\n| SIGNED_META_URL_TTL_SECONDS     | OG/meta signed URL TTL            | `86400`                                              |\n| SIGNED_URL_REFRESH_RATIO        | Cache TTL fraction of signing TTL | `0.5`                                                |\n| AWS_S3_CDN_URL                  | proxy or cdn url                  | `https://examples3cdndomain.com`                     |\n| DUO_API_HOST                    | DUO API Host                      | `api-abc123.duosecurity.com`                         |\n| DUO_CLIENT_ID                   | DUO Client ID                     | `nmoNmuLM72WB3RsNkwuv`                               |\n| DUO_CLIENT_SECRET               | DUO Secret                        | `nmoNmuLM72WB3RsNkwuvnmoNmuLM72WB3RsNkwuv`           |\n| SENTRY_URL                      | Sentry URL                        | `https://a5cb357a@o133337.ingest.sentry.io/1234567`  |\n| SENTRY_ENVIRONMENT              | Sentry ENV                        | `prod`                                               |\n\n## Database\n\n- sqlite3 - **default** - zero configuration, works out of the box\n- mysql - must set up and maintain your own database\n- postgresql - must set up and maintain your own database\n\n| Variable      | Description                          |\n| ------------- | ------------------------------------ |\n| DATABASE_TYPE | `sqlite3` or `mysql` or `postgresql` |\n| DATABASE_NAME | Database name                        |\n| DATABASE_USER | Database username                    |\n| DATABASE_PASS | Database password                    |\n| DATABASE_HOST | Database hostname                    |\n| DATABASE_PORT | Optional if default                  |\n\nNote: sqlite3 is stored by default in `media_dir/db`\nbased on what is set in the `docker-compose.yaml` file.\n\n## 🛠 Development Deployment\n\nCommand included below to generate the required `SECRET`.  \nThe `SITE_URL` should be set with a variable for development, in UI Settings.\nYou may also want to configure an auth method from the variables above.\n\n```text\ngit clone https://github.com/django-files/django-files\ncd django-files\ncp settings.env.example settings.env\n\ncat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 50\n# copy above output for SECRET variable, add to settings or as environment variable\nvim settings.env\n\ndocker compose up --build --remove-orphans --force-recreate --detach\n# or\ndocker compose -f docker-compose-dev.yaml up --build --remove-orphans --force-recreate -detach\ndocker compose logs -f\n\n# bring the stack down\ndocker compose down --remove-orphans\n```\n\nAuto restarting dev deployment using settings.env for config. (ctrl+c to restart, double ctrl+c to exit)\n\n```text\n_file=\"docker-compose-dev.yaml\";while true;do docker compose -f \"${_file}\" down --remove-orphans;sep 10;docker compose -f \"${_file}\" up --build --remove-orphans -d --force-recreate;docker compose -f \"${_file}\" logs -f;echo sleep 1;sleep 1;done\n```\n\n## Frameworks/Credits\n\n- [Python](https://www.python.org/)\n- [Django](https://www.djangoproject.com/)\n- [Celery](https://docs.celeryproject.org/)\n- [Font Awesome](http://fontawesome.io/)\n- [Bootstrap](http://getbootstrap.com/)\n- [Uppy](https://uppy.io/)\n- [Highlight.js](https://highlightjs.org/)\n- [Datatables](https://datatables.net/)\n- [Swagger](https://swagger.io/)\n- [Video.js](https://videojs.com/)\n- [Django Channels](https://channels.readthedocs.io/)\n\n[Feature Requests](https://github.com/django-files/django-files/discussions/new?category=feature-requests) |\n[Issues](https://github.com/django-files/django-files/issues/new)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjango-files%2Fdjango-files","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjango-files%2Fdjango-files","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjango-files%2Fdjango-files/lists"}