# .js MIME Type: text/javascript

> JavaScript, including ES modules. RFC 9239 made text/javascript the one standard type.

- MIME type: `text/javascript`
- Extensions: .js, .mjs, .cjs
- Also seen as: `application/javascript`, `application/x-javascript`
- Content-Type header: `text/javascript; charset=utf-8`
- Compress in transit: yes

## Good to know

- `application/javascript` still works everywhere but is obsolete; new configs should use `text/javascript`.
- ES modules (`<script type="module">`) are blocked unless served with a JavaScript MIME type — make sure your server maps `.mjs` too.
- Under `nosniff`, a script served as `text/plain` or `application/octet-stream` is blocked.

## Server configuration

### nginx (inside the types block in mime.types)

```
text/javascript js mjs cjs;
```

### Apache (.htaccess or server config)

```
AddType text/javascript .js .mjs .cjs
```

### Express

```
res.set("Content-Type", "text/javascript; charset=utf-8");
```

### Python

```
import mimetypes

mimetypes.add_type("text/javascript", ".js")
mimetypes.add_type("text/javascript", ".mjs")
mimetypes.add_type("text/javascript", ".cjs")
```

### HTML file input

```
<input type="file" accept=".js,.mjs,.cjs,text/javascript">
```

## FAQ

### What is the MIME type for .js files?

`text/javascript`. You may also see `application/javascript`, `application/x-javascript`, but `text/javascript` is the one to send. The same type covers .mjs, .cjs.

### What Content-Type header should a .js file be served with?

`Content-Type: text/javascript; charset=utf-8`. As a text format, include the charset so browsers don't guess the encoding. It compresses well, so let the server apply gzip or Brotli.

## Related types

- [.json — application/json](https://www.devkult.com/mime/json.md)
- [.html — text/html](https://www.devkult.com/mime/html.md)
- [.wasm — application/wasm](https://www.devkult.com/mime/wasm.md)
- [.map — application/json](https://www.devkult.com/mime/map.md)

Open the interactive page: https://www.devkult.com/mime/js