PHPackages                             transom/craft-behold - 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. transom/craft-behold

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

transom/craft-behold
====================

Behold.so Instagram feed integration for Craft CMS

274PHP

Since Mar 19Pushed 3mo agoCompare

[ Source](https://github.com/transomdesign/craft-behold)[ Packagist](https://packagist.org/packages/transom/craft-behold)[ RSS](/packages/transom-craft-behold/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependenciesVersions (1)Used By (0)

Behold for Craft CMS
====================

[](#behold-for-craft-cms)

Twig integration for [Behold.so](https://behold.so) Instagram feeds. Fetches posts from a Behold feed URL and exposes them via `craft.behold` with built-in Craft cache support.

**Requirements:** Craft CMS 5, PHP 8.2+

---

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

[](#installation)

The plugin is not yet published to Packagist. Install via a local path repository.

**1. Add to your project's `composer.json`:**

```
{
  "repositories": [
    {
      "type": "path",
      "url": "plugins/behold"
    }
  ]
}
```

**2. Require the package:**

```
composer require transom/craft-behold
```

**3. Enable the plugin** in the Craft control panel under Settings → Plugins, or via the CLI:

```
php craft plugin/enable behold
```

---

Usage
-----

[](#usage)

### Fetch posts

[](#fetch-posts)

Pass your Behold feed URL to `craft.behold.all()`. Results are cached for 5 minutes per unique URL.

```
{% set posts = craft.behold.all('https://feeds.behold.so/YOUR_FEED_ID') %}

  {% for post in posts %}

      {% tag 'img' with {
        src: post.sizes.medium.mediaUrl,
        width: post.sizes.medium.width,
        height: post.sizes.medium.height,
        alt: post.altText ?? post.caption,
      } %}{% endtag %}

  {% endfor %}

```

### Clear cache

[](#clear-cache)

```
{% do craft.behold.clearCache('https://feeds.behold.so/YOUR_FEED_ID') %}
```

---

Post object reference
---------------------

[](#post-object-reference)

Each item in the returned array is a `BeholdPost` with the following properties:

PropertyTypeNotes`id``string`Instagram post ID`timestamp``string`ISO 8601 publish date`permalink``string``instagram.com/p/…` link`mediaType``string``IMAGE`, `VIDEO`, or `CAROUSEL_ALBUM``isReel``?bool``true` for Reels; `null` if not present`mediaUrl``string`Original Instagram CDN URL`thumbnailUrl``?string`Video thumbnail (VIDEO posts only)`caption``string`Full caption including hashtags`prunedCaption``string`Caption with hashtags and links stripped`altText``?string`Instagram alt text, if set`hashtags``string[]`Hashtags without the `#``mentions``string[]`Mentioned usernames without the `@``colorPalette``array`See below`children``array`Child posts for `CAROUSEL_ALBUM``sizes``array`Behold-hosted resized images (see below)### `sizes`

[](#sizes)

Four sizes are available: `small`, `medium`, `large`, `full`. Each has:

```
post.sizes.medium.mediaUrl  {# Behold CDN URL #}
post.sizes.medium.width     {# integer #}
post.sizes.medium.height    {# integer #}
```

### `colorPalette`

[](#colorpalette)

Seven keys, each an RGB string (`"R, G, B"`):

```
dominant · muted · mutedLight · mutedDark · vibrant · vibrantLight · vibrantDark

```

```

```

---

References
----------

[](#references)

- [Behold feed setup](https://behold.so/docs/getting-started/)
- [Feed API response format](https://behold.so/docs/feed-api/)
- [v2 migration guide](https://behold.so/docs/v2-feeds-migration-guide/)
- [TypeScript types](https://github.com/BeholdSocial/behold-types/blob/main/index.d.ts)

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance55

Moderate activity, may be stable

Popularity16

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity12

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/8ed8440652314b7925bbf9e9bf342d2152c851bd07990d2b5981214ce4e2cd2b?d=identicon)[transom](/maintainers/transom)

---

Top Contributors

[![lukastransom](https://avatars.githubusercontent.com/u/60360044?v=4)](https://github.com/lukastransom "lukastransom (1 commits)")

### Embed Badge

![Health badge](/badges/transom-craft-behold/health.svg)

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

###  Alternatives

[ek0519/quilljs

A Laravel Nova field.

26136.1k](/packages/ek0519-quilljs)[yannisme/confixtheme

Confix Theme For Flarum

124.5k](/packages/yannisme-confixtheme)

PHPackages © 2026

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