Releases: macitkaraca/brampp
Release list
BRAMPP 2.05
Veritabanı araçları yazma işlerini gerçekten yapabiliyor — ama bir satır güncellemekle bir tabloyu düşürmek artık aynı izne bağlı değil. Yanında, alan adı işlemlerinde makineyi tutarsız bırakan dört yol.
Eklendi
- Şema keşfi:
db_tablesvedb_describe. Tablolar satır sayısı ve boyutla, sütunlar tip, anahtar ve varsayılanlarıyla listeleniyor. Bir yapay zekâ istemcisinin en sık ihtiyaç duyduğu iki işlem artık ham SQL yazmayı gerektirmiyor — ve sorgu yazmadan önce sütun adlarını doğrulamak, uydurmanın yerini alıyor. - SQL yazma üç kademeye ayrıldı. Okuma serbest;
INSERT/UPDATE/REPLACEiçinallow_write;DELETE/DROP/TRUNCATE/ALTER/CREATEiçin ayrıcaallow_destructive. Bir satır güncellemek ile bir tabloyu düşürmek aynı istek değil ve aynı anahtara bağlanamaz.
Düzeltildi
allow_writeaçıldığında hiçbir denetim kalmıyordu. Çoklu ifade reddi bile yalnızca salt-okunur daldaydı, yaniallow_writeile"DROP DATABASE a; DROP DATABASE b"çalışıyordu. Artık çoklu ifade her kademede reddediliyor ve SQL hiçbir bayrakla dosya sistemine ulaşamıyor — bir veritabanına yazma izni, diski okuma izni değildir.- Silinen bir alan adının vhost'u geri yazılabiliyordu. Kayıt denetimi yazımın etrafındaydı, içinde değil; aradaki
configtestbeklemesinde silme baştan sona koşabiliyordu. Sonuç, artık var olmayan bir sertifikayı gösteren öksüz bir vhost:configtestkalıcı olarak düşer ve Apache hiç başlamaz — makinedeki bütün siteler birden gider. Üstelik hata logu bastırıldığı için sessizce. - Alan adı oluşturulurken kayıt en sonda yazılıyordu. Site klasörü, sertifika, vhost ve
/etc/hostsgirişi hazırken kayıt yoktu;/etc/hostsyönetici parolası isteyip süresiz beklediğinden bu pencere dakikalar sürebiliyordu. Orada çıkılırsa geriye hiçbir arayüzde görünmeyen, hiçbir şeyin toplamadığı dosyalar kalıyordu. - Yedekten geri yükleme, canlı bir paylaşımın altından vhost'u çekiyordu. Tünel ayakta kalıp
Hostbaşlığını artık var olmayan bir bloğa taşıyor ve istek varsayılan siteye düşüyordu — localhost kökü, phpMyAdmin ve Adminer dâhil. Çalışan bir arka plan uygulaması da kaydı gittiği için bir daha hiç durdurulamıyordu. Artık silmeden önce canlılığa bakılıyor. Ayrıcalocalhost.confyanlışlıkla öksüz sayılabiliyordu. nginx.confkorumasız yazılıyordu. Yedek başarısız olsa bile yazım devam ediyor,nginx -tyapılmıyor ve geri dönüş bulunmuyordu. Dahası budama en eskiden başlayarak sildiğinden, kullanıcının BRAMPP öncesinginx.conf'u altı rutin işlemden sonra kayboluyordu. En eski yedek artık kalıcı.
Değişti
- Teşhis paneli kaydı olmayan vhost dosyalarını bildiriyor — ve bilerek silmiyor. Aynı dizinde elle eklenmiş yapılandırmalar da duruyor; "kaydı yok" ile "çöp" aynı şey değil.
- MCP izin sınırı test altına alındı. 25 aracın alanı ve yazma gereksinimi elle yazılıyordu ve hiçbir doğrulaması yoktu; bir bayrağı ters çevirmek yıkıcı bir aracı salt-okunur bir izinde sessizce kullanılabilir kılardı.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
The database tools can genuinely write now — but updating a row and dropping a table are no longer the same permission. Alongside that, four ways domain operations could leave the machine inconsistent.
Added
- Schema discovery:
db_tablesanddb_describe. Tables with row counts and size, columns with types, keys and defaults. The two things an AI client needs most often no longer require writing raw SQL — and checking a column name beats guessing it. - SQL writing is split into three levels. Reading is open;
INSERT/UPDATE/REPLACEneedallow_write;DELETE/DROP/TRUNCATE/ALTER/CREATEadditionally needallow_destructive. Updating a row and dropping a table are not the same request and cannot share a switch.
Fixed
- Turning on
allow_writeremoved every check. Even the multiple-statement rejection lived only in the read-only branch, soallow_writealso accepted"DROP DATABASE a; DROP DATABASE b". Multiple statements are now refused at every level, and SQL cannot reach the filesystem under any flag — write permission on a database is not permission to read the disk. - A deleted domain's vhost could be written back. The record check sat around the write rather than inside it, and deletion can complete during the
configtestwait in between. The result is an orphan vhost pointing at a certificate that no longer exists:configtestfails permanently and Apache will not start at all, taking every site on the machine with it — silently, because the error log was suppressed. - Creating a domain saved the record last. The site folder, certificate, vhost and
/etc/hostsentry all existed before the record did, and the hosts step can sit on an admin password prompt indefinitely. Quit in that window and the files stayed, invisible to the UI and collected by nothing. - Restoring a backup removed a vhost out from under a live share. The tunnel kept carrying the Host header to a block that no longer existed, so the request fell through to the default site — localhost root, phpMyAdmin and Adminer included. A running background app also became unstoppable once its record was gone. Liveness is now checked before removal, and
localhost.confcould previously be mistaken for an orphan. nginx.confwas rewritten without protection. A failed backup did not stop the write, there was nonginx -tand no rollback. Worse, pruning dropped the oldest first, so the user's pre-BRAMPPnginx.confdisappeared after six routine operations. The oldest backup is now kept permanently.
Changed
- Diagnostics reports vhost files with no record — and deliberately does not delete them. Hand-written configuration lives in the same directory; "no record" and "garbage" are not the same thing.
- The MCP permission boundary is under test. The scope and write requirement of all 25 tools were written by hand with nothing asserting them; flipping one flag would silently expose a destructive tool at a read-only permission level.
Details: Changelog
Apple Silicon, macOS 14+.
BRAMPP 2.04
BRAMPP, tasarlandığı makinede kurulamıyordu. Bu sürüm kurulum sihirbazını baştan sona gözden geçiriyor.
Düzeltildi
- Temiz bir Mac'te kurulum hiç tamamlanamıyordu.
brew install httpdextra/httpd-ssl.confdosyasını verir ama onun gösterdiğiserver.crtsertifikasını VERMEZ. BRAMPP "dosya var" diye SSL include'ını açıyor,configtestSSLCertificateFile: file does not existile düşüyor, yazılanlar geri alınıyor, Apache grubu tamamlanmıyor — ve o grup zorunlu olduğu için "Tamamla" düğmesi hiç etkinleşmiyordu. Artık dosyanın var olması değil, gösterdiği her sertifikanın diskte olması aranıyor; BRAMPP kendi SSL dosyasını mkcert sertifikalarıyla yazana kadar include kapalı kalıyor. - Sihirbazda kurulum donuyordu ve konsol boş kalıyordu. Paketler PTY'siz çalıştırıldığından brew'un sorduğu onay sorusu konsola HİÇ ulaşmıyordu (brew istem satırını yeni satırla bitirmez, tampon eksik parçayı tutar). Kullanıcı donmuş bir ekran, ilerlemeyen bir çubuk ve iptal düğmesi olmayan bir pencere görüyordu. Kurulum artık uygulamanın diğer sekmelerindeki akıştan geçiyor: canlı çıktı, indirme yüzdesi, cevaplanabilir istem çubuğu ve otomatik onay geri sayımı.
- mkcert "isteğe bağlı" deniyordu ama atlanamıyordu. Paket zorunlu işaretli olduğu için paket adımı geçilemiyor, localhost kurulumu da mkcert olmadan hiç ilerlemiyordu. CA kurulumunda takılan kullanıcı (kayıp
rootCA-key.pem, anahtarlık reddi) ne sihirbazı bitirebiliyor ne de çalışan bir HTTP ortamına geçebiliyordu. Artık mkcert yoksa localhost HTTP olarak kuruluyor ve SSL sonradan eklenebiliyor. - Sihirbazın ikinci
httpd.confyazıcısı korumasızdı. Yedek yok,configtestyok, geri alma yok — üstelik yazdığı şey dosyadaki her PHP handler bloğunu (vhost'lara ait olanlar dâhil) yeniden düzenliyor. Elle kurulmuş bir yapılandırmada geri dönüşü yoktu. Artık yedek → yaz → doğrula → geçmezse geri al. - Homebrew kurulu değilken paket kurmak anlaşılmaz bir
command not foundhatası veriyordu; artık eksik olanın Homebrew olduğu söyleniyor. - Durum tazelemesi PHP-FPM yapılandırmasını yeniden yazıyordu. Açılışta, çalışan sürecin altından
www.conf9000'den 908X'e çevriliyor ve hiçbir şey yeniden başlatılmıyordu: dosya bir portu, süreç başkasını söylüyor, vhost'lar dosyadakine yönlendiriyor — bütün PHP siteleri 502. Elle brew php kurmuş kullanıcı için bu "BRAMPP'ı kurdum, çalışan PHP'm bozuldu" demekti. Okuma artık yazmıyor; düzeltme yeniden başlatmayla birlikte yapılıyor. - Açık paylaşım kapatılamadığında vhost yine de siliniyordu — devre dışı bırakma ve yeniden adlandırmada. Herkese açık adres yayında kalıp varsayılan siteyi (phpMyAdmin ve Adminer dâhil) sunmaya başlıyordu. Üç çağrı yerinin üçü de artık korumalı.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
BRAMPP could not be installed on the machine it was designed for. This release goes through the setup wizard end to end.
Fixed
- Setup could never be completed on a clean Mac.
brew install httpdshipsextra/httpd-ssl.confbut not theserver.crtit points at. BRAMPP enabled the SSL include because the file existed,configtestfailed withSSLCertificateFile: file does not exist, the write was rolled back, the Apache group never completed — and because that group is required, the Finish button never enabled. The check is no longer whether the file exists but whether every certificate it references is on disk; the include stays off until BRAMPP writes its own SSL config with mkcert certificates. - Installs froze in the wizard with an empty console. Packages ran without a PTY, so a question brew asked never reached the console at all — brew does not end a prompt line with a newline, and the buffer holds the trailing segment. The user saw a frozen screen, a progress bar that stopped moving and no way to cancel. Installs now go through the same flow as the rest of the app: live output, the download percentage, an answerable prompt bar and its auto-confirm countdown.
- mkcert was described as optional and could not be skipped. The package was still marked required, so the packages step could not be passed, and localhost setup refused to proceed without it. A user stuck on the CA — a lost
rootCA-key.pem, a declined keychain prompt — could neither finish the wizard nor reach a working HTTP setup. Without mkcert, localhost is now configured over HTTP and SSL can be added later. - The wizard's other writer to
httpd.confhad no protection. No backup, noconfigtest, no rollback — and what it writes rearranges every PHP handler block in the file, including ones belonging to vhosts. On a hand-rolled configuration that was unrecoverable. Now: back up, write, validate, roll back on failure. - Installing a package without Homebrew reported an opaque
command not found; it now says Homebrew is what is missing. - A status refresh rewrote PHP-FPM configuration. On launch, under the running process,
www.confwas changed from 9000 to 908X with nothing restarted: the file said one port, the process was bound to another, and vhosts proxied to the file's — every PHP site returning 502. For someone who set up brew php by hand this read as "I installed BRAMPP and it broke my working PHP". Reads no longer write, and the correction now happens together with the restart. - A vhost was removed even when its open share could not be closed, on disable and on rename. The public address kept serving, now showing the default site — phpMyAdmin and Adminer included. All three call sites are guarded.
Details: Changelog
Apple Silicon, macOS 14+.
BRAMPP 2.03
pgAdmin4 desteği kaldırıldı, ve alan adı silmenin arkada bıraktıkları toplandı.
Kaldırıldı
- pgAdmin4 artık kurulmuyor ve yönetilmiyor. Homebrew pgAdmin4'ü formula olmaktan çıkarıp cask'a taşımıştı; BRAMPP hâlâ eski formula yolunu sınadığı için kalıcı olarak "kurulu değil" diyordu. Kaldır düğmesi de aynı koşula bağlı olduğundan hiç görünmüyor, yani BRAMPP'ın kendi yazdığı yapılandırma arayüzden temizlenemiyordu. Bir masaüstü uygulamasının kurulumunu üstlenmek bir servis yöneticisinin işi değil. PostgreSQL yönetimi için Adminer duruyor (tek dosya, hem MySQL hem PostgreSQL) ve o hep çalışıyordu. PostgreSQL'in kendisine dokunulmadı. Güncelleme pgAdmin4'ü sizin için kaldırmaz — isterseniz
brew uninstall --cask pgadmin4.
Düzeltildi
- Alan adı silinirken açık paylaşım kapatılamazsa artık silme yapılmıyor. Paylaşımı durdurma denemesinin sonucu atılıyor ve koşulsuz "kapatıldı" yazılıyordu. Tünel gerçekten ölmediyse kayıt ve vhost yine de siliniyordu: herkese açık adres yayında kalmaya devam ediyor ama artık varsayılan siteyi gösteriyor, üstelik tünel alan adına bağlı olduğu için arayüzden durdurulamıyordu.
- Silme, alan adının log dosyalarını bırakıyordu — her seferinde iki ilâ dört dosya. Artık dört yol birden temizleniyor: nginx alan adlarına bir de Apache companion vhost'u yazılıyor, ve sunucu tercihi sonradan değiştiyse eski sunucunun dosyaları da diskte kalıyordu.
- Tünel log ve pid dosyaları ait oldukları alan adı silindikten sonra da duruyordu.
- /etc/hosts satırı kaldırılamazsa artık uyarı düşüyor. Kayıt zaten silinmiş olduğundan o satırı bir daha hiçbir akış aramıyor ve sessizce kalıcı oluyordu.
- Silme onayı ne olduğunu söylüyor. Yalnızca "geri alınamaz" diyordu; site klasörünüzün ve içindekilerin kaldığını söylemiyordu.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
pgAdmin4 support is gone, and domain deletion no longer leaves things behind.
Removed
- pgAdmin4 is no longer installed or managed. Homebrew moved pgAdmin4 from a formula to a cask; BRAMPP still probed the old formula path, so it reported "not installed" permanently. The Remove button was gated on that same check and therefore never appeared, leaving configuration BRAMPP had written itself with no way to clean it up from the UI. Installing a desktop application is not a service manager's job. Adminer remains for PostgreSQL (a single file covering both MySQL and PostgreSQL) and always worked. PostgreSQL itself is untouched. Updating does not uninstall pgAdmin4 for you — run
brew uninstall --cask pgadmin4if you want it gone.
Fixed
- Deleting a domain now refuses to proceed if its open share cannot be closed. The attempt's result was discarded and success logged unconditionally. If the tunnel did not actually die, the record and the vhost went anyway: the public address kept serving, now showing the default site, and since the tunnel is keyed by domain name it could no longer be stopped from the UI.
- Deletion left the domain's log files behind — two to four per domain, every time. All four paths are cleaned now: an nginx domain also gets an Apache companion vhost, and a domain that switched web servers leaves files under the old one.
- Tunnel log and pid files survived deletion of the domain they belonged to.
- A failed /etc/hosts removal now warns. With the record already gone, nothing would ever look for that line again and it became permanent in silence.
- The delete confirmation says what happens. It only said "cannot be undone" — never that your site folder and everything in it stays.
Details: Changelog
Apple Silicon, macOS 14+.
BRAMPP 2.02
Güncelleme denetiminin kendisi bozuktu — hem menüden hem Ayarlar'dan. Tıklıyordunuz, hiçbir şey olmuyordu, hiçbir yerde de hata çıkmıyordu. Bu sürüm onu düzeltiyor ve bir daha aynı biçimde bozulamaması için sınırı testlere yazıyor.
Düzeltildi
- "Güncellemeleri Denetle" menü öğesi gerçekten hiçbir şey yapmıyordu. Öğe menüde duruyor, tıklanıyor, karşılığında tek bir satır bile düşmüyordu. Sebebi menüdeki iki grubun aynı yeri hedeflemesiydi: biri uygulama menüsünü baştan kuruyor, diğeri artık var olmayan o gruba "sonra" ekleniyordu. Bu tanımlı bir şey değil — öğe çiziliyor ama eylemi hiç bağlanmıyor. Ne derleme ne çalışma zamanı tek bir uyarı veriyordu.
- Altında ikinci bir arıza vardı: Ayarlar'daki düğme de sessizdi. İki giriş de aynı iç bildirimi gönderiyordu ve o bildirimi hiç kimse dinlemiyordu. Yani menü düzeltilse bile hiçbir şey olmayacaktı. Denetim artık aradan bir şey geçmeden doğrudan çağrılıyor.
- Güncelleme pencereleri ana pencerenin arkasına düşüyordu. Denetimi başlatıyor, sonra hiçbir şey olmamış gibi bakıyordunuz — pencere açılmıştı, sadece görünmüyordu. Artık üstte kalıyor.
- Ayarlar'daki "Denetleniyor…" yazısı sonucu beklemiyordu, sabit bir süre sayıyordu: yavaş bağlantıda denetim bitmeden siliniyor, hızlı bağlantıda bitmiş bir denetim için boşuna duruyordu. Artık gerçek sonucu bekliyor.
Değişti
- Güncelleme denetimi tek bir yerden yapılıyor: Ayarlar → Güncellemeler. Uygulama menüsündeki öğe kaldırıldı. Aynı işin iki kapısı olması, birinde düzeltilen bir davranışın diğerinde eski kalmasıyla biterdi.
- Denetim artık size bir yanıt veriyor. Tıkladığınız anda "denetleniyor" penceresi açılıyor; sonuç gelince aynı pencere yeşil onaya dönüp güncel olduğunuzu söylüyor. Önceden yeni sürüm yoksa hiçbir şey görünmüyordu — bu da menü öğesini bozuk gösteriyordu.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
The update check itself was broken, from the menu and from Settings alike. You clicked, nothing happened, and no error appeared anywhere. This release fixes it and writes the boundary into tests so it cannot break the same way again.
Fixed
- The "Check for Updates" menu item did nothing at all. The item sat in the menu, took your click, and produced not a single line in response. Two menu groups were targeting the same place: one rebuilt the app menu outright, the other anchored itself after the group that no longer existed. That is not defined behaviour — the item is drawn, but its action is never wired. Neither the compiler nor the running app said a word.
- Underneath that sat a second fault: the Settings button was silent too. Both entry points sent the same internal notification, and nothing was listening for it — so fixing the menu alone would still have produced nothing. The check is now called directly, with nothing in between.
- Update windows fell behind the main window. You started a check and then stared at a screen where nothing appeared to happen; the window had opened, it just was not visible. It now stays on top.
- The "Checking…" label in Settings was not waiting for the result, it was counting a fixed delay: on a slow connection it cleared before the check finished, on a fast one it lingered after. It now waits for the real answer.
Changed
- There is now one place to check for updates: Settings → Updates. The app-menu item is gone. Two doors to the same job ends with a behaviour fixed behind one of them and left stale behind the other.
- The check answers you now. A "checking" window opens the moment you click, and turns into a green confirmation telling you that you are up to date. Previously nothing appeared at all when there was no new version — which is exactly what made the menu item look broken.
Details: Changelog
Apple Silicon, macOS 14+.
BRAMPP 2.01
Denetim birikiminin son on maddesi ve 2.0'da güncellemenin kendi bıraktığı bir iz. Ağırlık yine aynı yerde: uygulama, yapmadığı bir şeyi yaptığını söylüyordu.
Düzeltildi
- Güncelleme, disk kalıbını bağlı bırakıyordu. 2.0'a geçtikten sonra her açılışta konsola
volume is read onlyhatası düşüyordu: uygulama çıkarken kalıbı ayırma işi hiç çalışmıyor, bir sonraki açılış onu silmeye çalışıyordu. Ayırma artık çıkıştan önce yapılıyor; takas betiği de emniyet olarak kalanları süpürüyor. - Kaldırma, silemediği dosyaları sildim diye bildiriyordu — MariaDB'de bu, veri dizini diskte dururken silindiğini sanmanız demekti. Ayrıca veri dizini, sunucunun durduğu doğrulanmadan siliniyordu.
- Kurulum ekranı, iptal edilmiş bir işlem için yeşil onay gösteriyordu; sonuç, log gövdesindeki herhangi bir onay işaretinden çıkarılıyordu.
- İki kurulum aynı anda başlayabiliyordu ve ikincisi birincisini yanıtlanamayan bir isteme mahkûm ediyordu.
- Çok havuzlu bir
www.conf'ta PHP-FPM hiç başlamıyordu — her havuzunlistensatırı aynı porta çevriliyordu. - Sihirbaz paylaşılan Apache yapılandırmasını geri alınamaz biçimde yazıyordu. Artık yedek alınıyor,
configtestçalıştırılıyor ve geçmezse yedekten dönülüyor.httpd-ssl.confde üzerine yazılmadan önce yedekleniyor. - MariaDB "root parolasız mı" yoklaması yanlış şeyi ölçüyordu: makinede bir yerden (ör.
~/.my.cnf) parola bulunduğunda da başarılı sayıyordu. - Veritabanı ayar panelinde tek bir alanı değiştirmek, dokunulmamış dört ayarı da sıfırlıyordu. BRAMPP'ın dosyası kullanıcınınkinden sonra okunduğu için yazdığı her satır onunkini eziyordu.
- Sertifika güven denetimi her koşulda "geçti" diyordu; sistemdeki tüm sertifikaları sayıyor, aradığı kökü hiç aramıyordu. Sertifika süresi de hiç denetlenmiyordu.
- mkcert kurulumu takılan kullanıcı sihirbazı hiç bitiremiyordu — HTTPS isteğe bağlı, grup da öyle işaretlendi.
- Apache, Nginx'in portuna oturabiliyordu — ikisi aynı anda çalışamıyordu. BRAMPP'ın şeması Apache 80/443, Nginx 8080/8443; ikisinin birlikte çalışabilmesi bu ayrıma dayanıyor. Ama Homebrew'un stok
httpd-ssl.conf'uListen 8443ile geliyor ve sihirbaz onu "kullanıcının seçimi" sayıp koruyordu. Sonuç: iki servis de 8443'e bağlanmaya çalışıyor, ikinci başlayanAddress already in useile düşüyor — ekranda görünen tek şey "Nginx başlamıyor" oluyor, sebebi Apache'de olduğu hâlde. Yazılacak port artık çakışmayı denetliyor; gerçekten kullanıcı seçimi olan bir port (ör. 9443) korunuyor. Teşhis paneli de çakışmayı ayrı bir bulgu olarak bildiriyor. - phpMyAdmin ve pgAdmin bağlantıları standart olmayan HTTPS portunda çalışmıyordu.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
The last ten items from the audit backlog, and one trace the 2.0 update left behind. The weight is where it has been all along: the app saying it had done something it had not.
Fixed
- Updating left its disk image mounted. After moving to 2.0 every launch logged
volume is read only: the detach never ran as the app quit, and the next launch tried to delete the mount point. The detach now happens before quitting, and the swap script sweeps any leftover as a fallback. - Uninstall claimed to have deleted files it had not — with MariaDB that means believing your data directory is gone while it sits on disk. It also deleted that directory without confirming the server had stopped.
- The install screen showed a green check for an operation that had been cancelled; the outcome was inferred from any tick in the log body.
- Two installs could start at once, the second leaving the first with a prompt nobody could answer.
- PHP-FPM would not start at all with a multi-pool
www.conf— every pool'slistenwas rewritten to the same port. - The wizard wrote shared Apache configuration with no way back. It now backs the file up, runs
configtest, and restores from the backup if that fails.httpd-ssl.confis backed up before it is overwritten too. - The MariaDB root probe measured the wrong thing: it succeeded whenever a password was found somewhere on the machine, such as in
~/.my.cnf. - Changing one field in a database settings panel reset the four nobody had touched. BRAMPP's file is read after the user's, so every line it wrote overrode theirs.
- The certificate trust check passed unconditionally, counting every certificate on the system without looking for the one it was checking. Expiry was never checked either.
- Anyone whose mkcert install would not complete could not finish the wizard — HTTPS is optional and the group is now marked as such.
- Apache could take Nginx's port, so the two could not run together. BRAMPP's scheme is Apache on 80/443 and Nginx on 8080/8443, and running both at once depends on that split. Homebrew's stock
httpd-ssl.confshipsListen 8443, though, and the wizard preserved it as if it were the user's choice. Both services then bind 8443 and whichever starts second fails withAddress already in use— all the user sees is "Nginx will not start", while the cause is in Apache. The port written now checks for the clash, while a port that really is a deliberate choice (9443, say) is left alone. Diagnostics reports the clash as its own finding. - phpMyAdmin and pgAdmin links did not work on a non-standard HTTPS port.
Details: Changelog
Apple Silicon, macOS 14+.
BRAMPP 2.0
On dokuz düzeltme daha. Bu turun ağırlığı kaldırma ve kurulum akışlarında: uygulama sildiğini sandığınız şeyi silmemiş, kurduğunu sandığınız şeyi kurmamış olabiliyordu.
Eklendi
- Homebrew paketleri kendi sekmesinde, tek tek seçilip güncellenebiliyor.
brew outdatedmakinedeki her formülü sayar; burada elli paket ediyor vehttpdilephp,cocoapodsilejadxarasında kayboluyordu. Üçe ayrılıyor: BRAMPP'ın yönettikleri, onların bağımlılıkları, dokunmadığı geri kalanı. Çalışan bir servis yükseltilirse yeniden başlatılıyor — yükseltme ikiliyi değiştirir ama çalışan süreç eskisini tutmaya devam eder. - Elle güncelleme denetimi anında yanıt veriyor. Pencere tıklamayla birlikte açılıyor ve sonucu aynı pencerede gösteriyor. Açılıştaki denetim sessiz kalmaya devam ediyor.
Düzeltildi
- Kaldırma, silemediği dosyaları sildim diye bildiriyordu. Başarısız silme sessizce geçiliyor, betik yine "başarıyla kaldırıldı" diyordu — MariaDB'de bu, veri dizini diskte dururken silindiğini sanmanız demekti.
- Veri dizini, sunucunun durduğu doğrulanmadan siliniyordu. Çalışan bir sunucunun altından dosya çekmek geriye tutarsız bir dizin bırakır. Artık port on saniye yoklanıyor ve hâlâ dinleniyorsa hiçbir şey silinmiyor.
- Kurulum ekranı, olmayan başarıyı bildiriyordu. Sonuç, log gövdesindeki herhangi bir onay işaretinden çıkarılıyordu: açıkça iptal edilmiş bir PostgreSQL yapılandırması yeşil onay alıyordu.
- İki kurulum aynı anda başlayabiliyordu ve ikincisi birincinin üstüne yazıp onu yanıtlanamayan bir isteme mahkûm ediyordu.
- Profilleyiciyi kapatmak işe yaramıyordu — PHP-FPM yeniden başlatılmadığı için çalışan havuz profil kipinde kalıyor, cachegrind dosyaları birikmeye devam ediyordu.
- Tek "Kaydet" tıklaması, değişen ayar sayısı kadar eşzamanlı servis yeniden başlatması tetikliyordu; kilidi kaçıran biri PHP-FPM'i durmuş bırakabiliyordu.
- Sertifika süresi hiç denetlenmiyordu. Süresi dolmuş bir sertifika diskte durduğu için yenilenmiyor, tarayıcı hata verirken uygulama sertifikayı "var" sayıyordu.
- Teşhis panelinin sertifika güven denetimi her koşulda "geçti" diyordu — sistemdeki tüm sertifikaları sayıyor, aradığı kökü hiç aramıyordu.
- php.ini panelinde tanımsız direktif için varsayılan değer, dosyadaki değermiş gibi gösteriliyordu; PHP sürümü değişince de öncekinin değerleri kalıyordu.
- php.ini'de kayıtlı bir uzantı "devre dışı" görünüyor, açılınca ikinci kez kaydediliyor ve PHP onu iki kez yüklüyordu.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
Nineteen more fixes, weighted towards the install and uninstall flows: the app could report having removed something it had not, or installed something it had not.
Added
- Homebrew packages have their own tab and can be selected and upgraded individually.
brew outdatedcounts every formula on the machine — fifty here, withhttpdandphplost betweencocoapodsandjadx. They are split three ways: what BRAMPP manages, what those depend on, and everything else it does not touch. A running service that gets upgraded is restarted, because an upgrade replaces the binary while the running process keeps the old one. - A manual update check answers immediately. The window opens with the click and turns into the result in place. The check at launch stays silent.
Fixed
- Uninstall claimed to have deleted files it had not. A failed removal passed silently and the script still finished with success — with MariaDB that means believing your data directory is gone while it sits on disk.
- The data directory was deleted without confirming the server had stopped. Pulling files out from under a running server leaves it inconsistent. The port is now polled for ten seconds and nothing is deleted while it is still listening.
- The install screen reported success it did not have. The outcome was inferred from any tick in the log body, so a PostgreSQL configuration that aborted still showed a green check.
- Two installs could start at once, the second overwriting the first and leaving it with a prompt nobody could answer.
- Turning the profiler off did nothing — PHP-FPM was not restarted, so the running pool stayed in profile mode and kept writing cachegrind files.
- One Save fired as many concurrent service restarts as there were changed settings, and one that lost the lock could leave PHP-FPM stopped.
- Certificate expiry was never checked. An expired certificate sat on disk unrenewed, so the browser refused the site while the app considered the certificate present.
- The diagnostics trust check passed unconditionally — it counted every certificate on the system and never looked for the one it was checking.
- An undefined directive in the php.ini panel showed its default as though it came from the file, and switching PHP version carried the previous version's values across.
- An extension registered in php.ini read as disabled; enabling it added a second registration and PHP loaded it twice.
Details: Changelog
Apple Silicon, macOS 14+.
BRAMPP 1.9
On sekiz düzeltme. Çoğu aynı sınıftan: uygulama bir şeyin olduğunu bildiriyor, oysa olmamış — ya da olan bir şeyi hiç söylemiyor.
Düzeltildi
- Menü çubuğu simgesi kapalıyken pencereyi kapatmak uygulamayı erişilemez bırakıyordu. Pencere yok, Dock ikonu yok, menü çubuğu öğesi yok, ⌘Tab listesinde de yok — geri dönmenin tek yolu uygulamayı yeniden başlatmaktı.
- Dock menüsündeki "Servisleri Durdur ve Kapat" Node/Python/.NET uygulamalarını arkada bırakıyordu. Bu süreçler
nohupile başlatıldığından BRAMPP kapansa da yaşıyor ve bir sonraki açılışta "port kullanımda" olarak geri geliyorlardı. - Silinen alan adının vhost'u geri yazılabiliyordu. Silme yolunda dört bekleme noktası var ve biri yönetici parolası isteyebiliyor; o süre boyunca uçuştaki bir düzenleme görevi vhost'u geri yazıyordu.
- Paylaşımı durdurma, durduramadığında da "adres artık ölü" diyordu. Süreç sinyalleri atlattığında site internete açık kalmaya devam ediyor, asistan ise kullanıcıya kapandığını söylüyordu.
- Uygulama logunda 5 MB sonrası kayboluyordu. Log döndürme dosyaya yeni bir kimlik veriyor, uygulama ise eskisine yazmaya devam ediyordu: pencere o koşu boyunca bir daha satır göstermiyordu.
- Tek bir bozuk bayt tüm log geçmişini gizliyordu — pencere güncellenmiyor, log susmuş gibi görünüyordu.
- Aynı log satırları iki kez görünüyordu.
- Devre dışı bırakılmış alan adı, web sunucusu ayaktayken yeşil "çalışıyor" noktası gösteriyordu — oysa vhost'u silinmiş, site sunulmuyordu.
- Veritabanı geri yükleme MySQL'de satırları ikiye katlayabiliyordu. Kullanıcı denemesi başarısız olunca döküm baştan bir kez daha uygulanıyor, ilk denemedeki eklemeler geri alınmadığı için tekrar işleniyordu.
- Diskteki log geçmişinin yalnızca iki günü aranıyordu, yedi gün saklandığı hâlde: "dört gün önce ne oldu" sorusu sessizce boş dönüyordu.
/etc/hostsnewline ile bitmiyorsa yeni alan adı son satıra yapışıyordu — hem yeni ad çözülmüyor hem de yapıştığı satır bozuluyordu.- Apache yapılandırması zaten bozukken, yeni yazılan companion dosyaları da siliniyordu — silmek sorunu çözmüyor, yalnızca çalışan tek şeyi de götürüyordu.
- MCP portu başka bir süreçteyken konsola her tazelemede "MCP sunucusu durduruldu" satırı düşüyordu.
- İki BRAMPP kopyası aynı log dosyasına yazınca satırlar birbirini eziyordu.
- Yürütücü yolunda boşluk varsa süreç bilgisinde sütunlar kayıyordu — komut adının parçası CPU değeri olarak görünüyordu.
- ⌘N pencere gizliyken görünmeyen bir pencere kuyruğa alıyordu.
- Paylaşımı durdurma, alan adını küçük harfe indirmiyordu; büyük harfle açılan bir paylaşım küçük harfle kapatılamıyordu.
- Yardım metni iki aracı yanlış izin alanında gösteriyordu.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
Eighteen fixes, most of one kind: the app reported that something had happened when it had not — or never mentioned something that did.
Fixed
- Closing the window with the menu bar icon turned off made the app unreachable. No window, no Dock icon, no menu bar item, nothing in Cmd-Tab — the only way back was to relaunch.
- Stop services and quit, from the Dock menu, left Node, Python and .NET apps running. They are started with
nohup, so they outlive BRAMPP and return as a port already in use. - A deleted domain's vhost could be written back. The delete path has four waiting points and one of them can ask for an administrator password; an in-flight edit would restore the vhost during that window.
- Stopping a share said the address was dead even when it was not. When the process survives the signals the site stays on the internet, while the assistant reported it closed.
- Application logs vanished past 5 MB. Rotation gave the file a new identity while the app kept writing to the old one, so the window showed nothing more for that run.
- A single malformed byte hid the whole log — the window stopped updating and the log looked like it had gone quiet.
- The same log lines appeared twice.
- A disabled domain showed a green running dot whenever the web server was up, though its vhost had been removed and the site was not being served.
- Restoring a database could double rows on MySQL. When the first attempt failed the dump was applied again from the start, replaying inserts that the failed attempt had already committed.
- Only two days of the on-disk log history were searched though seven are kept: "what happened four days ago" came back empty.
- A new domain welded itself onto the last line of
/etc/hostswhen the file did not end in a newline — losing the new name and corrupting the line it landed on. - When the Apache configuration was already broken, freshly written companion files were deleted too — which fixed nothing and lost them as well.
- A console line claiming the MCP server had stopped appeared on every refresh while the port was held by another process.
- Two copies of BRAMPP writing the same log file overwrote each other's lines.
- A space in the executable path shifted the columns in process information, showing part of the command name as the CPU figure.
- Cmd-N with the window hidden queued a window nobody could see.
- Stopping a share did not lowercase the domain, so a share opened with capitals could not be closed with lowercase.
- The help text listed two tools under the wrong permission area.
Details: Changelog
Apple Silicon, macOS 14+.
BRAMPP 1.8
Güncelleme artık uygulamanın içinde bitiyor: bir düğme, uygulama kapanıyor, yeni sürümle açılıyor. Kalıbı açıp sürüklemek gerekmiyor — ve yönetici parolası hiçbir koşulda istenmiyor.
Eklendi
- "Güncelle ve yeniden başlat". Yeni sürüm, uygulama çalışırken hedefin yanına kopyalanıyor; çıkıştan sonra geriye aynı birimdeki iki yeniden adlandırma kalıyor, yani uygulamanın var olmadığı pencere saniyeler değil milisaniyeler sürüyor. Eski paket silinmiyor, yana alınıyor: yeni sürüm açılıp ayakta kaldığında siliniyor, açılmazsa geri konuyor. Homebrew servisleriniz durdurulmuyor — uygulamayı güncelliyorsunuz, geliştirme ortamınızı kapatmıyorsunuz. Hedef klasöre yazılamıyorsa düğme hiç gösterilmiyor ve eski yol birincil eylem olarak kalıyor; "BRAMPP kendini güncellemek için parolanı istiyor" alışkanlığı, bir saldırganın isteyeceği tam o alışkanlıktır.
- Teşhis panelinde "Yapılandırmayı onar" — yalnızca onarılacak bir şey varken görünüyor. phpMyAdmin/Adminer yapılandırmasındaki eski
Aliassırasını düzeltiyor: dosyayı.brampp.bakolarak yedekliyor,configtestçalıştırıyor ve geçmezse yedekten geri alıyor.
Değişti
- Paylaşım adresi daha erken geliyor. Bekleme, sistem çözümleyicisini 45 saniye boyunca yokluyordu. Canlı bir tünelde ölçüldü:
dig @1.1.1.1adı 0,02 saniyede çözdü, aynı anda sistem çözümleyicisi aynı adı hiç çözemedi. Yalnızcadig'e bakmak yanlış olurdu — tarayıcıgetaddrinfokullanır ve kenar cevabına "hazır" demek, açılamayacak bir bağlantı vermek olur. İkisi birlikte çalışıyor:digyalnızca adın kenarda var olduğunu saptıyor, saptadığı anda sistem çözümleyicisine 45 değil 6 saniye tanınıyor ve adres, zaten var olan uyarısıyla veriliyor.
Düzeltildi
- Güncelleme penceresi ana pencerenin arkasında açılıyordu — uygulama etkinleştirilirken AppKit kendi ana penceresini öne getiriyor, az önce öne alınmış bildirim onun altında kalıyordu. Yani pencere açılıyor ama kullanıcı görmüyordu.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
Updating now finishes inside the app: one button, the app quits and reopens on the new version. No opening the image and dragging — and no administrator password, ever.
Added
- Update and restart. The new version is copied next to the target while the app is still running, so after quitting only two same-volume renames remain — the window in which no application exists lasts milliseconds rather than seconds. The old bundle is not deleted but moved aside: it is removed once the new version has launched and stayed alive, and put back if it has not. Your Homebrew services keep running — you are updating the app, not shutting down your environment. If the target folder is not writable the button is not offered at all and dragging stays the primary action; teaching people that BRAMPP asks for their password to update itself is teaching them exactly what an attacker wants.
- Repair configuration, in Diagnostics — shown only when there is something to repair. It fixes the old
Aliasorder in the phpMyAdmin/Adminer configuration: the file is backed up as.brampp.bak,configtestis run, and the backup is restored if it fails.
Changed
- The shared address arrives sooner. The wait polled the system resolver for a full 45 seconds. Measured on a live tunnel:
dig @1.1.1.1resolved the name in 0.02s while the system resolver could not resolve it at all. Going bydigalone would be wrong — browsers usegetaddrinfo, and calling it ready on the edge's answer hands over a link that will not open. Both run together:digonly establishes that the name exists at the edge, and the moment it does, the system resolver gets six seconds instead of forty-five before the address is handed over with the warning it already carried.
Fixed
- The update window opened behind the main window. Activating the app brings its own main window forward, leaving the notice that had just been ordered front underneath it — so the window opened and the user never saw it.
Details: Changelog
Apple Silicon, macOS 14+.
BRAMPP 1.7
Dört düzeltme, dördü de aynı sınıftan: uygulama size bir şeyin olduğunu söylüyor, oysa olmamış. En ciddisi paylaşımda — sildiğiniz sitenin herkese açık adresi ölmüyor, başka bir siteyi yayınlamaya başlıyordu.
Düzeltildi
- Paylaşımdaki bir alan adını silmek, yeniden adlandırmak ya da devre dışı bırakmak tüneli açık bırakıyordu — ve adres başka bir siteyi yayınlamaya başlıyordu. Tünel
127.0.0.1'e bağlanıp alan adınıHostbaşlığında taşıdığı için, vhost silinince istek hiçbir sunucu bloğuyla eşleşmiyor ve varsayılan vhost'a düşüyordu. Sonuç: rastgele birtrycloudflare.comadresi, kapattığınızı sandığınız hâlde~/Sites/localhostkökünüzü —/phpmyadminve/adminerdahil — internete açıyordu. İstek loopback'ten geldiği için Apache'ninRequire localkısıtı da devreye girmiyordu. Yeniden adlandırmada daha da kötüydü: tünel kaydı eski adla saklandığından arayüzdeki rozet "kapalı" görünüyor, çalışan tüneli durdurmanın hiçbir yolu kalmıyordu. Artık vhost'a dokunan üç yolun üçü de önce paylaşımı kapatıyor ve konsola neden kapatıldığını yazıyor. - Asistan üzerinden veritabanı geri yükleme, tamamen başarısız bir işi "aktarıldı" diye bildiriyordu. PostgreSQL yolunda
ON_ERROR_STOPverilmediği için psql, dökümdeki her ifade hata verse bile sıfırla bitiyordu; hata metni de yutuluyordu. Aynı iş arayüzde yıllardır doğru yapılıyordu —MCPyolu geride kalmıştı. Artık--single-transactionile birlikte: yarıda kalan bir geri yükleme tamamen geri alınıyor, yeniden deneme yarım veritabanının üstüne yazmıyor. - Uygulama logunu "Temizle" ile boşaltmak, o koşu boyunca logu tamamen kaybettiriyordu. Dosya siliniyordu, oysa sarmalayıcının yönlendirmesi süreç başlarken bir kez kurulur: silinen dosyanın yerine yenisi doğmuyor, uygulama görünmez bir dosyaya yazmaya devam ediyordu. Log penceresi kalıcı olarak boş kalıyor, tek çare uygulamayı yeniden başlatmaktı. Artık dosya silinmiyor, içi boşaltılıyor.
- Devre dışı bırakılan bir PHP uzantısı "kurulu değil" görünüyor ve arayüzden geri açılamıyordu. Kurulu olup olmadığı yalnızca
php -mçıktısından çıkarılıyordu; devre dışı bırakma uzantıyı o listeden düşürdüğü için satır kurulmamış sayılıyor, onay kutusunun yerine "Kur" düğmesi geliyordu. Ona basınca da PEAR kaydı hâlâ durduğu için kurulum "zaten kurulu" hatasıyla düşüyordu — uzantıyı Finder'da elle yeniden adlandırmadan geri açmak mümkün değildi.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
Four fixes, all of one kind: the app told you something had happened when it had not. The worst was in sharing — deleting a site did not kill its public address, it repointed it at a different site.
Fixed
- Deleting, renaming or disabling a shared domain left the tunnel running — and the address began serving a different site. The tunnel connects to
127.0.0.1and carries the domain in theHostheader, so once the vhost was gone the request matched no server block and fell through to the default one. A randomtrycloudflare.comaddress then published~/Sites/localhost—/phpmyadminand/adminerincluded — while you believed you had shut it down. Apache'sRequire localdid not help either, because the request arrives from loopback. Renaming was worse still: the tunnel record kept the old name, so the badge read "off" and there was no way left to stop a running tunnel. All three paths that touch a vhost now close the share first and say in the console why. - Restoring a database through the assistant reported a completely failed job as imported. The PostgreSQL path passed no
ON_ERROR_STOP, so psql exited zero even when every statement in the dump failed, and the error text was swallowed on the way. The same work has been done correctly in the interface for a long time — the MCP path had fallen behind. It now runs with--single-transactionas well: a restore that breaks midway rolls back entirely, and the retry no longer writes over a half-applied database. - Clearing the application log lost that run's log entirely. The file was deleted, but the wrapper's redirection is set up once when the process starts: no new file took its place and the app kept writing into one nothing could open. The log window stayed empty until you restarted the app. The file is now emptied rather than removed.
- A disabled PHP extension looked "not installed" and could not be switched back on. Installed state was read only from
php -m, and disabling drops the extension from that list — so the row fell back to an Install button. Pressing it failed with "already installed", because the PEAR registration was still there. Short of renaming the file by hand in Finder, there was no way back.
Details: Changelog
Apple Silicon, macOS 14+.
BRAMPP 1.6
Uygulama artık kendi güncellemesini buluyor ve açmadan önce doğruluyor. Ama yükseltmenin asıl nedeni paylaşımlar: ikinci bir BRAMPP kopyası ya da bir test koşusu canlı tünelleri öldürebiliyordu, ölmüş bir tünel ise arayüzde canlı görünmeye devam ediyordu. 1.5'in içeriği de bu pakette.
Düzeltildi
- Birim testleri çalıştırmak — ya da yalnızca ikinci bir BRAMPP kopyasının açık olması — canlı Cloudflare tünellerini öldürüyordu. Tünellerin pid ve log dosyaları siliniyor, MCP portu çalışan kopyanın üstüne bağlanmaya çalışılıyor, Homebrew servisleri başlatılıyor ve "son çalışan servisler" listesi üzerine yazılıyordu. BRAMPP'ın tuttuğu makine düzeyindeki durum makineye aittir, bir sürece değil: ona artık yalnızca birincil kopya dokunuyor (
Core/ProcessRole.swift). Konsol satırları da hangi sürecin yazdığını taşıyor — kurulu uygulama, Xcode derlemesi, test ana uygulaması ve önizlemeler aynı dosyaya eklediği için bunu görmek bu kadar zordu. - cloudflared'i ölmüş bir paylaşım canlı bildirilmeye devam ediyordu. Servisler satırı yeşil kalıyor, MCP
list_sharesaracı adresi vermeyi sürdürüyor, Cloudflare ise Error 1033 döndürüyordu. Tüneller artık zaten dönen tazeleme döngüsünde gerçekle karşılaştırılıyor. - İkinci bir BRAMPP kopyasını kapatmak, birincinin canlı tünellerini öldürüyordu. Kapanan süreç artık yalnızca kendi başlattığı tünelleri durduruyor.
- "Paylaşımı durdur", site herkese açık kalırken başarı bildiriyordu. SIGKILL'e yükseltme yoktu ve bekleme, cloudflared'in 30 saniyelik kapanma payına karşı 0,4 saniyeydi.
- Veritabanı geri yükleme, başarısız olduğunda başarılı raporluyordu. Betik
if psql …; then exit 0; fiyazıp ardındanrc=$?okuyordu — POSIX'te koşulu başarısız olan veelse'i bulunmayan birif0 ile biter, yani hata kodu hiçbir zaman görülmüyordu. Hem PostgreSQL hem MariaDB tarafında. - MariaDB, PostgreSQL ya da Python'u kaldırmak yalnızca "paket ve yapılandırma dosyaları silinecek" diyordu — betik ise veri dizinini siliyordu: her veritabanınızı, ya da site-packages ağacının tamamını. Onay artık somut yolları adıyla sayıyor, yapılandırmayı veriden ayırıyor, neyin gittiğini söylüyor ve servis adının yazılmasını istiyor.
- Üretilen phpMyAdmin ve Adminer Apache yapılandırmaları
apachectl configtest'te AH00671 uyarısı veriyordu: ikiAliasyönergesi ters sıradaydı, bu yüzden ikincisi hiçbir zaman eşleşemiyordu. - Üç konsol satırı metin yerine ham çeviri anahtarını yazıyordu.
Eklendi
- Açılışta güncelleme bildirimi — kurulu sürüm, yeni sürüm, sürüm notları kaydırılabilir bir liste olarak, ve o sürümü atlama ya da sonra hatırlatma seçeneği.
- Ayarlar'da kendine ait bir Güncellemeler sekmesi: kanal, şimdi denetle, otomatik denetim, otomatik indirme ve bir güncelleme bulunduğunda ne yapılacağı.
- İndirilen dosya, hiçbir şey açılmadan önce doğrulanıyor: güncelleme manifestinde yayınlanan sağlama, dosyanın gerçekten beklenen yayın varlığından geldiği (yönlendirmelerin ardından yeniden denetlenerek), kod imzası, Team Identifier'ın çalışan uygulamanınkiyle aynı olduğu ve Gatekeeper'ın noter onayı kararı. Herhangi biri geçmezse indirilen dosya siliniyor. BRAMPP kendini asla değiştirmiyor — doğrulanan disk kalıbı size veriliyor.
- Manifestteki
blockedVersionsveminimumOSalanları dikkate alınıyor, böylece sorunlu çıkan bir sürüm onu zaten çalıştıran kişileri uyarabiliyor. - Servisler'deki cloudflared satırında, açık bütün paylaşımları tek seferde durduran bir düğme — bunu zaten yapan menü çubuğu komutunun yanına.
Değişti
- Güncelleme denetimi sürümü ve sağlamayı yayınlanan manifestten, sürüm notlarını ise yalnızca GitHub'dan okuyor — dosyayı sunan makine, ona kefil olan makine değil. Manifest geride kaldığında denetim GitHub'a düşüyor ve doğrulanamayacak bir indirme yerine sürüm sayfasını öneriyor.
- Yayın betiği o manifesti kendisi yayınlıyor, gerçek sağlamayla ve yalnızca noter onayından gerçekten geçmiş bir yapı için.
- Kullanılmayan proje çatısı algılayıcısı kaldırıldı.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
The state BRAMPP keeps belongs to the machine, not to a process — and until this release a second copy of the app, or a test run, would walk all over it. Also: BRAMPP now tells you when there is a new version, and verifies the download five ways before it opens.
Fixed
- Running the unit tests — or simply having a second copy of BRAMPP open — tore down the live environment. Cloudflare tunnels were killed, their pid and log files deleted, the MCP port was bound on top of the copy already holding it, Homebrew services were started, and the "last running services" list was overwritten. The machine-wide state BRAMPP keeps belongs to the machine, not to a process; only the primary instance touches it now (
Core/ProcessRole.swift). Console lines also carry which process wrote them, because the installed app, an Xcode build, the test host and previews all append to one file — that is what made this so hard to see. - A share kept being reported as live after its cloudflared had died. The Services row stayed green, the MCP
list_sharestool still handed out the address, and Cloudflare answered Error 1033. Tunnels are now checked against reality on the refresh loop that was already running. - Quitting a second copy of BRAMPP killed the first copy's live tunnels. A quitting process now only stops the tunnels it started itself.
- "Stop sharing" reported success while the site stayed public. There was no SIGKILL escalation and the wait was 0.4 s against cloudflared's 30-second grace period.
- Restoring a database reported success when it had failed. The script ran
if psql …; then exit 0; fiand readrc=$?afterwards — in POSIX anifwhose condition fails and which has noelseexits 0, so the failure code was never seen. Both PostgreSQL and MariaDB. - Uninstalling MariaDB, PostgreSQL or Python said only that "the package and its config files will be removed" — while the script deleted the data directory: every database, or the whole site-packages tree. The confirmation now names the concrete paths, separates configuration from data, says what dies, and asks you to type the service name.
- The generated phpMyAdmin and Adminer Apache configs made
apachectl configtestwarn AH00671. The twoAliasdirectives were in the wrong order, so the second could never match. - Three console lines printed their raw translation key instead of text.
Added
- An update notice on launch — the installed version, the new version, the release notes as a scrollable list, and the choice to skip that version or be reminded later.
- A dedicated Updates tab in Settings: channel, check now, automatic checking, automatic download, and what to do when one is found.
- Downloads are verified before anything opens — the checksum published in the update manifest, that the file really came from the expected release asset (re-checked after redirects), the code signature, that the Team Identifier matches the running app's own, and Gatekeeper's notarization verdict. Any failure deletes the download. BRAMPP never replaces itself: the verified disk image is handed to you.
- The manifest's
blockedVersionsandminimumOSare honoured, so a release that turns out to be harmful can warn the people already running it. - A button on the cloudflared row in Services that stops every open share at once, next to the menu bar command that already did it.
Changed
- Update checking reads the published manifest for the version and the checksum, and GitHub only for the release notes — so the host that serves the file is not also the host that vouches for it. When the manifest lags behind, the check falls back to GitHub and offers the release page instead of an unverifiable download.
- The release script publishes that manifest itself, with the real checksum, and only for a build that was actually notarized.
- The unused project framework detector was removed.
Details: Changelog
Apple Silicon, macOS 14+.