# jflint — offline Jenkinsfile linting via jenkinsfile-runner, no server needed

**URL:** <https://community.jenkins.io/t/jflint-offline-jenkinsfile-linting-via-jenkinsfile-runner-no-server-needed/37254>\
**Category:** Showing Off\
**Created:** [September 5, 2026, 7:47pm UTC](https://community.jenkins.io/t/jflint-offline-jenkinsfile-linting-via-jenkinsfile-runner-no-server-needed/37254 "2026-09-05T19:47:39Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![johndow-42](https://avatars.discourse-cdn.com/v4/letter/j/a9adbd/32.png) [@johndow-42](https://community.jenkins.io/u/johndow-42)\
**Post date:** [September 5, 2026, 7:47pm UTC](https://community.jenkins.io/t/jflint-offline-jenkinsfile-linting-via-jenkinsfile-runner-no-server-needed/37254/1 "2026-09-05T19:47:40Z")

</div>

Hi all,

I built a small CLI called jflint to lint declarative Jenkinsfiles fully offline, no Jenkins server, no credentials, just Docker.

Why: the most popular VS Code linter (270k+ installs, Jenkins Pipeline Linter Connector) needs a live, reachable Jenkins server to work. jenkinsfile-runner already ships a `lint` command that avoids that, but using it means assembling a matching WAR/plugin set by hand, and its Docker CLI mode trips people up (see issue #461 on jenkinsfile-runner). While building this I also ran into the outdated CA truststore bug on the `latest` image (issue #738) - jflint works around it by always pointing `-w`/`-p` at the WAR and plugins already bundled in the image, so it never triggers the runtime WAR download that fails.

- GitHub: [GitHub - johndow-42/jflint · GitHub](https://github.com/johndow-42/jflint)

- Install: `npm install -g jenkinsfile-lint` (the name `jflint` itself was already taken on npm by an older, unrelated package, so it’s published as jenkinsfile-lint - the installed command is still `jflint`)

Free, MIT-licensed, no telemetry, no server calls.

Full disclosure: I’m the author. Sharing it here because this category seemed like exactly the right place. Happy to hear if it’s useful to anyone, or if there’s an existing tool I should have used instead of building this.

---

<div class="post-metadata">

**Author:** ![panicking](https://dub1.discourse-cdn.com/flex013/user_avatar/community.jenkins.io/panicking/32/22039_2.png) [@panicking](https://community.jenkins.io/u/panicking)\
**Post date:** [September 11, 2026, 7:32pm UTC](https://community.jenkins.io/t/jflint-offline-jenkinsfile-linting-via-jenkinsfile-runner-no-server-needed/37254/2 "2026-09-11T19:32:46Z")

</div>

Does support groovy pipeline? If no is there any plan for it?
