Built · awaiting a server
Winnow
Separate the evidence from the noise. A systematic review starts with thousands of database records and ends with a diagram every reader expects; the tools that carry it between the two are commercial and closed, and they want your unpublished data on their servers. Winnow is the whole pipeline instead — free, open source, and running on a machine the lab owns.
What it does
- Twenty search exports at once — RIS, PubMed MEDLINE and XML, BibTeX, EndNote XML, Zotero RDF, CSV — with live progress and undo.
- Deduplication that merges the certain pairs and puts the doubtful ones side by side for a person.
- Keyboard-first screening, blind or open, two reviewers, with conflicts resolved against each other's reasons.
- A relevance model that retrains from each reviewer's own decisions, shows the likely includes first, and estimates when stopping is defensible.
- Full texts uploaded or fetched from Unpaywall and PubMed Central, virus-scanned before anyone opens them.
- Dual data extraction on versioned forms with a consensus step, and risk of bias in RoB 2, ROBINS-I, Newcastle–Ottawa or QUADAS-2.
- Out the other end: the PRISMA 2020 flow diagram, Cohen's and Fleiss' kappa, a methods paragraph to paste, and a backup that restores anywhere.
How well it works
Every number below was written down as a budget before it was measured, and measured on reviews of 100,000 records.
| What | Measured | Budget |
|---|---|---|
| Screening, 95th percentile | 32–69 ms | 80 ms |
| Record list, across 15 filters, sorts and searches | 12–64 ms | 150 ms |
| Import of 100,000 records | 49 s | 60 s |
| Deduplication of 50,000 records | 13 s | 30 s |
| Page load on 4G (LCP) | 0.7 s | 1.5 s |
Fifty reviewers deciding every three seconds for ten minutes: a 37 ms 95th percentile and 0 errors in 19,920 requests. Authorisation is checked per review with PostgreSQL row-level security behind it, and blind mode is enforced in the database rather than hidden in the interface. WCAG 2.2 AA with no serious or critical axe findings across 43 pages, four screen sizes and both themes. 900 backend tests at 95% coverage, Playwright end to end, mypy --strict, and an OWASP ZAP baseline scan in CI with no high-risk findings.
Not live yet
The production stack is complete and tested — one command brings it up with automatic HTTPS, encrypted nightly backups and a restore test CI runs monthly. What it does not have is somewhere to run. Winnow keeps its own database, a background worker and a virus scanner, so it needs a paid server rather than the free static hosting the rest of this site uses. It goes up at winnow.sandhiresearch.org for Sandhi Research Lab once that server is in place, and this page becomes a link on the day it does.