# ๐ฏ Syft Objects
[](https://badge.fury.io/py/syft-objects)
**Discover and use files you can't read.** Syft Objects enables federated data science by letting you write code against mock data that runs on real data elsewhere.
## Why Syft Objects?
In federated computing, you often need to:
- ๐ **Discover** files that exist on other machines
- ๐ **Address** those files in your code
- ๐งช **Test** your code locally before running remotely
- ๐ **Control** who can see what
Syft Objects solves this by providing a simple mock/private pattern for any file type.
## Installation
```bash
pip install syft-objects
```
## Quick Start
```python
import syft_objects as so
# Create an object with mock (public) and private versions
analysis = so.create_object(
name="Q4 Sales Analysis",
mock_contents="Revenue up 10% to $2.5M", # What others see
private_contents="Revenue: $2,547,891.23", # What you see
discovery_read=["public"], # Who can discover it
mock_read=["team@customer_company.com"], # Who can see mock
private_read=["cfo@our_company.com"] # Who can see real data
)
# Browse available objects
so.objects # Interactive table with search, filter, and permissions
```
## Core Concepts
### 1. Every Object Has Two Versions
- **Mock**: Sample/demo data anyone can code against
- **Private**: Real data only authorized users can access
### 2. Permissioned Discovery
```python
# Others can discover your object exists, even if they can't read it
so.objects # Shows objects YOU can discover (not everyone sees the same list)
```
### 3. Write Once, Run Anywhere
```python
# Test locally with mock data
netflix_data = so.objects["0b2f982d-6f82-48f3-b32e-3005e186e1cc"]
result = len(netflix_data.mock.obj) # Works with mock
# Same code runs on private data elsewhere
def analyze_netflix_data():
data = pd.read_csv(netflix_data.private.path) # Runs on real data
return len(data)
```
## Common Workflows
### Creating Objects from Files
```python
# From existing files
dataset = so.create_object(
name="Customer Dataset",
mock_file="sample_100.csv",
private_file="customers_full.csv"
)
# From folders
model = so.create_object(
name="ML Model",
mock_folder="model_demo/",
private_folder="model_prod/"
)
```
### Finding and Using Objects
```python
# 1. Browse available objects
so.objects
# 2. Search and select (checkbox) objects of interest
# 3. Click "Python" button to copy code
# 4. Paste and use:
results = [so.objects["uid-here"]]
mock_data = results[0].mock.obj
```
### Creating Derivative Objects
```python
# Your analysis creates new syft objects
def my_analysis():
# Load input
input_data = pd.read_csv(input_path)
# Process
result = len(input_data)
# Save as new syft object
so.create_object(
name=f"Row count: {result}",
private_file="result.txt",
mock_file="result_mock.txt",
discovery_read=["researcher@university.edu"]
)
```
## CRUD Operations
### Create
```python
obj = so.create_object(name="My Object", mock_contents="demo", private_contents="real")
```
### Read
```python
obj.get_name()
obj.get_permissions()
obj.mock.obj # Access mock data
```
### Update
```python
obj.set_name("Updated Name")
obj.set_permissions(mock_read=["new@user.com"])
```
### Delete
```python
obj.delete_obj()
```
## Web Interface
```bash
./run.sh # Starts web UI at http://localhost:8004
```
Features:
- Search and filter objects
- Drag-and-drop file upload
- Edit permissions
- View/edit mock and private files
## How It Works
Syft Objects creates YAML config files that point to mock and private versions of your data:
```yaml
name: Sales Data
mock_url: syft://user@email.com/public/objects/sales_mock.csv
private_url: syft://user@email.com/private/objects/sales_real.csv
mock_permissions: [public]
private_permissions: [cfo@company.com]
```
The library handles all the complexity of:
- File management and syft:// URLs
- Permission checking
- Mock/private switching
- Cross-datasite discovery
## Use Cases
- **Federated Data Science**: Write analysis code against mock data, run on real data elsewhere
- **Privacy-Preserving ML**: Train models on distributed data without seeing it
- **Secure Collaboration**: Share data structure without revealing contents
- **Intermediate Results**: Track outputs from multi-step federated computations
## Learn More
- **Tutorial**: See `5mins.ipynb` for hands-on examples
- **Federated Execution**: Use with [syft-queue](https://github.com/OpenMined/syft-queue) or [syft-data-science](https://github.com/OpenMined/syft-data-science)
- **Issues**: https://github.com/OpenMined/syft-objects/issues
## License
Apache License 2.0
Raw data
{
"_id": null,
"home_page": null,
"name": "syft-objects",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "OpenMined <contact@openmined.org>",
"keywords": "data-sharing, distributed, openmined, privacy, syft",
"author": null,
"author_email": "OpenMined <contact@openmined.org>",
"download_url": "https://files.pythonhosted.org/packages/8a/37/9db513c4889bd337e78723dc8b02abce1488dd6eac412fb452863315a52c/syft_objects-0.10.18.tar.gz",
"platform": null,
"description": "# \ud83c\udfaf Syft Objects\n\n[](https://badge.fury.io/py/syft-objects)\n\n**Discover and use files you can't read.** Syft Objects enables federated data science by letting you write code against mock data that runs on real data elsewhere.\n\n## Why Syft Objects?\n\nIn federated computing, you often need to:\n- \ud83d\udd0d **Discover** files that exist on other machines\n- \ud83d\udccd **Address** those files in your code\n- \ud83e\uddea **Test** your code locally before running remotely\n- \ud83d\udd10 **Control** who can see what\n\nSyft Objects solves this by providing a simple mock/private pattern for any file type.\n\n## Installation\n\n```bash\npip install syft-objects\n```\n\n## Quick Start\n\n```python\nimport syft_objects as so\n\n# Create an object with mock (public) and private versions\nanalysis = so.create_object(\n name=\"Q4 Sales Analysis\",\n mock_contents=\"Revenue up 10% to $2.5M\", # What others see\n private_contents=\"Revenue: $2,547,891.23\", # What you see\n discovery_read=[\"public\"], # Who can discover it\n mock_read=[\"team@customer_company.com\"], # Who can see mock\n private_read=[\"cfo@our_company.com\"] # Who can see real data\n)\n\n# Browse available objects\nso.objects # Interactive table with search, filter, and permissions\n```\n\n## Core Concepts\n\n### 1. Every Object Has Two Versions\n- **Mock**: Sample/demo data anyone can code against\n- **Private**: Real data only authorized users can access\n\n### 2. Permissioned Discovery\n```python\n# Others can discover your object exists, even if they can't read it\nso.objects # Shows objects YOU can discover (not everyone sees the same list)\n```\n\n### 3. Write Once, Run Anywhere\n```python\n# Test locally with mock data\nnetflix_data = so.objects[\"0b2f982d-6f82-48f3-b32e-3005e186e1cc\"]\nresult = len(netflix_data.mock.obj) # Works with mock\n\n# Same code runs on private data elsewhere\ndef analyze_netflix_data():\n data = pd.read_csv(netflix_data.private.path) # Runs on real data\n return len(data)\n```\n\n## Common Workflows\n\n### Creating Objects from Files\n```python\n# From existing files\ndataset = so.create_object(\n name=\"Customer Dataset\",\n mock_file=\"sample_100.csv\",\n private_file=\"customers_full.csv\"\n)\n\n# From folders\nmodel = so.create_object(\n name=\"ML Model\",\n mock_folder=\"model_demo/\",\n private_folder=\"model_prod/\"\n)\n```\n\n### Finding and Using Objects\n```python\n# 1. Browse available objects\nso.objects\n\n# 2. Search and select (checkbox) objects of interest\n# 3. Click \"Python\" button to copy code\n# 4. Paste and use:\nresults = [so.objects[\"uid-here\"]]\nmock_data = results[0].mock.obj\n```\n\n### Creating Derivative Objects\n```python\n# Your analysis creates new syft objects\ndef my_analysis():\n # Load input\n input_data = pd.read_csv(input_path)\n \n # Process\n result = len(input_data)\n \n # Save as new syft object\n so.create_object(\n name=f\"Row count: {result}\",\n private_file=\"result.txt\",\n mock_file=\"result_mock.txt\",\n discovery_read=[\"researcher@university.edu\"]\n )\n```\n\n## CRUD Operations\n\n### Create\n```python\nobj = so.create_object(name=\"My Object\", mock_contents=\"demo\", private_contents=\"real\")\n```\n\n### Read\n```python\nobj.get_name()\nobj.get_permissions() \nobj.mock.obj # Access mock data\n```\n\n### Update\n```python\nobj.set_name(\"Updated Name\")\nobj.set_permissions(mock_read=[\"new@user.com\"])\n```\n\n### Delete\n```python\nobj.delete_obj()\n```\n\n## Web Interface\n\n```bash\n./run.sh # Starts web UI at http://localhost:8004\n```\n\nFeatures:\n- Search and filter objects\n- Drag-and-drop file upload\n- Edit permissions\n- View/edit mock and private files\n\n## How It Works\n\nSyft Objects creates YAML config files that point to mock and private versions of your data:\n\n```yaml\nname: Sales Data\nmock_url: syft://user@email.com/public/objects/sales_mock.csv\nprivate_url: syft://user@email.com/private/objects/sales_real.csv\nmock_permissions: [public]\nprivate_permissions: [cfo@company.com]\n```\n\nThe library handles all the complexity of:\n- File management and syft:// URLs\n- Permission checking\n- Mock/private switching\n- Cross-datasite discovery\n\n## Use Cases\n\n- **Federated Data Science**: Write analysis code against mock data, run on real data elsewhere\n- **Privacy-Preserving ML**: Train models on distributed data without seeing it\n- **Secure Collaboration**: Share data structure without revealing contents\n- **Intermediate Results**: Track outputs from multi-step federated computations\n\n## Learn More\n\n- **Tutorial**: See `5mins.ipynb` for hands-on examples\n- **Federated Execution**: Use with [syft-queue](https://github.com/OpenMined/syft-queue) or [syft-data-science](https://github.com/OpenMined/syft-data-science)\n- **Issues**: https://github.com/OpenMined/syft-objects/issues\n\n## License\n\nApache License 2.0",
"bugtrack_url": null,
"license": null,
"summary": "Share files with explicit mock vs private control",
"version": "0.10.18",
"project_urls": {
"Bug Tracker": "https://github.com/OpenMined/syft-objects/issues",
"Discussions": "https://github.com/OpenMined/syft-objects/discussions",
"Documentation": "https://openmined.github.io/syft-objects/",
"Homepage": "https://github.com/OpenMined/syft-objects",
"Repository": "https://github.com/OpenMined/syft-objects"
},
"split_keywords": [
"data-sharing",
" distributed",
" openmined",
" privacy",
" syft"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "29eeec4324f01c8537e714674f38b3e51aab647a1f81a888112ba7555f92a297",
"md5": "a390aacde2b5ed399b82da99aaf944d4",
"sha256": "4cf0dba8a208867158117ea317af8a2dcaa121221591c1a1ff8227ff644c2051"
},
"downloads": -1,
"filename": "syft_objects-0.10.18-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a390aacde2b5ed399b82da99aaf944d4",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 68906,
"upload_time": "2025-07-10T04:38:50",
"upload_time_iso_8601": "2025-07-10T04:38:50.420697Z",
"url": "https://files.pythonhosted.org/packages/29/ee/ec4324f01c8537e714674f38b3e51aab647a1f81a888112ba7555f92a297/syft_objects-0.10.18-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8a379db513c4889bd337e78723dc8b02abce1488dd6eac412fb452863315a52c",
"md5": "3d55e48530e79f544afc1aa35c033a9c",
"sha256": "2bac5f43394dc7fa55d57f269e2b311c60aedba4d5690e15b7a607dac6eeaf9c"
},
"downloads": -1,
"filename": "syft_objects-0.10.18.tar.gz",
"has_sig": false,
"md5_digest": "3d55e48530e79f544afc1aa35c033a9c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 61487,
"upload_time": "2025-07-10T04:38:51",
"upload_time_iso_8601": "2025-07-10T04:38:51.384776Z",
"url": "https://files.pythonhosted.org/packages/8a/37/9db513c4889bd337e78723dc8b02abce1488dd6eac412fb452863315a52c/syft_objects-0.10.18.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-10 04:38:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "OpenMined",
"github_project": "syft-objects",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "syft-objects"
}