Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Slow compared to protobufjs #51

Closed
wemeetagain opened this issue Jul 21, 2022 · 8 comments
Closed

Slow compared to protobufjs #51

wemeetagain opened this issue Jul 21, 2022 · 8 comments
Labels

Comments

@wemeetagain
Copy link
Member

Running a simple benchmark against gossipsub RPC encoding/decoding from before and after switching from protobufjs to protons shows a significant degradation in performance. ~20x slower encoding, ~10x slower decoding.

The performance degradation is serious enough that (js-libp2p-gossipsub) may need to either switch from this library or determine a refactor here that can achieve comparable results.

with protobufjs:

  RPC
    ✔ encode                                                              401606.4 ops/s    2.490000 us/op        -   22116142 runs   60.8 s
    ✔ decode                                                              452284.0 ops/s    2.211000 us/op        -   24709315 runs   60.9 s

with protons:

  RPC
    ✔ encode                                                              24618.41 ops/s    40.62000 us/op        -    1458781 runs   60.1 s
    ✔ decode                                                              41540.31 ops/s    24.07300 us/op        -    2439588 runs   60.0 s
@BigLep
Copy link

BigLep commented Jul 22, 2022

@wemeetagain : thanks for filing. We're curious in a real-world operation where there are network calls, does this performance hit from the encode/decode have much impact?

@BigLep BigLep added the need/author-input Needs input from the original author label Jul 22, 2022
@wemeetagain
Copy link
Member Author

It has a big impact, though there are some other things that have higher impacts.

Decoding gossipsub RPCs goes from 0.32% of runtime to 10.21% of runtime.

@dapplion
Copy link

@BigLep It has a very serious impact, to the point it's blocking our incorporation of the new libp2p version.

@twoeths
Copy link
Contributor

twoeths commented Jul 29, 2022

a benchmark with this simple message

syntax = "proto3";

message Message {
  optional bytes data = 2;
  optional string topic = 4;
}
message
    ✔ full message (data + topic)                                      1.285347e+7 ops/s    77.80000 ns/op   x1.056    3645492 runs   30.0 s
    ✔ only data                                                        8.025682e+7 ops/s    12.46000 ns/op   x0.984   19204647 runs   30.1 s
    ✔ only topic                                                       1.346801e+7 ops/s    74.25000 ns/op   x0.928    3699726 runs   30.1 s

it shows that most of the time is used to decode string, this is due to the performance of toString() in uint8arrays

  itBench({
    id: 'string decode',
    fn: () => {
      toString(stringBytes)
    },
    runsFactor: 100
  })

  itBench({
    id: 'string decode using protobuf',
    fn: () => {
      utf8_read(stringBytes, 0, stringBytes.length)
    },
    runsFactor: 100
  })

the toString() function in uint8arrays is 10x slower compared to protobuf

✔ string decode                                                    1.831166e+7 ops/s    54.61000 ns/op        -    5138306 runs   30.1 s
✔ string decode using protobuf                                     2.288330e+8 ops/s    4.370000 ns/op        -   41186303 runs   30.1 s

need to also figure out why the decode of bytes data is slow as decoding the same message in protobuf takes ~5s (vs 77ns as shown above)

achingbrain pushed a commit that referenced this issue Aug 4, 2022
**Motivation**
- Right now every time we call `encode()` or `decode()`, a new codec is returned, it also create other codecs of internal fields

**Description**
- Generate the `codec()` function using single instance pattern

part of #51
github-actions bot pushed a commit that referenced this issue Aug 4, 2022
## [protons-v4.0.2](protons-v4.0.1...protons-v4.0.2) (2022-08-04)

### Bug Fixes

* single instance codec ([#55](#55)) ([66d9387](66d9387)), closes [#51](#51)
@github-actions
Copy link

github-actions bot commented Aug 5, 2022

Oops, seems like we needed more information for this issue, please comment with more details or this issue will be closed in 7 days.

@BigLep BigLep added status/in-progress In progress and removed need/author-input Needs input from the original author kind/stale labels Aug 5, 2022
@BigLep
Copy link

BigLep commented Aug 5, 2022

To be clear, I removed the "need/author-input" label. I know this work is in progress.

@achingbrain
Copy link
Member

This should have been resolved by #58 - please try again with [email protected]

@achingbrain
Copy link
Member

The benchmarks in this repo show that protons is comparable in performance to protobuf.js so I'm going to close this. Please submit a PR with updated benchmarks if you're still seeing this issue.

github-actions bot pushed a commit that referenced this issue Jan 31, 2024
## [3.0.0](v2.0.3...v3.0.0) (2024-01-31)

### ⚠ BREAKING CHANGES

* singular fields should be optional to write (#83)
* ts definitions will need to be generated from `.proto` files - singular message fields have become optional as message fields are always optional in proto3
* the exported types of `protons-runtime` have changed and protobuf encoders/decoders will need to be regenerated
* Uses Uint8ArrayList v2
* This module is now ESM only

### Features

* add custom protons options for limiting list/map sizes ([#120](#120)) ([a5ba36b](a5ba36b)), closes [#113](#113)
* add strict option to CLI ([#119](#119)) ([8c039c5](8c039c5))
* add support for maps ([#75](#75)) ([e8dfc0a](e8dfc0a))
* define default types during decode ([#62](#62)) ([6453809](6453809)), closes [#43](#43)
* runtime size limits for arrays and maps ([#128](#128)) ([a737d05](a737d05))
* support jstype custom options ([#117](#117)) ([ba35475](ba35475)), closes [#112](#112)
* support no-copy serialization ([#54](#54)) ([caa0d71](caa0d71))
* transpile to ts ([#17](#17)) ([74d3b7a](74d3b7a))

### Bug Fixes

* add uint8arraylist peer dep ([#61](#61)) ([eb16e86](eb16e86)), closes [#59](#59)
* adhere more closely to the language guide for proto3 default values ([#66](#66)) ([406d775](406d775)), closes [#43](#43)
* encode enum values ([#30](#30)) ([676c01d](676c01d))
* improve uint64 perf ([#122](#122)) ([3234bb6](3234bb6))
* increase encoding/decoding performance ([#58](#58)) ([9987b97](9987b97))
* only import reader/writer to decrease bundle size ([#69](#69)) ([8eea129](8eea129))
* port protobuf reader/writer to ts ([#60](#60)) ([d101804](d101804))
* remove redundant defs and declare codec return type ([#28](#28)) ([c3ea5ec](c3ea5ec))
* remove writing default values ([#88](#88)) ([078c62f](078c62f))
* single instance codec ([#55](#55)) ([66d9387](66d9387)), closes [#51](#51)
* singular fields should be optional to write ([#83](#83)) ([229afbc](229afbc)), closes [#42](#42)
* sort imports ([#84](#84)) ([6f796f1](6f796f1))
* support empty messages ([#78](#78)) ([8a02910](8a02910))
* throw when .proto is empty ([#81](#81)) ([ed392cb](ed392cb))
* throw when unsupported fields are detected ([#80](#80)) ([8108875](8108875)), closes [#34](#34)
* tidy up formatting of generated code ([#57](#57)) ([387c9e9](387c9e9))
* treat nested enums as enums and not messages ([#87](#87)) ([3af689b](3af689b))
* update aegir, make codec creation dynamic ([#26](#26)) ([ecc46cc](ecc46cc))
* update project config ([3199131](3199131))
* update sibling dep versions ([a77d027](a77d027))
* use CLI flag `--output` ([#46](#46)) ([58dc0ba](58dc0ba))
* use uint8-varint, byte-accesor and longbits modules ([#56](#56)) ([66d72f5](66d72f5))
* use uint8arrays alloc for new buffers ([#123](#123)) ([d1bfc94](d1bfc94))
* write string into output buffer as uint8array ([#118](#118)) ([03ab706](03ab706))

### Trivial Changes

* add or force update .github/workflows/js-test-and-release.yml ([#111](#111)) ([9898b47](9898b47))
* add protobuf-ts to benchmarks ([#68](#68)) ([559191d](559191d))
* benchmark Protobuf-ES ([#89](#89)) ([47a4dcb](47a4dcb))
* delete templates [skip ci] ([#110](#110)) ([196ca52](196ca52))
* fix generated code ([b6a9c18](b6a9c18))
* move bad fixtures to separate directory ([#82](#82)) ([76aa198](76aa198))
* **release:** 1.0.0 [skip ci] ([5aa82f7](5aa82f7)), closes [#17](#17)
* **release:** 1.0.1 [skip ci] ([398f066](398f066)), closes [#26](#26)
* **release:** 1.0.2 [skip ci] ([193dbfe](193dbfe)), closes [#27](#27)
* **release:** 1.0.3 [skip ci] ([6a078c0](6a078c0)), closes [#28](#28)
* **release:** 1.0.4 [skip ci] ([ab0d4ac](ab0d4ac)), closes [#30](#30)
* **release:** 2.0.0 [skip ci] ([3fec56a](3fec56a)), closes [#54](#54)
* **release:** 2.0.1 [skip ci] ([b2d78dd](b2d78dd))
* **release:** 2.0.2 [skip ci] ([8bf01d0](8bf01d0)), closes [#56](#56)
* **release:** 3.0.0 [skip ci] ([fd1622d](fd1622d)), closes [#58](#58)
* **release:** 3.0.0 [skip ci] ([6fd81c1](6fd81c1)), closes [#17](#17) [#19](#19)
* **release:** 3.0.1 [skip ci] ([25e46dd](25e46dd)), closes [#59](#59)
* **release:** 3.0.1 [skip ci] ([64fe094](64fe094)), closes [#22](#22) [#21](#21)
* **release:** 3.0.2 [skip ci] ([f85d3fb](f85d3fb)), closes [#26](#26) [#27](#27)
* **release:** 3.0.3 [skip ci] ([d85a9f4](d85a9f4)), closes [#28](#28)
* **release:** 3.0.4 [skip ci] ([9915f7c](9915f7c)), closes [#30](#30)
* **release:** 3.0.5 [skip ci] ([9b973ee](9b973ee)), closes [#46](#46)
* **release:** 3.1.0 [skip ci] ([d1b93c8](d1b93c8)), closes [#43](#43)
* **release:** 4.0.0 [skip ci] ([7a02ec4](7a02ec4)), closes [#43](#43)
* **release:** 4.0.0 [skip ci] ([6ec6ef9](6ec6ef9)), closes [#54](#54)
* **release:** 4.0.1 [skip ci] ([4f92c90](4f92c90)), closes [#69](#69)
* **release:** 4.0.1 [skip ci] ([8991c51](8991c51)), closes [#56](#56)
* **release:** 4.0.2 [skip ci] ([3317a6a](3317a6a)), closes [#76](#76)
* **release:** 4.0.2 [skip ci] ([411c017](411c017)), closes [#51](#51)
* **release:** 4.0.3 [skip ci] ([dab81db](dab81db)), closes [#57](#57)
* **release:** 5.0.0 [skip ci] ([63827d9](63827d9)), closes [#83](#83) [#42](#42) [#84](#84)
* **release:** 5.0.0 [skip ci] ([98a66fb](98a66fb)), closes [#58](#58)
* **release:** 5.0.1 [skip ci] ([bd29083](bd29083)), closes [#104](#104)
* **release:** 5.0.2 [skip ci] ([877d54e](877d54e)), closes [#108](#108)
* **release:** 5.0.3 [skip ci] ([f29febd](f29febd)), closes [#116](#116)
* **release:** 5.0.4 [skip ci] ([17b7a90](17b7a90)), closes [#60](#60)
* **release:** 5.0.5 [skip ci] ([2f71170](2f71170)), closes [#118](#118)
* **release:** 5.1.0 [skip ci] ([17aaad9](17aaad9)), closes [#112](#112)
* **release:** 5.1.0 [skip ci] ([97dca54](97dca54)), closes [#43](#43)
* **release:** 5.2.0 [skip ci] ([dfdee5a](dfdee5a)), closes [#113](#113)
* **release:** 5.2.1 [skip ci] ([ddf1331](ddf1331)), closes [#126](#126)
* **release:** 5.2.2 [skip ci] ([0c4f28e](0c4f28e)), closes [#127](#127)
* **release:** 6.0.0 [skip ci] ([dc0de7d](dc0de7d)), closes [#43](#43)
* **release:** 6.0.1 [skip ci] ([d5625d2](d5625d2)), closes [#67](#67) [#71](#71)
* **release:** 6.0.2 [skip ci] ([26c569d](26c569d)), closes [#76](#76)
* **release:** 6.1.0 [skip ci] ([51746ec](51746ec)), closes [#75](#75)
* **release:** 6.1.1 [skip ci] ([3ac2c56](3ac2c56)), closes [#78](#78)
* **release:** 6.1.2 [skip ci] ([a34a908](a34a908)), closes [#34](#34)
* **release:** 6.1.3 [skip ci] ([311b622](311b622)), closes [#81](#81)
* **release:** 7.0.0 [skip ci] ([62b2053](62b2053)), closes [#83](#83) [#42](#42) [#84](#84) [#82](#82)
* **release:** 7.0.1 [skip ci] ([198e9a7](198e9a7)), closes [#87](#87)
* **release:** 7.0.2 [skip ci] ([c7b136e](c7b136e)), closes [#88](#88)
* **release:** 7.0.3 [skip ci] ([63eea21](63eea21)), closes [#104](#104)
* **release:** 7.0.4 [skip ci] ([655a2f7](655a2f7)), closes [#97](#97)
* **release:** 7.0.5 [skip ci] ([5f77393](5f77393)), closes [#108](#108)
* **release:** 7.0.6 [skip ci] ([d8c4e6b](d8c4e6b)), closes [#116](#116)
* **release:** 7.0.7 [skip ci] ([1d6e843](1d6e843)), closes [#60](#60)
* **release:** 7.1.0 [skip ci] ([d5bf315](d5bf315)), closes [#119](#119)
* **release:** 7.2.0 [skip ci] ([47359ee](47359ee)), closes [#112](#112)
* **release:** 7.2.1 [skip ci] ([cbfe768](cbfe768))
* **release:** 7.3.0 [skip ci] ([23073eb](23073eb)), closes [#113](#113)
* **release:** 7.3.1 [skip ci] ([d850acf](d850acf)), closes [#123](#123)
* **release:** 7.3.2 [skip ci] ([a6014c6](a6014c6)), closes [#125](#125)
* **release:** 7.3.3 [skip ci] ([aa3829c](aa3829c)), closes [#126](#126)
* **release:** 7.3.4 [skip ci] ([9f03e47](9f03e47)), closes [#127](#127)
* remove long dep ([#22](#22)) ([8795507](8795507))
* remove old example ([#20](#20)) ([00ccc6a](00ccc6a))
* remove redundant dep ([a53620a](a53620a))
* Update .github/workflows/stale.yml [skip ci] ([e86d817](e86d817))
* Update .github/workflows/stale.yml [skip ci] ([8102b91](8102b91))
* Update .github/workflows/stale.yml [skip ci] ([d4f2a98](d4f2a98))
* Update .github/workflows/stale.yml [skip ci] ([aa0601c](aa0601c))
* update project config ([c54b7ac](c54b7ac))
* update protons-runtime dep ([#19](#19)) ([e119076](e119076))
* update sibling dependencies [skip ci] ([a74ff6a](a74ff6a))
* update sibling dependencies [skip ci] ([c9291e0](c9291e0))
* update sibling dependencies [skip ci] ([c476d9d](c476d9d))
* update sibling deps ([7568283](7568283))

### Documentation

* update readme ([#27](#27)) ([0ccb1a3](0ccb1a3))
* update readme to remove breaking character ([#21](#21)) ([023c29b](023c29b))

### Dependencies

* bump aegir from 38.1.8 to 39.0.13 ([#104](#104)) ([912e0e6](912e0e6))
* bump aegir from 39.0.13 to 40.0.8 ([#108](#108)) ([8b54c80](8b54c80))
* bump aegir from 40.0.13 to 41.0.4 ([#116](#116)) ([b95e988](b95e988))
* bump aegir from 41.3.5 to 42.0.1 ([#127](#127)) ([02eafe9](02eafe9))
* bump lerna from 5.6.2 to 6.0.0 ([#70](#70)) ([17fc762](17fc762))
* bump meow from 10.1.5 to 11.0.0 ([#67](#67)) ([d489fd3](d489fd3))
* bump meow from 11.0.0 to 12.0.1 ([#97](#97)) ([33250df](33250df))
* bump meow from 12.1.1 to 13.0.0 ([#125](#125)) ([2b356b8](2b356b8))
* bump uint8arrays from 3.1.1 to 4.0.2 ([#71](#71)) ([b537e92](b537e92))
* bump uint8arrays from 4.0.10 to 5.0.1 ([#126](#126)) ([1e5a0b0](1e5a0b0))
* **dev:** bump lerna from 4.0.0 to 5.3.0 ([#53](#53)) ([eebccc3](eebccc3))
* remove lerna, update aegir ([#76](#76)) ([83a24f2](83a24f2))
* update sibling dependencies ([188704d](188704d))
* update sibling dependencies ([068e25a](068e25a))
* update sibling dependencies ([b1316fa](b1316fa))
* update sibling dependencies ([a7d567d](a7d567d))

### Tests

* regenerate custom options ([768573b](768573b))
github-actions bot pushed a commit that referenced this issue Aug 7, 2024
## [3.0.0](v2.0.3...v3.0.0) (2024-08-07)

### ⚠ BREAKING CHANGES

* singular fields should be optional to write (#83)
* ts definitions will need to be generated from `.proto` files - singular message fields have become optional as message fields are always optional in proto3
* the exported types of `protons-runtime` have changed and protobuf encoders/decoders will need to be regenerated
* Uses Uint8ArrayList v2
* This module is now ESM only

### Features

* add custom protons options for limiting list/map sizes ([#120](#120)) ([a5ba36b](a5ba36b)), closes [#113](#113)
* add strict option to CLI ([#119](#119)) ([8c039c5](8c039c5))
* add support for maps ([#75](#75)) ([e8dfc0a](e8dfc0a))
* allow limiting nested repeating fields ([#129](#129)) ([a81f997](a81f997))
* define default types during decode ([#62](#62)) ([6453809](6453809)), closes [#43](#43)
* runtime size limits for arrays and maps ([#128](#128)) ([a737d05](a737d05))
* support jstype custom options ([#117](#117)) ([ba35475](ba35475)), closes [#112](#112)
* support no-copy serialization ([#54](#54)) ([caa0d71](caa0d71))
* transpile to ts ([#17](#17)) ([74d3b7a](74d3b7a))

### Bug Fixes

* add uint8arraylist peer dep ([#61](#61)) ([eb16e86](eb16e86)), closes [#59](#59)
* adhere more closely to the language guide for proto3 default values ([#66](#66)) ([406d775](406d775)), closes [#43](#43)
* encode enum values ([#30](#30)) ([676c01d](676c01d))
* improve uint64 perf ([#122](#122)) ([3234bb6](3234bb6))
* increase encoding/decoding performance ([#58](#58)) ([9987b97](9987b97))
* only import reader/writer to decrease bundle size ([#69](#69)) ([8eea129](8eea129))
* port protobuf reader/writer to ts ([#60](#60)) ([d101804](d101804))
* remove redundant defs and declare codec return type ([#28](#28)) ([c3ea5ec](c3ea5ec))
* remove writing default values ([#88](#88)) ([078c62f](078c62f))
* single instance codec ([#55](#55)) ([66d9387](66d9387)), closes [#51](#51)
* singular fields should be optional to write ([#83](#83)) ([229afbc](229afbc)), closes [#42](#42)
* sort imports ([#84](#84)) ([6f796f1](6f796f1))
* support empty messages ([#78](#78)) ([8a02910](8a02910))
* throw when .proto is empty ([#81](#81)) ([ed392cb](ed392cb))
* throw when unsupported fields are detected ([#80](#80)) ([8108875](8108875)), closes [#34](#34)
* tidy up formatting of generated code ([#57](#57)) ([387c9e9](387c9e9))
* treat nested enums as enums and not messages ([#87](#87)) ([3af689b](3af689b))
* update aegir, make codec creation dynamic ([#26](#26)) ([ecc46cc](ecc46cc))
* update project config ([3199131](3199131))
* update sibling dep versions ([a77d027](a77d027))
* use CLI flag `--output` ([#46](#46)) ([58dc0ba](58dc0ba))
* use uint8-varint, byte-accesor and longbits modules ([#56](#56)) ([66d72f5](66d72f5))
* use uint8arrays alloc for new buffers ([#123](#123)) ([d1bfc94](d1bfc94))
* write string into output buffer as uint8array ([#118](#118)) ([03ab706](03ab706))

### Trivial Changes

* add or force update .github/workflows/js-test-and-release.yml ([#111](#111)) ([9898b47](9898b47))
* add protobuf-ts to benchmarks ([#68](#68)) ([559191d](559191d))
* benchmark Protobuf-ES ([#89](#89)) ([47a4dcb](47a4dcb))
* delete templates [skip ci] ([#110](#110)) ([196ca52](196ca52))
* fix generated code ([b6a9c18](b6a9c18))
* move bad fixtures to separate directory ([#82](#82)) ([76aa198](76aa198))
* **release:** 1.0.0 [skip ci] ([5aa82f7](5aa82f7)), closes [#17](#17)
* **release:** 1.0.1 [skip ci] ([398f066](398f066)), closes [#26](#26)
* **release:** 1.0.2 [skip ci] ([193dbfe](193dbfe)), closes [#27](#27)
* **release:** 1.0.3 [skip ci] ([6a078c0](6a078c0)), closes [#28](#28)
* **release:** 1.0.4 [skip ci] ([ab0d4ac](ab0d4ac)), closes [#30](#30)
* **release:** 2.0.0 [skip ci] ([3fec56a](3fec56a)), closes [#54](#54)
* **release:** 2.0.1 [skip ci] ([b2d78dd](b2d78dd))
* **release:** 2.0.2 [skip ci] ([8bf01d0](8bf01d0)), closes [#56](#56)
* **release:** 3.0.0 [skip ci] ([fd1622d](fd1622d)), closes [#58](#58)
* **release:** 3.0.0 [skip ci] ([6fd81c1](6fd81c1)), closes [#17](#17) [#19](#19)
* **release:** 3.0.1 [skip ci] ([25e46dd](25e46dd)), closes [#59](#59)
* **release:** 3.0.1 [skip ci] ([64fe094](64fe094)), closes [#22](#22) [#21](#21)
* **release:** 3.0.2 [skip ci] ([f85d3fb](f85d3fb)), closes [#26](#26) [#27](#27)
* **release:** 3.0.3 [skip ci] ([d85a9f4](d85a9f4)), closes [#28](#28)
* **release:** 3.0.4 [skip ci] ([9915f7c](9915f7c)), closes [#30](#30)
* **release:** 3.0.5 [skip ci] ([9b973ee](9b973ee)), closes [#46](#46)
* **release:** 3.1.0 [skip ci] ([d1b93c8](d1b93c8)), closes [#43](#43)
* **release:** 4.0.0 [skip ci] ([7a02ec4](7a02ec4)), closes [#43](#43)
* **release:** 4.0.0 [skip ci] ([6ec6ef9](6ec6ef9)), closes [#54](#54)
* **release:** 4.0.1 [skip ci] ([4f92c90](4f92c90)), closes [#69](#69)
* **release:** 4.0.1 [skip ci] ([8991c51](8991c51)), closes [#56](#56)
* **release:** 4.0.2 [skip ci] ([3317a6a](3317a6a)), closes [#76](#76)
* **release:** 4.0.2 [skip ci] ([411c017](411c017)), closes [#51](#51)
* **release:** 4.0.3 [skip ci] ([dab81db](dab81db)), closes [#57](#57)
* **release:** 5.0.0 [skip ci] ([63827d9](63827d9)), closes [#83](#83) [#42](#42) [#84](#84)
* **release:** 5.0.0 [skip ci] ([98a66fb](98a66fb)), closes [#58](#58)
* **release:** 5.0.1 [skip ci] ([bd29083](bd29083)), closes [#104](#104)
* **release:** 5.0.2 [skip ci] ([877d54e](877d54e)), closes [#108](#108)
* **release:** 5.0.3 [skip ci] ([f29febd](f29febd)), closes [#116](#116)
* **release:** 5.0.4 [skip ci] ([17b7a90](17b7a90)), closes [#60](#60)
* **release:** 5.0.5 [skip ci] ([2f71170](2f71170)), closes [#118](#118)
* **release:** 5.1.0 [skip ci] ([17aaad9](17aaad9)), closes [#112](#112)
* **release:** 5.1.0 [skip ci] ([97dca54](97dca54)), closes [#43](#43)
* **release:** 5.2.0 [skip ci] ([dfdee5a](dfdee5a)), closes [#113](#113)
* **release:** 5.2.1 [skip ci] ([ddf1331](ddf1331)), closes [#126](#126)
* **release:** 5.2.2 [skip ci] ([0c4f28e](0c4f28e)), closes [#127](#127)
* **release:** 5.3.0 [skip ci] ([665cd1a](665cd1a)), closes [#128](#128) [#122](#122)
* **release:** 5.4.0 [skip ci] ([3501b09](3501b09)), closes [#129](#129)
* **release:** 6.0.0 [skip ci] ([dc0de7d](dc0de7d)), closes [#43](#43)
* **release:** 6.0.1 [skip ci] ([d5625d2](d5625d2)), closes [#67](#67) [#71](#71)
* **release:** 6.0.2 [skip ci] ([26c569d](26c569d)), closes [#76](#76)
* **release:** 6.1.0 [skip ci] ([51746ec](51746ec)), closes [#75](#75)
* **release:** 6.1.1 [skip ci] ([3ac2c56](3ac2c56)), closes [#78](#78)
* **release:** 6.1.2 [skip ci] ([a34a908](a34a908)), closes [#34](#34)
* **release:** 6.1.3 [skip ci] ([311b622](311b622)), closes [#81](#81)
* **release:** 7.0.0 [skip ci] ([62b2053](62b2053)), closes [#83](#83) [#42](#42) [#84](#84) [#82](#82)
* **release:** 7.0.1 [skip ci] ([198e9a7](198e9a7)), closes [#87](#87)
* **release:** 7.0.2 [skip ci] ([c7b136e](c7b136e)), closes [#88](#88)
* **release:** 7.0.3 [skip ci] ([63eea21](63eea21)), closes [#104](#104)
* **release:** 7.0.4 [skip ci] ([655a2f7](655a2f7)), closes [#97](#97)
* **release:** 7.0.5 [skip ci] ([5f77393](5f77393)), closes [#108](#108)
* **release:** 7.0.6 [skip ci] ([d8c4e6b](d8c4e6b)), closes [#116](#116)
* **release:** 7.0.7 [skip ci] ([1d6e843](1d6e843)), closes [#60](#60)
* **release:** 7.1.0 [skip ci] ([d5bf315](d5bf315)), closes [#119](#119)
* **release:** 7.2.0 [skip ci] ([47359ee](47359ee)), closes [#112](#112)
* **release:** 7.2.1 [skip ci] ([cbfe768](cbfe768))
* **release:** 7.3.0 [skip ci] ([23073eb](23073eb)), closes [#113](#113)
* **release:** 7.3.1 [skip ci] ([d850acf](d850acf)), closes [#123](#123)
* **release:** 7.3.2 [skip ci] ([a6014c6](a6014c6)), closes [#125](#125)
* **release:** 7.3.3 [skip ci] ([aa3829c](aa3829c)), closes [#126](#126)
* **release:** 7.3.4 [skip ci] ([9f03e47](9f03e47)), closes [#127](#127)
* **release:** 7.4.0 [skip ci] ([d56d627](d56d627)), closes [#128](#128)
* **release:** 7.5.0 [skip ci] ([3560e6e](3560e6e)), closes [#129](#129)
* remove long dep ([#22](#22)) ([8795507](8795507))
* remove old example ([#20](#20)) ([00ccc6a](00ccc6a))
* remove redundant dep ([a53620a](a53620a))
* Update .github/workflows/stale.yml [skip ci] ([01e2b69](01e2b69))
* Update .github/workflows/stale.yml [skip ci] ([e86d817](e86d817))
* Update .github/workflows/stale.yml [skip ci] ([8102b91](8102b91))
* Update .github/workflows/stale.yml [skip ci] ([d4f2a98](d4f2a98))
* Update .github/workflows/stale.yml [skip ci] ([aa0601c](aa0601c))
* update project config ([c54b7ac](c54b7ac))
* update protons-runtime dep ([#19](#19)) ([e119076](e119076))
* update publish config ([942e050](942e050))
* update sibling dependencies [skip ci] ([a74ff6a](a74ff6a))
* update sibling dependencies [skip ci] ([c9291e0](c9291e0))
* update sibling dependencies [skip ci] ([c476d9d](c476d9d))
* update sibling deps ([7568283](7568283))

### Documentation

* update readme ([#27](#27)) ([0ccb1a3](0ccb1a3))
* update readme to remove breaking character ([#21](#21)) ([023c29b](023c29b))

### Dependencies

* bump @bufbuild/protoc-gen-es from 1.10.0 to 2.0.0 ([#138](#138)) ([66d178f](66d178f))
* bump aegir from 38.1.8 to 39.0.13 ([#104](#104)) ([912e0e6](912e0e6))
* bump aegir from 39.0.13 to 40.0.8 ([#108](#108)) ([8b54c80](8b54c80))
* bump aegir from 40.0.13 to 41.0.4 ([#116](#116)) ([b95e988](b95e988))
* bump aegir from 41.3.5 to 42.0.1 ([#127](#127)) ([02eafe9](02eafe9))
* bump aegir from 42.2.11 to 44.1.0 ([#137](#137)) ([63f5784](63f5784))
* bump lerna from 5.6.2 to 6.0.0 ([#70](#70)) ([17fc762](17fc762))
* bump meow from 10.1.5 to 11.0.0 ([#67](#67)) ([d489fd3](d489fd3))
* bump meow from 11.0.0 to 12.0.1 ([#97](#97)) ([33250df](33250df))
* bump meow from 12.1.1 to 13.0.0 ([#125](#125)) ([2b356b8](2b356b8))
* bump uint8arrays from 3.1.1 to 4.0.2 ([#71](#71)) ([b537e92](b537e92))
* bump uint8arrays from 4.0.10 to 5.0.1 ([#126](#126)) ([1e5a0b0](1e5a0b0))
* **dev:** bump lerna from 4.0.0 to 5.3.0 ([#53](#53)) ([eebccc3](eebccc3))
* remove lerna, update aegir ([#76](#76)) ([83a24f2](83a24f2))
* update sibling dependencies ([188704d](188704d))
* update sibling dependencies ([068e25a](068e25a))
* update sibling dependencies ([b1316fa](b1316fa))
* update sibling dependencies ([a7d567d](a7d567d))

### Tests

* regenerate custom options ([768573b](768573b))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants