A [[user script]] is a plain text file with a file extension of <code>.user.js</code>.
As of Greasemonkey 4.0, due to limits in the WebExtension API surface, only an embedded editor is available.
Typically a [[Metadata Block]] is included. Although this is not strictly required '''it is highly recommended'''.
Creation of a [[user script]] can be done with any plain text editor. Upon completion of a script it may be distributed via any server method available or even a specialized user script hosting site such as [http://userscripts.org userscripts.org].
The tricky part of course is what happens between starting a script and when the script is finished.
The script itself is listed in the editor's first tab.
Manually walking through all the steps will ensure common understanding of what is going on.
Any <code>@require</code> or <code>@resource</code> files will be listed in additional tabs.
== Picking an Editor ==
Press <kbd>Ctrl-S</kbd> (or click the floppy disk icon at top left<!-- TODO: Update screenshot -->) to save any changes.
Most script authors use a familiar built in text editor such as Windows Notepad, Linux KDE Kwrite/Kate, Linux Gnome gedit, or Mac OS X TextEdit.
Many other editors are available that provide features to make programming easier.
For more information, and choices, see Wikipedia's [http://en.wikipedia.org/wiki/Comparison_of_text_editors comparison of text editors].
== Creating the Script ==
Begin with creating the text file in a favorite plain text editor.
It should contain the [[Metadata Block]] with at least the [[Metadata Block#.40name|@name]], [[Metadata Block#.40namespace|@namespace]], a brief [[Metadata Block#.40description|@description]] and any appropriate [[Metadata Block#.40include|@include]] and [[Metadata Block#.40exclude|@exclude]] [[include and exclude rules|rules]].
Once this has been completed, the writing of the actual code may begin.
Although it may make little sense with no code, the script stub is ready to be [[Greasemonkey_Manual:Installing_Scripts|installed into Greasemonkey]].
== Editing the Script ==
At this point [[Greasemonkey]] has already made a copy of the script installed and placed it in the [[scripts directory]].
Any future page loads which match the [[include and exclude rules]] will execute the script. Close the text editor and optionally delete the original source file.
Next is finding and editing the copy of the script that Greasemonkey is working with.
This may be done directly as explained in the [[FAQ#Yes.2C_but_how_can_I_edit_a_script_without_going_through_Greasemonkey.3F|FAQ]], or by one of two shortcuts Greasemonkey provides.
The first shortcut would be the edit button in the [[Greasemonkey Manual:Manage Dialog|manage dialog]].
Alternately a quick right-click in the [[Greasemonkey Manual:Monkey Menu|monkey menu]] will produce the same results.
When working with the copy of the script that [[Greasemonkey]] has installed, code changes will be immediately available.
Simply save the file and reload any appropriate page.
== Changing the Editor ==
As of Greasemonkey 0.9, simply open the Options dialog (Tools, Add-ons, Greasemonkey, Options (or Preferences)) and click the "Change Editor" button.
Pick an executable text editor program with the resulting file picker dialog.
As of Greasemonkey 4.0, due to limits in the WebExtension API surface, only an embedded editor is available.
The script itself is listed in the editor's first tab.
Any @require or @resource files will be listed in additional tabs.
Press Ctrl-S (or click the floppy disk icon at top left) to save any changes.
That's It!
Writing scripts for Greasemonkey is not hard.
What can get difficult, however, is working with the quirks and limitations that the script runs under;
Some things that work perfectly in a normal web page, copied and pasted directly to a user script suddenly fail.
It's important to know how the environment the scripts run in works.