Changelog #0023 — 🛠️ Internal refactoring and improvements
Published: 2023-05-29 15:13:25

---
title: Changelog #0023 — 🛠️ Internal refactoring and improvements
published: true
description: HTTPie for Web & Desktop 2023.2.x with improved sync, bug fixes, and a comprehensive internal refactoring.
cover_image: https://httpie.io/Images/Share/blog-changelog-0023.png
canonical_url: https://httpie.io/blog/changelog-0023
---

HTTPie for Web & Desktop [v2023.2.x](https://github.com/httpie/desktop/releases/tag/v2023.2.4) 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.

![files](https://httpie.io/_next/image?url=%2FBlog%2Fchangelog-0023%2Fpr-OKJIHAHN.png&w=1920&q=95)

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](https://github.com/pmndrs/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](https://zod.dev/) for schemas and validation and [Valtio](https://github.com/pmndrs/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](https://httpie.io/ai), [collaboration](https://httpie.io/blog/changelog-0020#help-wanted-teams-and-collaboration), and scripting features we’re building already using the new framework.


## 🤗 Happy API testing, and see you again soon!

- ✉️ Thoughts? Questions? Shoot us an email at [feedback@httpie.io](mailto:feedback@httpie.io).
- 📋 You can also help us improve by completing a [quick survey](https://httpie.io/survey).
- 👉 Follow [@httpie](https://twitter.com/httpie) and join our [Discord community](https://httpie.io/discord) to stay up to date.
- 👩‍💻 We’re looking for new colleagues in [engineering and design roles](https://httpie.io/jobs).

---

Originally published on https://httpie.io/blog/changelog-0023