Title: First step towards MV3 date: 2024-04-19 17:00 
Series: Manifest v3 

We have been working on migration to Manifest v3 (MV3) for some time and today we
are shipping a JShelter version 0.18 that implements stateless replacement for
background pages which is a first step towards MV3.

MV2 extensions were allowed to create background pages. These pages allow running
JavaScript code and keep state like variables for the whole browser session.
Essentially, all background pages started with the browser and lasted until the
user closed the browser. Hence, we could utilize background pages to safe all
information needed to be kept in memory. For instance, JShelter needs to store:

* hashes used as a seed for JavaScript shield anti-fingerprinting protection,
* number of API calls needed for Fingerprint detector, which the user can see in
the pop up and fingerprinting report,
* information needed to keep pop up icon dynamic,
* etc.

We needed to solve issues related to the migration of all these information from
regular JavaScript variables to Web Storage. As we expect that other extensions
need to solve the same problem, we created a [stateless NSCL
branch](https://github.com/hackademix/nscl/tree/stateless). Among others, we
needed to solve the issue of writing to the storage too frequently. As the core
of JShelter is heavily stateful, we needed to rewrite important parts that were
in the code base for years and were proven to work.

JShelter has repeatable tests and we run additional testing, especially under
circumstances like this change. Everything should run the same as it used to
work in 0.17. However, please be cautious and report back any odd behavior that
you encounter with 0.18 and later versions.

Migration to stateless or non-persistent background pages is needed for MV3 but
it is still not a final step. Expect other major changes in JShelter core code
including removal of Network Boundary Shield for Chromium-based browsers soon.
Hence, keep cautious also in the following months and report back any issues
that you encounter. Have a look at our [Release page](/versions/) for more
information about the changes in JShelter.
