PHPackages                             sitegeist/archaeopteryx - 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. sitegeist/archaeopteryx

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

sitegeist/archaeopteryx
=======================

The missing link editor for Neos

2.0.1(11mo ago)2580.1k↓10.1%19[7 issues](https://github.com/sitegeist/Sitegeist.Archaeopteryx/issues)[4 PRs](https://github.com/sitegeist/Sitegeist.Archaeopteryx/pulls)3MITTypeScriptCI passing

Since May 17Pushed 5mo ago4 watchersCompare

[ Source](https://github.com/sitegeist/Sitegeist.Archaeopteryx)[ Packagist](https://packagist.org/packages/sitegeist/archaeopteryx)[ RSS](/packages/sitegeist-archaeopteryx/feed)WikiDiscussions 1.0 Synced 1mo ago

READMEChangelog (10)Dependencies (6)Versions (44)Used By (3)

Sitegeist.Archaeopteryx
=======================

[](#sitegeistarchaeopteryx)

> The missing link editor for Neos

 [![](./archaeopteryx.svg)](./archaeopteryx.svg)

 [![](./Docs/Demo.gif)](./Docs/Demo.gif)

Overview
--------

[](#overview)

- [Installation](#installation)
- [Links in Rich Text](#links-in-rich-text)
- [Link in Inspector properties](#link-in-inspector-properties)
- [Link Types](#link-types)
    - [Web](#web)
    - [Document](#document)
    - [Asset](#asset)
    - [Mail To](#mail-to)
    - [Phone Number](#phone-number)
    - [Custom Link](#custom-link)
- [Link Options](#link-options)
- [Disabling Link Type Editors](#disabling-link-type-editors)
    - [RTE Configuration](#rte-configuration)
    - [Inspector Editor Configuration](#inspector-editor-configuration)
- [Contribution](#contribution)
- [LICENSE](#license)

### Authors &amp; Sponsors

[](#authors--sponsors)

- Wilhelm Behncke -
- Martin Ficzel -

*The development and the public-releases of this package was generously sponsored by our customer  and our employer .*

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

[](#installation)

```
composer require sitegeist/archaeopteryx
```

Links in Rich Text
------------------

[](#links-in-rich-text)

 [![](./Docs/RTE toolbar.png)]()

Sitegeist.Archaeopteryx is a drop-in replacement for the default Link Editor that is used for Rich Text in Neos. Once installed, you'll notice that the default editor won't show up anymore if you try to add a link to some piece of text.

Instead, a dialog with a lot more options will open:

 [![](./Docs/Web.png)](./Docs/Web.png)

Sitegeist.Archaeopteryx is fully backwards-compatible. You don't have to worry about links that are already in the system. You can install or uninstall Sitegeist.Archaeopteryx at any point in time while retaining full functionality of all of your links.

Link in Inspector properties
----------------------------

[](#link-in-inspector-properties)

    [![](Docs/Inspector%20-%20empty.png)](Docs/Inspector%20-%20empty.png)   [![](Docs/Inspector%20-%20document.png)](Docs/Inspector%20-%20document.png)     [![](Docs/Inspector%20-%20asset.png)](Docs/Inspector%20-%20asset.png)   Besides the integration with the Rich Text editor toolbar, Sitegeist.Archaeopteryx also provides an Inspector Editor that can be used as a replacement for `Neos.Neos/Inspector/Editors/LinkEditor`.

In case of the Inspector Editor, Sitegeist.Archaeopteryx won't automatically override the default. Instead, you need to configure it as a properties' inspector editor explicitly:

```
'Vendor.Site:MyContent':
  # ...
  properties:
    link:
      type: string
      ui:
        inspector:
          # ...
          editor: 'Sitegeist.Archaeopteryx/Inspector/Editors/LinkEditor'
```

Link Types
----------

[](#link-types)

Sitegeist.Archaeopteryx ships with 6 built-in Link Types.

### Web

[](#web)

 [![](./Docs/Web.png)](./Docs/Web.png)

The `Web` Link Type handles external links, so links that begin with `http://` or `https://`.

### Document

[](#document)

 [![](./Docs/Document.png)](./Docs/Document.png)

The `Document` Link Type handles internal links. The editor offers you a document tree from which you can select documents from within your site. It also offers a search and a node type filter similar to the main document tree in the left side bar of the Neos UI.

The `Document` Link Type can be configured as follows:

**RTE Configuration:**

```
'Vendor.Site:MyAwesomeNodeTypeWithSomeRichText':
  # ...
  properties:
    text:
      type: string
      ui:
        inlineEditable: true
        inline:
          editorOptions:
            # ..
            linking:
              #
              # Sitegeist.Archaeopteryx will consider the
              # startingPoint option in the linking
              # section of the RTE configuration.
              #
              # However, the startingPoint option of the
              # extra key 'Sitegeist.Archaeopteryx' from
              # below takes precedence.
              #
              startingPoint: '/sites/vendor-site/node-2ohiwg6ardhhf'
              'Sitegeist.Archaeopteryx':
                linkTypes:
                  'Sitegeist.Archaeopteryx:Node':
                    startingPoint: '/sites/vendor-site/node-40up2e13w4fd9' # Default: current site node
                    baseNodeType: 'Vendor.Site' # default: Neos.Neos:Document
                    loadingDepth: 8 # default: 4
                    allowedNodeTypes: ['Vendor.Site:Mixin.ReferenceableDocument'] # a list of allowed linkable node types or super types
```

**Inspector Editor Configuration:**

```
'Vendor.Site:MyAwesomeNodeTypeWithALinkProperty':
  # ...
  properties:
    link:
      type: string
      ui:
        inspector:
          # ...
          editor: 'Sitegeist.Archaeopteryx/Inspector/Editors/LinkEditor'
          editorOptions:
            linkTypes:
              'Sitegeist.Archaeopteryx:Node':
                startingPoint: '/sites/vendor-site/node-40up2e13w4fd9' # Default: current site node
                baseNodeType: 'Vendor.Site' # default: Neos.Neos:Document
                loadingDepth: 8 # default: 4
                allowedNodeTypes: ['Vendor.Site:Mixin.ReferenceableDocument',] # a list of allowed linkable node types or super types
```

### Asset

[](#asset)

 [![](./Docs/Asset.png)](./Docs/Asset.png)

The `Asset` Link Type handles links to files from the Media Module. The editor will offer you a media browser from which you can select any asset from within your site.

### Mail To

[](#mail-to)

 [![](./Docs/Mail To.png)]()

The `MailTo` Link Type handles e-mail links, so links that start with `mailto:`. Links with the `mailto:` protocol allow not only to specify a recipient, but also to configure a subject, a message body, carbon copy (CC) recipients and blind carbon copy (BCC) recipients for the outgoing e-mail.

The editor for the `MailTo` Link Type will offer all of those fields. Each field can be deactivated via configuration.

The `MailTo` Link Type can be configured as follows:

**RTE Configuration:**

```
'Vendor.Site:MyAwesomeNodeTypeWithSomeRichText':
  # ...
  properties:
    text:
      type: string
      ui:
        inlineEditable: true
        inline:
          editorOptions:
            # ..
            linking:
              'Sitegeist.Archaeopteryx':
                linkTypes:
                  'Sitegeist.Archaeopteryx:MailTo':
                    enabledFields:
                      subject: true
                      cc: true
                      bcc: true
                      body: true
```

**Inspector Editor Configuration:**

```
'Vendor.Site:MyAwesomeNodeTypeWithALinkProperty':
  # ...
  properties:
    link:
      type: string
      ui:
        inspector:
          # ...
          editor: 'Sitegeist.Archaeopteryx/Inspector/Editors/LinkEditor'
          editorOptions:
            linkTypes:
              'Sitegeist.Archaeopteryx:MailTo':
                enabledFields:
                  subject: true
                  cc: true
                  bcc: true
                  body: true
```

### Phone Number

[](#phone-number)

 [![](./Docs/Phone Number.png)]()

The `PhoneNumber` link type handles phone links, which start with `tel:` and allow to start a call. In the editor one selects the country calling code and add the rest of the phone number via an input field. To make it easier to check the added phone number, it is auto formatted in the preview according to the selected country. Via the the node type configuration you can define a `defaultCountry` and an array of `favoredCountries`. The `defaultCountry` is used to prefill the country calling code for new links. The values from the `favoredCountries` array are used to define a list of preferred countries, which will be placed at the top of the selectable country calling codes in the editor. The used values are ISO 3166-1 alpha-2 ([wikipedia](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)) country codes. Both configuration settings are placed in the `linking` respectively `linkTypes` section of the `editorOptions`:

```
'Vendor.Site:MyAwesomeNodeTypeWithSomeRichText':
  # ...
  properties:
    text:
      type: string
      ui:
        inlineEditable: true
        inline:
          editorOptions:
            # ..
            linking:
              'Sitegeist.Archaeopteryx':
                linkTypes:
                  'Sitegeist.Archaeopteryx:PhoneNumber':
                    defaultCountry: FR
                    favoredCountries:
                      - DE
                      - AT
                      - CH
                      - FR
```

```
'Vendor.Site:MyAwesomeNodeTypeWithALinkProperty':
  # ...
  properties:
    link:
      type: string
      ui:
        inspector:
          # ...
          editor: 'Sitegeist.Archaeopteryx/Inspector/Editors/LinkEditor'
          editorOptions:
            linkTypes:
              'Sitegeist.Archaeopteryx:PhoneNumber':
                defaultCountry: FR
                favoredCountries:
                  - DE
                  - AT
                  - CH
                  - FR
```

### Custom Link

[](#custom-link)

 [![](./Docs/CustomLink.png)](./Docs/CustomLink.png)

The `CustomLink` link type allows the editor to add a link in any format. With this you give the editor an escape hatch if the other link types are insufficient for the desired use case. As any other link type the `CustomLink` can be deactivated via the configuration. If you want to deactivate the `CustomLink` link type globally you can use a preset and a mixin, which is than used as a supertype in all link generating node types:

Define the preset:

```
Neos:
  Neos:
    nodeTypes:
      presets:
        properties:
          myVendor:
            noCustomLinkEditor:
              ui:
                inspector:
                  editor: 'Sitegeist.Archaeopteryx/Inspector/Editors/LinkEditor'
                  editorOptions:
                    linkTypes:
                      'Sitegeist.Archaeopteryx:CustomLink':
                        enabled: false
```

Use the preset in your link property, mixin or node type

```
'MyVendor.Base:Mixin.Link':
  abstract: true
  properties:
    link:
      options:
        preset: 'myVendor.noCustomLinkEditor'
```

Link Options
------------

[](#link-options)

 [![](./Docs/Link Options.png)]()

Sitegeist.Archaeopteryx allows you to set some additional link options. These are:

- **Anchor:** This will add a string to the hash-section of the URL (the part after `#`)
- **Title:** This will set the `title` attribute of the resulting ``-Tag
- **Open in new window:** This will set the `target` attribute of the resulting ``-Tag to `_blank`
- **rel="nofollow":** This will set the `rel` attribute of the resulting ``-Tag to `nofollow`

Based on the context they might not be available. A simple inspector editor (`type: string`) for example cannot encode the "Title" option but only the "Anchor" by appending that to the link. The RTE supports all options and the inspector object `type: Sitegeist\Archaeopteryx\Link` too.

Further, not all Link Types support all of these options. Here's an overview of what Link Type supports which options:

Link TypeSupported Link OptionsWebAnchor, Title, Open in new window, `rel="nofollow"`DocumentAnchor, Title, Open in new window, `rel="nofollow"`AssetTitle, Open in new window, `rel="nofollow"`Mail To- none -Phone Number- none -Custom- none -To enable or disable certain Link Options generally, you can use the `linking` section of your RTE configuration:

```
'Vendor.Site:MyAwesomeNodeTypeWithSomeRichText':
  # ...
  properties:
    text:
      type: string
      ui:
        inlineEditable: true
        inline:
          editorOptions:
            # ..
            linking:
              anchor: true
              title: true
              relNofollow: true
              targetBlank: true
```

Disabling Link Type Editors
---------------------------

[](#disabling-link-type-editors)

It is possible to disable one or more link type editors via the configuration for the inspector as well as for inline editable content elements. To achieve this, you use the `enabled` key for the specific link type editor in the `linkTypes` section. The default for this key is `true`.

### RTE Configuration

[](#rte-configuration)

```
'Vendor.Site:MyAwesomeNodeTypeWithSomeRichText':
  # ...
  properties:
    text:
      type: string
      ui:
        inlineEditable: true
        inline:
          editorOptions:
            # ..
            linking:
              'Sitegeist.Archaeopteryx':
                linkTypes:
                  'Sitegeist.Archaeopteryx:Asset':
                    enabled: true
                  'Sitegeist.Archaeopteryx:MailTo':
                    enabled: true
                  # Document node/pages
                  'Sitegeist.Archaeopteryx:Node':
                    enabled: true
                  'Sitegeist.Archaeopteryx:PhoneNumber':
                    enabled: false
                  # External links
                  'Sitegeist.Archaeopteryx:Web':
                    enabled: true
                  'Sitegeist.Archaeopteryx:CustomLink':
                    enabled: false
```

### Inspector Editor Configuration

[](#inspector-editor-configuration)

Using the basic `string` type:

```
'Vendor.Site:MyAwesomeNodeTypeWithALinkProperty':
  # ...
  properties:
    link:
      type: string
      ui:
        inspector:
          # ...
          editor: 'Sitegeist.Archaeopteryx/Inspector/Editors/LinkEditor'
          editorOptions:
            linkTypes:
              'Sitegeist.Archaeopteryx:Asset':
                enabled: true
              'Sitegeist.Archaeopteryx:MailTo':
                enabled: true
              # Document node/pages
              'Sitegeist.Archaeopteryx:Node':
                enabled: true
              'Sitegeist.Archaeopteryx:PhoneNumber':
                enabled: false
              # External links
              'Sitegeist.Archaeopteryx:Web':
                enabled: true
              'Sitegeist.Archaeopteryx:CustomLink':
                enabled: false
```

Advanced usage with `Sitegeist\Archaeopteryx\Link` value object type:

```
'Vendor.Site:MyAwesomeNodeTypeWithALinkValueObjectProperty':
  # ...
  properties:
    link:
      type: Sitegeist\Archaeopteryx\Link
      ui:
        inspector:
          # ...
          editorOptions:
            # optionally enable link options, which will be encoded into the value object.
            anchor: true
            title: true
            relNofollow: true
            targetBlank: true
```

As the value object can serialize more than just the `href` we can also edit other link related options like `title` and the `target`.

The link value object can be queried as usual. An example rendering would look the following:

```
link = ${q(node).property("link")}
renderer = afx`

        My Text

`

```

Contribution
------------

[](#contribution)

We will gladly accept contributions. Please send us pull requests.

LICENSE
-------

[](#license)

see [LICENSE](./LICENSE)

###  Health Score

51

—

FairBetter than 96% of packages

Maintenance57

Moderate activity, may be stable

Popularity43

Moderate usage in the ecosystem

Community31

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

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 ~59 days

Recently: every ~10 days

Total

29

Last Release

152d ago

Major Versions

1.6.0 → 2.0.02025-05-09

1.6.1 → 2.0.12025-05-28

1.6.3 → 2.0.x-dev2025-12-12

### Community

Maintainers

![](https://www.gravatar.com/avatar/1159e78bff9c03cc5ed626447ca5072097107f58af459a9b8bac8d933ba8298c?d=identicon)[wilhelm.behncke](/maintainers/wilhelm.behncke)

![](https://www.gravatar.com/avatar/51e0a02d8e12b73949ec858638aa7e295e103022cc5a879f86ac8532c2c170bd?d=identicon)[sitegeist](/maintainers/sitegeist)

![](https://www.gravatar.com/avatar/829b4ccb51e8cff3c1e4b59d60cfe8d1b86f6d77fc31a6b3fc99227f432542ca?d=identicon)[mficzel](/maintainers/mficzel)

---

Top Contributors

[![grebaldi](https://avatars.githubusercontent.com/u/2522299?v=4)](https://github.com/grebaldi "grebaldi (100 commits)")[![mhsdesign](https://avatars.githubusercontent.com/u/85400359?v=4)](https://github.com/mhsdesign "mhsdesign (57 commits)")[![andrehoffmann30](https://avatars.githubusercontent.com/u/23524251?v=4)](https://github.com/andrehoffmann30 "andrehoffmann30 (30 commits)")[![mficzel](https://avatars.githubusercontent.com/u/1309380?v=4)](https://github.com/mficzel "mficzel (25 commits)")[![Christian-Pansch](https://avatars.githubusercontent.com/u/227752200?v=4)](https://github.com/Christian-Pansch "Christian-Pansch (10 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (8 commits)")[![nezaniel](https://avatars.githubusercontent.com/u/1687674?v=4)](https://github.com/nezaniel "nezaniel (6 commits)")[![Alvadda](https://avatars.githubusercontent.com/u/58438582?v=4)](https://github.com/Alvadda "Alvadda (5 commits)")[![FahimNsr](https://avatars.githubusercontent.com/u/52664771?v=4)](https://github.com/FahimNsr "FahimNsr (4 commits)")[![rolandschuetz](https://avatars.githubusercontent.com/u/735982?v=4)](https://github.com/rolandschuetz "rolandschuetz (2 commits)")[![gradinarufelix](https://avatars.githubusercontent.com/u/4405087?v=4)](https://github.com/gradinarufelix "gradinarufelix (2 commits)")[![soee](https://avatars.githubusercontent.com/u/1798417?v=4)](https://github.com/soee "soee (1 commits)")[![kdambekalns](https://avatars.githubusercontent.com/u/95873?v=4)](https://github.com/kdambekalns "kdambekalns (1 commits)")[![lorenzulrich](https://avatars.githubusercontent.com/u/1816023?v=4)](https://github.com/lorenzulrich "lorenzulrich (1 commits)")[![markusguenther](https://avatars.githubusercontent.com/u/1014126?v=4)](https://github.com/markusguenther "markusguenther (1 commits)")[![Sebobo](https://avatars.githubusercontent.com/u/596967?v=4)](https://github.com/Sebobo "Sebobo (1 commits)")

---

Tags

neos-uineoscms

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/sitegeist-archaeopteryx/health.svg)

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

###  Alternatives

[sitegeist/monocle

An living-styleguide for Neos that is based on the actual fusion-code

45315.9k10](/packages/sitegeist-monocle)[sitegeist/kaleidoscope

Responsive-images for Neos

29352.4k10](/packages/sitegeist-kaleidoscope)[flowpack/listable

Tiny extension for listing things

35209.0k7](/packages/flowpack-listable)[kaufmanndigital/gdpr-cookieconsent

A ready-to-run package, that integrates an advanced cookie consent banner into your Neos CMS site.

2540.7k](/packages/kaufmanndigital-gdpr-cookieconsent)[neos/seo

SEO configuration and tools for Neos

13990.5k24](/packages/neos-seo)[shel/neos-colorpicker

A plugin for Neos CMS which provides a colorpicker editor

1494.4k6](/packages/shel-neos-colorpicker)

PHPackages © 2026

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