Repository navigation
Open
Labels
Area: APIsThings related to external and internal APIsThings related to external and internal APIsArea: streamsThings related to handling streams, and bugs around them.Things related to handling streams, and bugs around them.Priority: MediumThis issue may be useful, and needs some attention.This issue may be useful, and needs some attention.Status: In ProgressThis issue is being worked on, and has someone assigned.This issue is being worked on, and has someone assigned.Type: EnhancementMost issues will probably be for additions or changes. Expected that this will result in a PR.Most issues will probably be for additions or changes. Expected that this will result in a PR.Type: MaintenanceUpdating phrasing or wording to make things clearer or removing ambiguity, without a functionality.Updating phrasing or wording to make things clearer or removing ambiguity, without a functionality.
Description
Used @mjackson 's benchmarks suite, seems like Formidable v3 is performing pretty well, especially in large files.
link mjackson/remix-the-web#66 where we can find the trimmed down formidable v3 (using directly the parser class and the tweaked multpart plugin that doesn't use this)
Metadata
Metadata
Assignees
Labels
Area: APIsThings related to external and internal APIsThings related to external and internal APIsArea: streamsThings related to handling streams, and bugs around them.Things related to handling streams, and bugs around them.Priority: MediumThis issue may be useful, and needs some attention.This issue may be useful, and needs some attention.Status: In ProgressThis issue is being worked on, and has someone assigned.This issue is being worked on, and has someone assigned.Type: EnhancementMost issues will probably be for additions or changes. Expected that this will result in a PR.Most issues will probably be for additions or changes. Expected that this will result in a PR.Type: MaintenanceUpdating phrasing or wording to make things clearer or removing ambiguity, without a functionality.Updating phrasing or wording to make things clearer or removing ambiguity, without a functionality.

Activity
GrosSacASac commentedon Apr 25, 2025
nice
tunnckoCore commentedon Apr 26, 2025
there's certain feeling that after so many years you're provably still the best parser lol.
Tho, it's shocking that it's okay for large files because it's a byte-by-byte streaming parser. That must hurt perf but it isn't somehow.
Actively playing with different stuff. And mjackson's is hard to beat, tho with far less control on the core level. People can use his and built linits on top, but it's even better to have some of the limits baked in on the parser level. Tho, that's a bit questionable cuz in the streaming process you should move through the part's body anyway but still tho if you don't event emit/yield this part's body to the up-level you can save on some overhead on that level.. tho, in the upper lever for await of loop, that gets the part objects, user (or higher level wrapper) can just validate and out
continue.tldr: so so. 😅 good extensive test suite and good extensive benchmarks are needed. I'll push a new branch when I'm ready with more final and stable thing
tunnckoCore commentedon Apr 30, 2025
v4 published on
nextnpm dist-tagDocs and basic examples at: https://www.npmjs.com/package/formidable/v/4.0.0-rc.3
it's a fork of the
@mjackson/multipart-parser, because A) we can't build on top directly for now, and B) it's unbeatable. The limit options have to be inside the parser to be able to skip calling the handler for that part if it's above the limits.api
TheThing commentedon Sep 16, 2025
Any chance you could include Formidable@1 in those benchmarks? ;)
I'd be curious how performance stacks and/or changes between v1, v2 and finally v3 :)
tunnckoCore commentedon Nov 21, 2025
@TheThing not necessarily interested in that. It's bad. It's a lot of bloat, it's deprecated for years, it has security flaws, and it's slow for sure. I've seen benchamarks against Busboy and it's slower. Thinner and newer stuff is faster, no way around that.