---
title: SyncReport
description: What one Session.sync_dir did.
---

```python
@final
class SyncReport
```

What one `Session.sync_dir` did.

## Constructor

`SyncReport` declares no `__new__` or `__init__`, so it is not constructed directly: an instance comes back from another call in this package.

## Properties

### `deleted`

```python
deleted: int
```

How many paths gone locally were removed in the VM.

### `full`

```python
full: bool
```

No manifest was read (`full=True`, or none in the VM), so the whole tree travelled.

### `refused_deletions`

```python
refused_deletions: int
```

How many deletions the VM's manifest ordered that weren't plain relative paths, and so
weren't run: the manifest is the VM's word.

### `unchanged`

```python
unchanged: bool
```

The VM already held the tree as it is, so nothing travelled.

### `uploaded_bytes`

```python
uploaded_bytes: int
```

The uploaded archive's size, 0 when nothing travelled.

### `uploaded_members`

```python
uploaded_members: int
```

How many members the upload carried: the changed ones, or every one when `full`.

## Special methods

### `__repr__`

```python
def __repr__() -> str
```

## Provenance

This page is generated from `bindings/microvms-py/microvms.pyi` by Griffe 2.3.0, run from `site/scripts/gen-reference.mjs` on every `pnpm run sync`, so an edit made here is overwritten by the next run.

To change the page, change the doc comment in the binding's Rust source, then regenerate the declarations with `mise run stubs`. `mise run stubs:check` fails when the committed file no longer matches the source.