PHPackages                             imonroe/crps - 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. [Database &amp; ORM](/categories/database)
4. /
5. imonroe/crps

AbandonedLibrary[Database &amp; ORM](/categories/database)

imonroe/crps
============

Cold Reader Persistent Storage system

1.3.1(8y ago)0721GPL-3.0-or-laterPHPPHP ~5.6|~7.0

Since Jul 20Pushed 8y ago1 watchersCompare

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

READMEChangelog (1)Dependencies (9)Versions (12)Used By (1)

crps
====

[](#crps)

CRPS is the Coldreader Persistent Storage system. On its own, you may not find it very useful; it doesn't have any front-end information in it at all. For a working, real-world implementation, please [install the full Coldreader project.](https://github.com/imonroe/coldreader)

CRPS is designed to be a databasing system for when you don't know in advance what kind of information you want to store. It implments a data model where you have a bunch of arbitrary subjects, each of which has an arbitrary number of Aspects.

Aspects can be thought of as some kind of fact or content that is relevant to its Subject. Aspect data is stored in the database as text, in the broad sense. JSON counts as text, for instance, as do hyperlinks, markup, etc. In addition to storing data, Aspects can be purely functional--a call to an external API, a web scraper to grab a bit of content from elsewhere, and so forth. Each type of Aspect has a display method that produces the markup for use in templates. Additionally, each type of Aspect also has a parse() function which can be called automatically by scheduled jobs. From this function, an Aspect may perform actions on the data model; fetching new data from an external source, updating its own value, or creating/updating other Subjects or Aspects.

New Aspect Types are easy and quick to build. Upon creation, the new Aspect Type will automatically add new boilerplate code for the necessary GUI forms (via the Laravel Collective Form API) and override methods; an Aspect Type definition is an OOP child class of the parent Aspect Type and inherits its methods. Custom Aspect Types can also be child classes of other custom Aspect Types, so if you build an APIResultsAspect class, you can make a FacebookAPIResultsAspect class that inherits the work you've already done for APIResultsAspect, for instance.

Dependencies
------------

[](#dependencies)

- Laravel 5.4+
- laravelcollective/html 5.4+
- spatie/laravel-medialibrary 6+
- league/commonmark 0.16+
- imonroe/mimeutils 0.1+

Install
-------

[](#install)

Via Composer

```
$ composer require imonroe/crps
```

Usage
-----

[](#usage)

```
$subject = new Subject;
foreach ($subject->aspects() as $aspect){
	$aspect->display_aspect();
}
```

Change log
----------

[](#change-log)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Testing
-------

[](#testing)

```
$ composer test
```

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) and [CONDUCT](CONDUCT.md) for details.

Security
--------

[](#security)

If you discover any security related issues, please email  instead of using the issue tracker.

Credits
-------

[](#credits)

- \[Ian Monroe\]\[link-author\]
- \[All Contributors\]\[link-contributors\]

License
-------

[](#license)

GPL V3. Please see [License File](LICENSE.md) for more information.

###  Health Score

28

—

LowBetter than 51% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity65

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

Recently: every ~68 days

Total

10

Last Release

2983d ago

### Community

Maintainers

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

---

Top Contributors

[![imonroe](https://avatars.githubusercontent.com/u/1263892?v=4)](https://github.com/imonroe "imonroe (141 commits)")

---

Tags

imonroecrps

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/imonroe-crps/health.svg)

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

###  Alternatives

[backpack/crud

Quickly build admin interfaces using Laravel, Bootstrap and JavaScript.

3.4k3.8M228](/packages/backpack-crud)[leantime/leantime

Open source project management system for non-project managers. Simple like Trello, powerful like Jira. Built with neurodiversity in mind.

11.3k4.0k](/packages/leantime-leantime)[code16/sharp

Laravel Content Management Framework

79466.1k10](/packages/code16-sharp)[illuminate/mail

The Illuminate Mail package.

5910.7M572](/packages/illuminate-mail)[api-platform/laravel

API Platform support for Laravel

58190.1k21](/packages/api-platform-laravel)[dcat-plus/laravel-admin

dcat-plus admin

1494.6k10](/packages/dcat-plus-laravel-admin)

PHPackages © 2026

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