11 months ago

Changelog #0023 — 🛠️ Internal refactoring and improvements

HTTPie for Web & Desktop v2023.2.x is out, and it’s probably our biggest release yet — regarding lines of code changed, anyway!

✨What’s new

  • Added the ability to sync requests with binary data in text bodies
  • Added the ability to sync requests with binary data in form field values
  • Fixed various sync issues preventing some users from fully syncing
  • Fixed the auto-update dialog to appear only once for each version
  • Fixed an occasional crash when re-ordering items via drag-and-drop
  • Numerous small fixes and improvements throughout the app
  • ⚡️ A comprehensive refactoring and re-architecture of the entire codebase
  • 🏎️ Internal DX optimizations for rapid development of upcoming features

🛠️ Internal refactoring

We focused on reducing technical debt accumulated over the past 30+ releases. This led to a comprehensive refactoring and re-architecture. Our codebase v2 is much leaner and cleaner, and our internal DX and development pace has greatly improved.

Most impactful has been reworking our data model layer and state management system. The original codebase had evolved to keep much of its business logic inside jotai atoms, and we generally had very little abstraction in the model layer. This made the model layer code complex, rigid, and bug-prone.

Our new data layer is powered by an internal framework where all entities are defined as classes inheriting from a base Model, connected to a Backend. The latter provides implementions of reactive CRUD on top of localStorage, RxDB, etc.

The decision to write our solution came after carefully evaluating existing options. Our app is highly data-driven, and we couldn’t find a solution to satisfy all our criteria (class-based models, support for relationships, swappable storage backends, sync and React interface as an add-on, etc.).

We took inspiration from the many frameworks we worked with throughout our careers. And maybe surprisingly, Django’s ORM layer impacted our design choices and the API quite a bit. The resulting framework relies on Zod for schemas and validation and Valtio for React integration.

We’re extremely pleased with the result and hope to open-source the framework soon. We cannot wait to ship our upcoming AI, collaboration, and scripting features we’re building already using the new framework.

🤩 Happy API testing, and see you again soon!