{"id":43051354,"url":"https://github.com/subdavis/workspaces-io","last_synced_at":"2026-01-31T10:36:59.130Z","repository":{"id":78496180,"uuid":"289572002","full_name":"subdavis/workspaces-io","owner":"subdavis","description":"A simple FastAPI server to manage workspaces and multi-user sharing within MinIO.","archived":false,"fork":false,"pushed_at":"2020-10-25T15:12:34.000Z","size":2954,"stargazers_count":22,"open_issues_count":4,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-06-11T23:38:53.969Z","etag":null,"topics":["fastapi","minio","python-click","s3"],"latest_commit_sha":null,"homepage":"https://workspacesio.subdavis.com","language":"Python","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/subdavis.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":"2020-08-22T21:46:00.000Z","updated_at":"2024-06-02T04:14:13.000Z","dependencies_parsed_at":"2023-08-31T02:07:31.132Z","dependency_job_id":null,"html_url":"https://github.com/subdavis/workspaces-io","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/subdavis/workspaces-io","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subdavis%2Fworkspaces-io","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subdavis%2Fworkspaces-io/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subdavis%2Fworkspaces-io/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subdavis%2Fworkspaces-io/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/subdavis","download_url":"https://codeload.github.com/subdavis/workspaces-io/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subdavis%2Fworkspaces-io/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28938783,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T10:18:23.202Z","status":"ssl_error","status_checked_at":"2026-01-31T10:18:22.693Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["fastapi","minio","python-click","s3"],"created_at":"2026-01-31T10:36:55.520Z","updated_at":"2026-01-31T10:36:59.116Z","avatar_url":"https://github.com/subdavis.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/workspacesio-logo-circle.png\" width=\"640px\"\u003e\n\u003c/p\u003e\n\n\u003e Better than your NAS, probably\n\nA dead-simple [FastAPI](https://fastapi.tiangolo.com/) service to manage multi-user permissions and indexing for S3 and MinIO.\n\n## Documentation\n\n* **[General Docs](https://workspacesio.subdavis.com/)**\n* **[Administrator Docs](https://workspacesio.subdavis.com/admin/administrator-guide/)**\n\n## Features\n\n* **Non-invasive import** and **indexing** of your existing data.  We leave your data just as it is on-disk.\n* Simple permissions management. `wio create` to make new workspaces. `wio share` to share them with others.\n* **Low-friction access** to your data.  WorkspacesIO grants **STS credentials** so that users can connect directly to minio for listing, upload, and download operations.  You can even continue to use `minio/mc` or `boto3` , with some caveats.\n* Permissions-aware indexing and aggregation across the system.\n* Hub-and-spoke architecture.  Run a MinIO node wherever you have data, and it will be available through Workspaces.  Even **regular users** can introduce new nodes into the system and retain full control of their data.\n\n## Screenshots\n\n![Images in a directory](docs/images/screen-images.png)\n\n![directory of directories](docs/images/screen-dirs.png)\n\n``` bash\n# List user workspaces\n~$ wio workspace ls\n[2020-10-17T21:07:18.996866] admin@subdavis.com/meva/ (unmanaged)\n[2020-10-17T21:06:11.048850] admin@subdavis.com/second/ (private)\n[2020-10-17T21:06:11.470730] admin@subdavis.com/third/ (private)\n[2020-10-17T21:07:18.188769] admin@subdavis.com/kobodls/ (unmanaged)\n[2020-10-17T21:07:18.720848] admin@subdavis.com/metabolomics/ (unmanaged)\n[2020-10-17T21:06:10.623132] admin@subdavis.com/first/ (public)\n[2020-10-17T21:07:17.911934] dmin@subdavis.com/_samples/ (unmanaged)\n[2020-10-17T21:07:19.575340] admin@subdavis.com/viame-web/ (unmanaged)\n\n# List instances of MinIO\n~$ wio node ls\n[2020-10-17T21:06:08.480801] ddb915fb-d911-4a8a-8971-b2fccd4e4ea8 http://hostname:9000 default\n[2020-10-17T21:06:09.803527] 6a4cf079-6c2f-4f09-abb0-abe39379e168 http://hostname:9100 secondary\n\n# List contens of workspace using MinIO client\n~$ wio mc ls viame-web/NOAAWorkshop2020/\n[2020-10-18 17:47:33 EDT]      0B Aerial Footage/\n[2020-10-18 17:47:33 EDT]      0B Completed Pipelines/\n[2020-10-18 17:47:33 EDT]      0B Fish Test Set/\n[2020-10-18 17:47:33 EDT]      0B Fish Training/\n[2020-10-18 17:47:33 EDT]      0B Scallop Test Set/\n[2020-10-18 17:47:33 EDT]      0B Sea Lion Test Set/\n[2020-10-18 17:47:33 EDT]      0B Sea Lion Training/\n```\n\n## Philosophy\n\nData management should come to users and the places they already have data.  If your team wants to use powerful industry-standard tools like MinIO and ElasticSearch, but needs permissions management, WorkspacesIO might be an option.\n\n## Caveats\n\nFor whatever reason, [you can't explicitly revoke STS credentials](https://stackoverflow.com/questions/47026661/explicitly-expire-tokens-acquired-from-aws-security-token-service).  That's how AWS does it so MinIO won't implement it either.  This means that share revocation has a big asterisk: anyone with outstanding credentials can continue to modify data in s3 until that share expires.\n\n## FAQ\n\n\u003e What's a workspace?\n\nIt's just a folder.  Users manage the heirarchy within.  Permissions are managed at the workspace level.  You can search for workspace contents and share individual objects, but these are features of elasticsearch and minio, respectively.\n\n\u003e Who is this for?\n\nWorkspacesIO is for organizations that need to manage large quantities of slow-moving data of the sort that laboratories and research teams accumulate.  Think Samba, CIFS, FTP, SSHFS.  WorksapcesIO can map your existing data while you transition, or run side-by-side forever.\n\n\u003e What if I want to share a single file?\n\nThere's always pre-signed URLs to email a collegue.  But you shouldn't think of this like Google Drive; WorkspacesIO isn't for slide decks.\n\n\u003e Why not just MinIO?\n\nMinIO's multi-user management is great when all users a) need their own space or b) can share everything, but it's cumbersome for dynamic permissions management.  WorkspacesIO gives you Role-based access control.\n\n\u003e Can I just try it?  What if I hate it?\n\nBecause it doesn't modify the structure of your data on disk, WorkspacesIO is easy to try.\n\n\u003e Multiple nodes?  Isn't that just MinIO Distributed Mode?\n\nNot at all.  MinIO's Distributed Mode solves an operational and deeply technical problem.  It allows for data redundancy and high availability.  WorkspacesIO solves a bureaucratic problem.  You've got data on different servers and workstations in different locations.  You can't reasonably migrate it all into the same storage cluster, but you want to provide read/write/search to certain authenticated users across your org.\n\n## Development setup\n\n### Server\n\nInstall the [ldc](https://github.com/Kitware/ldc) tool.\n\n``` sh\n# run production services\nldc up\n\n# swap in the development container\nldc dev workspaces\n```\n\nNow you're running a fastapi service in development mode inside a docker container. Local directories are mounted in. \n\n### Client\n\n``` sh\nvirtualenv -p python3 venv/\nvenv/bin/activate\n\npip3 install -e .\npip3 install -r dev.requirements.txt\n\nwio --help\n```\n\n### Referring to workspaces\n\nYou can refer to workspaces either\n\n* directly by `workspacename/`\n* through their owner by `owner/workspacename/`\n\n# Credit\n\nCredit to [Filestash.app](https://github.com/mickael-kerjean/filestash) for the frontend file browser. Integration into workspacesio is ongong and can be found at [subdavis/filestash](https://github.com/subdavis/filestash)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubdavis%2Fworkspaces-io","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsubdavis%2Fworkspaces-io","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubdavis%2Fworkspaces-io/lists"}