{"id":48105619,"url":"https://github.com/itsmeares/staaash","last_synced_at":"2026-05-31T02:00:30.607Z","repository":{"id":347920439,"uuid":"1194839854","full_name":"itsmeares/staaash","owner":"itsmeares","description":"Self-hosted personal cloud drive built with Next.js, Prisma, PostgreSQL, and a worker runtime.","archived":false,"fork":false,"pushed_at":"2026-05-31T00:06:02.000Z","size":2682,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-31T01:10:00.847Z","etag":null,"topics":["cloud-drive","file-management","files","google-drive","homelab","nextjs","pnpm","postgresql","prisma","self-hosted","self-hosting","storage","turborepo","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/itsmeares.png","metadata":{"files":{"readme":".github/README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-28T22:01:56.000Z","updated_at":"2026-05-31T00:06:05.000Z","dependencies_parsed_at":"2026-04-25T22:04:49.329Z","dependency_job_id":"84351015-6a17-49cd-98c3-2a2e52a29be2","html_url":"https://github.com/itsmeares/staaash","commit_stats":null,"previous_names":["itsmeares/staaash"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/itsmeares/staaash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsmeares%2Fstaaash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsmeares%2Fstaaash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsmeares%2Fstaaash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsmeares%2Fstaaash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itsmeares","download_url":"https://codeload.github.com/itsmeares/staaash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsmeares%2Fstaaash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33716339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"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":["cloud-drive","file-management","files","google-drive","homelab","nextjs","pnpm","postgresql","prisma","self-hosted","self-hosting","storage","turborepo","typescript"],"created_at":"2026-04-04T15:55:09.026Z","updated_at":"2026-05-31T02:00:30.598Z","avatar_url":"https://github.com/itsmeares.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Staaash\n\n[![AGPL-3.0 License](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](./LICENSE)\n[![Release](https://img.shields.io/github/v/release/itsmeares/staaash?include_prereleases\u0026label=release)](https://github.com/itsmeares/staaash/releases)\n[![Docker](https://img.shields.io/badge/docker-ghcr.io-blue)](https://github.com/itsmeares/staaash/pkgs/container/staaash)\n[![Self-hosted](https://img.shields.io/badge/self--hosted-yes-brightgreen)](#installation)\n\n\u003e [!IMPORTANT]\n\u003e **Staaash is in beta.** Expect some bugs and breaking changes between pre-releases. Do not use it as your only copy of important files — set up a [3-2-1 backup strategy](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) before you start.\n\nStaaash is a self-hosted file drive for people who want their files on their own server.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003cimg src=\"../docs/assets/readme/home-dashboard-light.png\" alt=\"Staaash files view in light mode\"\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cimg src=\"../docs/assets/readme/files-light.png\" alt=\"Staaash home dashboard in light mode\"\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cimg src=\"../docs/assets/readme/share-page-light.png\" alt=\"Staaash public share page in light mode\"\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Why Use It\n\n- Your files stay on storage you control.\n- Sharing is built in, with public links for files and folders.\n- Invite friends or family and give them their own space.\n- Built for real home use: uploads, folders, sharing, backups, and restore checks.\n\nUpload files, organize folders, invite trusted users, and share links without handing the whole thing to someone else's cloud. It is built for self-hosters who want something small enough to understand and useful enough to run at home.\n\nIf [Immich](https://github.com/immich-app/immich) is your self-hosted photo library, Staaash aims to be your self-hosted file drive.\n\n## Installation\n\nRequirements: [Docker](https://docs.docker.com/get-docker/) with the Compose plugin.\n\n### Windows and Linux\n\n1. Go to the [releases page](https://github.com/itsmeares/staaash/releases) and download `docker-compose.yml` and `example.env` into the same folder. Use the latest release, or pick a specific version if you need one. Files on `main` may include unreleased changes.\n2. Rename `example.env` to `.env`, open it, set `DB_PASSWORD` to a secure value (you can use something like pwgen), and change any other values you want.\n3. Run:\n\n   ```console\n   docker compose up -d\n   ```\n\nStaaash is now running at `http://localhost:2113`.\n\nThe first account you register becomes the owner. Subsequent accounts require an invite from the owner.\n\n### Reverse proxies\n\nIf you put Staaash behind Caddy, Nginx, Traefik, or another reverse proxy, preserve the original `Host` header. Staaash rejects cross-origin mutating requests by comparing the browser `Origin` host to the request `Host`.\n\nUse one public address consistently. Loading the app from `https://staaash.example.com` and posting to a direct server IP, LAN IP, or different port can fail by design.\n\n`SECURE_COOKIES` is optional. By default, Staaash uses secure cookies on HTTPS and non-secure cookies on plain HTTP. Only set `SECURE_COOKIES` if you need to force cookie behavior. If your HTTPS proxy forwards traffic to Staaash over HTTP, make sure it sends `x-forwarded-proto: https`.\n\n### Upgrading\n\n```console\ndocker compose pull\ndocker compose up -d\n```\n\nMigrations run automatically on startup.\n\n### Data locations\n\n| What           | Default path |\n| -------------- | ------------ |\n| Uploaded files | `./library`  |\n| Database       | `./postgres` |\n\nBoth paths are relative to where `docker-compose.yml` lives. Change them in `.env` before first run.\n\n## Backup And Restore\n\nBack up both the database and uploaded files. In the default Docker setup, that means backing up `./postgres` and `./library` together.\n\nSee [`docs/operations/backup-restore.md`](../docs/operations/backup-restore.md) for the restore checklist.\n\n## Documentation\n\n- [`docs/architecture.md`](../docs/architecture.md) - system shape, storage model, and design boundaries\n- [`docs/operations/backup-restore.md`](../docs/operations/backup-restore.md) - simple backup and restore checklist\n\n## Local Development\n\nStaaash is a PNPM workspace monorepo.\n\nNext.js · TypeScript · Prisma · PostgreSQL\n\n### Repository Layout\n\n- `apps/web` - web app and server routes\n- `apps/worker` - background worker runtime\n- `packages/config` - shared TypeScript config\n- `packages/db` - Prisma schema and DB helpers\n- `docs` - architecture reference\n\n### Development Setup\n\n1. Copy `dev.example.env` to `.env.local` at the repo root.\n2. Start PostgreSQL.\n   The default `.env.local` expects `postgresql://staaash:staaash@localhost:5432/staaash`.\n   If you want a local Docker container that matches those values, run:\n\n   ```console\n   docker run --name staaash-postgres -e POSTGRES_USER=staaash -e POSTGRES_PASSWORD=staaash -e POSTGRES_DB=staaash -p 5432:5432 -v staaash-postgres-data:/var/lib/postgresql -d postgres:16\n   ```\n\n   After that first run, you can restart it later with `docker start staaash-postgres`.\n   If you already have PostgreSQL running another way, just update `DATABASE_URL` in `.env.local`.\n\n3. Run `pnpm i`.\n4. Run `pnpm db:generate`.\n5. Run `pnpm db:push`.\n6. Start the web app with `pnpm web:dev`.\n7. Start the worker with `pnpm worker:dev`.\n\n### Resetting Local Data\n\nIf you need to reset your local database and file uploads during development:\n\n```console\npnpm app:reset-local-data\n```\n\nThis will:\n\n- Delete all local file uploads (`.data/files`)\n- Reset the Prisma database schema with `prisma db push --force-reset`\n\n**Note:** Use this script to reset your database please, you may have data remain if you do it manually.\n\n## Testing And Quality\n\n- staged files are auto-formatted on commit\n- `pnpm format:check`\n- `pnpm format` for one-off repo-wide formatting or intentional normalization\n- `pnpm lint`\n- `pnpm test`\n- `pnpm build`\n\n## AI Use\n\nAI is being used in this project as part of the development and documentation workflow.\n\nThat does not change the quality bar. Generated code or generated docs still need to be reviewed, tested, and kept consistent with the repo's actual behavior.\n\n## Contributing And Feedback\n\n- read [`CONTRIBUTING.md`](./CONTRIBUTING.md) before opening work\n- use the GitHub issue forms for bug reports and feature requests\n- use the PR template when opening changes\n- report security problems privately as described in [`SECURITY.md`](./SECURITY.md)\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=itsmeares/staaash\u0026type=Date)](https://star-history.com/#itsmeares/staaash\u0026Date)\n\n## License\n\nAGPL-3.0 — see [LICENSE](../LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitsmeares%2Fstaaash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitsmeares%2Fstaaash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitsmeares%2Fstaaash/lists"}