Skip to content
Top-level domain name registry service on Google App Engine
Java CSS HTML JavaScript TSQL HCL Other
Branch: master
Clone or download
mindhog Add work-around for our "explode war" failure (#279)
For some reason tools.jar (which we don't need in the runtime in the first
place) gets exploded readonly, causing subsequent builds to fail since they
can't overwrite it.  This hack makes it writable at the end of explodeWar.
Latest commit 153fc7d Sep 20, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
buildSrc Fix dependency-locking config (#276) Sep 19, 2019
config Regenerate schema using tools command (#269) Sep 12, 2019
core Update registryTool task to better handle command line arguments (#273) Sep 20, 2019
db Add sql files to manage nomulus user (#274) Sep 20, 2019
docs Move terraform and kubernetes folder to be under proxy (#127) Jun 20, 2019
gradle Upgrade to Gradle 5.6.2 (#272) Sep 16, 2019
java-format Fix non-Python3-compliant code in formatter script (#275) Sep 19, 2019
node_modules Refactor to be more in line with a standard Gradle project structure Jun 13, 2019
prober Fix dependency-locking config (#276) Sep 19, 2019
proxy Fix dependency-locking config (#276) Sep 19, 2019
python/google/registry/scripts Remove Bazel build (#94) Jun 13, 2019
release Merge beam and GAE configs deployment to one GCB job (#182) Jul 19, 2019
services Fix dependency-locking config (#276) Sep 19, 2019
third_party Fix dependency-locking config (#276) Sep 19, 2019
util Fix dependency-locking config (#276) Sep 19, 2019
.gcloudignore Build docker image of nomulus tool (#142) Jul 17, 2019
.gitignore Create a Gradle task to run the test server (#192) Jul 29, 2019
.lgtm.yml Add customized .lgtm.yml (#191) Jul 23, 2019
AUTHORS Change all references to Domain Registry to Nomulus Oct 14, 2016
CONTRIBUTING.md Add Google Java Style Guide info and link to CONTRIBUTING.md Nov 15, 2016
CONTRIBUTORS Add shicong@ and gbrodman@ to CONTRIBUTORS Jun 13, 2019
LICENSE Fix a typo (#174) Jul 15, 2019
README.md Update build badges to use Kokoro results for both FOSS and internal (#… Aug 16, 2019
appengine_war.gradle Add work-around for our "explode war" failure (#279) Sep 20, 2019
build.gradle Fix dependency-locking config (#276) Sep 19, 2019
dependencies.gradle Add schema deployment tests (#265) Sep 12, 2019
dependency_lic.gradle Rename dependency_license.gradle file (#196) Jul 26, 2019
gradle.properties Use Flyway to deploy SQL schema to non-prod (#255) Sep 6, 2019
gradlew Upgrade to Gradle 5.6.2 (#272) Sep 16, 2019
gradlew.bat Upgrade to Gradle 5.5.1 (#178) Jul 17, 2019
java_common.gradle Fix dependency-locking config (#276) Sep 19, 2019
karma.conf.js Serve up all the closure library files (#257) Sep 5, 2019
nomulus-logo.png Update Nomulus logo May 23, 2017
package-lock.json Bump lodash from 4.17.11 to 4.17.14 (#173) Jul 15, 2019
package.json Use strict versions in NPM versioning (#132) Jun 25, 2019
projects.gradle Add a Gradle task to deploy the proxy (#214) Aug 6, 2019
settings.gradle Add sql schema and entity class for ClaimsList (#227) Aug 26, 2019
utils.gradle Use Flyway to deploy SQL schema to non-prod (#255) Sep 6, 2019

README.md

Nomulus

Internal Build FOSS Build LGTM License Code Search
Build Status for Google Registry internal build Build Status for the open source build Total alerts License for this repo Link to Source Graph

Nomulus logo

Overview

Nomulus is an open source, scalable, cloud-based service for operating top-level domains (TLDs). It is the authoritative source for the TLDs that it runs, meaning that it is responsible for tracking domain name ownership and handling registrations, renewals, availability checks, and WHOIS requests. End-user registrants (i.e. people or companies that want to register a domain name) use an intermediate domain name registrar acting on their behalf to interact with the registry.

Nomulus runs on Google App Engine and is written primarily in Java. It is the software that Google Registry uses to operate TLDs such as .google, .app, .how, .soy, and .みんな. It can run any number of TLDs in a single shared registry system using horizontal scaling. Its source code is publicly available in this repository under the Apache 2.0 free and open source license.

Getting started

The following resources provide information on getting the code and setting up a running system:

If you are thinking about running a production registry service using our platform, please drop by the user group and introduce yourself and your use case. To report issues or make contributions, use GitHub issues and pull requests.

Capabilities

Nomulus has the following capabilities:

  • Extensible Provisioning Protocol (EPP): An XML protocol that is the standard format for communication between registrars and registries. It includes operations for registering, renewing, checking, updating, and transferring domain names.
  • DNS interface: The registry provides a pluggable interface that can be implemented to handle different DNS providers. It includes a sample implementation using Google Cloud DNS as well as an RFC 2136 compliant implementation that works with BIND.
  • WHOIS: A text-based protocol that returns ownership and contact information on registered domain names.
  • Registration Data Access Protocol (RDAP): A JSON API that returns structured, machine-readable information about domain name ownership. It is essentially a newer version of WHOIS.
  • Registry Data Escrow (RDE): A daily export of all ownership information for a TLD to a third party escrow provider to allow take-over by another registry operator in the event of serious failure. This is required by ICANN for all new gTLDs.
  • Premium pricing: Communicates prices for premium domain names (i.e. those that are highly desirable) and supports configurable premium registration and renewal prices. An extensible interface allows fully programmatic pricing.
  • Billing history: A full history of all billable events is recorded, suitable for ingestion into an invoicing system.
  • Registration periods: Qualified Launch Partner, Sunrise, Landrush, Claims, and General Availability periods of the standard gTLD lifecycle are all supported.
  • Brand protection for trademark holders (via TMCH): Allows rights-holders to protect their brands by blocking registration of domains using their trademark. This is required by ICANN for all new gTLDs.
  • Registrar support console: A self-service web console that registrars can use to manage their accounts in the registry system.
  • Reporting: Support for required external reporting (such as ICANN monthly registry reports, CZDS, Billing and Registration Activity) as well as internal reporting using BigQuery.
  • Administrative tool: Performs the full range of administrative tasks needed to manage a running registry system, including creating and configuring new TLDs.
  • DNS interface: An interface for DNS operations is provided so you can write an implementation for your chosen provider, along with a sample implementation that uses Google Cloud DNS. If you are using Google Cloud DNS you may need to understand its capabilities and provide your own multi-AS solution.
  • GAE Proxy: App Engine Standard only serves HTTP/S traffic. A proxy to forward traffic on EPP and WHOIS ports to App Engine via HTTPS is provided. Instructions on setting up the proxy on Google Kubernetes Engine is available. Running the proxy on GKE supports IPv4 and IPv6 access, per ICANN's requirements for gTLDs. The proxy can also run as a single jar file, or on other Kubernetes providers, with modifications.

Additional components

Registry operators interested in deploying Nomulus will likely require some additional components that are need to be configured separately.

  • A way to invoice registrars for domain name registrations and accept payments. Nomulus records the information required to generate invoices in billing events.
  • Fully automated reporting to meet ICANN's requirements for gTLDs. Nomulus includes substantial reporting functionality but some additional work will be required by the operator in this area.
  • A secure method for storing cryptographic keys. A keyring interface is provided for plugging in your own implementation (see configuration doc for details).
  • System status and uptime monitoring.

Outside references

  • Donuts Registry has helped review the code and provided valuable feedback
  • CoCCa and FRED are other open-source registry platforms in use by many TLDs
  • We are not aware of any fully open source domain registrar projects, but open source EPP Toolkits (not yet tested with Nomulus; may require integration work) include:
  • Some Open Source DNS Projects that may be useful, but which we have not tested:
You can’t perform that action at this time.