---
marp: true @marp-team/marp-cli v4.4.0 (w/ @marp-team/marp-core v4.3.0)
title: Firefox Web APIs with crates over FFI
author: Ed Guloien
date: Sept 2026
paginate: true
footer:
Sept 2026
html: "true"
---
# Firefox Web APIs with Crates (over FFI)
### Ed Guloien
---
## about://ed-guloien
- Software Developer @ Quantum Bridge:
- Distributed Symmetric Key Exchange
- Former Mozillian: Platform, Networking
- Interests: Privacy, Security, Systems
- ed.guloien@qubridge.io
---
## Interop 2025


---
## URLPattern Web API
```rust
// JS
// build a pattern
const pattern = new URLPattern({ pathname: "/books/:id" });
// check for match
pattern.test("https://example.com/books/123");
// get match info by component
pattern.exec("https://example.com/books/123").pathname.groups
```
---
## Denoland & Firefox


-------
## Web API Call Flow

-----
## Urlpattern Crate API

----
## Glue Crate
```
let pattern = quirks::parse::(input);
let results = quirks::process_match(pattern, input);
// call it a day
```
-----
## Reality Sets In (Memory Concerns)
```
#[repr(transparent)]
pub struct UrlPatternGlue(pub *mut c_void);
if let Ok(pattern) = quirks::parse::(input, ...) {
unsafe {
*res = UrlPatternGlue(Box::into_raw(Box::new(pattern)) as *mut _);
}
}
glue::process_match(..., res: *mut MatchResults, other: MaybeString)
glue::doing_thing(..., res: &mut ThinVec<>);
```
----
## Pattern Re-use; Marshaling

------
## 99.8%
```
regex::Regex != EcmaScript Regex
```
----
## Spidermonkey Challenges (many)

-----
## Phew!

#### References
- http://qubridge.io
- https://wpt.fyi/interop-2025
- https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API
- https://searchfox.org/firefox-main
- https://github.com/denoland/rust-urlpattern
- See also: https://manuelbucher.com/blog/rust-gecko/