PHPackages                             marionnewlevant/snitch - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. marionnewlevant/snitch

ActiveCraft-plugin[Utility &amp; Helpers](/categories/utility)

marionnewlevant/snitch
======================

Report when two people might be editing the same element (eg entry, category, or global) or field

3.0.4.1(5y ago)3585.1k↓33.3%15[5 issues](https://github.com/marionnewlevant/craft-snitch/issues)[1 PRs](https://github.com/marionnewlevant/craft-snitch/pulls)2MITPHPCI failing

Since Nov 25Pushed 3y ago3 watchersCompare

[ Source](https://github.com/marionnewlevant/craft-snitch)[ Packagist](https://packagist.org/packages/marionnewlevant/snitch)[ RSS](/packages/marionnewlevant-snitch/feed)WikiDiscussions v2 Synced 1mo ago

READMEChangelog (10)Dependencies (1)Versions (14)Used By (2)

Snitch plugin for Craft CMS 3.x
===============================

[](#snitch-plugin-for-craft-cms-3x)

Snitch watches element editors (entry, category, global set, user, etc.) and field editors, and lets you know when someone else may also be editing the same thing at the same time.

Installation
------------

[](#installation)

To install Snitch, follow these steps:

1. Install with Composer via `composer require marionnewlevant/snitch` from your project directory
2. Install plugin in the Craft Control Panel under Settings &gt; Plugins

or

1. Install via the Plugin Store

Snitch works on Craft 3.x.

Snitch Overview
---------------

[](#snitch-overview)

Snitch works by injecting a javascript file into backend pages. That javascript looks for an element edit window or a modal element edit window, and when it detects one, asks the server to report any collisions.

A warning banner appears at the top of the editor pane when someone else may be editing the same element:

[![Screenshot](resources/img/warning.png)](resources/img/warning.png)

A warning banner also appears at the top of editor modals:

[![Screenshot](resources/img/modalWarning.png)](resources/img/modalWarning.png)

Clicking the `X` will dismiss the banner.

Configuring Snitch
------------------

[](#configuring-snitch)

The default configuration can be overridden with a config file in `craft/config/snitch.php`. This is a standard Craft config file, with the usual multienvironment support. The configurable values are:

- `serverPollInterval`: interval (in seconds) for polling server to look for newly arrived conflicts. Default value: `2`. Minimum value 1, maximum value 5.
- `messageTemplate`: text for the warning banner. This is parsed as twig, with `user` the user who may be in conflict. Default value is: `May also be edited by: {{user.username}}.`. This will generate a `mailto` link to the user. You can change this to enable Slack messaging, or what-have-you.
- `elementInputIdSelector`: the css selector for identifying the hidden inputs which indicate an element edit window or modal element edit window.
- `fieldInputIdSelector`: css selector for identifying the hidden inputs which indicate a field edit window.

The visual look of the warning banners can be modifed with the [cpcss](https://plugins.craftcms.com/cp-css) plugin.

How it works.
-------------

[](#how-it-works)

Javascript (and css) is added to every backend page. That javascript fetches the configuration values, and then starts polling. Every 2 seconds, it looks for any edit forms on the page, and if it finds such a form, reports via ajax the type and the id of the element that the edit form is editing. In return, it is passed a list of possible collisions.

On the server, a database table (snitch\_collisions) records

- the user
- the type of the element being edited
- the id of the element being edited
- when the element was last reported being edited by this user.

When the ajax call arrives reporting that an element is being edited, these things happen:

1. Any report that has not been updated in 10 poll intervals is removed from the snitch\_collisions table. It is no longer being edited.
2. Either create a new report for this user/element type/element id, or update the time on the existing one
3. Look for any edit reports of this element by other users.
4. Return the user data from these reports. These will be other people who may be editing the element.

Issues
------

[](#issues)

Snitch will fail to notice when one person is editing a Commerce product, and another is editing a variant of that product through a modal.

Brought to you by [Marion Newlevant](http://marion.newlevant.com)

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance17

Infrequent updates — may be unmaintained

Popularity41

Moderate usage in the ecosystem

Community23

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor1

Top contributor holds 75.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~86 days

Recently: every ~30 days

Total

14

Last Release

1964d ago

Major Versions

2.1.2 → 3.0.02019-06-03

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/695477?v=4)[Marion Newlevant](/maintainers/marionnewlevant)[@marionnewlevant](https://github.com/marionnewlevant)

---

Top Contributors

[![marionnewlevant](https://avatars.githubusercontent.com/u/695477?v=4)](https://github.com/marionnewlevant "marionnewlevant (31 commits)")[![mattstein](https://avatars.githubusercontent.com/u/2488775?v=4)](https://github.com/mattstein "mattstein (5 commits)")[![brandonkelly](https://avatars.githubusercontent.com/u/47792?v=4)](https://github.com/brandonkelly "brandonkelly (1 commits)")[![benjamin-smith](https://avatars.githubusercontent.com/u/1483102?v=4)](https://github.com/benjamin-smith "benjamin-smith (1 commits)")[![Marcuzz](https://avatars.githubusercontent.com/u/3168421?v=4)](https://github.com/Marcuzz "Marcuzz (1 commits)")[![himynameisphil](https://avatars.githubusercontent.com/u/8222933?v=4)](https://github.com/himynameisphil "himynameisphil (1 commits)")[![blasvicco](https://avatars.githubusercontent.com/u/1821068?v=4)](https://github.com/blasvicco "blasvicco (1 commits)")

---

Tags

cmsCraftcraftcmscraft-pluginsnitch

### Embed Badge

![Health badge](/badges/marionnewlevant-snitch/health.svg)

```
[![Health](https://phpackages.com/badges/marionnewlevant-snitch/health.svg)](https://phpackages.com/packages/marionnewlevant-snitch)
```

###  Alternatives

[verbb/navigation

Create navigation menus for your site.

90683.7k17](/packages/verbb-navigation)[verbb/formie

The most user-friendly forms plugin for Craft.

101372.9k40](/packages/verbb-formie)[verbb/comments

Add comments to your site.

13753.1k](/packages/verbb-comments)[verbb/tablemaker

Create customizable and user-defined table fields.

40168.8k1](/packages/verbb-tablemaker)[supercool/tablemaker

Create customizable and user-defined table fields.

40141.7k](/packages/supercool-tablemaker)[pennebaker/craft-architect

CraftCMS plugin to generate content models from JSON/YAML data.

72148.5k5](/packages/pennebaker-craft-architect)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
