Is csurf still maintained?
No — csurf stopped being maintained around January 2020. The ecosystem moved to csrf-csrf, a separate project that took over the same job.
- Status
- No longer maintained
- Last maintained
- January 2020
- Use instead
csrf-csrf— on npm- Succession
- Replacement project
- Drop-in
- no — expect code changes
- Confidence
- medium
What should I use instead of csurf?
The ecosystem moved to csrf-csrf, a separate project that took over the same job. csrf-csrf is not a drop-in replacement, so expect to change call sites.
How to migrate from csurf to csrf-csrf
csrf-csrf is configured through doubleCsrf({getSecret, cookieName}), which returns the middleware and a token generator; the template-side call changes from req.csrfToken() to the generator returned by that factory.
Why csurf is on this list
csurf was the standard Express CSRF middleware; its last release was 1.11.0 in January 2020, and the Express team archived the repository on 14 May 2025 with an npm notice saying the package is archived and no longer maintained. No official replacement was named. csrf-csrf, which implements the double-submit cookie pattern, is the most widely installed of the actively maintained options, and @dr.pogodin/csurf is a maintained fork if you need the original API.
The succession is well supported, but it is not the only defensible choice.
csurf alternatives
Beyond the primary recommendation, these are credible for csurf's use case:
@dr.pogodin/csurf— view on npmlusca— view on npmtiny-csrf— view on npm
Check your own project for csurf
npx dead-deps --all --min-state unmaintained
Run that in the directory holding your lockfile. If csurf is anywhere in your tree — a direct dependency or buried under something else — it appears in the report with this verdict, this successor and the same evidence links, alongside anything else that has stopped moving. Nothing is uploaded; the scan reads your lockfile locally and queries public registry metadata.
Exit code 1 means something was flagged, which makes npx dead-deps --min-state deprecated usable as a CI gate. See how verdicts are produced.
Evidence
Every claim on this page traces to a primary source. Check them:
- Archived expressjs/csurf repository (archived 14 May 2025)github.com
- npm deprecation notice for csurfnpmjs.com
Packages related to csurf
- requestReplacement project: undici · unmaintained since February 2020
- request-promiseReplacement project: got · unmaintained since July 2020
- request-promise-anyReplacement project: got · unmaintained since July 2020
- request-promise-nativeReplacement project: got · unmaintained since July 2020
- casperjsReplacement project: playwright · unmaintained since March 2018
See the full index of covered packages, or read the methodology for how a verdict is reached and why a quiet package is not a dead one.