Skip to main content
We welcome contributions from the community! Syft Space is an open-source project built by the OpenMined community to make AI safer through privacy-preserving technology.

Ways to contribute

Report bugs

Found a bug? Report it on our GitHub Issues

Suggest features

Have an idea? Open a feature request on GitHub Discussions

Improve docs

Help improve our documentation by submitting pull requests

Write code

Contribute code improvements, bug fixes, or new features

Getting started

Prerequisites

  • Python 3.12 or higher
  • Docker (required for local vector database provisioning)
  • uv package manager (recommended)

Development setup

1

Fork and clone the repository

git clone https://github.com/your-username/syft-space.git
cd syft-space
2

Quick start with run script

./run.sh
This script automatically sets up the backend and starts the development server.
3

Manual setup (alternative)

# Create virtual environment
uv venv -p 3.12

# Install dependencies
uv pip install -e backend/

# Run the server
uv run uvicorn backend.main:app --reload --host 0.0.0.0 --port 8080
4

Access the application

Project structure

syft-space/
├── backend/              # Python FastAPI server
│   ├── syft_space/       # Main application code
│   │   ├── components/   # Feature modules
│   │   │   ├── datasets/ # Dataset management
│   │   │   ├── models/   # Model integration
│   │   │   ├── endpoints/# RAG endpoints
│   │   │   └── policies/ # Access control
│   │   └── shared/       # Common utilities
│   └── pyproject.toml    # Python dependencies
├── frontend/             # Vue 3 web interface
│   ├── src/
│   │   ├── components/   # Reusable components
│   │   ├── pages/        # Route pages
│   │   ├── api/          # API client
│   │   └── stores/       # State management
│   └── package.json      # Node dependencies
├── docs/                 # Documentation
├── Dockerfile            # Container build
└── docker-compose.yml    # Multi-container setup

Development workflow

Backend development

The backend follows a domain-driven design pattern where each component has:
  • entities.py - SQLModel database models
  • repository.py - Data access layer (CRUD)
  • handlers.py - Business logic
  • schemas.py - Pydantic request/response models
  • routes.py - FastAPI endpoints
cd backend

# Format code
ruff format .

# Lint code
ruff check .

# Type checking
mypy .

Frontend development

The frontend uses Vue 3 with Composition API, TypeScript, and Tailwind CSS.
cd frontend

# Lint with ESLint and Oxlint
bun run lint

# TypeScript type checking
bun run typecheck

# Format with Prettier
bun run format
Always run lint and typecheck commands after making changes to ensure code quality.

Submitting contributions

1

Create a feature branch

git checkout -b feature/your-feature-name
2

Make your changes

  • Write clear, concise commit messages
  • Follow the existing code style and patterns
  • Add tests for new functionality
  • Update documentation as needed
3

Run quality checks

cd backend
ruff format .
ruff check .
mypy .
pytest
4

Commit your changes

git add .
git commit -m "feat: add new feature description"
Use conventional commit format:
  • feat: - New features
  • fix: - Bug fixes
  • docs: - Documentation changes
  • refactor: - Code refactoring
  • test: - Test additions or changes
  • chore: - Maintenance tasks
5

Push and create a pull request

git push origin feature/your-feature-name
Then open a pull request on GitHub with:
  • Clear description of changes
  • Reference to related issues
  • Screenshots for UI changes

Code style guidelines

Backend (Python)

  • Use Black formatting with line length 88
  • Type hints are required for all functions
  • Follow PEP 8 conventions
  • Use Pydantic for data validation
  • Document complex logic with docstrings

Frontend (TypeScript/Vue)

  • Use Vue 3 Composition API with <script setup>
  • Prefer TypeScript for type safety
  • Use shadcn/ui components over custom implementations
  • Follow Tailwind CSS utility-first approach
  • Use lucide-vue-next for icons

Getting help

GitHub Discussions

Ask questions and discuss ideas on GitHub Discussions

GitHub Issues

Report bugs and request features on GitHub Issues

OpenMined Slack

Join the OpenMined community on Slack

Documentation

Read the full documentation

Code of conduct

We are committed to providing a welcoming and inclusive environment. All contributors are expected to:
  • Be respectful and considerate
  • Provide constructive feedback
  • Focus on what is best for the community
  • Show empathy towards other contributors

License

By contributing to Syft Space, you agree that your contributions will be licensed under the Apache License 2.0.
Thank you for contributing to Syft Space and helping make AI safer through privacy-preserving technology!

Build docs developers (and LLMs) love