ctrl+shift+p filters: :st2 :st3 :win :osx :linux


by Thom1729 ST3

Customizable JavaScript syntax highlighting for Sublime Text.

Labels javascript, syntax


  • 1.0.25
  • github.​com
  • github.​com
  • 2 weeks ago
  • 35 minutes ago
  • 11 months ago


  • Total 654
  • Win 193
  • OS X 385
  • Linux 76
Dec 19 Dec 18 Dec 17 Dec 16 Dec 15 Dec 14 Dec 13 Dec 12 Dec 11 Dec 10 Dec 9 Dec 8 Dec 7 Dec 6 Dec 5 Dec 4 Dec 3 Dec 2 Dec 1 Nov 30 Nov 29 Nov 28 Nov 27 Nov 26 Nov 25 Nov 24 Nov 23 Nov 22 Nov 21 Nov 20 Nov 19 Nov 18 Nov 17 Nov 16 Nov 15 Nov 14 Nov 13 Nov 12 Nov 11 Nov 10 Nov 9 Nov 8 Nov 7 Nov 6 Nov 5 Nov 4
Windows 0 2 0 0 0 1 0 1 1 0 0 1 0 3 0 1 0 0 0 1 0 0 2 1 0 2 3 1 1 0 0 1 1 1 0 0 1 1 0 4 1 0 1 0 2 0
OS X 0 8 2 0 1 2 4 1 2 3 0 3 1 3 1 4 0 1 0 9 2 3 3 2 3 0 3 1 1 0 1 3 4 0 3 4 0 1 0 2 3 2 4 2 4 1
Linux 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 1 0 2 0 1 0 0 0 1 2 0 0 1 2 0 0 1 0 0 0 0 0 0 0 0 0



JS Custom

Customizable JavaScript syntax highlighting for Sublime Text supporting JSX, Flow, and more. You can use JS Custom as a drop-in replacement for babel-sublime or create your own customized syntax with exactly the features you need. Because JS Custom is based on the core JavaScript syntax, it will work with most tools written for the original — and as the original is updated and improved, JS Custom will inherit those improvements.


JS Custom can be installed via Package Control.

Alternatively, you can install JS Custom manually by cloning it into your Packages directory as “JSCustom”.

JS Custom relies on Sublime's built-in JavaScript package for some functionality, including regular expression highlighting, so you should not disable the built-in package.


JS Custom ships with two example configurations: “JS Custom - Default” and “JS Custom - React”. These should automatically be built and available for use upon installation.

To customize your syntaxes, choose Preferences → Package Settings → JS Custom → Settings from the menubar. The package default settings will be shown on the left; your user settings will be on the right. When you change your user settings, your custom syntaxes will automatically be recompiled. (This may take a few seconds, especially if you have a lot of configurations.)

If you modify your user settings outside Sublime Text, this package may not notice your modifications. You can force it to rebuild all of your custom syntaxes by choosing Preferences → Package Settings → JS Custom → Rebuild Syntaxes from the menubar, or by choosing “JS Custom: Rebuild Syntaxes” from the command palette.


The following options are available at the top level of your user settings:

configurations: object

An object containing one or more named configurations. The keys should be the names you would like your custom configurations to have. The values are objects specifying syntax options.

defaults: object

An object specifying default syntax options that will apply to all of your syntaxes. Your named configurations will override these defaults.

embed_configuration: object

An object specifying a configuration to use when another syntax embeds the source.js scope.

auto_build: boolean

If true, JS Custom will automatically rebuild your syntaxes when you modify your user settings. Only syntaxes whose configurations have changed will be rebuilt. If auto_build is disabled, you will have to run the rebuild command manually.

jsx_close_tag: boolean

If true, when you run the close_tag command in a JavaScript file, this package's jsx_close_tag command will be invoked instead.

Syntax Options

These options, specified in your defaults or in a named custom configuration, determine what features your custom syntaxes will have. Omitted options will be treated as null.

ECMAScript Proposals

These options enable support for various proposed language features. These proposals may change unexpectedly. If they stabilize, they will eventually be incorporated into the core JavaScript syntax and these extensions will be removed.

es_pipeline: boolean

Support the proposed pipeline operator.

es_slice: boolean

Support the proposed slice notation.

Third-party features

These extensions go beyond the base JavaScript syntax to support third-party features.

jsx: boolean

Highlight JSX.

flow_types: boolean

Highlight Flow type annotations.

eslint_directives: boolean

Highlight eslint configuration directives in comments.

styled_components: boolean

Highlight template string literals for Styled Components.


These extensions allow you to personalize your highlighting in various ways.

string_object_keys: boolean

Highlight unquoted object keys as strings, matching babel-sublime's behavior.

custom_template_tags: object

Highlight user-defined tagged template literals.

Each key in the given object should be a JavaScript identifier representing a template literal tag. The associated value should be a string specifying a context to include: for instance, “scope:source.css”


    "configurations": {
        "My Config": {
            "custom_template_tags": {
                "style": "scope:source.css"

Then, if you use “JS Custom - My Config” to highlight the following code, the contents of the template literal will be highlighted as CSS.

const myStyle = style`div { color: red }`;

By default, the special embed_configuration disables this to avoid syntax recursion errors.


These options don't affect the syntax highlighting itself, but rather the way that Sublime uses the syntax.

name: string

The name of the syntax as it will appear in the syntax selector. (If this is omitted, the syntax will be named “JS Custom - name”, where name is the key in the configurations object.)

scope: string

The top-level scope that will be used for the syntax. (If this is omitted, the scope will be “source.js.name”, where name is based on the key in the configurations object.)

file_extensions: array

An array of file extensions. Files with the given extensions will be use this syntax.

hidden: boolean

If this is true, the compiled syntax will not appear in the syntax menu or the command palette. It can still be referenced or included by other syntaxes.

Frequently Asked Questions

My syntaxes don't appear in the syntax selection menu. Where are they?

They are in the syntax selection menu under “User”. It would be nice to have them listed under “JS Custom”, but when generating that menu Sublime only looks at the physical location of the syntax definition files, and JS Custom compiles them to User/JS Custom/Syntaxes.

I've switched from Babel-sublime and my code looks different. How do I restore the old appearance?

If you want unquoted object keys to be highlighted as strings, set the string_object_keys configuration option to true.

Other than that, the differences occur when Babel-sublime's syntax does not conform to the scope naming guidelines or other best practices. If you liked the old appearance, then rather than modifying the syntax itself I would suggest modifying your theme. You can find further discussion here.


To request a feature or report a bug, create a new issue. All suggestions are welcome.

When reporting a bug, please include a code snippet that demonstrates the problem. If the bug exists in Sublime's core JavaScript syntax, it should be reported here — but if you're not sure, then go ahead and post it here.

When requesting a new feature, please include a link to any relevant documentation. Because of the unique design of JS Custom, we can accommodate a variety of nonstandard features.