Blog
Bazy danych15 min czytania

Beekeeper Studio — wieloplatformowy edytor SQL bez rejestracji

Beekeeper Studio to desktopowy klient SQL na Linuksa, macOS i Windows, którego rdzeń jest otwarty na GPLv3. Pokazujemy konfigurację połączenia z bazą w Laravel Sail, tunel SSH przez bastion z odczytem ~/.ssh/config, query magics formatujące wyniki zapytania i podział na edycję darmową a płatną — łącznie z tym, których baz w wersji Community nie podłączysz.

Beekeeper Studio to desktopowy klient SQL na Linuksa, macOS i Windows, obsługujący ponad dwadzieścia pięć silników baz danych. Repozytorium beekeeper-studio/beekeeper-studio ma 23,4 tysiąca gwiazdek i 1607 forków, powstało w lipcu 2019 roku, a wydanie 6.0.1 wyszło 14 sierpnia 2026 — trzy dni po dużym 6.0.0. Ostatni commit na master pochodzi z 15 sierpnia 2026, więc projekt jest w codziennym rozwoju.

Piszemy o nim, bo w agencji pracującej na Laravelu klient SQL jest narzędziem, którego używa się kilkanaście razy dziennie i którego wybór zwykle nikt świadomie nie podejmuje. Ktoś kiedyś zainstalował phpMyAdmina, ktoś inny płaci za TablePlusa z własnej kieszeni, trzecia osoba odpala sail psql i przewija wyniki w terminalu. Beekeeper Studio jest w tym zestawieniu propozycją konkretną: rdzeń aplikacji na GPLv3, dane połączeń zostają na dysku, a wersja darmowa nie ma limitu połączeń ani zakładek.

Jest też druga strona tego modelu i opisujemy ją w sekcji o licencji, bo dla firmy powyżej dziesięciu osób ma znaczenie finansowe.

Czym to jest i gdzie się plasuje

Rynek desktopowych klientów SQL wygląda mniej więcej tak:

  • DBeaver — Java, Apache 2.0 w wersji Community, obsługuje wszystko przez JDBC, ale interfejs jest gęsty i wolny przy starcie,
  • DataGrip — subskrypcja JetBrains, kod zamknięty, za to najlepszy autouzupełniacz SQL na rynku,
  • TablePlus — natywny i szybki, licencja płatna, kod zamknięty, wersja darmowa ogranicza liczbę otwartych zakładek,
  • phpMyAdmin i Adminer — działają w przeglądarce, więc wymagają wystawienia panelu obok bazy, co na produkcji jest osobnym problemem bezpieczeństwa,
  • psql i mysql — zawsze pod ręką, bez przeglądania danych w siatce i bez edycji rekordu kliknięciem.

Beekeeper Studio wchodzi między TablePlusa a DBeavera. Aplikacja jest napisana w Electronie, więc nie jest tak lekka jak narzędzie natywne, ale interfejs trzyma się jednego pomysłu: zakładki, siatka wyników, edytor SQL z podpowiedziami i podświetlaniem, motyw ciemny domyślnie. Nie ma kreatorów, nie ma perspektyw ETL, nie ma modelowania. Do codziennej pracy z bazą aplikacji webowej to zwykle wystarcza.

Instalacja

Na Debianie i Ubuntu od 22.04 wzwyż producent utrzymuje własne repozytorium APT:

curl -fsSL https://deb.beekeeperstudio.io/beekeeper.key \
  | sudo gpg --dearmor --output /usr/share/keyrings/beekeeper.gpg \
  && sudo chmod go+r /usr/share/keyrings/beekeeper.gpg \
  && echo "deb [signed-by=/usr/share/keyrings/beekeeper.gpg] https://deb.beekeeperstudio.io stable main" \
  | sudo tee /etc/apt/sources.list.d/beekeeper-studio-app.list > /dev/null

sudo apt update && sudo apt install beekeeper-studio -y

Na Fedorze i RHEL-u repozytorium RPM:

sudo curl -o /etc/yum.repos.d/beekeeper-studio.repo https://rpm.beekeeperstudio.io/beekeeper-studio.repo
sudo rpm --import https://rpm.beekeeperstudio.io/beekeeper.key
sudo dnf install beekeeper-studio

Są też Snap, Flatpak i AppImage, ale każdy z nich niesie ograniczenie sandboksa, o którym trzeba wiedzieć zawczasu:

  • Snap nie widzi domyślnie kluczy SSH. Bez sudo snap connect beekeeper-studio:ssh-keys :ssh-keys tunel SSH nie zadziała, a komunikat o błędzie nie powie wprost, o co chodzi.
  • Flatpak nie ma dostępu do plików poza sandboksem, więc bazy SQLite z katalogu projektu otworzysz dopiero po sudo flatpak override io.beekeeperstudio.Studio --filesystem=host.
  • AppImage na Ubuntu wymaga doinstalowania libfuse2.

Na macOS i Windows instalator pobiera się ze strony projektu, w wariancie dla Apple Silicon i Intela. Wersję Community da się też zbudować samodzielnie ze źródeł — README wymaga Node.js w wersji 20 lub nowszej, Yarna w trybie classic i sprowadza się do:

git clone git@github.com:beekeeper-studio/beekeeper-studio.git
cd beekeeper-studio/
yarn set version classic
yarn install
yarn run electron:serve

Ta możliwość nie jest ciekawostką dla hobbystów. GPLv3 na rdzeniu aplikacji oznacza, że jeśli producent zniknie albo zmieni model licencyjny, kod wersji Community zostaje i można go dalej budować.

Połączenie z bazą w Laravel Sail

Najczęstsza pomyłka przy pierwszym połączeniu z bazą projektu w Sailu bierze się z tego, że wartości z .env opisują widok z wnętrza kontenera, a Beekeeper Studio łączy się z hosta. To dwa różne adresy i dwa różne porty.

W naszym repozytorium compose.yaml mapuje Postgresa tak:

pgsql:
    image: 'postgres:18-alpine'
    ports:
        - '${FORWARD_DB_PORT:-15432}:5432'

Aplikacja w kontenerze widzi bazę jako pgsql:5432, a przeglądarka i klient SQL na laptopie — jako 127.0.0.1:15432. W formularzu połączenia wpisujesz więc:

  • Host: 127.0.0.1, nie pgsql,
  • Port: wartość FORWARD_DB_PORT z .env, domyślnie 15432,
  • User, Password, Database: DB_USERNAME, DB_PASSWORD i DB_DATABASE z .env.

Przy MySQL-u mapowanie w Sailu domyślnie prowadzi na port 3306 hosta, co koliduje z lokalną instalacją MySQL-a, jeśli ktoś ją ma. Stąd w tym projekcie nietypowy 15432 zamiast 5432 — port hosta wybieramy tak, żeby nie wchodził w drogę niczemu, co już działa.

Beekeeper obsługuje dwa tryby połączenia. TCP przez host i port daje dostęp do SSL i tunelu SSH. Połączenie przez gniazdo uniksowe działa tylko dla bazy na tej samej maszynie i nie ma opcji zaawansowanych, więc dla kontenerów odpada.

Bazy SQLite otwiera się plikiem. Po skojarzeniu rozszerzenia wystarczy kliknąć database/database.sqlite w menedżerze plików, co przy testach z DB_CONNECTION=sqlite bywa wygodniejsze niż cokolwiek innego.

Tunel SSH do produkcji

Tu Beekeeper Studio wypada lepiej, niż zapowiada opis na stronie, i to jest główny powód, dla którego warto go rozważyć w zespole utrzymującym serwery klientów.

Baza produkcyjna nie powinna nasłuchiwać na publicznym interfejsie. Standardowa ścieżka prowadzi więc przez SSH do serwera aplikacyjnego albo do bastionu, a stamtąd do bazy. Beekeeper robi to bez ręcznego zestawiania tunelu w drugim oknie terminala.

Metody uwierzytelnienia

Tryb automatyczny próbuje po kolei:

  1. kluczy z agenta SSH,
  2. wpisów IdentityFile z ~/.ssh/config,
  3. kluczy domyślnych: ~/.ssh/id_ed25519, ~/.ssh/id_ecdsa, ~/.ssh/id_rsa, ~/.ssh/id_dsa.

Jeśli klucze trzymasz w agencie — a przy kluczach z hasłem to sensowna praktyka — nie musisz w kliencie SQL konfigurować niczego poza nazwą hosta. Alternatywnie wskazujesz konkretny plik klucza wraz z hasłem do niego albo podajesz login i hasło SSH, co przy dostępie do cudzej infrastruktury bywa jedyną dostępną opcją.

Odczyt ~/.ssh/config

Beekeeper czyta konfigurację SSH i rozwiązuje aliasy hostów, pobierając z niej HostName, Port, User oraz IdentityFile i IdentitiesOnly. Obsługuje bloki Match (w tym all, host, user, localuser, exec) i dyrektywy Include z globami. Jeśli masz plik w rodzaju:

Host klient-prod
    HostName 10.20.0.14
    User deploy
    Port 2222
    IdentityFile ~/.ssh/klient_ed25519

to w polu hosta SSH wpisujesz klient-prod i reszta uzupełnia się sama. Przy kilkunastu serwerach klientów oszczędza to więcej czasu niż jakakolwiek funkcja w edytorze zapytań.

Bastion i keepalive

Osobne pole Bastion Host (JumpHost) obsługuje wejście przez serwer pośredniczący, z tym samym zestawem trzech metod uwierzytelnienia co host docelowy. Pole Keepalive Interval ustawia częstotliwość pingów podtrzymujących połączenie; zero wyłącza mechanizm. Warto je ustawić, bo domyślne ClientAliveInterval na serwerze potrafi zrywać bezczynny tunel w środku analizy danych.

Jedno ograniczenie trzeba znać zawczasu: Beekeeper nie obsługuje dyrektywy ProxyJump z ~/.ssh/config. Jeśli Twoja konfiguracja opiera się na ProxyJump bastion, klient tego nie odczyta i bastion trzeba wskazać ręcznie w formularzu połączenia.

SSL i TLS

Poza tunelem dostępne są trzy warianty połączenia szyfrowanego, które producent mapuje na znane z Postgresa wartości sslmode:

  • Trust the server — SSL bez własnych certyfikatów,
  • Required Cert — SSL z certyfikatami, z wyłączonym rejectUnauthorized,
  • Verified Cert — SSL z certyfikatami i włączonym rejectUnauthorized, czyli pełna weryfikacja.

Przy bazach zarządzanych w chmurze, gdzie dostawca wymusza szyfrowanie, wybór między drugim a trzecim wariantem decyduje o tym, czy weryfikujesz tożsamość serwera, czy tylko szyfrujesz ruch. Do produkcji bierz Verified Cert.

Gdzie lądują hasła

Pytanie, które przy narzędziu z kontem w chmurze zadaje się jako pierwsze. Dane połączeń Beekeeper trzyma lokalnie i nie wysyła ich na serwery producenta. Katalog aplikacji zależy od systemu:

  • Linux — ~/.config/beekeeper-studio/,
  • macOS — ~/Library/Application Support/beekeeper-studio/,
  • Windows — %APPDATA%\beekeeper-studio\.

Zapisanie hasła jest opcją przy nazywaniu połączenia, nie zachowaniem domyślnym. Przy korzystaniu z płatnych przestrzeni zespołowych producent deklaruje, że wrażliwe pola są szyfrowane po stronie aplikacji przed zapisem w chmurze; dokumentacja nie podaje jednak użytego algorytmu ani sposobu zarządzania kluczem, więc przy danych klienta objętych umową powierzenia warto to potraktować jako pytanie do producenta, a nie fakt do założenia.

Telemetria jest opcjonalna i wyłączona domyślnie, a zapytania idą z Twojej maszyny prosto do bazy. Aplikacja działa w całości offline, licencję płatną również da się zweryfikować bez internetu — plany Business obejmują licencje offline dla środowisk odciętych od sieci, przy czym pobrany plik jest ważny tylko przez okres subskrypcji i po odnowieniu trzeba go pobrać ponownie.

Codzienna praca

Zestaw funkcji, których używa się przy aplikacji webowej, jest kompletny: edytor SQL z autouzupełnianiem i podświetlaniem, zakładki, historia zapytań, zapisane zapytania, sortowanie i filtrowanie wyników, edycja danych wprost w siatce, modyfikacja struktury tabel, diagramy ERD, boczny panel do oglądania kolumn JSON, import i eksport danych oraz formatter SQL.

Dwie rzeczy zasługują na osobny akapit.

Tryb prywatności ukrywa zapisane połączenia i historię. Przy prezentacji dla klienta albo nagrywaniu materiału szkoleniowego rozwiązuje to problem, który zwykle rozwiązuje się gorączkowym zamykaniem zakładek na sekundę przed udostępnieniem ekranu.

Panel JSON ma znaczenie w projektach laravelowych, w których kolumny json i jsonb pojawiają się przy ustawieniach, metadanych i zrzutach payloadów. W większości klientów SQL taka kolumna to jedna długa linia tekstu w komórce.

Query magics

Funkcja, której nie ma w innych klientach i która po dwóch dniach staje się odruchem. Dopisujesz przyrostek do aliasu kolumny, a Beekeeper zmienia sposób renderowania wyniku w siatce. Składnia:

columnname__format__magictype[__options]

Dostępne warianty to między innymi __format__link (klikalny adres), __format__email, __format__check (jedynka jako ptaszek, zero jako krzyżyk), __format__image[__width[__height]] (miniatura zamiast adresu), __format__money[__currencyCode], __format__progress[__max], __format__stars[__max], __format__unixtime[__scale][__utc][__iso], __format__enum__nazwa do podmiany wartości na etykiety oraz __goto[__schema]__table[__column] tworzące odnośnik do rekordu w innej tabeli.

W praktyce, przy typowej tabeli użytkowników:

select
    id,
    email as email__format__email,
    avatar_url as avatar__format__image__48__48,
    is_active as aktywny__format__check,
    profile_url as profil__format__link
from users
order by created_at desc
limit 50;

Zamiast pięćdziesięciu wierszy adresów i zer z jedynkami dostajesz siatkę z miniaturami awatarów i ptaszkami. Przy debugowaniu zgłoszenia typu „użytkownik widzi nie swój obrazek” to różnica między przeglądaniem danych a ich czytaniem.

Magics są częścią zapytania, więc jadą razem z nim do zapisanych zapytań i do wiadomości wysłanej koledze. Ceną jest to, że zapytanie przestaje być przenośne — wklejone do psql zwróci kolumnę o dziwnej nazwie, ale wykona się poprawnie, bo dla bazy to zwykły alias.

Wtyczki i AI Shell

Wersja 6 ma system wtyczek dostępny dla wszystkich użytkowników, również w edycji Community, choć poszczególne wtyczki mogą mieć własne wymagania licencyjne. Instaluje się je z menu Tools > Manage Plugins, a aplikacja sprawdza aktualizacje przy starcie. Wtyczkę da się też wgrać ręcznie, rozpakowując ZIP z wydania na GitHubie do katalogu wtyczek.

Oficjalna wtyczka AI Shell pozwala pytać o dane językiem naturalnym i wymaga subskrypcji. Producent udokumentował API wtyczek, więc własne rozszerzenie jest wykonalne; ekosystem zewnętrznych wtyczek na razie praktycznie nie istnieje, bo mechanizm jest świeży.

Wydanie 6.0.0 z 11 sierpnia 2026 dołożyło współdzielenie zapytań, połączeń i folderów, a poprawka 6.0.1 z 14 sierpnia — kontekstowe menu i naprawę parsowania kluczy SSH.

Licencja i podział na edycje

Tę sekcję czyta się przed decyzją o wdrożeniu w zespole, bo model jest mieszany i łatwo się na nim naciąć.

Rdzeń aplikacji jest na GPLv3. Kod w katalogu src-commercial podlega osobnemu plikowi LICENSE-COMMERCIAL.md, czyli jest źródłowo dostępny, ale nie otwarty. GitHub raportuje z tego powodu licencję jako NOASSERTION — automat nie potrafi zaklasyfikować repozytorium z dwiema licencjami. Producent deklaruje, że edycja Community składa się wyłącznie z kodu otwartego, a płatne moduły — przestrzenie zespołowe, backup i restore, AI Shell — są źródłowo dostępne w tym samym repozytorium. Znaki towarowe i logotypy nie są objęte licencją otwartą, więc fork wymaga zmiany nazwy i grafik.

Czego nie ma w wersji darmowej

Podział przebiega głównie po obsługiwanych silnikach baz danych. Edycja Community obsługuje PostgreSQL, MySQL, SQLite, SQL Server, Redshift, CockroachDB, MariaDB, TiDB, Google BigQuery, Redis i GreengageDB.

Wyłącznie w wersjach płatnych działają: Oracle, Cassandra, ScyllaDB, Firebird, LibSQL, ClickHouse, DuckDB, SQL Anywhere, MongoDB, Trino i Presto, SurrealDB oraz DynamoDB w wersji beta. Snowflake jest zapowiedziany.

Dla zespołu laravelowego to podział korzystny: Postgres, MySQL, MariaDB, SQLite i Redis mieszczą się w edycji darmowej, więc typowy projekt obsłużysz bez wydawania złotówki. Rachunek zmienia się w chwili, gdy klient przychodzi z ClickHouse do analityki albo z MongoDB w części usług.

Cennik

Trzy plany, rozliczane za użytkownika, w cenach rocznych i miesięcznych:

  • Indie — 9 USD miesięcznie przy płatności rocznej, 18 USD przy miesięcznej. Jedno urządzenie, szeroka obsługa baz, import i eksport, panel JSON.
  • Professional — 14 USD rocznie, 28 USD miesięcznie. Wiele urządzeń, wszystkie bazy, wszystkie funkcje, wsparcie mailowe.
  • Business — 18 USD rocznie, 35 USD miesięcznie. Dodatkowo SSO do baz w chmurze, obsługa środowisk odciętych od sieci, priorytet w zgłoszeniach i płatność na fakturę.

Producent stosuje model „lifetime access”: wersje wydane w trakcie trwania subskrypcji zostają Twoje na zawsze. Po wygaśnięciu przestajesz dostawać nowe wydania, ale to, co pobrałeś, dalej działa. Jest też trzydziestodniowa gwarancja zwrotu.

Kto powinien zapłacić

Tu jest miejsce, w którym łatwo o nieporozumienie, więc rozdzielmy dwie rzeczy.

Producent pisze wprost, że edycja Community jest przeznaczona dla studentów, osób prywatnych, organizacji pozarządowych i małych firm poniżej dziesięciu pracowników lub z przychodem rocznym poniżej miliona dolarów, a większe organizacje prosi o wykupienie licencji. To prośba, nie warunek licencji: GPLv3 nie zna ograniczeń ze względu na wielkość firmy i nie da się ich dołożyć bez wyjścia poza tę licencję. Prawnie edycja Community wolno używać komercyjnie w firmie dowolnej wielkości.

Nasze stanowisko: jeśli narzędzie siedzi na pasku zadań programisty przez osiem godzin dziennie, dziewięć dolarów miesięcznie jest tańsze niż godzina jego pracy. Rozstrzyganie tego argumentami z licencji jest odwracaniem uwagi od pytania, czy zespół chce, żeby projekt istniał za dwa lata.

Do wyliczenia budżetu: pięcioosobowy zespół na planie Professional rozliczanym rocznie to 70 USD miesięcznie, czyli koszt porównywalny z jedną małą maszyną w chmurze.

Na co uważać

  • Electron. Aplikacja zużywa kilkaset megabajtów pamięci i startuje wolniej od narzędzia natywnego. Przy TablePlusie różnicę widać.
  • Ponad 1,1 tysiąca otwartych zgłoszeń. Licznik GitHuba obejmuje też pull requesty, ale liczba i tak jest duża jak na zespół, który sam opisuje się jako mały i niezależny. Zgłoszenie błędu w rzadziej używanym silniku może poczekać.
  • Brak ProxyJump. Opisany wyżej wyjątek w odczycie ~/.ssh/config. Bastion konfiguruje się ręcznie.
  • Sandboks w Snapie i Flatpaku. Klucze SSH i pliki SQLite wymagają dodania uprawnień, inaczej dostajesz mało mówiący błąd połączenia.
  • Autouzupełnianie słabsze niż w DataGripie. Przy zapytaniach na kilkanaście złączeń i podzapytania różnicę czuć od razu.
  • Brak wersji przeglądarkowej. Beekeeper jest aplikacją desktopową; do bazy udostępnianej przez przeglądarkę potrzebujesz innego narzędzia.
  • Znaki towarowe poza licencją otwartą. Fork jest dozwolony, ale pod inną nazwą i z innym logotypem.

Podsumowanie

Beekeeper Studio jest dobrym domyślnym klientem SQL dla zespołu pracującego na Postgresie i MySQL-u, zwłaszcza takiego, który wchodzi na serwery klientów przez SSH.

Co daje:

  • obsługę ponad dwudziestu pięciu silników baz danych, z Postgresem, MySQL-em, MariaDB, SQLite, SQL Serverem i Redisem w wersji darmowej,
  • tunel SSH z odczytem ~/.ssh/config, obsługą agenta, bastionu i keepalive, bez zestawiania tunelu ręcznie w drugim terminalu,
  • trzy warianty SSL odwzorowujące sslmode, z pełną weryfikacją certyfikatu włącznie,
  • dane połączeń i hasła trzymane lokalnie, telemetrię wyłączoną domyślnie i pełną pracę offline,
  • query magics formatujące wyniki wprost w aliasie kolumny — miniatury, ptaszki, kwoty, odnośniki do innych tabel,
  • tryb prywatności do prezentacji i panel JSON przydatny przy kolumnach json i jsonb,
  • system wtyczek z udokumentowanym API, dostępny również w edycji darmowej,
  • projekt w dobrej kondycji: 23,4 tysiąca gwiazdek, wydanie 6.0.1 z 14 sierpnia 2026, commity codziennie, siedem lat historii.

Licencja: rdzeń aplikacji na GPLv3, moduły płatne w katalogu src-commercial na licencji komercyjnej, źródłowo dostępne w tym samym repozytorium. Przy komercyjnym użyciu GPLv3 nie stanowi problemu, bo Beekeeper jest narzędziem, którego nie rozprowadzasz dalej ani nie linkujesz z własnym kodem — obowiązki GPL uruchamia dopiero dystrybucja zmodyfikowanej aplikacji, nie korzystanie z niej w firmie. Producent prosi organizacje powyżej dziesięciu osób lub z przychodem powyżej miliona dolarów o wykupienie licencji; sama licencja tego nie wymusza, więc to decyzja o wspieraniu projektu, a nie kwestia zgodności prawnej. Znaki towarowe i logotypy pozostają własnością producenta i nie są objęte licencją otwartą.