# Supported Formats

> Languages and formats supported by jscpd.

## Overview

jscpd supports **223 programming languages and document formats** for duplication detection.

**130 formats** are auto-detected by file extension. **88 registered formats** have a grammar but no built-in extension mapping — use `--formats-exts` or `--formats-names` to activate them. An additional **5 formats** (`clike`, `comments`, `hpkp`, `hsts`, `keymap`) are internal grammar dependencies.

## Cross-Format Tokenizers

These formats use bespoke multi-block tokenizers that extract embedded code sections and resolve each block to the correct sub-format, enabling **cross-format duplicate detection** — e.g. a `<script>` block in a `.vue` file matched against `.ts` files.

<table>
<thead>
  <tr>
    <th>
      Format
    </th>
    
    <th>
      Extensions
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        astro
      </strong>
    </td>
    
    <td>
      <code>
        .astro
      </code>
    </td>
    
    <td>
      Astro component format (frontmatter + template)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        svelte
      </strong>
    </td>
    
    <td>
      <code>
        .svelte
      </code>
    </td>
    
    <td>
      Svelte reactive component framework
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        vue
      </strong>
    </td>
    
    <td>
      <code>
        .vue
      </code>
    </td>
    
    <td>
      Vue Single-File Component (template, script, style blocks)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        markdown
      </strong>
    </td>
    
    <td>
      <code>
        .md
      </code>
      
      , <code>
        .markdown
      </code>
      
      , <code>
        .mkd
      </code>
    </td>
    
    <td>
      Markdown with fenced code blocks tokenized by language
    </td>
  </tr>
</tbody>
</table>

Separately, the `--cross-formats` flag (v5.0.14+) lets you compare *related formats* in one pool — e.g. JavaScript ↔ TypeScript with the `js-ts` preset. See [Configuration → Cross-Format Groups](/getting-started/configuration#cross-format-groups-cross-formats).

## Auto-Detected Formats

These formats are detected automatically by file extension — no extra flags needed.

### General-Purpose Languages

<table>
<thead>
  <tr>
    <th>
      Format
    </th>
    
    <th>
      Extensions
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      actionscript
    </td>
    
    <td>
      <code>
        .as
      </code>
    </td>
    
    <td>
      Adobe ActionScript
    </td>
  </tr>
  
  <tr>
    <td>
      ada
    </td>
    
    <td>
      <code>
        .ada
      </code>
    </td>
    
    <td>
      Ada, strongly-typed systems language
    </td>
  </tr>
  
  <tr>
    <td>
      antlr4
    </td>
    
    <td>
      <code>
        .g4
      </code>
    </td>
    
    <td>
      ANTLR v4 grammar definitions
    </td>
  </tr>
  
  <tr>
    <td>
      apex
    </td>
    
    <td>
      <code>
        .cls
      </code>
      
      , <code>
        .trigger
      </code>
      
      , <code>
        .apex
      </code>
    </td>
    
    <td>
      Salesforce Apex
    </td>
  </tr>
  
  <tr>
    <td>
      apl
    </td>
    
    <td>
      <code>
        .apl
      </code>
    </td>
    
    <td>
      APL, array-oriented language
    </td>
  </tr>
  
  <tr>
    <td>
      aspnet
    </td>
    
    <td>
      <code>
        .asp
      </code>
      
      , <code>
        .aspx
      </code>
    </td>
    
    <td>
      ASP.NET server-side files
    </td>
  </tr>
  
  <tr>
    <td>
      awk
    </td>
    
    <td>
      <code>
        .awk
      </code>
    </td>
    
    <td>
      AWK text-processing
    </td>
  </tr>
  
  <tr>
    <td>
      bash
    </td>
    
    <td>
      <code>
        .sh
      </code>
      
      , <code>
        .ksh
      </code>
      
      , <code>
        .bash
      </code>
    </td>
    
    <td>
      Bash and POSIX shell scripts
    </td>
  </tr>
  
  <tr>
    <td>
      basic
    </td>
    
    <td>
      <code>
        .bas
      </code>
    </td>
    
    <td>
      BASIC
    </td>
  </tr>
  
  <tr>
    <td>
      bicep
    </td>
    
    <td>
      <code>
        .bicep
      </code>
    </td>
    
    <td>
      Azure Bicep infrastructure-as-code
    </td>
  </tr>
  
  <tr>
    <td>
      brainfuck
    </td>
    
    <td>
      <code>
        .b
      </code>
      
      , <code>
        .bf
      </code>
    </td>
    
    <td>
      Brainfuck esoteric language
    </td>
  </tr>
  
  <tr>
    <td>
      c
    </td>
    
    <td>
      <code>
        .c
      </code>
      
      , <code>
        .z80
      </code>
    </td>
    
    <td>
      C programming language
    </td>
  </tr>
  
  <tr>
    <td>
      c-header
    </td>
    
    <td>
      <code>
        .h
      </code>
    </td>
    
    <td>
      C header files
    </td>
  </tr>
  
  <tr>
    <td>
      cfml
    </td>
    
    <td>
      <code>
        .cfm
      </code>
    </td>
    
    <td>
      ColdFusion Markup Language
    </td>
  </tr>
  
  <tr>
    <td>
      cfscript
    </td>
    
    <td>
      <code>
        .cfc
      </code>
    </td>
    
    <td>
      ColdFusion components (CFScript)
    </td>
  </tr>
  
  <tr>
    <td>
      clojure
    </td>
    
    <td>
      <code>
        .clj
      </code>
      
      , <code>
        .cljs
      </code>
      
      , <code>
        .cljc
      </code>
      
      , <code>
        .cljx
      </code>
      
      , <code>
        .edn
      </code>
    </td>
    
    <td>
      Clojure
    </td>
  </tr>
  
  <tr>
    <td>
      cmake
    </td>
    
    <td>
      <code>
        .cmake
      </code>
    </td>
    
    <td>
      CMake build scripts
    </td>
  </tr>
  
  <tr>
    <td>
      coffeescript
    </td>
    
    <td>
      <code>
        .coffee
      </code>
    </td>
    
    <td>
      CoffeeScript
    </td>
  </tr>
  
  <tr>
    <td>
      cpp
    </td>
    
    <td>
      <code>
        .cpp
      </code>
      
      , <code>
        .c++
      </code>
      
      , <code>
        .cc
      </code>
      
      , <code>
        .cxx
      </code>
    </td>
    
    <td>
      C++
    </td>
  </tr>
  
  <tr>
    <td>
      cpp-header
    </td>
    
    <td>
      <code>
        .hpp
      </code>
      
      , <code>
        .h++
      </code>
      
      , <code>
        .hh
      </code>
      
      , <code>
        .hxx
      </code>
    </td>
    
    <td>
      C++ header files
    </td>
  </tr>
  
  <tr>
    <td>
      crystal
    </td>
    
    <td>
      <code>
        .cr
      </code>
    </td>
    
    <td>
      Crystal
    </td>
  </tr>
  
  <tr>
    <td>
      csharp
    </td>
    
    <td>
      <code>
        .cs
      </code>
    </td>
    
    <td>
      C#
    </td>
  </tr>
  
  <tr>
    <td>
      csv
    </td>
    
    <td>
      <code>
        .csv
      </code>
    </td>
    
    <td>
      CSV data files
    </td>
  </tr>
  
  <tr>
    <td>
      css
    </td>
    
    <td>
      <code>
        .css
      </code>
      
      , <code>
        .gss
      </code>
    </td>
    
    <td>
      CSS
    </td>
  </tr>
  
  <tr>
    <td>
      d
    </td>
    
    <td>
      <code>
        .d
      </code>
    </td>
    
    <td>
      D systems language
    </td>
  </tr>
  
  <tr>
    <td>
      dart
    </td>
    
    <td>
      <code>
        .dart
      </code>
    </td>
    
    <td>
      Dart / Flutter
    </td>
  </tr>
  
  <tr>
    <td>
      diff
    </td>
    
    <td>
      <code>
        .diff
      </code>
      
      , <code>
        .patch
      </code>
    </td>
    
    <td>
      Unified diff and patch files
    </td>
  </tr>
  
  <tr>
    <td>
      dot
    </td>
    
    <td>
      <code>
        .dot
      </code>
      
      , <code>
        .gv
      </code>
    </td>
    
    <td>
      Graphviz DOT
    </td>
  </tr>
  
  <tr>
    <td>
      eiffel
    </td>
    
    <td>
      <code>
        .e
      </code>
    </td>
    
    <td>
      Eiffel
    </td>
  </tr>
  
  <tr>
    <td>
      elm
    </td>
    
    <td>
      <code>
        .elm
      </code>
    </td>
    
    <td>
      Elm web language
    </td>
  </tr>
  
  <tr>
    <td>
      erlang
    </td>
    
    <td>
      <code>
        .erl
      </code>
      
      , <code>
        .erlang
      </code>
    </td>
    
    <td>
      Erlang
    </td>
  </tr>
  
  <tr>
    <td>
      excel-formula
    </td>
    
    <td>
      <code>
        .xlsx
      </code>
      
      , <code>
        .xls
      </code>
    </td>
    
    <td>
      Microsoft Excel
    </td>
  </tr>
  
  <tr>
    <td>
      fortran
    </td>
    
    <td>
      <code>
        .f
      </code>
      
      , <code>
        .for
      </code>
      
      , <code>
        .f77
      </code>
      
      , <code>
        .f90
      </code>
    </td>
    
    <td>
      Fortran
    </td>
  </tr>
  
  <tr>
    <td>
      fsharp
    </td>
    
    <td>
      <code>
        .fs
      </code>
    </td>
    
    <td>
      F#
    </td>
  </tr>
  
  <tr>
    <td>
      gdscript
    </td>
    
    <td>
      <code>
        .gd
      </code>
    </td>
    
    <td>
      GDScript for Godot
    </td>
  </tr>
  
  <tr>
    <td>
      gettext
    </td>
    
    <td>
      <code>
        .po
      </code>
    </td>
    
    <td>
      GNU gettext PO files
    </td>
  </tr>
  
  <tr>
    <td>
      gherkin
    </td>
    
    <td>
      <code>
        .feature
      </code>
    </td>
    
    <td>
      Gherkin BDD scenarios
    </td>
  </tr>
  
  <tr>
    <td>
      go
    </td>
    
    <td>
      <code>
        .go
      </code>
    </td>
    
    <td>
      Go
    </td>
  </tr>
  
  <tr>
    <td>
      graphql
    </td>
    
    <td>
      <code>
        .graphql
      </code>
    </td>
    
    <td>
      GraphQL
    </td>
  </tr>
  
  <tr>
    <td>
      groovy
    </td>
    
    <td>
      <code>
        .groovy
      </code>
      
      , <code>
        .gradle
      </code>
    </td>
    
    <td>
      Groovy / Gradle
    </td>
  </tr>
  
  <tr>
    <td>
      haml
    </td>
    
    <td>
      <code>
        .haml
      </code>
    </td>
    
    <td>
      Haml templates
    </td>
  </tr>
  
  <tr>
    <td>
      handlebars
    </td>
    
    <td>
      <code>
        .hb
      </code>
      
      , <code>
        .hbs
      </code>
      
      , <code>
        .handlebars
      </code>
    </td>
    
    <td>
      Handlebars templates
    </td>
  </tr>
  
  <tr>
    <td>
      haskell
    </td>
    
    <td>
      <code>
        .hs
      </code>
      
      , <code>
        .lhs
      </code>
    </td>
    
    <td>
      Haskell
    </td>
  </tr>
  
  <tr>
    <td>
      haxe
    </td>
    
    <td>
      <code>
        .hx
      </code>
      
      , <code>
        .hxml
      </code>
    </td>
    
    <td>
      Haxe
    </td>
  </tr>
  
  <tr>
    <td>
      hcl
    </td>
    
    <td>
      <code>
        .tf
      </code>
      
      , <code>
        .hcl
      </code>
    </td>
    
    <td>
      HashiCorp HCL (Terraform)
    </td>
  </tr>
  
  <tr>
    <td>
      idris
    </td>
    
    <td>
      <code>
        .idr
      </code>
    </td>
    
    <td>
      Idris
    </td>
  </tr>
  
  <tr>
    <td>
      ignore
    </td>
    
    <td>
      <code>
        .gitignore
      </code>
    </td>
    
    <td>
      Gitignore files
    </td>
  </tr>
  
  <tr>
    <td>
      ini
    </td>
    
    <td>
      <code>
        .ini
      </code>
    </td>
    
    <td>
      INI configuration
    </td>
  </tr>
  
  <tr>
    <td>
      java
    </td>
    
    <td>
      <code>
        .java
      </code>
    </td>
    
    <td>
      Java
    </td>
  </tr>
  
  <tr>
    <td>
      javascript
    </td>
    
    <td>
      <code>
        .js
      </code>
      
      , <code>
        .es
      </code>
      
      , <code>
        .es6
      </code>
      
      , <code>
        .mjs
      </code>
      
      , <code>
        .cjs
      </code>
    </td>
    
    <td>
      JavaScript
    </td>
  </tr>
  
  <tr>
    <td>
      json
    </td>
    
    <td>
      <code>
        .json
      </code>
      
      , <code>
        .map
      </code>
      
      , <code>
        .jsonld
      </code>
    </td>
    
    <td>
      JSON
    </td>
  </tr>
  
  <tr>
    <td>
      json5
    </td>
    
    <td>
      <code>
        .json5
      </code>
    </td>
    
    <td>
      JSON5
    </td>
  </tr>
  
  <tr>
    <td>
      jsx
    </td>
    
    <td>
      <code>
        .jsx
      </code>
    </td>
    
    <td>
      JSX (React)
    </td>
  </tr>
  
  <tr>
    <td>
      julia
    </td>
    
    <td>
      <code>
        .jl
      </code>
    </td>
    
    <td>
      Julia
    </td>
  </tr>
  
  <tr>
    <td>
      kotlin
    </td>
    
    <td>
      <code>
        .kt
      </code>
      
      , <code>
        .kts
      </code>
    </td>
    
    <td>
      Kotlin
    </td>
  </tr>
  
  <tr>
    <td>
      latex
    </td>
    
    <td>
      <code>
        .tex
      </code>
    </td>
    
    <td>
      LaTeX
    </td>
  </tr>
  
  <tr>
    <td>
      less
    </td>
    
    <td>
      <code>
        .less
      </code>
    </td>
    
    <td>
      Less CSS preprocessor
    </td>
  </tr>
  
  <tr>
    <td>
      lilypond
    </td>
    
    <td>
      <code>
        .ly
      </code>
    </td>
    
    <td>
      LilyPond music notation
    </td>
  </tr>
  
  <tr>
    <td>
      linker-script
    </td>
    
    <td>
      <code>
        .ld
      </code>
    </td>
    
    <td>
      GNU linker scripts
    </td>
  </tr>
  
  <tr>
    <td>
      lisp
    </td>
    
    <td>
      <code>
        .cl
      </code>
      
      , <code>
        .lisp
      </code>
      
      , <code>
        .el
      </code>
    </td>
    
    <td>
      Common Lisp / Emacs Lisp
    </td>
  </tr>
  
  <tr>
    <td>
      livescript
    </td>
    
    <td>
      <code>
        .ls
      </code>
    </td>
    
    <td>
      LiveScript
    </td>
  </tr>
  
  <tr>
    <td>
      llvm
    </td>
    
    <td>
      <code>
        .ll
      </code>
    </td>
    
    <td>
      LLVM IR
    </td>
  </tr>
  
  <tr>
    <td>
      log
    </td>
    
    <td>
      <code>
        .log
      </code>
    </td>
    
    <td>
      Log files
    </td>
  </tr>
  
  <tr>
    <td>
      lua
    </td>
    
    <td>
      <code>
        .lua
      </code>
    </td>
    
    <td>
      Lua
    </td>
  </tr>
  
  <tr>
    <td>
      markup
    </td>
    
    <td>
      <code>
        .html
      </code>
      
      , <code>
        .htm
      </code>
      
      , <code>
        .xml
      </code>
      
      , <code>
        .xsl
      </code>
      
      , <code>
        .xslt
      </code>
      
      , <code>
        .svg
      </code>
      
      , <code>
        .ejs
      </code>
      
      , <code>
        .jsp
      </code>
    </td>
    
    <td>
      HTML, XML, SVG
    </td>
  </tr>
  
  <tr>
    <td>
      nsis
    </td>
    
    <td>
      <code>
        .nsh
      </code>
      
      , <code>
        .nsi
      </code>
    </td>
    
    <td>
      NSIS installer scripts
    </td>
  </tr>
  
  <tr>
    <td>
      objectivec
    </td>
    
    <td>
      <code>
        .m
      </code>
      
      , <code>
        .mm
      </code>
    </td>
    
    <td>
      Objective-C
    </td>
  </tr>
  
  <tr>
    <td>
      ocaml
    </td>
    
    <td>
      <code>
        .ocaml
      </code>
      
      , <code>
        .ml
      </code>
      
      , <code>
        .mli
      </code>
      
      , <code>
        .mll
      </code>
      
      , <code>
        .mly
      </code>
    </td>
    
    <td>
      OCaml
    </td>
  </tr>
  
  <tr>
    <td>
      openqasm
    </td>
    
    <td>
      <code>
        .qasm
      </code>
    </td>
    
    <td>
      OpenQASM quantum assembly
    </td>
  </tr>
  
  <tr>
    <td>
      oz
    </td>
    
    <td>
      <code>
        .oz
      </code>
    </td>
    
    <td>
      Oz/Mozart
    </td>
  </tr>
  
  <tr>
    <td>
      pascal
    </td>
    
    <td>
      <code>
        .pas
      </code>
      
      , <code>
        .p
      </code>
    </td>
    
    <td>
      Pascal
    </td>
  </tr>
  
  <tr>
    <td>
      perl
    </td>
    
    <td>
      <code>
        .pl
      </code>
      
      , <code>
        .pm
      </code>
    </td>
    
    <td>
      Perl
    </td>
  </tr>
  
  <tr>
    <td>
      php
    </td>
    
    <td>
      <code>
        .php
      </code>
      
      , <code>
        .phtml
      </code>
    </td>
    
    <td>
      PHP
    </td>
  </tr>
  
  <tr>
    <td>
      plant-uml
    </td>
    
    <td>
      <code>
        .puml
      </code>
      
      , <code>
        .plantuml
      </code>
    </td>
    
    <td>
      PlantUML diagrams
    </td>
  </tr>
  
  <tr>
    <td>
      plsql
    </td>
    
    <td>
      <code>
        .plsql
      </code>
    </td>
    
    <td>
      PL/SQL
    </td>
  </tr>
  
  <tr>
    <td>
      powerquery
    </td>
    
    <td>
      <code>
        .pq
      </code>
    </td>
    
    <td>
      Power Query M
    </td>
  </tr>
  
  <tr>
    <td>
      powershell
    </td>
    
    <td>
      <code>
        .ps1
      </code>
      
      , <code>
        .psd1
      </code>
      
      , <code>
        .psm1
      </code>
    </td>
    
    <td>
      PowerShell
    </td>
  </tr>
  
  <tr>
    <td>
      properties
    </td>
    
    <td>
      <code>
        .properties
      </code>
    </td>
    
    <td>
      Java properties
    </td>
  </tr>
  
  <tr>
    <td>
      protobuf
    </td>
    
    <td>
      <code>
        .proto
      </code>
    </td>
    
    <td>
      Protocol Buffers
    </td>
  </tr>
  
  <tr>
    <td>
      pug
    </td>
    
    <td>
      <code>
        .pug
      </code>
      
      , <code>
        .jade
      </code>
    </td>
    
    <td>
      Pug (Jade) templates
    </td>
  </tr>
  
  <tr>
    <td>
      puppet
    </td>
    
    <td>
      <code>
        .pp
      </code>
      
      , <code>
        .puppet
      </code>
    </td>
    
    <td>
      Puppet
    </td>
  </tr>
  
  <tr>
    <td>
      purescript
    </td>
    
    <td>
      <code>
        .purs
      </code>
    </td>
    
    <td>
      PureScript
    </td>
  </tr>
  
  <tr>
    <td>
      python
    </td>
    
    <td>
      <code>
        .py
      </code>
      
      , <code>
        .pyx
      </code>
      
      , <code>
        .pxd
      </code>
      
      , <code>
        .pxi
      </code>
    </td>
    
    <td>
      Python
    </td>
  </tr>
  
  <tr>
    <td>
      q
    </td>
    
    <td>
      <code>
        .q
      </code>
    </td>
    
    <td>
      Q/kdb+
    </td>
  </tr>
  
  <tr>
    <td>
      qsharp
    </td>
    
    <td>
      <code>
        .qs
      </code>
    </td>
    
    <td>
      Q# quantum
    </td>
  </tr>
  
  <tr>
    <td>
      r
    </td>
    
    <td>
      <code>
        .r
      </code>
      
      , <code>
        .R
      </code>
    </td>
    
    <td>
      R
    </td>
  </tr>
  
  <tr>
    <td>
      racket
    </td>
    
    <td>
      <code>
        .rkt
      </code>
    </td>
    
    <td>
      Racket
    </td>
  </tr>
  
  <tr>
    <td>
      rescript
    </td>
    
    <td>
      <code>
        .res
      </code>
    </td>
    
    <td>
      ReScript
    </td>
  </tr>
  
  <tr>
    <td>
      robotframework
    </td>
    
    <td>
      <code>
        .robot
      </code>
    </td>
    
    <td>
      Robot Framework
    </td>
  </tr>
  
  <tr>
    <td>
      ruby
    </td>
    
    <td>
      <code>
        .rb
      </code>
    </td>
    
    <td>
      Ruby
    </td>
  </tr>
  
  <tr>
    <td>
      rust
    </td>
    
    <td>
      <code>
        .rs
      </code>
    </td>
    
    <td>
      Rust
    </td>
  </tr>
  
  <tr>
    <td>
      sas
    </td>
    
    <td>
      <code>
        .sas
      </code>
    </td>
    
    <td>
      SAS
    </td>
  </tr>
  
  <tr>
    <td>
      sass
    </td>
    
    <td>
      <code>
        .sass
      </code>
    </td>
    
    <td>
      Sass (indented syntax)
    </td>
  </tr>
  
  <tr>
    <td>
      scala
    </td>
    
    <td>
      <code>
        .scala
      </code>
    </td>
    
    <td>
      Scala
    </td>
  </tr>
  
  <tr>
    <td>
      scheme
    </td>
    
    <td>
      <code>
        .scm
      </code>
      
      , <code>
        .ss
      </code>
    </td>
    
    <td>
      Scheme
    </td>
  </tr>
  
  <tr>
    <td>
      scss
    </td>
    
    <td>
      <code>
        .scss
      </code>
    </td>
    
    <td>
      SCSS
    </td>
  </tr>
  
  <tr>
    <td>
      smalltalk
    </td>
    
    <td>
      <code>
        .st
      </code>
    </td>
    
    <td>
      Smalltalk
    </td>
  </tr>
  
  <tr>
    <td>
      smarty
    </td>
    
    <td>
      <code>
        .smarty
      </code>
      
      , <code>
        .tpl
      </code>
    </td>
    
    <td>
      Smarty templates
    </td>
  </tr>
  
  <tr>
    <td>
      solidity
    </td>
    
    <td>
      <code>
        .sol
      </code>
    </td>
    
    <td>
      Solidity (Ethereum)
    </td>
  </tr>
  
  <tr>
    <td>
      soy
    </td>
    
    <td>
      <code>
        .soy
      </code>
    </td>
    
    <td>
      Google Closure Templates
    </td>
  </tr>
  
  <tr>
    <td>
      sparql
    </td>
    
    <td>
      <code>
        .rq
      </code>
    </td>
    
    <td>
      SPARQL
    </td>
  </tr>
  
  <tr>
    <td>
      sql
    </td>
    
    <td>
      <code>
        .sql
      </code>
      
      , <code>
        .cql
      </code>
    </td>
    
    <td>
      SQL
    </td>
  </tr>
  
  <tr>
    <td>
      stylus
    </td>
    
    <td>
      <code>
        .styl
      </code>
      
      , <code>
        .stylus
      </code>
    </td>
    
    <td>
      Stylus
    </td>
  </tr>
  
  <tr>
    <td>
      swift
    </td>
    
    <td>
      <code>
        .swift
      </code>
    </td>
    
    <td>
      Swift
    </td>
  </tr>
  
  <tr>
    <td>
      tap
    </td>
    
    <td>
      <code>
        .tap
      </code>
    </td>
    
    <td>
      TAP (Test Anything Protocol)
    </td>
  </tr>
  
  <tr>
    <td>
      tcl
    </td>
    
    <td>
      <code>
        .tcl
      </code>
    </td>
    
    <td>
      Tcl
    </td>
  </tr>
  
  <tr>
    <td>
      textile
    </td>
    
    <td>
      <code>
        .textile
      </code>
    </td>
    
    <td>
      Textile markup
    </td>
  </tr>
  
  <tr>
    <td>
      toml
    </td>
    
    <td>
      <code>
        .toml
      </code>
    </td>
    
    <td>
      TOML configuration
    </td>
  </tr>
  
  <tr>
    <td>
      tsx
    </td>
    
    <td>
      <code>
        .tsx
      </code>
    </td>
    
    <td>
      TSX (React + TypeScript)
    </td>
  </tr>
  
  <tr>
    <td>
      tt2
    </td>
    
    <td>
      <code>
        .tt2
      </code>
    </td>
    
    <td>
      Template Toolkit 2
    </td>
  </tr>
  
  <tr>
    <td>
      turtle
    </td>
    
    <td>
      <code>
        .ttl
      </code>
    </td>
    
    <td>
      Turtle (RDF)
    </td>
  </tr>
  
  <tr>
    <td>
      twig
    </td>
    
    <td>
      <code>
        .twig
      </code>
    </td>
    
    <td>
      Twig templates
    </td>
  </tr>
  
  <tr>
    <td>
      typescript
    </td>
    
    <td>
      <code>
        .ts
      </code>
      
      , <code>
        .mts
      </code>
      
      , <code>
        .cts
      </code>
    </td>
    
    <td>
      TypeScript
    </td>
  </tr>
  
  <tr>
    <td>
      txt
    </td>
    
    <td>
      <code>
        .txt
      </code>
    </td>
    
    <td>
      Plain text
    </td>
  </tr>
  
  <tr>
    <td>
      unrealscript
    </td>
    
    <td>
      <code>
        .uc
      </code>
    </td>
    
    <td>
      UnrealScript
    </td>
  </tr>
  
  <tr>
    <td>
      vbnet
    </td>
    
    <td>
      <code>
        .vb
      </code>
    </td>
    
    <td>
      Visual Basic .NET
    </td>
  </tr>
  
  <tr>
    <td>
      velocity
    </td>
    
    <td>
      <code>
        .vtl
      </code>
    </td>
    
    <td>
      Apache Velocity
    </td>
  </tr>
  
  <tr>
    <td>
      verilog
    </td>
    
    <td>
      <code>
        .v
      </code>
    </td>
    
    <td>
      Verilog (hardware)
    </td>
  </tr>
  
  <tr>
    <td>
      vhdl
    </td>
    
    <td>
      <code>
        .vhd
      </code>
      
      , <code>
        .vhdl
      </code>
    </td>
    
    <td>
      VHDL
    </td>
  </tr>
  
  <tr>
    <td>
      wgsl
    </td>
    
    <td>
      <code>
        .wgsl
      </code>
    </td>
    
    <td>
      WebGPU Shading Language
    </td>
  </tr>
  
  <tr>
    <td>
      wolfram
    </td>
    
    <td>
      <code>
        .wl
      </code>
      
      , <code>
        .nb
      </code>
    </td>
    
    <td>
      Wolfram Language
    </td>
  </tr>
  
  <tr>
    <td>
      xquery
    </td>
    
    <td>
      <code>
        .xy
      </code>
      
      , <code>
        .xquery
      </code>
    </td>
    
    <td>
      XQuery
    </td>
  </tr>
  
  <tr>
    <td>
      yaml
    </td>
    
    <td>
      <code>
        .yaml
      </code>
      
      , <code>
        .yml
      </code>
    </td>
    
    <td>
      YAML
    </td>
  </tr>
  
  <tr>
    <td>
      zig
    </td>
    
    <td>
      <code>
        .zig
      </code>
    </td>
    
    <td>
      Zig
    </td>
  </tr>
</tbody>
</table>

## Registered Formats (No Extension Mapping)

These formats have a working grammar but no built-in file extension mapping. Use `--formats-exts` to associate extensions, or `--formats-names` for extensionless files.

```bash
# Example: enable ABAP detection for .abap files
jscpd --formats-exts "abap:abap" ./src

# Example: detect Dockerfiles by name
jscpd --formats-names "docker:Dockerfile" ./src
```

<table>
<thead>
  <tr>
    <th>
      Format
    </th>
    
    <th>
      Install command
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      abap
    </td>
    
    <td>
      <code>
        --formats-exts "abap:abap"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      apacheconf
    </td>
    
    <td>
      <code>
        --formats-exts "apacheconf:conf"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      applescript
    </td>
    
    <td>
      <code>
        --formats-exts "applescript:applescript,scpt"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      arduino
    </td>
    
    <td>
      <code>
        --formats-exts "arduino:ino"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      arff
    </td>
    
    <td>
      <code>
        --formats-exts "arff:arff"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      asciidoc
    </td>
    
    <td>
      <code>
        --formats-exts "asciidoc:adoc,asciidoc"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      asm6502
    </td>
    
    <td>
      <code>
        --formats-exts "asm6502:s,asm"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      autohotkey
    </td>
    
    <td>
      <code>
        --formats-exts "autohotkey:ahk"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      autoit
    </td>
    
    <td>
      <code>
        --formats-exts "autoit:au3"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      batch
    </td>
    
    <td>
      <code>
        --formats-exts "batch:bat,cmd"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      bison
    </td>
    
    <td>
      <code>
        --formats-exts "bison:y,yy"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      bro
    </td>
    
    <td>
      <code>
        --formats-exts "bro:bro,zeek"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      csp
    </td>
    
    <td>
      <code>
        --formats-exts "csp:csp"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      css-extras
    </td>
    
    <td>
      <code>
        --formats-exts "css-extras:css"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      django
    </td>
    
    <td>
      <code>
        --formats-exts "django:html,djhtml"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      docker
    </td>
    
    <td>
      <code>
        --formats-names "docker:Dockerfile"
      </code>
      
       or <code>
        --formats-exts "docker:dockerfile"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      elixir
    </td>
    
    <td>
      <code>
        --formats-exts "elixir:ex,exs"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      erb
    </td>
    
    <td>
      <code>
        --formats-exts "erb:erb"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      flow
    </td>
    
    <td>
      <code>
        --formats-exts "flow:js"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      gdscript
    </td>
    
    <td>
      <code>
        --formats-exts "gdscript:gd"
      </code>
      
       (also auto-detected by <code>
        .gd
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      gedcom
    </td>
    
    <td>
      <code>
        --formats-exts "gedcom:ged"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      git
    </td>
    
    <td>
      <code>
        --formats-exts "git:gitconfig"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      glsl
    </td>
    
    <td>
      <code>
        --formats-exts "glsl:glsl,vert,frag"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      http
    </td>
    
    <td>
      <code>
        --formats-exts "http:http"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      ichigojam
    </td>
    
    <td>
      <code>
        --formats-exts "ichigojam:bas"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      icon
    </td>
    
    <td>
      <code>
        --formats-exts "icon:icn"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      inform7
    </td>
    
    <td>
      <code>
        --formats-exts "inform7:ni,i7x"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      io
    </td>
    
    <td>
      <code>
        --formats-exts "io:io"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      j
    </td>
    
    <td>
      <code>
        --formats-exts "j:ijs"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      jolie
    </td>
    
    <td>
      <code>
        --formats-exts "jolie:ol,iol"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      liquid
    </td>
    
    <td>
      <code>
        --formats-exts "liquid:liquid"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      lolcode
    </td>
    
    <td>
      <code>
        --formats-exts "lolcode:lol"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      makefile
    </td>
    
    <td>
      <code>
        --formats-names "makefile:Makefile,GNUmakefile"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      matlab
    </td>
    
    <td>
      <code>
        --formats-exts "matlab:m"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      mel
    </td>
    
    <td>
      <code>
        --formats-exts "mel:mel"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      mizar
    </td>
    
    <td>
      <code>
        --formats-exts "mizar:miz"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      monkey
    </td>
    
    <td>
      <code>
        --formats-exts "monkey:monkey"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      n4js
    </td>
    
    <td>
      <code>
        --formats-exts "n4js:n4js"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      nasm
    </td>
    
    <td>
      <code>
        --formats-exts "nasm:asm,nasm"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      nginx
    </td>
    
    <td>
      <code>
        --formats-exts "nginx:conf,nginx"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      nim
    </td>
    
    <td>
      <code>
        --formats-exts "nim:nim"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      nix
    </td>
    
    <td>
      <code>
        --formats-exts "nix:nix"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      opencl
    </td>
    
    <td>
      <code>
        --formats-exts "opencl:cl"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      parigp
    </td>
    
    <td>
      <code>
        --formats-exts "parigp:gp"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      processing
    </td>
    
    <td>
      <code>
        --formats-exts "processing:pde"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      prolog
    </td>
    
    <td>
      <code>
        --formats-exts "prolog:pl,pro"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      promql
    </td>
    
    <td>
      <code>
        --formats-exts "promql:promql"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      pure
    </td>
    
    <td>
      <code>
        --formats-exts "pure:pure"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      qore
    </td>
    
    <td>
      <code>
        --formats-exts "qore:q,qm"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      reason
    </td>
    
    <td>
      <code>
        --formats-exts "reason:re,rei"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      renpy
    </td>
    
    <td>
      <code>
        --formats-exts "renpy:rpy"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      rest
    </td>
    
    <td>
      <code>
        --formats-exts "rest:rst"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      rip
    </td>
    
    <td>
      <code>
        --formats-exts "rip:rip"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      roboconf
    </td>
    
    <td>
      <code>
        --formats-exts "roboconf:graph,instances"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      vim
    </td>
    
    <td>
      <code>
        --formats-exts "vim:vim"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      wasm
    </td>
    
    <td>
      <code>
        --formats-exts "wasm:wat"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      wiki
    </td>
    
    <td>
      <code>
        --formats-exts "wiki:wiki"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      xeora
    </td>
    
    <td>
      <code>
        --formats-exts "xeora:xeora,xchtml"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      xojo
    </td>
    
    <td>
      <code>
        --formats-exts "xojo:xojo_code,xojo_window"
      </code>
    </td>
  </tr>
</tbody>
</table>

### Extension Detection Only (No Grammar)

These formats register file extensions for detection but have no bundled grammar — tokenization returns an empty array. They still benefit from jscpd's blank-line and structural matching.

<table>
<thead>
  <tr>
    <th>
      Format
    </th>
    
    <th>
      Install command
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      abnf
    </td>
    
    <td>
      <code>
        --formats-exts "abnf:abnf"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      agda
    </td>
    
    <td>
      <code>
        --formats-exts "agda:agda"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      aql
    </td>
    
    <td>
      <code>
        --formats-exts "aql:aql"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      armasm
    </td>
    
    <td>
      <code>
        --formats-exts "armasm:s,asm"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      bnf
    </td>
    
    <td>
      <code>
        --formats-exts "bnf:bnf"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      cobol
    </td>
    
    <td>
      <code>
        --formats-exts "cobol:cob,cbl"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      cypher
    </td>
    
    <td>
      <code>
        --formats-exts "cypher:cypher,cql"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      dhall
    </td>
    
    <td>
      <code>
        --formats-exts "dhall:dhall"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      dns-zone-file
    </td>
    
    <td>
      <code>
        --formats-exts "dns-zone-file:zone"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      ebnf
    </td>
    
    <td>
      <code>
        --formats-exts "ebnf:ebnf"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      editorconfig
    </td>
    
    <td>
      <code>
        --formats-exts "editorconfig:editorconfig"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      factor
    </td>
    
    <td>
      <code>
        --formats-exts "factor:factor"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      ftl
    </td>
    
    <td>
      <code>
        --formats-exts "ftl:ftl"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      gcode
    </td>
    
    <td>
      <code>
        --formats-exts "gcode:gcode,nc"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      gml
    </td>
    
    <td>
      <code>
        --formats-exts "gml:gml"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      go-module
    </td>
    
    <td>
      <code>
        --formats-names "go-module:go.mod"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      hlsl
    </td>
    
    <td>
      <code>
        --formats-exts "hlsl:hlsl,hlsli"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      jq
    </td>
    
    <td>
      <code>
        --formats-exts "jq:jq"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      kusto
    </td>
    
    <td>
      <code>
        --formats-exts "kusto:kql"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      mermaid
    </td>
    
    <td>
      <code>
        --formats-exts "mermaid:mmd"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      mongodb
    </td>
    
    <td>
      <code>
        --formats-exts "mongodb:mongo"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      n1ql
    </td>
    
    <td>
      <code>
        --formats-exts "n1ql:n1ql"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      odin
    </td>
    
    <td>
      <code>
        --formats-exts "odin:odin"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      regex
    </td>
    
    <td>
      <code>
        --formats-exts "regex:regex"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      rego
    </td>
    
    <td>
      <code>
        --formats-exts "rego:rego"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      shell-session
    </td>
    
    <td>
      <code>
        --formats-exts "shell-session:sh-session,console"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      smali
    </td>
    
    <td>
      <code>
        --formats-exts "smali:smali"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      stata
    </td>
    
    <td>
      <code>
        --formats-exts "stata:do,ado"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      typoscript
    </td>
    
    <td>
      <code>
        --formats-exts "typoscript:typoscript,tsconfig"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      vala
    </td>
    
    <td>
      <code>
        --formats-exts "vala:vala,vapi"
      </code>
    </td>
  </tr>
</tbody>
</table>

## Shebang Detection

jscpd can detect duplications in script files that have no file extension by reading the `#!` shebang line:

<table>
<thead>
  <tr>
    <th>
      Interpreter
    </th>
    
    <th>
      Detected as
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        bash
      </code>
      
      , <code>
        sh
      </code>
      
      , <code>
        zsh
      </code>
      
      , <code>
        fish
      </code>
      
      , <code>
        dash
      </code>
      
      , <code>
        ksh
      </code>
    </td>
    
    <td>
      <code>
        bash
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        python
      </code>
      
      , <code>
        python3
      </code>
      
      , <code>
        python2
      </code>
    </td>
    
    <td>
      <code>
        python
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        node
      </code>
      
      , <code>
        nodejs
      </code>
    </td>
    
    <td>
      <code>
        javascript
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ruby
      </code>
    </td>
    
    <td>
      <code>
        ruby
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        perl
      </code>
    </td>
    
    <td>
      <code>
        perl
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        php
      </code>
    </td>
    
    <td>
      <code>
        php
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        lua
      </code>
    </td>
    
    <td>
      <code>
        lua
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tclsh
      </code>
      
      , <code>
        wish
      </code>
    </td>
    
    <td>
      <code>
        tcl
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        Rscript
      </code>
    </td>
    
    <td>
      <code>
        r
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        groovy
      </code>
    </td>
    
    <td>
      <code>
        groovy
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        swift
      </code>
    </td>
    
    <td>
      <code>
        swift
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        kotlin
      </code>
    </td>
    
    <td>
      <code>
        kotlin
      </code>
    </td>
  </tr>
</tbody>
</table>

## Custom Format Extensions

Associate custom file extensions with a format:

```bash
jscpd --formats-exts "javascript:js,es6,vue" ./src
```

Or in configuration:

```json [.jscpd.json]
{
  "formatsExts": {
    "javascript": ["js", "es6", "vue"]
  }
}
```

## Custom Filename Mapping

Map extensionless files to a format by filename:

```bash
jscpd --formats-names "makefile:Makefile,GNUmakefile;docker:Dockerfile" ./src
```

Or in configuration:

```json [.jscpd.json]
{
  "formatsNames": {
    "makefile": ["Makefile", "GNUmakefile"],
    "docker": ["Dockerfile"]
  }
}
```

## View Full List

You can also view the full list of supported formats by running:

```shell
jscpd --list
```
