# Deployment and License Keys

The GoJS library is software that is licensed under a commercial license agreement. It is not open-source. If you have downloaded a copy of the GoJS library from gojs.net or npm or GitHub for use in your own app, you may have noticed that a watermark appears in the diagram.

After you have purchased a license and are ready to deploy to your web site your app that uses GoJS, you will need to request a license key at: https://nwoods.com/activate.html?sku=gojs.

Enter your e-mail address and the e-mail address of the person who purchased a license for GoJS, the order number for that purchase, and your web site's domain name or your Electron app's `package.json` "name" attribute, or "productName" attribute if it is specified. Please make sure that e-mail from "nwoods.com" is not caught in your corporate or personal spam filter. If you contact us for further help either via our web site or by sending us email, please include the e-mail that our web server sent to you.

Regarding domain names, if your app will be at: `https://www.example.com/app/ProcessEditor.html`, enter `example.com` as the domain name. This procedure works for internal corporate web sites as well as for public web sites, with hostnames and with IP addresses. The protocol (such as `https://`) and port number (such as `:8080`) do not matter, so do not include them.

The license key will also work when the HTML page is served from a subdomain of the licensed domain, such as from `editors.example.com`. Any valid license key will automatically also work at the `localhost` domain, which is useful when debugging and testing.

The GoJS library never "phones home" -- it will never initiate any network traffic other than when explicitly directed to do so, such as for downloading image files to show in Picture objects.

Our server will generate a GoJS license key for you, in the form of a JavaScript statement that you will need to include with your code. It must execute after the GoJS library file has been loaded, but before you create your first Diagram.

    // Must execute after loading the library and before you create your first Diagram:
    go.Diagram.licenseKey = "...YourKeyHere...";

This mechanism works when using either the release library, `go.js`, or the debug library, `go-debug.js`, or the ES module versions of the library, but only with GoJS version 1.8 or later. Note that this assignment is of a static property of the Diagram class: Diagram.licenseKey. Of course you will need to substitute your generated license key string for `"...YourKeyHere..."` in the `go.Diagram.licenseKey` assignment statement. License keys are long strings without any embedded whitespace or punctuation. You can request license keys for as many domains as you have licensed.

Once your key is in place, you can continue to use the same key while updating the patch/baselevel version of GoJS. For example, a license key for version 2.0.1 will work for all versions 2.0.*. Remember to get a new license key when upgrading to a new major or minor version of GoJS. For example, when upgrading from version 2.0.1 to version 2.1.0, you will need a new license key.

License keys only depend on the major/minor version number and the domain from which the HTML page was served. License keys are valid forever, as long as the major and minor version number of the library do not change and as long as the HTML page is served from the same domain.

## For Electron

When building a desktop application using Electron, your HTML page is not being served from a web server at a domain. You will need to activate with the `"name"` you have specified in your project's `package.json` to make sure your Diagram does not display a watermark.

## For Unlimited Domains Customers

If you are an ISV and intend to distribute your app to run on many customers' web sites, or if your app is hosted in a WebView as part of a desktop application, Contact sales for our our Unlimited Domains option and instructions.

When requesting a license key at Activate, you do not need to specify a domain name.

## Internationalization and Localization

GoJS apps can display text in non-Latin languages. For example, see Japanese Family Tree.

The GoJS library does not manipulate currency values or date/time values or addresses, so there are no localization issues with those data types and values. The library does not contain any of its own icons (images) or cursors.

Nor does GoJS display any built-in text strings, so no translation is needed. There are error and warning messages that may be output to the console, but those messages are only meant for debugging by programmers, not for consumption by end users. Reading and writing of numeric values is only performed internally when reading and writing JSON or geometry path strings or CSS colors, which are all defined to use non-localized formats.

All user-visible text is completely under the control of the programmer. For localizability you may find it convenient to use conversion functions in Bindings. The TextEditingTool uses an HTML TextArea element to implement in-place text input and text editing, thereby utilising the browser's support for input method editors.