Open-source project
notepad-plus-plus/userDefinedLanguages avatar
notepad-plus-plus/userDefinedLanguages

Notepad++ userDefinedLanguages: a community collection of UDL definitions

Notepad++ User Defined Languages Collection

826 stars457 forksXMLLicense varies

At a glance

What is it?
The userDefinedLanguages repository is a community collection of Notepad++ user defined language files, XML definitions that add syntax highlighting and folding to languages the editor does not ship with. It can be installed through a plugin or by copying files into Notepad++ configuration folders, and it carries no stated licence.
Who is it for?
Adopt this collection if you edit a language that Notepad++ does not support out of the box and you would rather install a prepared definition than write your own XML, or if you maintain a language and want your UDL to reach other users. Do not adopt it as a dependency for a shipped product without checking terms first, because the repository records no licence, and do not expect the maintainers to write a definition for you.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly XML, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 25, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What a user defined language actually is

Notepad++ supports around 90 programming languages for syntax highlighting and folding out of the box. For anything outside that list, the editor offers a mechanism where you describe a language yourself: the User Defined Language, or UDL, a definition file that tells the editor which keywords to colour, how to fold blocks and where comments begin.

The maintainers describe how small the artefact is. It is super simple to make your own UDL: paste your language's keywords into one or more of the eight keyword sections, put the appropriate operators into the operator inputs, and possibly add some delimiters. The keywords sections are the part that surprises newcomers, because the eight of them correspond to different roles in the language, such as instructions, built-in functions and user-defined words, and a definition that puts everything in the wrong section still highlights, just with the wrong colours.

This repository is the community shelf for those definitions. The README explains the premise directly: for a language that is not in the built-in list, someone may have created a UDL and added it here, or you can submit one for others to use. The definitions live in XML files under the UDLs folder, and a catalogue at udl-list.md lists them with links, with udl-list.json holding the same information in machine-readable form.

Installing a definition with the CollectionInterface plugin

The recommended path runs through a separate plugin, CollectionInterface, which downloads definitions and their companion files from this collection. The README gives the sequence in detail.

In Notepad++ 8.8.1 or newer, open Plugins Admin, checkmark CollectionInterface and click Install. After Notepad++ restarts, the plugin appears under the Plugins menu. From there, Plugins, CollectionInterface, then CollectionInterface: Download opens a dialog with a tab per file type. In the UDL tab you can scroll through everything the collection holds, click the definition you want, and, if the author also supplied an AutoCompletion file, a FunctionList file or both, checkmark those options so they arrive together. Click Download, wait for the progress bar to reach 100%, then close the dialog. Notepad++ asks whether it should restart, and the restart is required for the new definitions to be available.

Two constraints come out of that. The plugin path needs Notepad++ 8.8.1 or newer, so the collection is not usable on older builds through this route. And the definitions are only applied after a restart, which is the step people most often forget.

Installing a definition by hand

The manual route exists for people who would rather move files themselves, and the README walks through it step by step.

First you locate the target folder from inside the editor, using Language, User Defined Language, Open User Defined Language folder, which opens the right userDefineLangs directory and lets you copy its path from the file explorer location bar. Then you download the XML from the UDL list, open the file's page on GitHub and use the button labelled Raw to get the source rather than the rendered page. You can save that raw file straight into the userDefineLangs folder, or copy the text into a new file in Notepad++ and save it as XML there. Restarting Notepad++ is what makes it aware of the new definition.

The README attaches a warning to that step that is worth repeating: do not simply right click the link in the UDL list or in the GitHub directory listing, because those right-click actions download the GitHub web page for the file, which is HTML and not the UDL's XML, and will not work.

The companion files have their own homes. An autoCompletion XML file goes into the autoCompletion sub-folder of the Notepad++ installation directory. A functionList XML file goes into the functionList sub-folder of the configuration location, which the README describes as the %AppData%\Notepad++ directory or another configuration location, including that sub-folder in the installation directory. A sample file, when the author provided one, comes from the UDL-samples folder, and opening it after the restart should show the highlighting applied.

What the repository actually holds

The tree is mostly content with a thin tooling layer around it. The UDLs folder holds the definitions themselves, autoCompletion holds the auto-completion files, functionList holds the function list files and UDL-samples holds sample files written in the languages being defined.

The catalogue comes in two formats, udl-list.md for people and udl-list.json for machines, and the second one is what the tooling consumes. Alongside them sit a Test directory, a .validators directory, a .scripts directory and an appveyor.yml configuration, which is the continuous integration definition for the Windows builds.

The validation tooling is Python, and its dependency list is short enough to read in one go:

text
jsonschema==4.26.0
lxml==6.1.3
pywin32==312
requests==2.34.2
rfc3987==1.3.8
# urllib  # not needed to be listed (builtin module)
# hashlib # not needed to be listed (builtin module)
pathlib

The libraries match the job. lxml handles the XML definitions, jsonschema validates the catalogue data against its schema, rfc3987 validates URI and IRI references that definitions point at, and requests fetches remote resources. pywin32 is the giveaway that the validation runs on Windows, alongside the Notepad++ installation it is checking against. Two standard library modules, urllib and hashlib, are listed in the file as comments with the note that they do not need to be listed, which suggests the scripts verify their own integrity somewhere.

Contributing a definition and the removal policy

Submitting is a pull request, and the README is specific about what that means: you can submit your UDL files into the repository, or links to where your files are hosted, and in both cases you have to open a pull request against this repository. The contributing guide is the reference for the details.

The collection's history explains where its contents came from. The initial UDLs were populated based on the old NppWiki++ list of user defined languages, an archive of which is preserved on the Wayback Machine.

Then there is the part that matters for anyone planning to depend on the collection. The original author of any UDL in it may request that it be removed from the collection, or submit a pull request to do the same, and the maintainers say they will oblige. In practice that means the contents are held on the basis of the original authors' consent rather than under a licence that grants redistribution rights, and a definition you find useful today can be withdrawn later. That is the right call for contributions, and it is also the reason a product team should not treat the collection as a stable asset.

There is a matching policy on the other side: the maintainers state they do not have the knowledge to make a custom user defined language on request, and that you likely know your language better than they do. Submissions are expected to come from people who use the language.

What this repository is not

The README has a section titled what this collection is not, and it is unusually firm. It is not a place for feature requests for the Notepad++ user defined language system. Improvements to how Notepad++ implements UDLs belong on the Notepad++ issue tracker, and the README states that any feature request made in the collection's repository will be closed with a message saying it was requested in the wrong place.

The scope in the other direction is equally clear. The collection distributes definitions, it does not write them to order, and it does not try to be a general language package registry. What it is is a curated, community-maintained catalogue that lets a Notepad++ user pick up highlighting for a language the editor does not know.

That also frames the realistic alternative. If you need a definition that nobody has written, writing your own is a short job with eight keyword sections and a list of operators, and the official online user manual covers the import process and the definition format in full. The collection saves you that work when a definition already exists, and gives you somewhere to publish yours when it does not.

Maintenance, licensing and what to check before you install

The repository is not archived, and the last push was on 2026-10-16. It publishes no GitHub releases, and the default branch is master, so there are no tagged versions of the collection to pin against. Updates arrive as commits to the XML files and to the catalogue, which for a user means installing a definition and later finding that it has changed underneath them.

The licensing picture is the sharpest edge. The repository records no recognised licence, and there is no licence file among the top-level entries. With the removal policy described above, the practical position is that each definition remains the work of its author, contributed for use in this collection, and anyone who wants to redistribute definitions inside a product should ask the individual authors rather than rely on the collection as a whole.

Two operational checks are worth making before you install anything. Compare the definition against the version of Notepad++ you run, since the editor's own UDL format has changed over time and the collection carries no compatibility table. And confirm that what you downloaded is the XML: the Raw button on the file page gives the source, while a right-click save from the list or the directory listing gives you an HTML page that the editor will ignore.

Editorial conclusion

Adopt this collection if you edit a language that Notepad++ does not support out of the box and you would rather install a prepared definition than write your own XML, or if you maintain a language and want your UDL to reach other users. Do not adopt it as a dependency for a shipped product without checking terms first, because the repository records no licence, and do not expect the maintainers to write a definition for you. Verify first that the definition you pick matches the version of Notepad++ you run, that you have Notepad++ 8.8.1 or newer if you use the CollectionInterface plugin, and that you have actually saved the XML rather than a saved copy of the GitHub web page.

Frequently asked questions

How do I install a User Defined Language from the Notepad++ collection?

With the CollectionInterface plugin, which needs Notepad++ 8.8.1 or newer, open Plugins Admin, install CollectionInterface, then use Plugins, CollectionInterface, CollectionInterface: Download, pick the definition in the UDL tab and click Download. Notepad++ must restart before the definition takes effect.

Where do I put a manually downloaded UDL file?

In the userDefineLangs folder, which you can open from Language, User Defined Language, Open User Defined Language folder. AutoCompletion files go in the autoCompletion sub-folder of the installation directory and functionList files in the functionList sub-folder of the configuration location, then Notepad++ needs a restart.

Why does my downloaded UDL file not work?

The README warns that right-clicking the link in the UDL list or in the GitHub directory listing saves the GitHub web page, which is HTML rather than the UDL's XML. Use the Raw button on the file's page to get the actual definition.

Can I submit my own User Defined Language to the collection?

Yes, by opening a pull request against the repository with the UDL files or links to where they are hosted. The maintainers also state they will remove a definition at the request of its original author.

Official sources

  1. Issues
  2. notepad-plus-plus/userDefinedLanguages on GitHub
  3. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/notepad-plus-plus-userdefinedlanguages.svg)](https://hysenlabs.com/projects/notepad-plus-plus-userdefinedlanguages)

Was this useful?