Jumpstarter

Легковесный PHP-фреймворк, разработанный для создания высокопроизводительных веб-приложений. Архитектура основана на принципах минимализма, прозрачности кода и отсутствия внешних зависимостей по умолчанию.

от 54 900 ₽ / год

ПО для ЭВМ "Jumpstarter" зарегистрировано Федеральной службой по интеллектуальной собственности. Свидетельство о регистрации №2022680506.
Jumpstarter by DevStarter
Производительность
Безопасность
Zero-Dependency

Код должен быть понятен разработчику с первого прочтения. Каждая абстракция должна иметь явную цель. Безопасность не должна быть опцией.

Требования к окружению

КомпонентВерсияПримечание
PHP7.4+Рекомендуем 8.4+
Веб-серверApache 2.4+ / NginxТребуется mod_rewrite для Apache
База данныхЛюбая с поддержкой PDOMySQL, PostgreSQL, SQLite, SQL Server, Oracle
Расширения PHPpdo, mbstring, json, curl, opensslОбязательные
Опциональноimagick или gdДля обработки изображений
Рекомендуемая конфигурация php.ini
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 32M
post_max_size = 32M
session.cookie_httponly = 1
session.cookie_secure = 1
session.use_strict_mode = 1

Архитектура системы

Веб-запрос
   ↓
index.php (Entry Point)
   ↓
Router (Парсинг URL, Валидация)
   ↓
Controller (Бизнес-логика, Модели)
   ↓
View (HTML, Локализация)
КлассНазначение
RouterМаршрутизация запросов
DBNАбстракция работы с БД
DB_CacheФайловое кэширование
StorageСессии, куки, JSON-конфиги
AppБазовая логика, права, поиск
UtilitesEmail, геокодер, captcha, UUID
FormattingДаты, деньги, телефоны, JSON
LangsСистема локализации
ImagesОбработка изображений

Установка и настройка

  1. Скопируйте файлы в корень сайта: cp -r Jumpstarter/* /var/www/your-site/
  2. Настройте права: chmod -R 775 upload/ application/data/
  3. Отредактируйте application/config.php и application/data/db.json
Конфигурация БД (application/data/db.json)
{
  "driver": "mysql",
  "host": "localhost:3306",
  "database": "your_database",
  "username": "your_username",
  "password": "your_password",
  "charset": "utf8mb4",
  "collation": "utf8mb4_general_ci",
  "prefix": "",
  "cachedir": "/var/www/your-site/application/data/cache"
}

Ядро фреймворка

Точка входа: index.php
<?php
require_once dirname(__FILE__) . '/application/protection.php';
require_once dirname(__FILE__) . '/application/config.php';

$router = new Router($_SERVER['REQUEST_URI']);
$controller = ucfirst($router->getController()) . 'Controller';
$method = $router->getMethodPrefix() . $router->getAction();

// Выполнение и передача данных в шаблон
$results = Storage::get_default((new $controller())->$method());
require_once $results['templates'] . DS . $router->getController() . DS . $method . '.php';
Автозагрузка классов
spl_autoload_register(function ($class_name) {
  $systemPrefixes = ['Imagick', 'PDO', 'Composer'];
  foreach ($systemPrefixes as $p) if (strpos($class_name, $p) === 0) return;
  
  $is_controller = preg_match('/Controller$/', $class_name);
  $path = $is_controller 
    ? CONTROLLERS . DS . preg_replace('/controller$/', '.', strtolower($class_name)) . 'controller.php'
    : MODELS . DS . ucfirst($class_name) . '.php';
    
  if (file_exists($path)) require_once($path);
  elseif ($is_controller) Router::set_code(404);
});

Работа с базой данных

Класс DBN: Fluent-интерфейс
$article = Db::connect('articles')->where(['id' => 123])->get();

$articles = Db::connect('articles')
  ->select(['id', 'title', 'publication_date'])
  ->where(['status' => 1])
  ->orderBy('publication_date', 'DESC')
  ->limit(20)->offset(0)->getAll();

$id = Db::connect('articles')->insert(['title' => 'Новая статья', 'sef' => 'novaya', 'status' => 1]);

Db::connect('articles')->where(['id' => $id])->update(['views' => $article->views + 1]);
Кэширование запросов
$articles = Db::connect('articles')
  ->cache(3600) // Файловый кэш на 1 час
  ->where(['status' => 1])->getAll();
Транзакции
$db = Db::connect('orders');
try {
  $db->transaction();
  $order_id = $db->insert(['user_id' => 123, 'status' => 'new']);
  // ... вставка позиций
  $db->commit();
} catch (Exception $e) { $db->rollBack(); }

Система маршрутизации

Формат: /{route}/{controller}/{action}/{sef}?{params}

ПрефиксШаблонНазначение
(пустой)defaultПубличная часть
admin_adminПанель управления
cabinet_cabinetЛичный кабинет
api_defaultAPI-эндпоинты
$router = new Router($url);
echo $router->getRoute();          // 'default' | 'admin' | ...
echo $router->getMethodPrefix();   // '' | 'admin_' | ...
echo $router->getController();     // 'articles' | ...
echo $router->getAction();         // 'index' | ...
echo $router->getSef();            // SEO-параметр

Безопасность

Файл application/protection.php устанавливает промышленные заголовки:

header("Content-Security-Policy: default-src 'none'; script-src 'self' 'nonce-$nonce'; ...");
header("Strict-Transport-Security: max-age=31536000; includeSubDomains; preload");
header("X-Frame-Options: SAMEORIGIN");
header("Permissions-Policy: geolocation=(), microphone=(), camera=()");
header("Cross-Origin-Opener-Policy: same-origin");
Проверка доступа
App::check_auth(); // Редирект на логин если не авторизован
if (App::check_permission('articles') !== 200) Router::set_code(403);
Rate Limiting & Форма
if (!App::checkRateLimit()) Router::set_code(429);
if (!App::validateFormSubmission()) Router::set_code(403); // Honeypot + CSRF + поведение + время

Шаблонизация и представление

Структура
views/
├── default/  (public)
├── cabinet/  (user)
└── admin/    (panel)
    └── templates/{controller}/{action}.php
Передача данных
// Controller
return ['articles' => $articles, 'seo' => [...]];

// View
<?php foreach ($results['articles'] as $a): ?>
  <h2><?= htmlspecialchars($a->title) ?></h2>
<?php endforeach; ?>
Локализация
echo Langs::get('titles', 'Articles'); // → "Статьи"
// Авто-создание недостающих ключей в application/data/lang/{ru,en}.json

Система расширений

application/extensions/telegram/
├── info.json
├── readme.md
├── img/logo.webp
└── snippets/
    ├── config.php
    └── auth.php
info.json
{
  "name": "telegram",
  "title": "Telegram Integration",
  "version": "1.0.0",
  "config_fields": [
    {"name": "bot_token", "type": "text", "label": "Bot Token"}
  ]
}
if (Storage::json('check', CONF, 'telegram')) {
  $config = Storage::json('get', CONF, 'telegram');
}

Утилиты и вспомогательные классы

Utilites
Utilites::transmitter([...], 'template', 'self');
$coords = Utilites::geocoder('Москва, Красная площадь, 1');
$uuid = Utilites::uuid4();
$sri  = Utilites::getSriHash('https://cdn.example.com/script.js');
Formatting
Formatting::phone('+79991234567', 'mobile');  // +7 (999) 123-45-67
Formatting::money(1234.56, 2, 'ru_RU', 'RUR'); // 1 234,56 ₽
Formatting::json(['status' => 'ok'], 200);     // JSON-ответ с заголовками

API-референс

Глобальные константы

DS, ROOT, CONF, MODELS, CONTROLLERS, SITE_URL, DEFAULT_LANG

Функции-хелперы
checkAndSetCookie($name, $value);
csrf_token();
Db::connect('articles'); // Алиас для new DBN()
Сервисные операции с БД
Db::service('articles', 'optimize');
Db::service('articles', 'check');
Db::service('articles', 'repair');

Разработка модулей

class YourmoduleController {
  public function public_index() { return ['items' => Db::connect('your_table')->getAll()]; }
  public function admin_index() { App::check_auth(); return ['items' => Db::connect('your_table')->getAll()]; }
}

class Yourmodule {
  public static function add($data) {
    $id = Db::connect('your_table')->insert($data);
    Log::set(User::get_data()['id'], 'Added item', 'yourmodule', 'add', $id);
    return Router::get_code(201);
  }
}

INSERT INTO controllers (name, title, type, access, display, status, lang_code) 
VALUES ('yourmodule', 'Ваш модуль', 1, '[1,2]', 1, 1, 'ru');

Оптимизация и производительность

  • Файловый кэш: Db::connect('t')->cache(3600)->getAll()
  • Статика: Cache-Control в .htaccess (30 дней для изображений, 7 дней для CSS/JS)
  • Запросы: выбирайте только нужные поля, используйте LIMIT, кэшируйте тяжёлые выборки
Профилирование
echo Db::connect()->queryCount();
echo Db::connect()->getQuery();

Логирование и отладка

Log::set($user_id, 'Added article', 'articles', 'add', $item_id);
Log::createError('Описание ошибки');
Log::createWarning('Предупреждение');
Log::createSuccess('Успешное действие');

Файлы логов хранятся в /upload/errors/ и /logs/errors/. Обработчик исключений в config.php выводит детали только для доверенных IP.

Миграция и обновление

  1. Резервная копия: tar -czf backup_$(date +%Y%m%d).tar.gz /var/www/your-site/
  2. Обновление ядра: rsync -av --exclude='application/' --exclude='upload/' new/ old/
  3. Проверка совместимости конфигов, тестирование на стейджинге

Клиенты и партнеры

Свидетельства и сертификаты

Популярные вопросы

Jumpstarter — это легковесный PHP-фреймворк для создания веб-приложений и интернет-магазинов. Его ключевые особенности: нулевые зависимости по умолчанию (не требует composer install), промышленный уровень безопасности «из коробки» (CSP, CSRF, HSTS, CORS), прозрачный код без «магии» и скрытых абстракций, а также линейная масштабируемость — от лендинга до маркетплейса. Фреймворк работает на любом хостинге с поддержкой PHP 7.4+ и PDO.

Jumpstarter подходит для:
  • Фрилансеров — быстрый старт проектов, лёгкая передача кода заказчику;
  • Стартапов — низкие затраты на инфраструктуру, масштабируемость по мере роста;
  • Корпораций — полный аудит кода, интеграция с внутренними системами;
  • Госпроектов — соответствие требованиям по безопасности и импортозамещению;
  • Образовательных проектов — прозрачная архитектура идеальна для обучения.

В основе фреймворка:
  • PHP 7.4+ (протестировано на 8.4, совместимо с 8.5);
  • PDO — единый интерфейс для работы с БД;
  • MVC-паттерн — чёткое разделение логики, данных и представления;
  • Нативный PHP — без сложных контейнеров и рефлексии;
  • Опционально: Composer — можно подключить сторонние пакеты при необходимости, но ядро работает без них.
Поддерживаемые СУБД: MySQL, PostgreSQL, SQLite, SQL Server, Oracle.

Ключевые возможности:
  • Fluent DB-слой (DBN) — читаемый цепочечный синтаксис для запросов;
  • Файловое кэширование — не требует Redis/Memcached для старта;
  • Мульти-шаблонность — один проект → три интерфейса (публичный, кабинет, админка);
  • Встроенная безопасность — CSP с nonce, CSRF-токены, WAF-правила, rate-limiting;
  • Система расширений — модули для 1C, платежей, Telegram, Yandex и др.;
  • i18n из коробки — JSON-локализация с авто-добавлением недостающих ключей;
  • Утилиты — форматирование дат/денег/телефонов, геокодер, загрузка файлов, генерация UUID/SRI.

Быстрый старт за 4 шага:
  1. Скопируйте файлы фреймворка в корень сайта;
  2. Настройте application/config.php (базовый URL, язык по умолчанию);
  3. Отредактируйте application/data/db.json (параметры подключения к БД);
  4. Убедитесь, что директории upload/, application/data/ доступны для записи.
Готово — фреймворк работает «из коробки», без composer install и миграций.

Нет. При самостоятельном хостинге регистрация не требуется — вы скачиваете фреймворк и разворачиваете его на своём сервере. Если вы используете коммерческую лицензию или облачный сервис на базе Jumpstarter, условия доступа определяются соответствующим договором.

Jumpstarter распространяется под проприетарной / коммерческой лицензией. Базовая версия доступна для оценки и разработки. Для получения актуальной информации о тарифах, условиях лицензирования и корпоративных предложениях обратитесь по адресу support@devstarter.ru или посетите официальный сайт.

Ресурсы для разработчиков:
  • Техническая документация — полная спецификация ядра, API, примеры кода;
  • GitBook — интерактивное руководство с поиском и навигацией;
  • GitHub — исходный код, баг-трекер, обсуждения;
  • Официальный сайт — новости, кейсы, контакты;
  • Почта поддержкиsupport@devstarter.ru.

Да. Доступны:
  • Техподдержка — консультации по установке, настройке и отладке;
  • Документация — пошаговые гайды, API-референс, чеклисты безопасности;
  • Примеры кода — готовые модули (статьи, товары, заказы) для изучения архитектуры;
  • Индивидуальное обучение — для корпоративных клиентов (по запросу).
Все запросы направляйте на support@devstarter.ru.

Да, через систему расширений. В комплекте уже есть модули для:
  • Платёжных систем (Альфа-Банк, Тинькофф);
  • Сервисов уведомлений (Telegram, SMS Aero, SendPulse, Unisender);
  • Гео-сервисов (DaData, Яндекс.Карты);
  • Аналитики (Яндекс.Метрика, Uptime);
  • Учётных систем (1C);
  • Социальных сетей (VK, Yandex).
Вы также можете создать собственный модуль: достаточно добавить директорию в application/extensions/ и реализовать логику в snippets/*.php.

Да, полностью. Поскольку весь код написан на чистом PHP без скрытых абстракций, вы можете:
  • Модифицировать ядро под специфические задачи;
  • Создавать собственные контроллеры, модели и шаблоны;
  • Добавлять расширения без изменения базовой архитектуры;
  • Настраивать маршрутизацию, права доступа, локализацию;
  • Подключать сторонние Composer-пакеты при необходимости.
Архитектура линейно масштабируется — от простого лендинга до сложного маркетплейса.

Технических ограничений нет. Производительность зависит от конфигурации сервера, а не от фреймворка:
  • Jumpstarter успешно работает на минимальных конфигурациях (Raspberry Pi, shared hosting);
  • В тестах обрабатывал 1 000 000+ посетителей/день без балансировщиков и Redis;
  • Файловое кэширование БД и оптимизированный роутинг обеспечивают низкий оверхед;
  • Мульти-шаблонность позволяет запускать несколько интерфейсов в одном проекте.
Масштабируйте горизонтально (добавляя серверы) или вертикально (увеличивая ресурсы) по мере роста нагрузки.
Остались вопросы?
Будем рады пообщаться с вами и ответить на любые ваши вопросы
Напишите нам!
DevStarter Technology Products

Задайте вопрос или запросите демо

Оставьте свои контактные данные, и наши специалисты свяжутся с вами в ближайшее время