# Mock Drift: Mockoon vs Contract Mocks

**Short answer:** A mock drifts when it is maintained separately from the API. A contract mock is generated from the spec, so it cannot return a shape the contract does not declare. The first is a copy that goes stale; the second is a rendering of the source.

## How drift shows up

The mock returns a field the API removed, misses a new field, or keeps an old type. The client develops against the mock and fails against the real service.

## What a contract mock keeps

| Condition | Separate mock | Contract mock |
| --- | --- | --- |
| Removed field | May remain | Not present |
| New field | May be missed | From spec |
| Type change | May be stale | Current |
| Response shape | As maintained | Valid |

## Why the source matters

A generated mock is a build output, like generated code, so it is current on every save. A separate mock is a copy that needs a process to stay aligned.

## The honest takeaway

For a stable surface, a separate mock is fine. For a moving API, the drift is the cost that generation removes.

This is part of the [Powerduck vs Mockoon comparison](https://www.powerduck.com/blog/powerduck-vs-mockoon/). Next, read [the CLI comparison](https://www.powerduck.com/blog/mockoon-cli-vs-powerduck-cli/).

