<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://www.plasmo.com/engineering</id>
    <title>Engineering Log</title>
    <updated>2025-02-22T04:39:31.714Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>Plasmo Engineering</name>
        <email>social@plasmo.com</email>
        <uri>https://www.plasmo.com/engineering</uri>
    </author>
    <link rel="alternate" href="https://www.plasmo.com/engineering"/>
    <link rel="self" href="https://www.plasmo.com/engineering/atom.xml"/>
    <subtitle>This is Louis Vilgo, Co-Captain and Chief Engineering Officer of Plasmo. Welcome to The Official Engineering Log Frequency, Hailing is Open.</subtitle>
    <rights>All rights reserved 2025, Plasmo Corp.</rights>
    <entry>
        <title type="html"><![CDATA[Entry 2023.05]]></title>
        <id>https://www.plasmo.com/engineering/log/2023.05</id>
        <link href="https://www.plasmo.com/engineering/log/2023.05"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[Downsizing]]></summary>
        <content type="html"><![CDATA[

## Update D.68

### 2023.05.28

The got package has gone full ESM with node16 as a hard requirement. Upgrading is futile at the time of writing due to NextJS not supporting `moduleResolution: bundler`. We found a nice combination for CLI development to adopt fully ESM without having to include `.js` in the file extension. Since we bundle them at the very end, we can use bundler moduleResolution and allow TS extension import.

## Update C.67

https://github.com/PlasmoHQ/plasmo/releases/tag/v0.73.6

## Update B.66

https://github.com/PlasmoHQ/plasmo/releases/tag/v0.72.2

https://github.com/PlasmoHQ/plasmo/releases/tag/v0.71.1

## Update A.65

https://github.com/PlasmoHQ/plasmo/releases/tag/v0.70.1
]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2023.04]]></title>
        <id>https://www.plasmo.com/engineering/log/2023.04</id>
        <link href="https://www.plasmo.com/engineering/log/2023.04"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[Hiatus]]></summary>
        <content type="html"><![CDATA[

## Update D.64

https://github.com/PlasmoHQ/plasmo/releases/tag/v0.69.2

## Update C.63

https://github.com/PlasmoHQ/plasmo/releases/tag/v0.68.3

## Update B.62

Updated Fronti and Itero to remove support, focussing on experimentation.

## Update A.61

Added manual API for Itero: https://docs.plasmo.com/itero/api
]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2023.03]]></title>
        <id>https://www.plasmo.com/engineering/log/2023.03</id>
        <link href="https://www.plasmo.com/engineering/log/2023.03"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[Selector API, framework update]]></summary>
        <content type="html"><![CDATA[

## Update D.60

Shipped a new version of the MacOS policy that supports Chrome, Brave, Edge, Vivaldi, and Arc.

## Update C.59

Shipped a new version of the installer that supports Chrome, Brave and Edge.

## Update B.58

### 2023.03.10

`12:00`, we are revamping Fronti to be more clear on our product and features.

### 2023.03.09

`12:00`, new framework version released: https://github.com/PlasmoHQ/plasmo/releases/tag/v0.67.4

### 2023.03.08

`12:00`, we fixed an issue with the framework environment variable - private environments are still being included in the client-side bundle.

## Update A.57

### 2023.03.07

`12:00`, we created a new CRON-job-based selector API.

### 2023.03.05

`12:00`, new framework version released: https://github.com/PlasmoHQ/plasmo/releases/tag/v0.66.0
]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2023.02]]></title>
        <id>https://www.plasmo.com/engineering/log/2023.02</id>
        <link href="https://www.plasmo.com/engineering/log/2023.02"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[Sandler - 50 Extensions]]></summary>
        <content type="html"><![CDATA[

## Update D.56

### 2023.02.27

`12:00`, we are working on a new API to help monitor dead selectors.

### 2023.02.25

`12:00`, fixed a bug with messaging API's typing.

### 2023.02.24

`12:00`, builds listing UI for Itero is out.

### 2023.02.23

`12:00`, a new framework version is out: https://github.com/PlasmoHQ/plasmo/releases/tag/v0.65.1

`16:00`, we added cookie consent to Itero.

### 2023.02.22

`12:00`, investigating WASM with web extension - we will need to spawn a SandBox page and pipe message to it.

## Update C.55

### 2023.02.21

`12:00`, we sent an OSS beacon: https://github.com/msfrisbie/spy-extension/pull/1

### 2023.02.20

`12:00`, added a new with-react-native example: https://github.com/PlasmoHQ/examples/tree/main/with-react-native

### 2023.02.15

`12:00`, we fixed the port binding issue with the messaging API.

### 2023.02.13

`12:00`, a new framework version is out: https://github.com/PlasmoHQ/plasmo/releases/tag/v0.65.0

### 2023.02.12

`12:00`, we added support for custom `.npmrc` for Itero builder.

## Update B.54

### 2023.02.11

`12:00`, we added a commit hash linking to Itero build log.

`16:00`, main-world content script injection is functional.

### 2023.02.10

`12:00`, we added a progress bar for Itero loading to mitigate SSR slow hydration issue.

### 2023.02.09

`12:00`, we implemented a content script injector for the framework.

## Update A.53

### 2023.02.05

`12:00`, we fixed the manifest parser on Itero to prevent client-side crashes.

### 2023.02.04

`12:00`, we updated the UI for Itero.

### 2023.02.01

`12:00`, we've created 7 extensions thus far - 43 to go.
]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2023.01]]></title>
        <id>https://www.plasmo.com/engineering/log/2023.01</id>
        <link href="https://www.plasmo.com/engineering/log/2023.01"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[New year, Framework, and new Projects]]></summary>
        <content type="html"><![CDATA[

## Update D.52

### 2023.01.31

`12:00`, implemented `quick-webcam-mirror` for Sandler

### 2023.01.30

`12:00`, revamped the initialization prompt for the framework

### 2023.01.29

`12:00`, we released version 0.64.0 of the framework: https://github.com/PlasmoHQ/plasmo/releases/tag/v0.64.0

### 2023.01.27

`12:00`, apparently, Sentry source-map uploading is only available in the production environment, not preview.

### 2023.01.26

`12:00`, we implemented Plasmo Secure Storage, ready to be reviewed: https://github.com/PlasmoHQ/storage/pull/24. This PR also introduces a major change to storage - we removed the "secret" terminology and used "copied" instead. By default, values will not be copied between storage.

`20:00`, we improved the `with-firebase-auth` example to include firestore usage in the extension pages. Also improved the associated blog: https://www.plasmo.com/blog/posts/firebase-chrome-extension

### 2023.01.25

`12:00`, we were [/live](https://www.plasmo.com/s/live)

### 2023.01.24

`12:00`, we're beginning to refactor the storage module to support secure storage, as well as making it by default not synced with localStorage. We will be using the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) to encrypt the values.

### 2023.01.23

`12:00`, we added two new features to the framework: One prioritizes the alias, which will allow us to bypass the gzip issue. The other is the ability to infer environment variable auto-completion from env files.

### 2023.01.22

`12:00`, authentication flow with `jose` works, however, the request threw a gzip uncompress error. Upon network inspection, we found the response was plain text... We tried to play around with the gzip polyfill to no avail.

## Update C.51

### 2023.01.20

`12:00`, we investigated further and found that we can replace the access token retrieval flow with a custom implementation. We will be using `jose` for our key generation.

### 2023.01.19

`12:00`, we created a guide on how to [Migrate to Plasmo](https://docs.plasmo.com/quickstarts/migrate-to-plasmo)

### 2023.01.18

`12:00`, we're seeing an issue with the [crypto-browserify](https://github.com/crypto-browserify/crypto-browserify) module - it is not very complete. It lacks `KeyObject` interface. We will need to figure out a way around this.

### 2023.01.17

`12:00`, fixed an issue with Itero's account reconciliation mechanism.

### 2023.01.16

`12:00`, refactored Sandler to have shared components and theme.

### 2023.01.15

`12:00`, initialize theming strategy for Sandler

## Update B.50

### 2023.01.14

`12:00`, finalized Stripe dashboard with ninja mode.

`22:00`, after some fiddling with the prod bundling mechanism, we found that by disabling scope hoisting, the ESM bundle was imported properly. We've added a flag to disable hoisting for production bundling: `--no-hoist`.

### 2023.01.13

`12:00`, Stripe dashboard up and running with MRR calculation and ARR graph.

`16:00`, found an issue with production bundling - somehow, ESM modules are not being bundled properly - the tree shaking mechanism seems broken (?).

### 2023.01.12

`12:00`, we added a new flag to control Plasmo sourcemap behavior in production. There are now two flags on prod: `--inline-source-maps`, `--source-maps`. By default, no sourcemaps are generated in production.

### 2023.01.11

`12:00`, added more dependency to bundle polyfill on Plasmo side, until ESM pipeline is fully working on Parcel end.

`16:00`, we found an issue with Stripe API not running on BGSW context - apparently, the Node API tries to initiate webhook listener as well, causing it to 429 and repeating requests constantly. Switching to plain fetch worked well - make sure the method is correct. Apparently, Stripe will return 429 if sending a POST request to a GET route.

### 2023.01.10

`12:00`, updated Fronti following design guidelines

`16:00`, triaging an issue with the prod bundling pipeline of the framework. We're working to reproduce the issue on our end.

### 2023.01.09

`12:00`, initialize internal Stripe Dashboard

## Update A.49

### 2023.01.07

`12:00`, wrapping up Twitter Playback Speed

### 2023.01.06

`12:00`, created Fidgetoy

### 2023.01.05

`12:00`, created Vercel Redeploy

### 2023.01.04

`12:00`, initiate Sandler

### 2023.01.03

`12:00`, we're working on some improvements to the stability of the framework.

### 2023.01.01

`12:00`, Happy New Year!
]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.12]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.12</id>
        <link href="https://www.plasmo.com/engineering/log/2022.12"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[Itero Publisher, Itero Builder, Build Browser Extensions Book]]></summary>
        <content type="html"><![CDATA[

## Update D.48

### 2022.12.30

`12:00`, we're working on improving Pallas' utility with a new feature to record issues.

`20:00`, we fixed an issue with the React-Refresh HMR not working. It was due to a mismatching version between the runtime and the wrapper. We fixed the issue by polyfilling react-runtime itself.

### 2022.12.29

`12:00`, we merged the new Plasmo framework runtime and released https://github.com/PlasmoHQ/plasmo/releases/tag/v0.61.0

### 2022.12.28

`12:00`, we released Pallas v2 with a larger data set, with broader extension knowledge.

`16:00`, we fixed an issue with Itero Mac Mobile Policy generator regarding the UUID.

### 2022.12.27

`12:00`, we are improving our docs: https://github.com/PlasmoHQ/docs/pull/28

`20:00`, we are improving the plasmo runtime. Specifically, we're dissecting the BGSW runtime and centralizing some of the reloading logic to be propagated from BGSW as a source of truth.

### 2022.12.26

`12:00`, we are shipping a new installation flow for Itero - more straightforward, transparent, and step-by-step instructions.

### 2022.12.25

`12:00`, Happy Holiday! Hope all is well with our tiny little universe.

### 2022.12.24

`12:00`, we are experimenting with the UTF8 issue. Plasmo bundler is leaving some non-UTF8 strings inside the final bundle, which caused the browser to throw an error. Issue: https://github.com/PlasmoHQ/plasmo/issues/351

### 2022.12.23

`12:00`, we released a blog post detailing how Pallas was built: https://www.plasmo.com/blog/posts/pallas-a-chrome-extension-ai-bot

### 2022.12.22

`12:00`, we launched Pallas v0 on our Discord.

## Update C.47

### 2022.12.21

`12:00`, we fixed our blog assets caching on fronti.

### 2022.12.20

`12:00`, we fixed the login/signup flow for fronti -> itero flow, as well as wordings within itero.

### 2022.12.19

`12:00`, we fixed the antd example to be more specific to CSUI scope.

![Pallas v0 icon](/assets/pallas-bw-circle.png)

`20:00`, we started a Pallas, a new LLM-powered space fleet to be deployed soon.

### 2022.12.18

`12:00`, we released a new canary on the framework to address the polyfill issue. The bundler config for the polyfill were misconfigured to output node platform bundle instead of browser.

### 2022.12.17

`12:00`, we released the new version of our docs: https://docs.plasmo.com/:

- Messaging API docs: https://docs.plasmo.com/framework/messaging
- Revamped docs structure

### 2022.12.15

`12:00`, we released Plasmo framework v0.60.0, changelog: https://github.com/PlasmoHQ/plasmo/releases/tag/v0.60.0

## Update B.46

### 2022.12.14

`12:00`, we added bundle-buddy support with the `--bundle-buddy` flag: https://github.com/PlasmoHQ/plasmo/issues/319

`16:00`, we revamped the structure of the docs to be more organized and showcase our products.

### 2022.12.13

`12:00`, we fixed the issue with CSUI running on document_start thanks to a community contributed PR.

`16:00`, we started working on the documentation for the Messaging API, looking to release the v0 for community feedback next week.

### 2022.12.12

`12:00`, we released a canary version of the Plasmo framework with the new messaging API.

### 2022.12.10

`12:00`, we decided to create a separate method for the Ports API. The Message API is for a one-time REST-like request API, whereas the Ports API is for 2-ways long-lived communication.

### 2022.12.09

`12:00`, we fixed an issue with Itero env loading failed to normalize the payload. There's also an issue with the length restriction of the payload, to which we have added a max length to the text area.

### 2022.12.08

`12:00`, we added a new feature in Itero team where the owner can add extra seats. We also refactored a majority of the code used to check subscription and tier data within Itero backend.

## Update A.45

### 2022.12.07

`12:00`, we are refactoring the messaging API to use port messaging.

`16:00`, we decided to keep both the one-way messaging API and separate the port API into its own API instead, since each serves a certain purpose.

### 2022.12.06

`12:00`, we are moving our CMS to Notion and adding integration between Notion to our Fronti MDX Container.

### 2022.12.05

`12:00`, we fixed the live-reload issue with content-scripts dev runtime. There was a race condition between when the file is actually written to disk, and when the Parcel HMR runtime reported the incremental compilation changes. By consolidating these two events, we were able to ensure CSUI reloading is in sync with the file system, ensuring that the browser can consume the latest bundle.

`16:00`, we fixed the CRLF issue again. This time, it was due to our release process using a Windows machine, which saved the `bin` as with CRLF. By forcing the local files to be as-is, we should be able to avoid this issue.

### 2022.12.04

`12:00`, we integrated builder with the GitHub push event.

### 2022.12.03

`12:00`, we added new documentation:

- https://docs.plasmo.com/browser-extension/content-scripts-ui/life-cycle
- https://docs.plasmo.com/browser-extension/content-scripts-ui/styling
- https://docs.plasmo.com/customization/internal-path

`16:00`, we fixed the following docs:

- https://docs.plasmo.com/customization/alias
- https://docs.plasmo.com/browser-extension/env
- https://docs.plasmo.com/workflows/build#with-a-specific-target

### 2022.12.02

`12:00`, we begin a fixathon operation, seeking to patch up as many docs issue as possible.

`16:00`, we bumped all of our docs version dependencies.

![buildingbrowserextensions](/engineering/screenshots/2022-12-02-01-40-59.png)

### 2022.12.01

`12:00`, created a more [customer-friendly change log](/p/changelog).

`14:00`, a friend of ours, Matt Frisbie, released a book called Building Browser Extensions. We added a section about this book on fronti. [Click here](/p/buildingbrowserextensions) to get the book.

## Hall of Gratitude

- https://github.com/tuntun0609 for https://github.com/PlasmoHQ/examples/pull/23
- https://github.com/ObinnaAka for https://github.com/PlasmoHQ/docs/pull/24
- https://github.com/process1024 for https://github.com/PlasmoHQ/plasmo/pull/337
]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.11]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.11</id>
        <link href="https://www.plasmo.com/engineering/log/2022.11"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[Fronti v2, Itero GitHub App]]></summary>
        <content type="html"><![CDATA[

## Update D.44

### 2022.11.29

`00:00`, we released a hotfix to address the issue with Itero uploading.

### 2022.11.28

`12:00`, we found a bug in both prod and staging after the release of Itero builder. Weirdly enough, we were unsuccessful in reproducing the problem locally.

`20:00`, we were able to replicate the issue by building itero locally. It appears that the prod bundling process has a leaking abstraction.

`23:00`, we isolated the issue to be with the version of [NextJS](https://nextjs.org/) we were using. Apparently, its production bundler was having a problem compiling the `crypto` module for the client side.

### 2022.11.27

`12:00`, we are switching focus on Itero publisher as we gather feedback for our messaging module. Itero publisher will facilitate what `bpp` does right within Itero platform itself.

### 2022.11.26

`12:00`, the messaging module is progressing smoothly - we are leveraging our file system API to orchestrate the message handlers.

### 2022.11.25

`12:00`, we created the first draft of `@plasmohq/messaging`: https://github.com/PlasmoHQ/plasmo/pull/310

### 2022.11.24

`12:00`, we added a pre-authentication check-in step for Itero to avoid showing misleading UI.

### 2022.11.23

`12:00`, we found an issue with invoking an internal API from another internal API - the request became stale during transport. We will test out another strategy to invoke function within the webhook handler. If this does not work, we will simply await the logic and cross our fingers that the checking will never surpass 10s.

`14:00`, we deployed Itero builder to beta.

### 2022.11.22

`12:00`, we are having some trouble deploying our GitHub webhook. Apparently, Vercel terminates serverless API if a response was sent. This prompts us to rethink our webhook strategy.

## Update C.43

### 2022.11.21

`12:00`, Plasmo `0.59.0` was released with a minor bug in the binary files - apparently, it contains DOS line endings. We released a patch `0.59.1` to address that issue.

### 2022.11.20

`12:00`, we are upgrading the framework's key dependency (Parcel) to `2.8.0`, and releasing a couple new features that were worked on last week.

### 2022.11.19

`12:00`, we refactored Itero Builder to use access token passing instead of Secret API. This allows developers to specify arbitrary scripts to run without escalating their permission.

### 2022.11.18

`12:00`, Itero Builder is approaching gold status - staging End-to-end test are all functional.

### 2022.11.17

`12:00`, we fixed an issue with our SSR auth handling.

### 2022.11.16

`12:00`, we refined the auth logic for Itero to handle redirection edge cases from external sites.

### 2022.11.15

`12:00`, we improved the webhook pipeline for Itero GitHub bot to track PR comments and account linking.

## Update B.42

### 2022.11.14

`12:00`, the Itero GitHub bot is now responding to PRs: https://github.com/PlasmoHQ/with-wasm-zig/pull/1

### 2022.11.13

`12:00`, we integrated GitHub OAuth into Itero and repository linking.

### 2022.11.12

`12:00`, we are investigating GitHub App installation flow + OAuth callback to add them into Itero.

### 2022.11.11

`12:00`, we launched a v2 of [fronti](/p/fronti).

`16:00`, we initiated an integrated builder solution for Itero. The end-to-end setup is done.

### 2022.11.10

`12:00`, we finalized GitHub App integration via webhook into Itero.

### 2022.11.09

`12:00`, half of the crew is facing a water pipeline issue over the past 48 hours. Engineering might be a bit slow today.

`18:00`, the water issue has been somewhat resolved: https://discord.com/channels/946290204443025438/946290204904390693/1040027705636302878

`20:00`, we are adding GitHub app to Itero. Some technical nitpicks we noticed while reading GitHub's code:

- Their webhook handler implements the event emitter pattern, which centralizes handlers for the emitter instance. The main drawback is that this pattern is not suitable for serverless architecture.
- Their verify/sign function accepts a string, however `hmac.update` accepts string, Buffer, TypedArray and Dataview: https://nodejs.org/api/crypto.html#hmacupdatedata-inputencoding

## Update A.41

### 2022.11.08

`12:00`, we added a post-processing resolver to the framework for ts-path resolve: https://github.com/PlasmoHQ/plasmo/pull/285

`20:00`, we added some fun animation on Fronti leveraging emotion for keyframe and tailwind for alignment, color and sizing.

### 2022.11.07

`12:00`, we bumped the `bpp` action in the Plasmo framework to v3: https://github.com/PlasmoHQ/plasmo/pull/286

### 2022.11.06

`12:00`, we seasoned https://github.com/PlasmoHQ/plasmo/pull/282, adding `--tag` for plasmo bundle.

### 2022.11.05

`02:00`, we revamped the 404 page for fronti.

### 2022.11.04

`12:00`, we decided to remove the Vercel comment feature from https://docs.plasmo.com/ as it exposes the activity of any logged-in user looking at the documentation (including the page they are currently looking at).

`16:00`, we bumped the development dependencies of `bpp` and published https://github.com/PlasmoHQ/bpp/releases/tag/v3.1.0

### 2022.11.03

`12:00`, we updated the pricing for our paid SaaS platform - https://www.plasmo.com/#pricing

### 2022.11.02

`12:00`, we added the vercel beta comment feature to https://docs.plasmo.com/ to help contributors suggest quick comments on the documentation.

![Itero 0.10.0](/engineering/screenshots/2022-11-01-23-42-35.png)

### 2022.11.01

`12:00`, we're testing out a hybrid between Emotion and Tailwind. We don't want to use a babel preprocessor, as it ties our solution to babel. The first attempt configuring a custom cache revealed another issue - tailwind's preflight style needed to be injected before the emotion stylesheet. Apparently, custom CSS injection order has been a headache with NextJS for a while.

`18:00`, we released `Itero 0.10.0`, still under a beta flag.

## Hall of Gratitude

- https://github.com/imbdb for https://github.com/PlasmoHQ/plasmo/pull/282
- https://github.com/jlalmes for https://github.com/PlasmoHQ/plasmo/pull/285
- https://github.com/yehuachun for https://github.com/PlasmoHQ/plasmo/commit/f4ed50f8286443abeb1a397acb4477961f9b4920#r89269833
- https://github.com/tyn1998 for https://github.com/PlasmoHQ/examples/pull/20
]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.10]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.10</id>
        <link href="https://www.plasmo.com/engineering/log/2022.10"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[Itero Open Beta]]></summary>
        <content type="html"><![CDATA[

## Update D.40

### 2022.10.31

`12:00`, we found a critical bug on Itero - new signup does not work. We are debugging the issue on production environment.

### 2022.10.29

`12:00`, investigating https://github.com/PlasmoHQ/plasmo/pull/281, more details in https://github.com/PlasmoHQ/plasmo/issues/267 and https://github.com/PlasmoHQ/plasmo/issues/264

### 2022.10.28

`12:00`, we refactored the engineering log to have a quarter tag instead of a monthly tag.

### 2022.10.27

`12:00`, Itero team joining is in Beta.

### 2022.10.26

`12:00`, we refactored some resource rules and implemented team joining UX.

### 2022.10.25

`12:00`, Itero team creation, and invites are ready in Beta.

### 2022.10.24

`12:00`, we are looking to optimize the check for the code scanner.

`16:00`, we are implementing the team dashboard feature.

### 2022.10.23

`12:00`, we implemented team creation and workspace switching UI.

### 2022.10.22

`12:00`, we fixed the layout of the fronti checklist page.

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.09]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.09</id>
        <link href="https://www.plasmo.com/engineering/log/2022.09"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[code signing, mv2-mv3 tool]]></summary>
        <content type="html"><![CDATA[

## Update D.36

`20:00`, refactor is underway - felt like we did 8 weeks of work in a day. We are rolling the new implementation out to beta - 🤞 let us hope it works.

`12:00`, we are working on a refactor for Itero API to enable more control and visibility of the upload flow.

### 2022.09.30

`14:00`, we are testing out each component of Itero and adding some ease-in animations to reduce flickering for our users.

### 2022.09.28

`20:00`, we integrated the new Itero TestBed client API into BMS and BPP. We have also updated the keys schema with an `itero` property and added some documentation. The new action is now ready on the staging branch. We will be testing further in https://github.com/PlasmoHQ/with-wasm-zig once we roll out Itero 0.8.0. Once it is stable, we will bump bpp to v3.

`18:00`, we finalized the refactor. The new forge-based key generator increased our bundle size by 200KB due to its CJS nature. However, it works well and makes our upload process visibly faster. The async nature of this package played well with non-blocking our UI.

`16:00`, we removed https://github.com/rzcoder/node-rsa package from our dependency list and switched to https://github.com/digitalbazaar/forge instead. This package is also used by Expo: https://github.com/expo/expo-cli/tree/main/packages/pkcs12

`14:00`, we patched the asn1 package with a pnpm override to [node-asn1-ber](https://github.com/markabrahams/node-asn1-ber). However, the upstream https://github.com/rzcoder/node-rsa package is using the wrong result from https://github.com/TritonDataCenter/node-asn1, which caused the hash generated to have mismatching bits when processed by the replacement package.

`12:00`, we found a critical issue in the asn1 package - the Array type check is wrong. We sent a convoy to help, but it seems the planet is deserted: https://github.com/TritonDataCenter/node-asn1/pull/52. This is a big issue since we use it in Itero to generate keys for our packages.

### 2022.09.27

`12:00`, we are finally ready to establish a bridge between itero and bpp.

### 2022.09.26

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.08]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.08</id>
        <link href="https://www.plasmo.com/engineering/log/2022.08"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[vacation, framework maintenance]]></summary>
        <content type="html"><![CDATA[

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.07]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.07</id>
        <link href="https://www.plasmo.com/engineering/log/2022.07"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[plague, fatigue, dev-panel]]></summary>
        <content type="html"><![CDATA[

## Update D.28

`13:00`, we found some quirk with the NodeJS's path module. Apprently, the platform specific `normalize` method is designed specificically to be run by the target platform, and cannot be used in a cross-platform manner. For more info, see [nodejs/node#12298](https://github.com/nodejs/node/issues/12298).

To illustrate the quirk, we reference [PlasmoHQ/plasmo#117](https://github.com/PlasmoHQ/plasmo/issues/117):

- Suppose we have a win32 path: `~contents\\test\\code.tsx`
- We want to normalize it into posix: `~contents/test/code.tsx`

Using `posix.normalize` will not work as the method only count `posix.sep` as a valid separator. This behavior is a bit contradicting to `win32.normalize`, which actually counted both `win32.sep` and `posix.sep`. In light of this behavior, we would need to manually replace the separator:

```ts
const win32Path = "~contents\\test\\code.tsx"
const posixPath = win32Path.replaceAll(win32.sep, posix.sep)
```

### 2022.07.25

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.06]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.06</id>
        <link href="https://www.plasmo.com/engineering/log/2022.06"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[plasmo dev, @plasmohq/parcel-runtime, @plasmohq/parcel-resolver, further mining the storage planet]]></summary>
        <content type="html"><![CDATA[

## Update D.24

`21:25`, we released a canary version to test out the additional typing for the `url` scheme.

`21:09`, we revamped the Itero showcase panel.

`12:00`, We discovered a method to import source file, leveraging the existing `url` scheme within parcel.

### 2022.06.23

`22:00`, shoutout Wednesday - we would like to say thank you to: `schema#4348` for [fixing chrome-webstore-api](https://github.com/PlasmoHQ/chrome-webstore-api/pull/30), [`Aarush-wadhia`](https://github.com/Aarush-wadhia) for working on the [with-jotai](https://github.com/PlasmoHQ/examples/pull/5) and [react-router](https://github.com/PlasmoHQ/examples/pull/6) examples, [`n4ze3m`](https://github.com/n4ze3m) for working on the [with-react-query](https://github.com/PlasmoHQ/examples/pull/7) example, [prakashchokalingam](https://github.com/prakashchokalingam) for [fix: avoid parsing old value if not exists](https://github.com/PlasmoHQ/storage/pull/5), `Berbaroovez#0001` for [releasing builtin-job-buddy in #built-with-plasmo](https://discord.com/channels/946290204443025438/983472837937483787/987519766182891520) and `pacholoamit#6911` for [creating a YouTube video about Plasmo](https://discord.com/channels/946290204443025438/946290204904390690/988146714831622175) + [posting VRNBLTY on #built-with-plasmo](https://discord.com/channels/946290204443025438/983472837937483787/988165518387195915) 🤗

`20:47`, we have implemented the Itero network relay to transmit data from the Galatic Empire's storage conduit. We are now piping the data into visual. We are planning a caching mechanism for the proxy, key problem at the moment is cache invalidation.

### 2022.06.22

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.05]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.05</id>
        <link href="https://www.plasmo.com/engineering/log/2022.05"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[Care packages to xView Vulcan, puro library, Plasmo framework docs site, .env parsing, framework library, use-hashed-state, p1asm0 super-repo, plasmohq namespace, storage module released, plasmo init]]></summary>
        <content type="html"><![CDATA[

## Update D.20

`23:00`, we have automated away the permission setting for storage.

`19:57`, we just released plasmo 0.36.0-alpha.0 under the canary tag. This release marks our independence from Parcel's bundled HMR runtime. We implemented an HMR runtime that is focused on web extension development. Plasmo framework now triggers extension reload as you add new capability to your extension, such as new content script, etc... We have also enabled storing source code inside the `src` directory through our resolver.

`11:25`, we are reversing course to do some mining at the `storage` base. We will need to have more discussion as to how the content-scripts-ui interface should look like: API or export default? We are also thinking types of content script UI:

- Popup mounted into specific DOM element which requires a generic mount API.
- An overlay mounted above the current DOM - this makes default export most appropriate.

### 2022.05.31

`16:24`, we released a new version of plasmo cli, with upgraded dependencies: v0.35.0. This update includes a new parameter for the init command and integration with our parcel resolver which cache remote scripts such as google analytics (discussed in our previous live session). The [documentation](/docs) has been updated.

### 2022.05.30

`17:00`, we were [live](/s/tv)

`12:12`, we have managed to bypass a barrier introduced by the galatic federation when it comes to beaming data back to their analytic station from an orbiting vessel.

### 2022.05.27

`20:00`, we are working on a parcel transformer to cache remote import. This should equip our framework with a better capability of supporting developer consuming global namespace library.

### 2022.05.26

`12:50`, we are en-route to create a `with-google-analytic` example. It might be beneficial to create a module specifically for this purpose. This would also allow us to do some interesting thing - i.e, infering from the package to set the correct CSP.

### 2022.05.25

![Error logging in Plasmo CLI v0.32.0](/engineering/screenshots/2022-05-24-19-42-45.png)

`19:41`, we improved the error logging in plasmo cli, it should now points to the file, with the line number and column position. Released in v0.32.0.

`17:00`, we have finalized fixing up the issue on itero regarding a patch to our `utils` module, which made it including the fs nodejs module. We are resuming normal course, warp 8.

### 2022.05.24

`20:00`, we released the [plasmo repo](https://github.com/PlasmoHQ/plasmo).

### 2022.05.23

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.04]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.04</id>
        <link href="https://www.plasmo.com/engineering/log/2022.04"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[Plasmo Fronti, Itero platform, gcp-refresh-token, React 18 upgrade, mice extension, Plasmo CLI, the Framework, typescript AST, vulcan care packages]]></summary>
        <content type="html"><![CDATA[

## Update D.16

`10:20`, we just delivered a care package to [vulcan](https://nowarpls.org), adding a demo of slider - bitmap layer interaction. We have also incorporated the version into the attribution for quick reference.

`02:46`, we revamped the logging mechanism for plasmo cli to have some standard indicators - this will be released in `0.18.0`. We will be integrating [`bpp`](https://bpp.browser.market) into our cli template. Perhaps as an optional feature flag?

`01:20`, found a minor bug within the webhook regex replacement for our link. Local markdown link should now [functional](/s/tv).

`00:40`, we are in the process of designing the `plasmo login` command schematic. Since we are using firebase as the foundation for the `itero` settlement, we will need to leverage the firebase auth SDK to integrate OAuth to `plasmo login`. The tricky part here is to figure out how to properly store the firebase configuration within the CLI.

`00:35`, we sent a minor update to the `cli` base to handle issue with content script css path resolving. We have also fixed a bug within background script watch that prevented it from importing modules properly. This will be released in `plasmo@0.17.0` - try it out with `pnpm dlx plasmo init`

`00:20`, we are heading back toward the `plasmo` planet to facilitate an important trade route between the `itero` and `cli` bases. For this mission to success, we will need to design a proper authentication scheme.

### 2022.04.30

`16:00`, we were [live](/s/tv).

`11:35`, we were able to crack the problem with iteracting with iframe elements. It appears that for most element, the host user must interact with it first. Thus, `mice` will need to be selective with what element it can touch inside the iframe. For our usecase, we are focusing mainly on `HTMLVideoElement`. We have made it such that `mice` will look for these element, and toggle their playback after the host had started playing. We used a simple watch over the chrome storage module to get down to the iframe problem.

`05:40`, we have added package.json watching as well as dynamic assets generation in response to directory changes. We have also moved a lot of our scaffolding code into the centralized manifest class, which allows for simpler calling procedures. These will be up in `0.16.0` as well.

`04:30`, we are adding background script support to `plasmo dev`. This feature should be available in `0.16.0`.

`03:40`, after investigating our options to send data to another content scripts for `mice`, we realized that the iframe is actually in a separated context from its current webpage. We are investigating background scripts. Potentially, we can just use the storage API to send data cross contexts - which would be the easiest option. However, we are not sure if this is the correct answer.

### 2022.04.29

`05:00`, we have resolved the issue regarding the config parsing, this will be published in `0.15.0`

`03:24`, we were notified that there was a bug within Plasmo config parsing mechanism. We are now revisiting this sector to make sure we are properly checking the file content before adding it into the manifest.

### 2022.04.28

`20:00`, we added a GeoJSON example to [vulcan](https://nowarpls.org)

`06:34`, we fixed a pipe leak with our webhook - discord integration, extending our log system to support our business logs.

`06:15`, we came to the conclusion that static analysis alone will not sastisfy the need of truly dynamic content script configuration. The course we will need to set for this work would likely be to either evaluate the ts file via a full typescript program, loading in the tsconfig file, and resolves any import modules referenced into the final value. The usecase for example, is when importing a variable from outside the current module, and compare the value of that variable to some static data. Another way of solving this problem, is to introduce a background worker script that dynamically load content script based on the specification. We will need to establish a websocket connection with the background script to properly send the right configuration over. It will still be quite tricky for the content script configuration to be dynamic...

`05:04`, we have just tidied up the reception deck for our ship. It is now open for the public: [link](/s/d). We also setup short link redirection for our social uris.

`02:00`, we have successfully able to parse the AST tree shallowly to gather the base configuration for content script. However, I foresee a scenario where developer might need to import a central configuration, outside of the current script - this would requires deep lookup, OR a full ts program compile. I think we will consider the full ts program once we have a better understanding of how we can ineropt with the ts build cache already in place within the project (likely leveraging parcel). But for now, maybe a one level traversal would do the trick?

### 2022.04.27

`14:00`, we detected some leakage within our thruster. Apparently, the TextRotation component that we used for our top most header does not render the text on SSR. We tried to fix this component to be SSR-aware, but that broke the hydration process. The simplest fix we landed upon is to remove any text rotation applied to our headings. This indicates we should only use this component sparingly.

`13:10`, we have so far managed to parse the content script AST using the typescript compiler. We are now en-route to further reducing the AST into the desired config for the plasmo manifest.

### 2022.04.26

`17:44`, we noticed something is wrong with the cache updating of our Update function. Will need to check whether it is writing to the right state file.

`10:00`, we are resuming course toward `mice` and the dynamic content script property injection. We are investigating whether we should parse the content file somehow, either using typescript compile for the AST (to grab its type structure), or execute and import that script. This will require a couple experimentation.

`04:00`, we sended extra care package to [vulcan](https://www.nowarpls.org/), including coordinate sending, coordinate controller, and date slider. We also incorporated icons from iconoir to make it fun.

### 2022.04.25

`21:30`, we are taking a break today to send a care package to [UA](https://www.nowarpls.org/) while also landing down for a short shoreleave.

### 2022.04.24

`21:30`, we landed 2 care packages last week: [iconoir#142](https://github.com/lucaburgio/iconoir/pull/142) and [parcel#7969](https://github.com/parcel-bundler/parcel/pull/7969).

`20:15`, we found a solution for the export of typing - apparently the pnpm setup obfuscated how tsup would resolve the type. However, it is still able to resolves the deep path. Thus, by providing the explicit path to the type files, we were able to proceed with creating a declaration for developers to consume - our ship is now full steam ahead on this new found capability!

`19:30`, we are investigating the compilation of a typescript library file for plasmo-cli. So far, it has been a futile endeavor - it seems the typescript compiler was not able to find the typing for the internal packages. We are investigating further with more experiment, this will take a while.

`08:00`, we have revamped some styling for the log and docs as a leasure activity. We shall now resume course toward `mice` iframe handling.

`06:23`, we added a couple more documentation for the plasmo framework under `fronti` for ease of reference. In the future we shall make a simple middleware to redirect the docs to their [new appropriate home](https://docs.plasmo.com/).

`03:30`, we refined the regex for the fronti discord webhook to properly parse and handle local URLs. This should now render properly: [link](/social)

### 2022.04.23

`23:30`, we added a [`/social`](/social) endpoint to fronti for simple public linking.

`23:15`, after a long rest, we are back to do some more iteration on mice. itero might need to wait for a bit before we can spend some time tracking down the bug with our hashing cache. There is an interesting problem on mice that would lead to another feature for `plasmo dev` - dynamic content scripts. When clicking iframes, it is required that the iframe itself also has the content script injected.

`19:50`, demo day - we were [live](/social/live).

### 2022.04.22

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.03]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.03</id>
        <link href="https://www.plasmo.com/engineering/log/2022.03"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[The Plasmo Edge Webstore Upload module]]></summary>
        <content type="html"><![CDATA[

## Update D.12

### 2022.03.24

We received good news from the Microsoft Edge Extension team that their publish API is now in beta available: [link](https://docs.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/using-addons-api).

Following a brief discussion with the edge team, we immediately get to work on a nodejs module to abstract away the API calls. 8 hours later, we released our new open source package [Edge Webstore Upload module](https://www.npmjs.com/package/@plasmo-corp/ewu), with the code available to audit [here](https://github.com/plasmo-corp/edge-webstore-upload) under MIT License.

Our initial process to deliver this module is as follow:

- Using our internal github template `qtt` to bootstrap a node module
- Mirroring the setup in our [Chrome Webstore Upload module](https://github.com/plasmo-corp/cwu)

While mirroring, we also upgrade the dependencies on both project to latest. As we refine our build setup, we found that ES interop via a final bundling in [BMS](https://github.com/plasmo-corp/bms) is achievable. Thus, we converted `cwu` and `ewu` to target just ESM.

Above concludes our setup phase. We now start our exploration with the edge publish API. At Plasmo, we love ourselves a quick, iterative, feedback-driven, explorative programming session. The basic idea is that there is an evaluator that continuously run our code as we press ctrl+s. For this, our evaluator is the unit test runner (jest).

Since the API gives example in curl, we used this [curl to fetch tool](https://kigiri.github.io/fetch/) to convert the calls, and then convert it to got api manually. Once the API usage is clear, we start moving our test code into our library module's class method, and refactor the unit test to be more modular for each API call. We then study the response type and the error returned by the API, and compose them into typescript types. We then exports everything so that other library can consume our code.

Since the edge API is very straight forward, there was not many challenge we faced while working on our node API. There were two annoying issues:

1. Creating the test zip file
2. ESM + jest + TypeScript

We found quick workaround for the above, but maybe future tooling improvement will make it easier.

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.02]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.02</id>
        <link href="https://www.plasmo.com/engineering/log/2022.02"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[The Plasmo Browser Platform Publisher]]></summary>
        <content type="html"><![CDATA[

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Entry 2022.01]]></title>
        <id>https://www.plasmo.com/engineering/log/2022.01</id>
        <link href="https://www.plasmo.com/engineering/log/2022.01"/>
        <updated>2025-02-22T04:38:07.535Z</updated>
        <summary type="html"><![CDATA[market research]]></summary>
        <content type="html"><![CDATA[

## Update D.4

### 2022.01.28

`12:00`, we set up SSO for GitHub and Google Workspace, which should enhance security and prepare us for our SOC2 audit.

`14:00`, we created a script to go through our repository and protect their main branch massively.

### 2022.01.27

`12:00`, we are looking at IAB content classification for the SaaS monitoring tool: https://iabtechlab.com/standards/content-taxonomy

`16:00`, we migrated our pg database from Hasura to GCP.

### 2022.01.26

`12:00`, we started our SOC2 journey.

### 2022.01.25

`12:00`, we are thinking about making a SaaS inventory from the reporter dashboard.

]]></content>
        <author>
            <name>L❤☮🤚</name>
        </author>
        <published>2025-02-22T04:38:07.535Z</published>
    </entry>
</feed>