An open-source PHP framework and CRM that generates its own UI — so you can build business modules by describing them, not by hand-coding views.
Epesi is a module framework with a full CRM built on top of it — a Progressive Web App you install on your own server, then extend. Out of the box you get Contacts, Companies, Calendar, E-mail, Tasks, Phonecalls and a dashboard you can rearrange per user. Because it's a framework underneath, that CRM is also a starting point: add the modules your business actually needs and Epesi grows into a full ERP — inventory, invoicing, project tracking, whatever your domain requires — without you starting from an empty repo.
The core idea: a module author declares what a record looks like — field names,
types, relationships — in a plain PHP array, and the framework (Utils_RecordBrowser)
generates the add/edit/view/browse/search/filter/ACL screens for it automatically. No
HTML, no CSS, no JavaScript to write for the common case — the framework produces a
working, responsive UI from the declaration. See
AI-shared/design-philosophy.md for the reasoning
behind this, straight from the framework's creator.
The UI has been rebuilt on top of AdminLTE/Bootstrap
(adminltedark, now the default theme for new installs) — a modern sidebar layout,
built-in dark mode, and consistent styling across every screen, replacing the
framework's older default theme.
That rebuild included a generic mobile/responsive pass across the whole framework,
not a per-module patch: the same data-grid component every Utils_RecordBrowser/
Utils_GenericBrowser list uses (Contacts, Companies, Login Audit, any module you
build) reflows into a compact two-line-per-row layout below the tablet breakpoint,
non-essential columns (row actions, favorites/watchdog toggles) collapse into a kebab
menu, and the sidebar, search, and filter bars all adapt to portrait/landscape phone
viewports — see the mobile gallery shots above, taken straight from a phone. Because
this lives in the shared grid/theme layer, a module author gets the mobile layout for
free the same way they get the desktop one: by declaring fields, not by writing
responsive CSS. See AI-shared/adminlte-theme.md and
AI-shared/generic-browser-responsive-tables.md
for the implementation history.
- No boilerplate CRUD. Declare a table's fields once and get a full data grid with search, filtering, sorting, CSV export, printing, and ACL for free.
- Batteries included. CRM out of the box (Contacts, Companies, Calendar, Tasks, Phonecalls), plus webmail, Watchdog notifications, Shoutbox chat, and a Telegram integration — all real modules you can read as reference implementations.
- PWA, zero client install. Runs in any modern browser, installable to a home screen, no desktop client to distribute or update.
- Ordinary LAMP stack. PHP 8.0+ (8.2 recommended) + MySQL or PostgreSQL. No build
step —
modules/andtheme*/are served directly, nothing to compile or bundle. - AI-agent ready. This repo is set up to be productively worked on by an AI coding agent from the first clone — see below.
This repository ships pre-trained for AI-assisted development. AI-shared/
is a git-tracked knowledge base — architecture rationale, the module-authoring tutorial,
known bug patterns, deliberate design decisions that look like bugs but aren't — written
specifically so an AI agent (or a new developer) starting from a fresh clone doesn't have
to rediscover the framework's conventions from scratch. Combined with
CLAUDE.md at the repo root, an agent can go from a plain-English feature
request to a working module respecting this codebase's actual conventions, not generic
PHP idioms.
Recommended setup:
- Clone this repo.
- Open it in VS Code.
- Install the Claude Code extension and point it at the checkout.
From there, describe the module you want in plain English. The agent reads
CLAUDE.md and AI-shared/ first, so it already knows the module anatomy
(Install/Common/Main classes), Utils_RecordBrowser field types, the patch system
for upgrading existing installs, and where AdminLTE theming does and doesn't apply.
See it for yourself: modules/Custom/Tutorial/ is a
complete, working module built entirely by Claude, from a plain-English brief, following
AI-shared/Dev-Tutorial.md. It demonstrates every
RecordBrowser field type, a lookup table, and an addon tab in one real example —
read it side by side with the tutorial to see the pattern an agent follows for any new
module.
If you just want to run Epesi:
- Easiest — the Softaculous installer, available via most hosts' cPanel.
- Or download a release directly from SourceForge.
If you want to develop your own modules:
git clone https://github.com/jtylek/epesi.git
cd epesi
composer installRequires a LAMP-style stack — PHP 8.0+ (8.2 recommended) and MySQL or PostgreSQL.
Point your web server's document root at the checkout and open it in a browser to run
the setup wizard. See
CLAUDE.md for the full architecture, local commands (lint, static
analysis, console tooling), and environment notes.
| File | What it's for |
|---|---|
CLAUDE.md |
Architecture, bootstrap chain, module system, commands — read first |
AI-shared/ |
Living notes: feature status, tutorials, bug patterns, environment gotchas |
AI-shared/Dev-Tutorial.md |
How to write a module from scratch, paired with modules/Custom/Tutorial/ |
AI-shared/design-philosophy.md |
The founding principle: business logic in PHP, view generated for you |
AI-shared/MIGRATION_NOTES.md |
PHP 7.4 → 8.2 migration log — root causes and decisions |
- User manual: https://epesi.org/
- Developer tutorial: https://epesi.org/devtutorial
- Bugs and feature requests: open an issue on this repo
- More about the project: https://epe.si/
Epesi is released under the MIT License.
Copyright © 2006-2026 by Janusz Tylek and Karina Tylek








