PHPackages                             sciactive/tilmeld-server - 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. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. sciactive/tilmeld-server

AbandonedArchivedLibrary[Authentication &amp; Authorization](/categories/authentication)

sciactive/tilmeld-server
========================

Nymph user and group management with access controls.

1.2.0(5y ago)24301Apache-2.0PHP

Since Nov 10Pushed 3y ago1 watchersCompare

[ Source](https://github.com/sciactive/tilmeld-server)[ Packagist](https://packagist.org/packages/sciactive/tilmeld-server)[ Docs](http://tilmeld.org/)[ RSS](/packages/sciactive-tilmeld-server/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (10)Dependencies (6)Versions (46)Used By (1)

Tilmeld {#mainpage}
===================

[](#tilmeld-mainpage)

Nymph user and group management with access controls.

Deprecation Notice
------------------

[](#deprecation-notice)

The PHP implementation of Nymph/Tilmeld has been deprecated. It will no longer have any new features added. Instead, a new version of Nymph running on Node.js, written entirely in TypeScript will replace the PHP implementation. You can find it over at the [Nymph.js repo](https://github.com/sciactive/nymphjs).

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

[](#installation)

### Automatic Setup

[](#automatic-setup)

The fastest way to start building a Nymph app is with the [Nymph App Template](https://github.com/hperrin/nymph-template).

### Manual Installation

[](#manual-installation)

```
composer require sciactive/tilmeld-server
```

How It Works
------------

[](#how-it-works)

Tilmeld uses Nymph entities to store users and groups. It allows users to register and log in using the Nymph REST endpoint.

Tilmeld methods are available on the `Tilmeld\Tilmeld` class. (They are all static methods.)

### Users

[](#users)

User accounts can be created either in the setup app or by registering through the `register` function in PHP or the `$register` function in JS. There is a TilmeldLogin component in the `tilmeld-components` package that will build you a login/register form. The first user account registered in Tilmeld will be granted admin priveleges with the `system/admin` ability.

Users are available as the `Tilmeld\Entities\User` class.

### Groups

[](#groups)

Groups are available as the `Tilmeld\Entities\Group` class.

#### Primary Groups

[](#primary-groups)

Users can have only one primary group. It becomes the group of any entities they create. By default, Tilmeld will create a new primary group for every user.

#### Secondary Groups

[](#secondary-groups)

Secondary groups are used to grant users additional abilities or give access to entities.

### Access Controls

[](#access-controls)

Tilmeld filters all calls to Nymph to allow users to only see and modify the entities they have access to. When a user creates an entity, their user becomes the `user` property of that entity, and their primary group becomes the `group` property. By default, entites will allow read/write/delete access to their user, read access to their group, and no access to other users.

You can use these constants for access control:

- `Tilmeld::FULL_ACCESS` - Read/Edit/Save/Change AC/Delete access.
- `Tilmeld::WRITE_ACCESS` - Read/Edit/Save access.
- `Tilmeld::READ_ACCESS` - Read access.
- `Tilmeld::NO_ACCESS` - No access.

The following properties are used on entities to control who has access:

- `$entity->user` - The `User` who owns the entity.
- `$entity->group` - The `Group` who owns the entity.
- `$entity->acUser` - What access control level the owner user has. Defaults to `Tilmeld::FULL_ACCESS`.
- `$entity->acGroup` - What access control level the owner group has. Defaults to `Tilmeld::READ_ACCESS`.
- `$entity->acOther` - What access control level everyone else has. Defaults to `Tilmeld::NO_ACCESS`.
- `$entity->acRead` - An array of users/groups who are granted `Tilmeld::READ_ACCESS`.
- `$entity->acWrite` - An array of users/groups who are granted `Tilmeld::WRITE_ACCESS`.
- `$entity->acFull` - An array of users/groups who are granted `Tilmeld::FULL_ACCESS`.

### Abilities

[](#abilities)

Abilities can be granted to users and/or their groups. When you call `gatekeeper`, it will check for the given ability.

The `system/admin` ability is special, and will cause `gatekeeper` to always return true for users with this ability. It will also let the user see, modify, and delete all entities, as if they had `Tilmeld::FULL_ACCESS`.

The `tilmeld/admin` ability allows the user to see the setup app and modify all users/groups except ones with the `system/admin` ability. Changes to a user's email by a Tilmeld admin do not require verification. A Tilmeld admin can't grant `system/admin` to a user or group, but they can assign groups, so don't grant a group the `system/admin` ability.

### Generated Primary Groups

[](#generated-primary-groups)

Tilmeld, by default, is configured to generate a primary group for every new user. When the user is changed, that information is propagated to the group.

API Docs
--------

[](#api-docs)

See the full API docs at

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity76

Established project with proven stability

 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.

###  Release Activity

Cadence

Every ~26 days

Recently: every ~9 days

Total

45

Last Release

1954d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/133c9c4eff1268723fc1be664b5312a40527c6a94bfd40215bf4ff276832738f?d=identicon)[hperrin](/maintainers/hperrin)

---

Top Contributors

[![hperrin](https://avatars.githubusercontent.com/u/195918?v=4)](https://github.com/hperrin "hperrin (140 commits)")

---

Tags

authenticationgroup-managementgroupsnymphnymph-serverphpuser-managementusersaclUser managementgroupsUsersaccess-controluser managergroup managementnymphgroup manager

###  Code Quality

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/sciactive-tilmeld-server/health.svg)

```
[![Health](https://phpackages.com/badges/sciactive-tilmeld-server/health.svg)](https://phpackages.com/packages/sciactive-tilmeld-server)
```

###  Alternatives

[casbin/casbin

a powerful and efficient open-source access control library for php projects.

1.3k1.4M54](/packages/casbin-casbin)[casbin/laravel-authz

An authorization library that supports access control models like ACL, RBAC, ABAC in Laravel.

324339.9k4](/packages/casbin-laravel-authz)[2amigos/yii2-usuario

Highly customizable and extensible user management, authentication, and authorization Yii2 extension

298275.5k14](/packages/2amigos-yii2-usuario)[pktharindu/nova-permissions

Laravel Nova Grouped Permissions (ACL)

136387.1k](/packages/pktharindu-nova-permissions)[silvanite/novatoolpermissions

Laravel Nova Permissions (Roles and Permission based Access Control (ACL))

100256.7k2](/packages/silvanite-novatoolpermissions)[casbin/think-authz

An authorization library that supports access control models like ACL, RBAC, ABAC for ThinkPHP.

27918.5k6](/packages/casbin-think-authz)

PHPackages © 2026

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