Postie — Native macOS API Client
API client native macOS yang super ringan — alternatif Postman/Insomnia tanpa bloat Electron. 100% SwiftUI, konsisten di bawah 50MB RAM, dan zero dependencies.
- Role
- iOS Developer
- Ownership
- Solo builder: arsitektur SwiftUI, networking layer, UI/UX, manajemen state, dan deployment workflow
- Company
- Personal Project
- Client
- Developer macOS yang butuh API client ringan
- Team
- Solo
- Period
- Des 2025 - Jan 2026
- Focus
- macOS, Swift
Overview
Postie adalah API client native macOS yang dibangun 100% dengan SwiftUI dan AppKit, tanpa satupun dependency pihak ketiga. Tujuan utamanya: menyediakan tool testing API yang profesional tapi super ringan — kebalikan dari Postman/Insomnia yang boros RAM karena dibangun di atas Electron.
Fitur utamanya meliputi: full HTTP methods (GET, POST, PUT, DELETE, PATCH), smart request builder dengan validasi syntax, bearer token shortcut, dynamic JSON beautifier, response rendering untuk JSON/HTML/Image/Plain Text, search in response dengan highlighting, request collections, environment management dengan variable interpolation, request history, smart download engine, dan interactive onboarding.
Postie juga punya fitur productivity seperti keyboard shortcuts, toast notifications, export response, raw/formatted toggle, dan latency evaluator dengan indikator warna.
Tech & Libraries
Teknologi dan library yang dipakai atau disentuh di project ini:
Problem
API client modern seperti Postman dan Insomnia dibangun di atas Electron, yang mengakibatkan konsumsi RAM sangat tinggi — 500MB+ hanya untuk request GET sederhana. Developer yang bekerja dengan resource terbatas (misalnya menjalankan banyak dev tools sekaligus) mengalami slowdown signifikan.
Selain itu, aplikasi Electron punya startup time yang lambat (3+ detik), splash screen, dan bloat fitur yang tidak diperlukan. Masalah privacy juga muncul karena beberapa tool mengirim telemetry dan cloud sync tanpa sepengetahuan user.
My Role & Ownership
Solo builder: arsitektur SwiftUI, networking layer, UI/UX, manajemen state, dan deployment workflow
Technical Approach
Postie dibangun sebagai aplikasi macOS native untuk menghindari overhead Electron pada API client modern. SwiftUI menangani interface utama, AppKit dipakai untuk area yang butuh kontrol lebih rendah seperti text rendering dan file panel, sementara URLSession menjadi layer networking.
Pendekatannya dibuat simple tapi ketat: MVVM memisahkan state UI dari logic request, service layer menangani networking/collection/environment, async-await dipakai untuk flow request modern, dan cache dibersihkan secara eksplisit setelah response agar memory footprint tetap rendah.
Architecture Notes
Arsitektur Postie memakai MVVM + Service Layer agar UI, state, dan IO tidak saling bercampur.
- ViewModel menyimpan UI state dan mengorkestrasi event dari user seperti send request, switch environment, dan render response.
- NetworkService, FileService, CollectionService, dan EnvironmentService dibuat stateless supaya business logic mudah dites dan predictable.
- URLSession menjadi boundary networking, sehingga request/response handling tidak bergantung ke third-party HTTP client.
- NSTextView dipakai untuk payload besar agar rendering JSON/HTML lebih stabil dibanding memaksa semuanya ke SwiftUI Text.
- NSSavePanel dan NSOpenPanel menjaga operasi file tetap sesuai sandboxing macOS.
Trade-offs
Postie sengaja memilih native-first dan privacy-first, walaupun itu membuat scope development lebih berat.
- Tidak memakai Electron. Alternatif itu bisa mempercepat cross-platform delivery, tapi native macOS memberi startup, memory usage, dan feel UI yang lebih baik untuk target user.
- Tidak memakai third-party dependencies. Konsekuensinya lebih banyak komponen dibangun sendiri, tapi supply-chain risk dan dependency maintenance menjadi jauh lebih kecil.
- Tidak menambahkan cloud sync dan telemetry. User privacy lebih kuat, tetapi insight usage dan sinkronisasi antar device harus ditunda.
- UserDefaults cukup untuk storage awal karena scope data masih sederhana. Jika collection semakin kompleks, storage perlu naik ke SQLite/Core Data.
Implementation Highlights
- NSTextView untuk rendering payload besar — menghindari memory bloat SwiftUI Text
- Stateless Service layer — semua UI state di ViewModel, behavior predictable
- User-Initiated File Access via NSSavePanel — compliant dengan sandboxing macOS
- Explicit cache clearing setelah setiap response — footprint memori tetap rendah
- Async/Await native tanpa completion handler — kode bersih dan maintainable
- Dynamic JSON beautifier dengan syntax highlighting
- Search in response dengan real-time highlighting
- Latency evaluator dengan indikator warna
Results
- Tool testing API profesional yang menghargai resource sistem — 36MB RAM idle vs 520MB Postman, startup 0.3 detik, tanpa telemetry atau cloud sync.
- Konsumsi RAM 36MB idle vs 520MB Postman — 14x lebih hemat
- Startup time 0.3 detik vs 3.2 detik Postman — 10x lebih cepat
- Zero third-party dependencies — zero security risk
- Request collections dan environment management untuk organisasi API
- Smart download engine dengan auto-detect content type
- RAM idle: 36MB
- RAM setelah 10 request: 42MB
- RAM setelah JSON 5MB: 48MB
- Cold start: 0.3 detik
- Warm start: 0.1 detik