# strawcore Rust port of [NewPipeExtractor](https://github.com/TeamNewPipe/NewPipeExtractor) (v0.26.2), YouTube-only. Plugs into [Straw](http://192.168.0.5:3001/Sulkta-Coop/straw) via UniFFI. ## Why this exists `rustypipe` regex-parses YouTube's `player.js` and reimplements the signature deobfuscator in Rust. Every YT player rotation breaks it. NPE embeds Mozilla Rhino and executes the JS function live — resilient by design, and that's the architecture we're mirroring. The rustypipe-backed Straw build (vc=15..17) also routed playback through iOS-progressive URLs, which hit a server-side ~917 KiB end-byte cap. NPE uses the Android client + po_token → DASH manifest path, which doesn't see the cap. Same fix, different layer. See `memory/npe-audit-2026-05-24/SPEC.md` in the workspace repo for the full plan. ## Status | Phase | Subsystem | Status | |---|---|---| | 1 | Foundation (downloader + service spine) | **in progress** | | 2 | JS engine (rquickjs + ress) | pending | | 3 | InnerTube + itag table | pending | | 4 | Stream extractor + DASH | pending | | 5 | PoTokenProvider trait + Android JNI bridge | pending | | 6 | Search + Channel + Playlist + Kiosks | pending | | 7 | UniFFI surface swap | pending | | 8 | Delete rustypipe everywhere | pending | ## Build + test ```bash cargo build cargo test --lib # offline unit tests cargo test --features online-tests # full smoke incl. live httpbin.org ``` ## License GPL-3.0-or-later. NPE is GPL-3.0; this port inherits.