Що нового
Що нового
Детальнішу інформацію про зміни в кожній версії можна знайти на GitHub Releases.
v3.0.0
- 🔑 Новий endpoint входу (breaking): метод JSON-RPC
get_jwtзамінено наPOST /{prefix}/{database}/token, який приймає логін і пароль PostgreSQL як HTTP Basic-автентифікацію — облікові дані більше не передаються в тілі запиту, а зворотний проксі може обмежувати входи за URL.get_jwtна/jsonrpcтепер відповідає 404 /-32601. Міграція:curl -X POST …/token -u login:password. - 📥 Завантаження файлів: новий endpoint
POST /{prefix}/{database}/fileвіддає бінарні файли з функцій PostgreSQL, що повертають набори рядків — один рядок напряму, кілька рядків як потоковий ZIP — з тією самою автентифікацією, перемиканням ролей і обмеженням частоти, що й JSON-RPC.capabilities()повідомляєkind: "file". Застосуйтеsql/schema.sqlповторно (він ідемпотентний), щоб отримати нові поля. - 🧰 Інструменти: новий JWT Signer, що підписує токени локально в браузері з уведеного вручну
JWT_SECRET(без доступу до мережі, секрет ніколи не зберігається), скриншоти та хостовані версії кожного інструмента (explorer.,sse-tester.,jwt-getter.,jwt-signer.pgarachne.com), клікабельні картки й перехресні посилання. Каталоги вtools/перейменовано наexplorer,jwt-getterіsse-tester— оновітьSTATIC_FILES_PATH, якщо ви їх віддаєте. - 🐛 Виправлення та посилення: функція, що повертає SQL
NULL, тепер дає"result": nullзамість HTTP 500; шляхи ZIP у/fileвідхиляють імена, ворожі до Windows, і колізії без урахування регістру; порожні результати відкочуються (rollback). - 📚 Документація та залежності: покроковий Quick Start, сторінка JSON-RPC як чиста довідка, архітектурне рішення «Чому PostgreSQL», поради щодо зворотного проксі для великих завантажень і оновлені модулі Go (оновлення безпеки
golang.org/x/net).
v2.2.0
- 🔑 Необов’язковий JWT:
JWT_SECRETбільше не обов’язковий. Без нього підтримка JWT вимкнена (get_jwtповертає 404 /-32601), а клієнти використовують облікові дані HTTP Basic або API-токени. - 🛡️ Обмеження спроб для всіх методів автентифікації (безпека):
LOGIN_RATE_LIMITтепер охоплює також HTTP Basic і Bearer (JWT/API-токен) на всіх ендпоінтах, а не лишеget_jwt. Раніше паролі можна було підбирати без обмежень черезAuthorization: Basic. - 🔒 Доступ лише на основі привілеїв (breaking):
pgarachne.allowed_schemas()видалено.capabilities()(а отже, MCPtools/listта експорт OpenAPI) показує кожнуjsonb-функцію, яку викликач може виконати і схемою якої може користуватися. ВідкличтеEXECUTE/USAGE, де це небажано; див. сторінку Безпека. - ⚠️ Інші несумісні зміни:
save_idempotency_keyтепер приймає область дії за роллю (повторно застосуйтеsql/schema.sqlперед оновленням бінарного файлу),universal_update/universal_deleteвідхиляють порожні фільтри, якщо не передано"all": true, аuniversal_readуselectприймає лише*або прості імена стовпців (закриває діру SQL-ін’єкції). - 🐛 Виправлення: взаємне блокування SSE під час перепідключення listener, повільні або невдалі входи, що блокували інші запити, відображення аргументів у MCP
prompts/get, некоректний коментар функції, що ламавcapabilities, «falsy»-результати, показані в Explorer як помилки, та XSS у перегляді результатів Explorer. - 📚 Документація: новий
llms-full.txt, картка GitHub Sponsors, підказки до іконок навігації; ця сторінка тепер також містить v2.0.3 та v2.1.0.
v2.1.0
- 📄 Експорт OpenAPI для кожного методу:
generate_openapi_spec()тепер також генерує окремий шлях лише для документації для кожного відкритого методу — для інструментів, які очікують одну операцію на шлях (Swagger UI, Postman, генератори коду). Новий ендпоінтopenapi.yamlповертає ту саму специфікацію у форматі YAML. - 🔒 Автентифікований експорт OpenAPI з фільтрацією за роллю:
/openapi.jsonтепер вимагає такої ж автентифікації, як і/jsonrpc, і показує лише ті методи, які дозволено виконувати ролі викликача — раніше ендпоінт не вимагав автентифікації та показував усі методи будь-кому. - 🔌 Оновлення протоколу MCP: ендпоінт MCP тепер підтримує виключно версію протоколу
2026-07-28; старе узгодженняinitialize/pingбільше не підтримується. Повний опис — уAGENTS.md. - 🐛 Виправлення пулу з’єднань: пули з’єднань прямої автентифікації (Basic Auth) тепер коректно видаляються під час простою — виправлено проблему, через яку звичайна ротація паролів могла врешті-решт заблокувати нові облікові дані.
- 📦 Оновлення залежностей та CI: звичайне оновлення залежностей Go (тепер вимагає Go 1.26) та відповідні оновлення інструментів CI.
v2.0.3
- 🔒 Посилення безпеки: перемикання ролей більше не формує SQL шляхом конкатенації рядків (натомість використовується параметризована функція
set_config()), роздавання статичних файлів тепер розв’язує шляхи черезos.Root, щоб символьне посилання не могло вийти за межі каталогу, що роздається, посилено права доступу до файлів логів/PID, а також посилено перевірку посилань результатів пошуку на сайті документації. - 🚀 Нова сторінка «Швидкий старт» (усіма 10 мовами): швидкий шлях від встановлення до робочого ендпоінта, без повного обхідного шляху через розділи «Встановлення»/«Конфігурація».
- 📄 Виявлюваність
llms.txt: посилання додано на головну сторінку, сторінку MCP, у README та в заголовок кожної сторінки, щоб краулери LLM могли його знайти. - 🐛 Виправлення: перемикач мобільного меню тепер коректно показує робочу кнопку «Головна» на широких екранах, посилання на кастомній сторінці 404 тепер коректно розв’язуються незалежно від глибини URL, а мобільне меню отримало пункт «Головна».
v2.0.2
- 🔒 Посилення безпеки: усунено кілька результатів статичного аналізу — ключі кешу пулу прямої автентифікації тепер використовують HMAC (замість звичайного SHA-256), додано явну перевірку, що файли, які роздаються статично, не можуть вийти за межі налаштованого каталогу, HTML-екранування тексту статусу входу в SSE Tester, білий список URL-схем для посилань результатів пошуку на сайті документації, а також права з найменшими привілеями для CI workflow.
- 📦 Оновлення залежностей: оновлено всі залежності Go, зокрема
gin-gonic/ginдо v1.12.0 таlib/pqдо v1.12.3 (тепер вимагає Go 1.25). - 🌐 3 нові мови: сайт документації тепер доступний польською, українською та грецькою — загалом 10 мов.
v2.0.1
- 🔒 Виправлення безпеки: Оновлено транзитивну залежність HTTP/3
quic-goдо v0.59.1, що усуває вразливість у розширенні QPACK trailer, яка могла дозволити зловмиснику виснажити пам’ять сервера або клієнта. - 🎨 Покращення сайту документації: Новий перемикач світлої/темної/автоматичної теми та перемикач мов лише з іконкою, іконки-посилання GitHub/Підтримка в навігаційній панелі, виправлені двічі закодовані структуровані дані JSON-LD та розширений
llms.txt.
v2.0.0
- 🔒 Безпечні значення за замовчуванням (з порушенням сумісності):
DB_SSLMODEтепер за замовчуванням має значенняrequire,ALLOWED_ORIGINSбільше не встановлюється за замовчуванням у*, аJWT_SECRETмає бути щонайменше 32 байти. Перед оновленням наявні розгортання повинні переглянути свою конфігурацію. - 🧹 Очищення застарілого коду: Видалено маршрути перенаправлення
/api/…та/sse/…, а також застарілий псевдонім JSON-RPClogin. Використовуйте безпосередньо/{prefix}/:database/…таget_jwt. - 🛡️ Суворіша автентифікація та обробка помилок: Новий ліміт швидкості входу на IP-адресу (
LOGIN_RATE_LIMIT_PER_IP) закриває прогалину для credential spraying, а помилки інструментів MCP більше не розкривають необроблений текст помилок PostgreSQL за замовчуванням (можна повернути черезMCP_SQL_ERROR_DETAIL). - ⚙️ Налаштовувані ліміти з’єднань: Обмеження пулу з’єднань для прямої автентифікації тепер налаштовується через
DIRECT_POOL_LIMIT. - 🔑 Підтримка зовнішнього постачальника ідентичності (BYO JWT): Нові налаштування
JWT_ISSUER,JWT_AUDIENCEтаJWT_LEEWAYприв’язують видані токени до конкретного видавця/аудиторії та налаштовують допуск розбіжності часу. - 🧰 Нові інструменти: Окремі JWT Getter (
/tools/get-jwt) та SSE Tester (/tools/test-sse) доповнюють Explorer для швидкого ручного тестування. - 🐛 Виправлення надійності: Виправлено зависання завершення роботи SSE та помилку відновлення мертвого з’єднання, яка могла призвести до неможливості сервера повторно підключитися до PostgreSQL.
- 🧪 Посилення CI: До кожної збірки додано
golangci-lint, детектор гонок даних Go таgovulncheck, а також розширено покриття тестами. - 📦 Процес релізу: Додано
CHANGELOG.mdі розділено робочий процес релізу наmake release-local(збірка та перевірка) таmake release(тег, публікація, оновлення Homebrew tap).
v1.3.0
- 🌐 PgArachne Explorer – сучасний PWA: Повне візуальне та функціональне оновлення – темна/світла тема (автоматично), адаптивна компонування карток, підсвічування синтаксису JSON, кнопка копіювання в буфер обміну, кращий UX автентифікації (вкладки пароль/токен), підтримка встановлення PWA (маніфест, іконки, service worker), посилання для спільного доступу через параметр
?url=…. - 🛠️ Підтримка Model Context Protocol (MCP): Новий ендпоінт
/{prefix}/{db}/mcpзі стандартними методамиresources/list,resources/read,prompts/list,prompts/get– повністю підтримується функціями PostgreSQL і повторно використовує наявну автентифікацію та перемикання ролей. - 🔧 Налаштовуваний префікс API: Значення за замовчуванням змінено на
/db/{database}/jsonrpcта/db/{database}/sse, а застарілі шляхи/api/…та/sse/…залишені як перенаправлення 307 для зворотної сумісності. Керується через змінну середовищаAPI_PREFIX. - 🛡️ Захист ідемпотентності: Необов’язкове поле
idempotencyKeyу запитах JSON-RPC – автоматичне виявлення дублікатів (HTTP 409 + код помилки при колізії) за допомогоюpgarachne.save_idempotency_key(). - 📚 Покращення документації: Новий розділ /tools/ із картками (Explorer + очікуваний macOS Toolbar), нова сторінка «Architectural Decisions», SECURITY.md з інструкціями щодо звітування про вразливості, краща типографіка в усіх мовах завдяки TypoLima, покращена підтримка сторінки 404 для GitHub Pages.
- 📝 Перейменування методу входу: Метод JSON-RPC
loginперейменовано наget_jwt(стара назва залишається як застарілий псевдонім із попередженням у логах). - 📊 Очищення логування: При логуванні у файл консоль показує лише мінімальну інформацію про запуск → чистіший вивід у продакшн- / docker-середовищах.
v1.2.0
- 🛡️ Безпека: Перевірка токена доступу тепер відбувається перед встановленням з’єднання з базою даних. Покращено захист від підробки IP-адрес (додано налаштування
TRUSTED_PROXIES) та приховування внутрішніх помилок бази даних від кінцевих користувачів. - 📊 Ізольовані метрики: Ендпоінт Prometheus
/metricsпереміщено з публічного API на власний захищений порт (за замовчуванням доступний лише на127.0.0.1:9090). - 📦 Новий варіант встановлення: Проєкт тепер має офіційний Homebrew tap для macOS і Linux. Збірки підписані та створені за допомогою GoReleaser.
- 📚 Оновлена документація: Повністю новий вигляд на основі фреймворку Hugo. Додано блискавичний повнотекстовий пошук, можливість копіювання коду та приклади для продакшн-розгортання (посилення Nginx, BYO JWT).
- ⚙️ Покращене керування демоном: Додано підтримку налаштування власного шляху
PID_FILE.
v1.1.0
- 🔌 Уніфікований API: Усі викликаються через
POST /api/<db>(метод, що викликається, вказується в тілі JSON-RPC). - ⚡ Сповіщення в реальному часі: Новий ендпоінт
GET /sse/<db>?channels=...для прослуховування подій бази даних з підтримкою кількох каналів. - 📈 Спостережуваність: Детальні метрики Prometheus для HTTP, автентифікації, JSON-RPC та SSE.
- 🏋️ Значні покращення стабільності: Захист від повільних клієнтів, суворі таймаути та автоматичне очищення з’єднань.