https://github.com/maskalix/pressline
PressLine CMS
https://github.com/maskalix/pressline
administration blog cms news php
Last synced: 22 days ago
JSON representation
PressLine CMS
- Host: GitHub
- URL: https://github.com/maskalix/pressline
- Owner: maskalix
- Created: 2026-02-03T18:29:11.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-05-24T17:46:55.000Z (about 1 month ago)
- Last Synced: 2026-05-24T19:18:21.498Z (about 1 month ago)
- Topics: administration, blog, cms, news, php
- Language: PHP
- Homepage: https://pressline.app
- Size: 348 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

# PressLine
A small CMS with a real plugin SDK.
PHP 8 and MySQL 8. Under 5 MB on disk. No JavaScript framework.
[pressline.app](https://pressline.app) ·
[live demo](https://admin.pressline.app) ·
[marketplace](https://marketplace.pressline.app) ·
[docs](https://pressline.app/docs.php)
---
## What it is
PressLine is a self-hosted CMS for people who think WordPress is too big and Ghost is too clever. Articles, media, users, plugins, a marketplace. Nothing else.
- PHP 8, MySQL 8, MIT licensed.
- Hooks and filters in the style of WordPress (`add_action`, `add_filter`).
- A fluent plugin SDK (`PL_Plugin::register(...)`).
- A built-in marketplace client with sha256-verified installs.
- Light, dark, and AMOLED themes.
- CSRF tokens, prepared statements, bcrypt hashes, role-based access.
## Install
```bash
git clone https://github.com/maskalix/PressLine.git
cd PressLine
cp pl-config.example.php pl-config.php
$EDITOR pl-config.php # or export PL_DB_HOST / PL_DB_USER / PL_DB_PASS / PL_DB_NAME
# Open /instalace/ in your browser, then change the default password.
chown -R www-data:www-data plugins
```
Default login: `pressline / pressline`. Change it immediately.
Requirements: PHP 8.0+ with `gd`, `curl`, `zip`, `mysqli`, `mbstring`. MySQL 8.0+ or MariaDB 10.5+. HTTPS for the marketplace client.
## Plugin SDK
A plugin is a folder in `/plugins//` with a `plugin.json` and an entry script.
```php
onArticleSave(function ($article, $id, $action) {
error_log("Article #$id saved: " . ($article['name'] ?? '?'));
})
->addAdminMenuItem('Hello', './plugins/hello-world/page.php', 'ic:round-waving-hand', 2)
->addDashboardCard(function () {
echo '
Hello!
';
});
```
Every entity (`article`, `category`, `media`, `user`, `preference`, `role`, `webset`) fires `beforeSave`, `afterSave`, `beforeInsert`, `afterInsert`, `beforeUpdate`, `afterUpdate`, `beforeDelete`, `afterDelete`. Specials: `media.afterUpload`, `user.afterLogin`, `article.content`, `admin.menu`, `admin.dashboardCards`, `editor.toolbarButtons`.
Migrations live in `/migrations/*.sql` and run on first activation.
## Marketplace
Open **Rozšíření → Marketplace** in the admin. Plugins come from [marketplace.pressline.app](https://marketplace.pressline.app), are downloaded with a sha256 check, extracted atomically, and have their migrations run on install. You can self-host the registry by changing `marketplace_url` in settings.
## Project layout
```
*.php Top-level admin pages
ajax/ XHR endpoints (CSRF-verified)
includes/ Bootstrap, hooks, plugin loader, marketplace, fetcher/setter
plugins/ Drop-in plugin folders
res/ CSS and JS
media/ User uploads (gitignored)
version.php Single source of truth for $version
```
## Security
CSRF token on every POST. Prepared statements everywhere. Bcrypt password hashes. MIME and extension whitelists on uploads. The plugin extractor refuses paths with `..`, leading `/`, or `.git/`. Hard 5 MB compressed / 25 MB extracted limits on plugin packages.
## Contributing
Run `php -l` on changed files. Test on a clean install. Add a `migrations/*.sql` if you touch the schema. Bump `version.php` (semver).
## Licence
[MIT](LICENSE) © 2025–present PressLine contributors.
PressLine is built by [LNLN.eu](https://lnln.eu).
---
## Česky
Malý český CMS s opravdovým plugin SDK. PHP 8, MySQL 8. Pod 5 MB. Bez JavaScriptového frameworku.
[pressline.app](https://pressline.app) ·
[živá ukázka](https://admin.pressline.app) ·
[marketplace](https://marketplace.pressline.app) ·
[dokumentace](https://pressline.app/docs.php)
### Co to je
Self-hostovaný CMS pro lidi, kterým je WordPress velký a Ghost moc chytrý. Články, média, uživatelé, pluginy, marketplace. Nic jiného. MIT licence. Hooky a filtry, plugin SDK, vestavěný marketplace. Light, dark a AMOLED téma. CSRF, prepared statements, bcrypt, role.
### Instalace
```bash
git clone https://github.com/maskalix/PressLine.git
cd PressLine
cp pl-config.example.php pl-config.php
$EDITOR pl-config.php
# Otevři /instalace/ v prohlížeči a hned změň heslo.
chown -R www-data:www-data plugins
```
Výchozí přihlášení: `pressline / pressline`. Hned po instalaci změň.
### Plugin
```php
onArticleSave(function ($article, $id, $action) {
error_log("Článek #$id uložen: " . ($article['name'] ?? '?'));
})
->addAdminMenuItem('Ahoj', './plugins/ahoj-svete/page.php', 'ic:round-waving-hand', 2);
```
Obnov `/rozsireni.php` a klikni na **Aktivovat**.
### Licence
[MIT](LICENSE) © 2025–současnost přispěvatelé PressLine. Vyrobeno v [LNLN.eu](https://lnln.eu).