Top-level domain name registry service on Google Cloud Platform
  • Java 88.4%
  • HTML 8.4%
  • TypeScript 1.6%
  • Shell 0.4%
  • Python 0.4%
  • Other 0.6%
Find a file
Weimin Yu 60d3653b46
Add smoke test for BEAM pipelines (#3037)
Created a smoke test to cover unit test gaps wrt BEAM:
- The Java and SDK compatibility in the pipeline container image
- The JPA setup in the pipelines

Both issues above can only be tested in a real pipeline.

This PR defines a new pipeline that performs a lightweight SQL
query and minimal processing. The build process can launch it
in a test environment to verify that the pipelines in the build
can run. The run script is also provided.
2026-05-07 20:41:13 +00:00
.github/workflows Change language and bytecode levels to Java 25 (#3009) 2026-04-15 16:34:52 +00:00
common Refactor bsa, dns, batch, and reporting packages to java.time (#3031) 2026-05-06 21:44:40 +00:00
config Migrate Domain, Registrar, and Token models to java.time (#3022) 2026-04-29 14:06:25 +00:00
console-webapp Refactor bsa, dns, batch, and reporting packages to java.time (#3031) 2026-05-06 21:44:40 +00:00
core Add smoke test for BEAM pipelines (#3037) 2026-05-07 20:41:13 +00:00
db Add an action to sync the remote Valkey cache (#3032) 2026-05-05 15:29:43 +00:00
docs Update more of the documentation (#2974) 2026-03-03 20:25:30 +00:00
gradle/wrapper Upgrade to Gradle 9 (#2993) 2026-03-30 17:15:55 +00:00
integration Stop depending on GCS public access for Kokoro (#2907) 2025-12-17 20:55:03 +00:00
java-format Update version of google-java-format (#2766) 2025-06-06 18:11:54 +00:00
jetty Upgrade beam deps (#3027) 2026-04-27 19:40:10 +00:00
load-testing Refactor bsa, dns, batch, and reporting packages to java.time (#3031) 2026-05-06 21:44:40 +00:00
networking Upgrade beam deps (#3027) 2026-04-27 19:40:10 +00:00
prober Upgrade beam deps (#3027) 2026-04-27 19:40:10 +00:00
processor Fix XML parsing issues that occur on dependency update (#3012) 2026-04-16 20:15:02 +00:00
proxy Refactor bsa, dns, batch, and reporting packages to java.time (#3031) 2026-05-06 21:44:40 +00:00
release Add smoke test for BEAM pipelines (#3037) 2026-05-07 20:41:13 +00:00
services Upgrade to Gradle 9 (#2993) 2026-03-30 17:15:55 +00:00
util Refactor bsa, dns, batch, and reporting packages to java.time (#3031) 2026-05-06 21:44:40 +00:00
.gcloudignore Remove Ofy (#1863) 2022-12-02 22:28:33 -05:00
.gitignore Remove App Engine build/environment scripts (#2870) 2025-11-05 19:02:24 +00:00
.java-version Compile Nomulus with Java 21 (#2344) 2024-03-04 19:31:08 +00:00
AUTHORS Change all references to Domain Registry to Nomulus 2016-10-14 16:58:07 -04:00
build.gradle Change language and bytecode levels to Java 25 (#3009) 2026-04-15 16:34:52 +00:00
buildscript-gradle.lockfile Upgrade to Gradle 9 (#2993) 2026-03-30 17:15:55 +00:00
CONTRIBUTING.md Add Google Java Style Guide info and link to CONTRIBUTING.md 2016-11-15 11:01:16 -05:00
CONTRIBUTORS Add Aman to CONTRIBUTORS (#2586) 2024-10-04 22:46:25 +00:00
dependencies.gradle Upgrade beam deps (#3027) 2026-04-27 19:40:10 +00:00
dependency_lic.gradle Upgrade to Gradle 8.14.3 (#2988) 2026-03-26 17:55:05 +00:00
GEMINI.md Refactor bsa, dns, batch, and reporting packages to java.time (#3031) 2026-05-06 21:44:40 +00:00
gradle.lockfile Upgrade to Gradle 9 (#2993) 2026-03-30 17:15:55 +00:00
gradle.properties Change gradle memory/workers to avoid OOM in CB (#2910) 2025-12-23 15:49:25 +00:00
gradlew Upgrade to Gradle 9 (#2993) 2026-03-30 17:15:55 +00:00
gradlew.bat Upgrade to Gradle 9 (#2993) 2026-03-30 17:15:55 +00:00
java_common.gradle Add Errorprone plugin for removing FQCNs (#3021) 2026-04-23 20:17:19 +00:00
LICENSE Fix a typo (#174) 2019-07-15 17:49:22 -04:00
nom_build Create a nom_build wrapper script (#508) 2020-03-10 16:32:14 -04:00
nomulus-logo.png Update Nomulus logo 2017-05-23 17:22:49 -04:00
projects.gradle Make GKE networking work more properly (#2531) 2024-08-22 13:10:56 +00:00
README.md Update more of the documentation (#2974) 2026-03-03 20:25:30 +00:00
SECURITY.md Add SECURITY.md security policy (#1257) 2021-07-26 17:35:59 -04:00
settings.gradle Create a load testing EPP client (#2415) 2024-05-23 21:37:34 +00:00
show_upgrade_diffs Added "show_upgrade_diffs" script (#981) 2021-03-09 07:48:06 -05:00
utils.gradle Prepare for Gradle 9 upgrade (#2985) 2026-03-20 14:15:12 +00:00
vnames.json Update kythe vnames mapping (#1944) 2023-02-27 17:09:57 -05:00

Nomulus

Internal Build FOSS Build License Code Search
Build Status for Google Registry internal build Build Status for the open source build License for this repo Link to Code Search

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 Kubernetes 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. If you are using Google Cloud DNS, you may need to understand its capabilities and provide your own multi-AS solution.
  • 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.
  • Secure storage of cryptographic keys: A keyring interface is provided for plugging in your own implementation (see configuration doc for details), and an implementation based on Google Cloud Secret Manager is available.
  • TPC Proxy: Nomulus is built on top of the Jetty container that implements the Jakarta Servlet specification and only serves HTTP/S traffic. A proxy to translate raw TCP traffic (e.g., EPP) to and from HTTP is provided. Instructions on setting up the proxy are available. The proxy can either run in a separate cluster and communicate to Nomulus public HTTP endpoints via the Internet, or as a sidecar with the Nomulus image in the same pod and communicate to it via loopback.

Additional components

Registry operators interested in deploying Nomulus will likely require some additional components that 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.

  • System status and uptime monitoring.

Outside references