PHPackages                             bigins/imanager - 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. [Framework](/categories/framework)
4. /
5. bigins/imanager

ActiveLibrary[Framework](/categories/framework)

bigins/imanager
===============

iManager — embeddable SQLite-backed CMF (Content Management Framework) for PHP.

2.2.1(3w ago)048↓50%1MITPHPPHP ^8.2CI passing

Since May 13Pushed 1w agoCompare

[ Source](https://github.com/bigin/imanager)[ Packagist](https://packagist.org/packages/bigins/imanager)[ Docs](https://github.com/bigin/imanager)[ RSS](/packages/bigins-imanager/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (13)Versions (17)Used By (1)

iManager
========

[](#imanager)

> Embeddable, SQLite-backed Content Management Framework for PHP.

[![CI](https://github.com/bigin/imanager/actions/workflows/ci.yml/badge.svg)](https://github.com/bigin/imanager/actions/workflows/ci.yml)

iManager is a small CMS **framework**, not a CMS application: you embed it inside your own PHP app and get a typed domain model, a Repository layer over SQLite (JSON columns + FTS5), a Field-Type plugin system, file storage with on-demand thumbnails, and a CLI for schema and migration ops. Use it under any PHP front-end you like: a hand-rolled admin tool, a flat-file CMS, an internal API, a static-site generator that needs a typed content store. iManager has no opinion about how your application is shaped.

---

Status
------

[](#status)

**Stable**. Current line **2.2.x** (latest: 2.2.1, 2026-05-17).

The 1.x line (flat-file, `var_export`-based, embedded library shape) stays available for legacy installs; see the [migration guide](docs/migration-guide.md) for the upgrade path.

---

Quickstart
----------

[](#quickstart)

Install via Composer:

```
composer require bigins/imanager:^2.0
```

Boot the full standard service graph with `DefaultBootstrap::boot()`and start using the repositories:

```
require __DIR__ . '/vendor/autoload.php';

use Imanager\DefaultBootstrap;
use Imanager\Domain\Category;
use Imanager\Domain\Field;
use Imanager\Domain\Item;
use Imanager\Enum\FieldType;
use Imanager\Storage\CategoryRepository;
use Imanager\Storage\FieldRepository;
use Imanager\Storage\ItemRepository;

$container = DefaultBootstrap::boot(
    databasePath: __DIR__ . '/data/imanager.db',
    uploadsPath:  __DIR__ . '/data/uploads',
    uploadsUrl:   '/uploads',
    cachePath:    __DIR__ . '/data/cache',
);

$categories = $container->get(CategoryRepository::class);
$fields     = $container->get(FieldRepository::class);
$items      = $container->get(ItemRepository::class);

// Schema setup: ensure() is idempotent (insert-on-miss, return-on-hit),
// so this block is safe to run on every boot.
$blog = $categories->ensure(new Category(null, 'Blog', 'blog'));
$fields->ensure(new Field(null, $blog->id, 'title', 'Title', FieldType::Text));
$fields->ensure(new Field(null, $blog->id, 'body',  'Body',  FieldType::LongText));

// Persist an item.
$items->save(new Item(
    null,
    $blog->id,
    'hello-world',     // name:  URL-friendly identifier
    'Hello, world',    // label: human-readable title
    data: ['title' => 'Hello, world', 'body' => 'First post.'],
));

// Read back.
foreach ($items->findByCategory($blog->id) as $item) {
    echo $item->label . "\n";   // → Hello, world
}
```

`DefaultBootstrap` runs the SQLite schema migrations on first use, so the database file is created and populated automatically. The three filesystem roots — `dirname($databasePath)`, `$uploadsPath`, `$cachePath` — are created on first boot if missing, so the snippet runs against a fresh project as-is. Subsequent `composer update` runs pick up new migrations the same way.

Need a leaner container or want to swap PDO / FileStorage / the event dispatcher? Use `Imanager\Bootstrap::boot()` instead and wire the parts you want. `DefaultBootstrap` is just a copy-paste-saver on top of it.

---

Concepts
--------

[](#concepts)

iManager models content as four primitives:

- **Category**: a kind of thing (e.g. *Blog*, *Page*, *User*). Each category has its own field schema and its own slug.
- **Field**: a typed column on a category. The built-in field types are: `text`, `longtext`, `editor`, `slug`, `password`, `integer`, `decimal`, `money`, `checkbox`, `dropdown`, `datepicker`, `hidden`, `array`, `fileupload`, `imageupload`, `filepicker`. Custom types register via the `FieldTypePlugin` interface.
- **Item**: an instance of a category. Field values live in a typed `FieldValueBag` exposed as `$item->data`; hot fields are also promoted to SQLite generated columns for indexable queries.
- **File**: a binary asset (upload). Files are stored under `///` (the `uploadsPath` you pass to `DefaultBootstrap::boot()`), with on-demand thumbnails for image uploads under `thumbnail/x_`.

Domain mutations (`*Created` / `*Updated` / `*Deleted` events) are published through a PSR-14 dispatcher so host applications can hook into them (cache invalidation, file cleanup, etc.) without monkey- patching the storage layer.

---

CLI
---

[](#cli)

iManager ships a Symfony-Console CLI at `vendor/bin/imanager` for operational tasks. The same commands run inside the Docker dev container (`docker compose run --rm imanager vendor/bin/imanager …`).

CommandWhat it does`schema:status`Show applied + pending schema migrations.`schema:migrate`Apply pending migrations.`migrate:from-v1`One-shot import of a 1.x `data/datasets/buffers/` tree. Supports `--dry-run`.`fts:rebuild`Drop &amp; rebuild the FTS5 index from `items`.`optimize``PRAGMA optimize`. Add `--vacuum` to also run `VACUUM`.`repair`Integrity checks (orphan items, broken FKs, FTS sync).`dump`Portable SQL dump.---

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

[](#requirements)

- PHP **8.2+**
- Extensions: `pdo_sqlite`, `mbstring`, `gd`, `dom`, `json`
- Composer 2

---

Development
-----------

[](#development)

The repo ships with a Docker-based dev environment (PHP 8.3 CLI + SQLite + Composer). You don't need anything else on your host machine.

```
docker compose build
docker compose run --rm imanager composer install
docker compose run --rm imanager composer ci
```

Available composer scripts:

ScriptDescription`composer test`Run PHPUnit.`composer lint`Run PHP-CS-Fixer in dry-run.`composer format`Auto-format with PHP-CS-Fixer.`composer stan`Static analysis (PHPStan, level 8).`composer psalm`Static analysis (Psalm, level 3).`composer ci`Full pipeline (lint + stan + psalm + test).---

Docs
----

[](#docs)

- **Tutorial**: [`docs/tutorial/`](docs/tutorial/), task-oriented walkthroughs for newcomers (setup, schema design, validation, …). Start here if you just installed the package and want a guided path past the Quickstart.
- **API reference**: [`docs/api/`](docs/api/), index plus core detail pages for Domain, Storage, Query, and Field types.
- **Field-types cookbook**: [`docs/field-types.md`](docs/field-types.md), how-to companion to the Field-types reference.
- **Query cookbook**: [`docs/query-cookbook.md`](docs/query-cookbook.md), predicate recipes, pagination, selector strings, full-text-search hand-off, performance.
- **Deployment guide**: [`docs/deployment.md`](docs/deployment.md), host requirements, webserver + PHP-FPM configs, a production Dockerfile, SQLite at runtime, backups, scheduled maintenance.
- **Migration guide** (1.x → 2.0): [`docs/migration-guide.md`](docs/migration-guide.md).
- **Changelog**: [`CHANGELOG.md`](CHANGELOG.md).

---

License
-------

[](#license)

[MIT](LICENSE) — © bigin / Juri Ehret

###  Health Score

45

—

FairBetter than 91% of packages

Maintenance97

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

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

Total

6

Last Release

23d ago

### Community

Maintainers

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

---

Top Contributors

[![bigin](https://avatars.githubusercontent.com/u/4314064?v=4)](https://github.com/bigin "bigin (75 commits)")

---

Tags

cmfcmsevent-drivenframeworkfts5libraryphppsr-14repository-patternsqlitephpframeworksqlitepsr-14cmsrepository patterncmffts5

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan, Psalm

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/bigins-imanager/health.svg)

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

###  Alternatives

[laravel/framework

The Laravel Framework.

34.7k532.1M19.2k](/packages/laravel-framework)[shopware/platform

The Shopware e-commerce core

3.4k1.5M3](/packages/shopware-platform)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.4M506](/packages/shopware-core)[symfony/symfony

The Symfony PHP framework

31.4k86.9M2.2k](/packages/symfony-symfony)[cakephp/cakephp

The CakePHP framework

8.8k19.1M1.7k](/packages/cakephp-cakephp)[typo3/cms

TYPO3 CMS is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.

1.2k1.9M122](/packages/typo3-cms)

PHPackages © 2026

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