PHPackages                             simplygoodwork/craft-donkeytail - 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. simplygoodwork/craft-donkeytail

ActiveCraft-plugin

simplygoodwork/craft-donkeytail
===============================

Fieldtype that allows you to quickly and easily content manage points on images. You can use it for locations on a faux map, showcasing multiple products within an image, or even pinning the tail on a donkey.

5.0.0(1y ago)5215.7k↓21.4%8[14 issues](https://github.com/simplygoodwork/craft-donkeytail/issues)[2 PRs](https://github.com/simplygoodwork/craft-donkeytail/pulls)proprietaryPHPPHP ^8.2.0

Since Nov 5Pushed 1y ago4 watchersCompare

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

READMEChangelog (10)Dependencies (2)Versions (18)Used By (0)

Donkeytail plugin for Craft CMS 4.x
===================================

[](#donkeytail-plugin-for-craft-cms-4x)

Donkeytail is a Craft CMS 4 fieldtype that allows you to quickly and easily content manage element points on images. You can use it for locations on a faux map, showcasing multiple products within an image, or even pinning the tail on a donkey.

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

Follow the [@simplygoodwork](https://twitter.com/simplygoodwork) Twitter account for updates.

Requirements
------------

[](#requirements)

This plugin requires Craft CMS `4.0.0-alpha` or later.

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

[](#installation)

To install the plugin, follow these instructions.

1. Open your terminal and go to your Craft project:

    ```
    cd /path/to/project

    ```
2. Then tell Composer to load the plugin:

    ```
    composer require simplygoodwork/craft-donkeytail

    ```
3. In the Control Panel, go to Settings → Plugins and click the “Install” button for Donkeytail.

Usage
-----

[](#usage)

### Terminology

[](#terminology)

In Donkeytail, the image asset you’re adding points to is called the *canvas* and the point entries you’re adding are called *pins*.

### Templating

[](#templating)

The following attributes are available from your donkeytail field:

- `canvas`: The canvas asset element.
- `pins`: Array of pins attached to canvas:

    - `element`: The pin element.
    - `x`: The left percentage value of the pin's anchor point in relation to the canvas (without % suffix).
    - `left`: The left percentage value of the pin's anchor point in relation to the canvas (with % suffix).
    - `y`: The top percentage value of the pin's anchor point in relation to the canvas (without % suffix).
    - `top`: The top percentage value of the pin's anchor point in relation to the canvas (with % suffix).
    - `style`: Returns the top and left percentages as CSS style properties and values.

        - For example `top: 42.121%; left: 88.1337%;`.

### GraphQL

[](#graphql)

The following attributes are available from your donkeytail field when accessed via graphql:

- `canvas`: The canvas asset element.
- `pins`: Pins attached to canvas:

    - `x`: The left percentage value of the pin's anchor point in relation to the canvas (without % suffix).
    - `y`: The top percentage value of the pin's anchor point in relation to the canvas (without % suffix).
- {`entry`, `asset`, `user`, `category`, `product`, `variant`}: The pin element.

### Real world example

[](#real-world-example)

You’ll need to render the canvas asset yourself as you normally would within a template.

A real world example would likely have the canvas in a parent container with `position: relative`. The dots can then be set to `position: absolute` and their positions output using an inline style attribute and `{{ entry.donkeytailField.style }}`. Don't forget to use negative margins or similar to move your frontend marker’s point to the match the anchor point of the dot, and to replace `{donkeytailField}` with your Donkeytail Field handle:

```

  {% for pin in entry.{donkeytailField}.pins %}

  {% endfor %}

```

Or, if you want to show captions by default:

```

  {% for pin in entry.{donkeytailField}.pins %}

      {{ pin.element.title }}

  {% endfor %}

```

---

Brought to you by [Good Work](https://simplygoodwork.com). Happy Pinning!

###  Health Score

47

—

FairBetter than 94% of packages

Maintenance42

Moderate activity, may be stable

Popularity38

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity75

Established project with proven stability

 Bus Factor1

Top contributor holds 60% 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 ~147 days

Recently: every ~240 days

Total

12

Last Release

397d ago

Major Versions

2.0.6 → 3.0.0-beta.12022-05-19

2.0.7 → 5.0.0-beta.12024-02-28

PHP version history (2 changes)3.0.0-beta.1PHP ^8.0.2

5.0.0-beta.1PHP ^8.2.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/ae6fa70dc9197a727ce3fbcc38b20e474279e437b5de9145dbb672857796578d?d=identicon)[simplygoodwork](/maintainers/simplygoodwork)

---

Top Contributors

[![chasegiunta](https://avatars.githubusercontent.com/u/1377169?v=4)](https://github.com/chasegiunta "chasegiunta (42 commits)")[![andrewmenich](https://avatars.githubusercontent.com/u/29585821?v=4)](https://github.com/andrewmenich "andrewmenich (12 commits)")[![chrisrowe](https://avatars.githubusercontent.com/u/220456?v=4)](https://github.com/chrisrowe "chrisrowe (7 commits)")[![zsavajji](https://avatars.githubusercontent.com/u/6460348?v=4)](https://github.com/zsavajji "zsavajji (3 commits)")[![kristoffeys](https://avatars.githubusercontent.com/u/2085632?v=4)](https://github.com/kristoffeys "kristoffeys (2 commits)")[![garrettwinder](https://avatars.githubusercontent.com/u/200029?v=4)](https://github.com/garrettwinder "garrettwinder (2 commits)")[![gavinplatt](https://avatars.githubusercontent.com/u/3943921?v=4)](https://github.com/gavinplatt "gavinplatt (1 commits)")[![robinsm](https://avatars.githubusercontent.com/u/4096355?v=4)](https://github.com/robinsm "robinsm (1 commits)")

---

Tags

craft-cms-fieldtypecraft-plugincraftcmscraftcms-plugindeveloper-toolscmsCraftcraftcmscraft-plugindonkeytailcraft-donkeytail

### Embed Badge

![Health badge](/badges/simplygoodwork-craft-donkeytail/health.svg)

```
[![Health](https://phpackages.com/badges/simplygoodwork-craft-donkeytail/health.svg)](https://phpackages.com/packages/simplygoodwork-craft-donkeytail)
```

###  Alternatives

[nystudio107/craft-seomatic

SEOmatic facilitates modern SEO best practices &amp; implementation for Craft CMS 5. It is a turnkey SEO system that is comprehensive, powerful, and flexible.

1741.4M46](/packages/nystudio107-craft-seomatic)[verbb/image-resizer

Resize assets when they are uploaded.

127269.1k7](/packages/verbb-image-resizer)[verbb/tablemaker

Create customizable and user-defined table fields.

40168.8k1](/packages/verbb-tablemaker)[wrav/oembed

A simple plugin to extract media information from websites, like youtube videos, twitter statuses or blog articles.

36205.0k3](/packages/wrav-oembed)[verbb/hyper

A user-friendly links field for Craft.

24130.9k9](/packages/verbb-hyper)[verbb/social-poster

Automatically post entries to social media.

918.5k](/packages/verbb-social-poster)

PHPackages © 2026

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