When you connect to this website, you send your IP address and sometimes some cookies. You may also give us personal identifying information, such as your name and contact information. All this data is used to securely provide you with the services that you request. We encourage you to review our privacy policy to make sure that you understand how your data is managed, and to contact us if you have any questions. View Privacy Policy

International Support in NASPA Zyzzyva

From NASPAWiki
Revision as of 21:27, 9 September 2026 by Judycole (talk | contribs) (Added text)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

You are viewing a condensed mobile version of this NASPA webpage.
Switch to full version.

What’s new with lexicons in version 3.5.0?

Until version 3.5.0, NASPA Zyzzyva (NZ) and NASPA Zyzzyva Mobile (NZM) only supported lexicons that use the A-to-Z letter set and its frequencies and values. We built licensed lexicons (NWL, NSWL, and CSW) into each version, and users could add one custom lexicon.

We’ve completely reworked Zyzzyva so that users can create multiple custom lexicons by plugging them in. As part of that effort, we updated Zyzzyva to accommodate other letter sets and their differences, and created a way for international organizations to make their lexicons “pluggable” with the assurance of authenticity that Zyzzyva users have come to expect.

What’s different about international lexicons?

A lot of countries use different letter sets, some with more or less letters, some with multigraph letters like the Spanish {CH}. Users sometimes managed to squeeze them into Zyzzyva as a custom lexicon, with varying degrees of success.

Zyzzyva now uses a system of Web-linked catalogs to understand these letter sets and their particular values, counts, and sort orders. When properly configured, an international user can now expect Zyzzyva to work correctly in their own language, recognizing all of their letters and refusing all others.

In particular, we have worked extensively with the Spanish federation (FILE) to accommodate the international Spanish letter set and to translate the user interface. We hope that this will spread the love of Zyzzyva to the many countries that participate in FILE’s clubs and competitions.

I only play in English. Should I care about this?

Probably not, though you may appreciate being able to load multiple custom lexicons that use the English letter set. You can do this by importing text files in Preferences -> General -> Lexicon -> Manage (NZ) or Settings -> Lexicon -> All Lexicons (NZM) and telling it to model them on your usual English word list.

For our many English-only users, the only other change is that we redesigned those dialogs to support “pluggable” lexicons. That means that you won’t have to update the desktop application to use the next version of your favorite lexicon, just watch for a notification that an update to that lexicon’s catalog is available, accept that update, then import the new lexicon source file so that the catalog can recognize it as authentic; from then on, it’ll be as if it was built into the application. (Or, you can wait for those new lexicons to be built into a new version of NASPA Zyzzyva, as before.)

How can I try out one of these international lexicons?

First thing first: Not every international lexicon is publicly distributed, or at least, not with detailed definitions and other stuff attached. It’s up to the publisher to manage how its users get access to the lexicon source files, so, contact your organization to see if they have a compatible lexicon source text file or ZIP archive that you can download. (If all you have is some text file, you can try importing it as a custom lexicon, but you may run into trouble if it uses a special letter set.)

As of mid-2026, we have made such arrangements with the FILE (Spanish), SD (German), and DS (Danish) organizations. If you dive into the Advanced section in NZ’s Manage Lexicons dialog, you can explore the tree of Zyzzyva catalogs that are set up to define international letter sets and recognize approved lexicon source files. With the benefit of some basic cryptography, we’ve made it so that these international lexicons can be authenticated just like the ones that we build into Zyzzyva.

The process requires that you work your way through this catalog tree, fetching them from the Internet and loading them, to make Zyzzyva aware of the lexicons you’re interested in. Then, when you import the lexicon source that you downloaded, it’ll be recognized cryptographically, and you’ll be all ready to go. Remember: fetch and load the catalog first, then import and load the downloaded lexicon source.

Where can I find more help to set up my international lexicon?

In NZ, there’s a new section in the online help named Lexicons that explains everything about the new catalog system, how lexicons are imported and recognized, and how to use the Manage Lexicons dialog to load and unload them as desired. There’s a lot of detail there, so, if you’re using NZM, you may want to install NZ and read that section, because the online help in NZM is very brief.

Do I need to be online for all this to work?

Only at the beginning, to fetch catalogs and download lexicon source files. Everything you’ll need to use any lexicon winds up in your Zyzzyva data directory, which lives on your computer or mobile device, and is eligible for data synchronization between devices. Unless you uninstall the mobile app and delete its data, these files (catalogs and lexicon source) are there for good.

I need step-by-step instructions!

Sure thing. Let’s take FISE2A (the current international Spanish lexicon, abridged, containing all 2- to 9-letter words). These instructions work for either NZ or NZM.

  1. First, make sure you’re online, since you’ll be reaching out to the Internet.
  2. Download the FISE2A lexicon source archive file from here. (You don’t have to unpack it, unless you’re curious.) Don’t try to import it now, because Zyzzyva doesn’t know anything about the Spanish catalog yet.
  3. Go to Preferences -> General -> Lexicon -> Manage (NZ) or Settings -> Lexicon -> All Lexicons (NZM). You should see all of the lexicons that Zyzzyva sees as available, some loaded, some not.
  4. Farther down, you should see a button for managing catalogs. (On NZ, you need to click Advanced to enable that button.) Click that.
  5. Look under NASPA Zyzzyva 3.5.0 Catalog (you may have to click a triangle icon to open that branch of the catalog tree) to find International Lexicons Catalog.
  6. Since you haven’t fetched the international catalog from the Internet yet, it probably looks dead. Click on it to show its details.
  7. Click the button to fetch the catalog. Assuming that succeeds, you should be prompted to load it, and when you agree to that, you should see that it is programmed to validate a number of individual national catalogs at the next level of the tree. Back in the tree view, click the triangle icon, if necessary, to see the individual catalogs listed.
  8. Find FILE (Spanish) Catalog in the list and repeat the steps above. Your catalogs are now in your data directory and ready to recognize the FISE2A lexicon.
  9. Go back a level to where the available lexicons are listed. You won’t see FISE2A there yet, because you haven’t imported it yet.
  10. Click the button to import the lexicon source archive file. If it’s properly recognized, you should be prompted to load it, and you’ll be all set. If you see a message about importing it as a custom lexicon, you probably don’t have the right catalog loaded, so you should check over the steps above.

Your newly imported lexicon should now show the same green “seal and checkmark” icon as the built-in lexicons, meaning that it’s been authenticated and is correct for judging. If your lexicon source archive file included optional features such as definitions and playability data, you may want to take a few minutes to build a lexicon database as described in the online help.

My organization wants to make Zyzzyva available to its users. How do we do that?

The rest of this document is for you! There are a number of steps you need to take to make your lexicon and its letter set fully compatible with Zyzzyva. For more information, or to ask a specific question about international support in NZ and NZM, please send a message to the NASPA Zyzzyva Committee.

Establish your right to publish word lists and definitions

You should check with the publisher of the word list itself, plus any definitions, to be sure that you’re in compliance with their terms of license for distribution to users. That may depend on whether your lexicon will be made available to anyone or just to approved users. Our standard format for lexicon source puts basic symmetric encryption on text files, so that the word list isn’t easily accessible outside Zyzzyva itself, but it’s not unbreakable.

Contact NASPA about building a Zyzzyva catalog

It’s important to know that catalogs only describe lexicons; they don’t contain them. Users never have to handle catalogs as files, because Zyzzyva knows where to find them on the Internet and where to store them in the user’s data directory. However, they will have to follow your instructions to download and import the lexicon source files that your catalog describes and recognizes.

Each Zyzzyva catalog belongs to one organization, and you’ll be responsible for hosting and updating it, so you’ll need a Web server in an established domain and the capacity to serve the catalog file to your users when they’re online. Your catalog, actually a small SQLite database, will contain basic information about your organization and the lexicons you support, including copyright, publishing date, and so on. It will also contain the specifics of the letter set your lexicons use, plus the unique cryptographic hashes of all lexicon source files you intend for your users to import. (All of this database structure is described below.)

Your users’ ability to import and load your lexicon with a mark of authenticity depends on Zyzzyva recognizing its source files by those cryptographic hashes. In turn, Zyzzyva needs to be able to validate the catalog itself, which requires that it be digitally signed and that its signer’s public key be listed in its parent catalog, likely Zyzzyva’s International Lexicons Catalog.

Getting listed in that parent catalog is a one-time task, between your organization and the parent catalog’s publisher (usually NASPA), based on a signed agreement about responsibilities and practices. Essentially, in return for Zyzzyva’s validation of your catalog, you will be agreeing to operate it in a way that’s consistent with NASPA’s interests, to show due regard for the legal rights of word list publishers, and to enforce the same agreement on any entity whose child catalog is validated by yours.

Once your organization’s catalog is listed in that way, you are free to amend your catalog as required without involving us, to revise, replace, add, or remove lexicons, as long as your digital signing key remains the same. When the catalog’s content changes, users who have your catalog loaded will see a notification directing them to the dialog that lists catalogs, where they can click a button to do the update.

Assemble your lexicon source files

It’s critical to be sure that you have the exact complete word list, because your users will see the lexicon presented as authenticated by your organization. Formatting is also important — one word per line, with optional definitions, parts of speech, and inflections in the format described in the Lexicons section in NZ’s online help, saved in a plain text file (.txt) in UTF-8 encoding with a byte-order mark (BOM), hexadecimal EF BB BF, at the start. (A professional text editor should be able to do this for you.)

Each individual lexicon source file is separately recognized by its cryptographic hash. To see that hash value, hold down the SHIFT key in NZ as you import the source file in the Manage Lexicons dialog. You can then enter it in the catalog database record that you create for that file.

Unless a lexicon source file has already been cataloged (which will be normal for your users, though not for you at this point), the only kind you can import is one that you agree to register in your custom catalog as an unrecognized lexicon source text file. That’s the first step to take for each new lexicon you will add to your catalog. The file will be copied to your data directory under words/imported, and it will be available to load for use in NZ only as long as it is (currently) registered in your custom catalog or (later) recognized by your (future, loaded) catalog.

If you want to protect your word list by encrypting a lexicon source file (word list or playability data), ask your desktop OS to open the .txt file using an application picker, then navigate to the NZ application and hold down the SHIFT key as NZ opens the file; it will write the encrypted file to the same location with the extension .enc.txt. (This optional encryption step does not change the file’s recognized cryptographic hash value.)

We encourage catalog owners to recognize forward and reverse word-graph (DAWG) files as lexicon source files by adding catalog database records for them. The purpose of these DAWGs is to make word searches faster by mapping the letter sequences in all of the listed words; including those records in the catalog, and making the DAWG files part of the lexicon source archive file, makes everything go smoothly for the user. Zyzzyva will automatically generate DAWG files when a lexicon is loaded if they’re absent from the data directory, but with a delay that’s visible to the user. To catalog them, you’ll need their cryptographic hash values; if you hold down the SHIFT key in NZ while the lexicon source text file is loading, Zyzzyva will report the hash value for each DAWG, so you can enter those values in their catalog database records. Once those DAWG hashes are recognized by a loaded catalog, you’ll see that the generated files are also stored in your data directory under words/imported.

If you are interested, we can help you configure optional lexicon source files for playability data and bingo stems, which have their own standard formats. Each fully configured lexicon can have a lexicon source text file, a playability data file, two bingo-stems files (for six- and seven-letter stems), and two word-graph files; they can be imported separately, but most users will prefer to import them as part of a lexicon source archive (.zip) file, which is usually smaller than the lexicon source text file alone.

Build your catalog

Once you have the cryptographic hash values for all of your lexicon source files (including DAWGs, if you took note of those when Zyzzyva generated them), you can go about building your organization’s catalog. You can describe multiple word lists in one catalog; for example, the Spanish catalog recognizes both the public (FISE2A) and restricted (FISE2) word lists.

The following sections describe the data format for a Zyzzyva catalog database. We strongly suggest that you follow along using a database browser such as DB Browser for SQLite, using any catalog database that you find in your Zyzzyva data directory under catalogs as a working example. When building a new catalog from scratch or from an existing one, you should work through the tables in the order below, as the schema uses SQLite foreign keys to manage dependencies between records. (All such dependencies are resolved within your catalog, not between catalogs.)

All key fields in these tables are by convention in lower case, to distinguish them from non-key fields (name and description) whose content is intended to appear in the user interface.

Table: interpretation

The interpretation table contains records that describe all of the file formats that your catalog may recognize. There’s no reason to change these records at this time, so you should leave this table as is.

Currently defined interpretation keys include:

bare
A text file where each line contains a word without definitions.
definitions-zyzzyva-2005
A text file where each line contains a word with definitions in the legacy Zyzzyva format.
dawg-zyzzyva
A forward DAWG file.
dawg-zyzzyva-reverse
A reverse DAWG file.
playability
A text file where each line contains a number (indicating frequency of play) and a word.
stems-6
A text file where each line contains a six-letter stem (a combination of letters that occurs frequently in seven-letter words).
stems-7
A text file where each line contains a seven-letter stem (a combination of letters that occurs frequently in eight-letter words).

Table: publisher

The publisher table contains one record for each publishing authority mentioned in the database. That includes your organization as the publisher of the catalog, as well as any other organization that publishes a word list that your catalog recognizes.

key
A unique string that identifies the publisher within the catalog database.
name
A brief string that identifies the publisher to the user.
description
A longer string that describes the publisher in full.
url
The publisher’s Internet URL.

Table: tile_set

The tile_set table contains one record for each letter set mentioned in the database. Without such a record, your word lists are assumed to use the standard English set and its letter counts and values, so you very likely will need to create one.

key
A unique string that identifies the letter set within the catalog database.
name
A brief string that identifies the letter set to the user.
description
A longer string that describes the letter set in full.
collation
The letter set’s collation order. Currently, this is for documentation only, as sorting is done using indexes in the tile table.

Table: tile

The tile table contains one record for each letter in each letter set. It has a composite (two-part) key, comprising the tile_set foreign key and a serial index.

key
A foreign key, pointing to a record in the tile_set table.
index
A number (beginning with 1) that uniquely identifies this letter within the letter set, and the second part of this table’s composite key. In unusual cases such as German, where different letters are interchangeable in the sort order, you can use the fractional part of the number (e.g., 1, then 1.1) to indicate that while maintaining key uniqueness.
multigraph
A string containing the letter label, which may be from one to three characters, without enclosing braces.
substitute
An optional string (otherwise NULL) containing a substitute one-character letter label, required only for non–A-to-Z letters, typically a numeral or other ASCII character. Because the substitute character is used to build DAWGs, it must be unique in the letter set.
value
The number of points that the letter is worth.
count
The number of letters of the letter’s kind in the letter set.
vowel
The number 1 (otherwise NULL) if the letter is classified as a vowel.

Table: word_list_family

The word_list_family table contains records that describe each “family” that your word lists belong to. Families in Zyzzyva are distinguished by color when used in judging, as a visual aid to users, to distinguish between stations intended for different divisions. You should probably invent a new family for your international lexicons, with its own distinctive color, but if you don’t, you must reproduce the family record from any other catalog where it’s defined, because all dependencies between database records must be resolved within one catalog.

key
A unique string that identifies the word list family within the catalog database.
name
A brief string that identifies the word list family to the user.
description
A longer string that describes the word list family in full.
color
The word list family’s HTML color name or hexadecimal value (e.g., #C0FFEE), for use in background coloring. It should be a unique color among known word list families, and preferably a lighter shade that doesn’t overwhelm black text.

Table: word_list

The word_list table contains one record for each word list that your recognized lexicon source files use. It may contain multiple records for the same word list if there have been revisions since it was originally published, using a composite (two-part) key that includes the revision number. It may also contain superseding records for word lists that are new versions of another list in the same family. (For example, NWL2023 supersedes NWL2020, but they are both in the NWL family.)

key
A unique string that identifies the word list within the catalog database. It must also be unique among all catalogs, because Zyzzyva uses it to index all of the lexicons that it manages.
revision
A number (beginning with 1) that uniquely identifies one revision of the word list, and the second part of this table’s composite key. Ordinarily, this is always 1, but if the list is republished, it should be incremented so that the revision number is visible to the user.
name
A brief string that identifies the word list to the user.
description
A longer string that describes the word list in full.
copyright
The legal copyright text for the word list. This appears in the NZ status bar and in saved word lists.
publisher
A foreign key, pointing to a record in the publisher table.
date
A string in short ISO date format (e.g., 2024-01-14) that identifies the publication date of the word list.
supersedes
A string (otherwise NULL) that identifies the key of the word list that this word list supersedes. The identified word list may or may exist in this table, but Zyzzyva may use it to guide the user in migrating study data from one word list to another.
word_list_family
A foreign key, pointing to a record in the word_list_family table.
tile_set
A foreign key, pointing to a record in the tile_set table.

Table: lexicon

The lexicon table contains one record for each lexicon source file that your catalog recognizes. It has a composite (two-part) key, comprising its cryptographic hash value and the algorithm used to generate it. (Note that ZIP archives used to package multiple lexicon source files are not listed here, though each individual file inside them must be individually recognizable.)

key
A unique string that identifies the lexicon source file within the catalog database. This is the cryptographic hash value used to check that the source file is authentic. In the case of encrypted text files, the hash value reflects the decrypted text.
algorithm
A number that uniquely identifies the hash algorithm used to compute the hash value, and the second part of this table’s composite key. Currently, this is always 12, indicating SHA3-256.
word_list
The first part of a foreign key, pointing to a record in the word_list table.
revision
The second part of a foreign key, pointing to a record in the word_list table.
interpretation
A foreign key, pointing to a record in the interpretation table.
sort
A string documenting how the file is sorted, if necessary to differentiate multiple hash values for the same lexicon source file sorted in different orders.

Table: catalog

The catalog table contains one self-description record to describe itself, and optionally more records to describe child catalogs that are validated by your catalog. It’s unlikely that you’ll be birthing child catalogs, but if you do, your users will have to fetch and load your catalog before they can fetch those.

key
A unique string that identifies the catalog within the catalog database. It must also be unique among all catalogs, because Zyzzyva uses it to index all of the catalogs that it manages, except the mandatory self-description record, which must match the describing record in the parent catalog database in its identifying fields.
name
A brief string that identifies the catalog to the user.
publisher
A foreign key, pointing to a record in the publisher table.
date
A string in short ISO date format (e.g., 2017-01-01) that identifies the publication date of the catalog.
url
The catalog’s Internet URL. Zyzzyva uses this to fetch the catalog from the Internet. There must also be a matching file in Base64 PEM format at the same URL, with .sig appended, that contains the digital signature of the catalog file as signed by the holder of the RSA key-pair whose public key appears in the signer field.
signer
The catalog signer’s public key in Base64 PEM format.

Test your catalog

Once you’ve created your catalog, it’s time to test it to see if it properly recognizes and describes your lexicon source files. Since your catalog isn’t validated by any existing catalog, it won’t be possible to operate your catalog in the way that your users will once everything is configured, so you should follow these steps to test it.

  1. Close the NZ application.
  2. Use a SQLite database browser to open your catalog and export all tables and records in CSV format to a text file.
  3. Find your custom catalog database (custom.db) in your Zyzzyva data directory under catalogs and make a copy of it. Open that file in the database browser.
  4. Import and merge your exported catalog records into the copied catalog, and resolve any key-uniqueness conflicts or other issues, then write the database file back to disk.
  5. Temporarily swap the resulting merged catalog file with the custom catalog file in your Zyzzyva data directory.
  6. Open the NZ application and verify that it reads the merged catalog at startup without complaints.
  7. Go to Preferences -> General -> Lexicon -> Manage, click Advanced, then click the button to open the Manage Catalogs dialog.
  8. In the list of catalogs, select Custom Catalog and click Edit. You should see any custom lexicons that you had already imported and registered there, but you won’t yet see your newly described lexicons (unless you had earlier imported them as custom lexicons, in which case you should now select them and click OK to deregister them).
  9. Returning to the Manage Lexicons dialog, try importing your lexicon source text file. If your merged catalog records are keyed to the correct hash values and the other tables are in order, you should not be asked to register it as a custom lexicon; instead, you should see that the lexicon appears in the dialog with a red icon to indicate that it’s unauthenticated (like a custom lexicon), but with other descriptive fields displayed as you intended.
  10. When you close the Preferences dialog, NZ will try to load your lexicon source files according to your merged catalog records. (This will generate DAWG files; if you recorded the correct DAWG hashes in your catalog, those files should now be saved along with the imported text file.) You can then test it in a Search tab, to verify that you can type all of the letters in your letter set (but no others) in the Anagram Match text field and do a search for matching words.
  11. If all of the above steps worked, then you should return to the Manage Lexicons dialog and check for the presence of optional features that you intend to support for the new lexicon. If they’re missing, you need to import those specific lexicon source files (or a ZIP archive that contains them) and then check that they were successfully loaded.
  12. Further tests could include building a lexicon database, using Tools -> Rebuild Database, which brings in definitions, playability data, and stems files and enables specific search features not available without one. (You may need to restart NZ to see this database working in full.) Also, you should test that your DAWG files are loading successfully at startup; if you still see progress dialogs, that’s Zyzzyva generating DAWGs on the fly because it couldn’t load the ones you imported, so you will probably want to get the correct DAWG hashes (as described above) and add DAWG records to the catalog.
  13. When testing is complete, if you added or corrected any records merged into your custom database, you should reflect those changes back to the catalog database that you intend to publish.

Sign and host your catalog

When you are satisfied that your catalog is ready to test with its first Zyzzyva users, it’s time to put a digital signature on it. This (along with a record in a parent catalog that describes it) is what enables users to load your catalog so that it can recognize your lexicons as authentic.

Follow these steps using any current version of the OpenSSL program, which is available in source form for all desktop operating systems, or any software with equivalent functionality. In these steps, use a suitable unique name for your catalog, something reflective of your organization, in place of our.

  • Generate an encrypted private/public RSA key pair as PKCS#1 in PEM format. This will prompt you for a password, which you must record for future use, as you will need it whenever you use the private key to sign a catalog file. The privacy of that password is what guarantees that any catalog signed by that key (and, by extension, any lexicon it recognizes) is actually authenticated by your organization, so you should protect it.
openssl genrsa -aes256 -out our.prv 4096
  • Derive the public RSA key from PKCS#1 in PEM format. This will prompt you for your password to decrypt the encrypted key file. The resulting .pub file is what you must submit to us to identify you as your catalog’s signer in its parent catalog.
openssl rsa -in our.prv -pubout -out our.pub
  • Generate a signed digest hash of the catalog file (our.db) with your private key. This will prompt you for your password to access the private key in the encrypted key file.
openssl dgst -sign our.prv -keyform PEM -sha256 -out our.db.sig.binary -binary our.db
  • Encode the signed digest hash in Base64 for deployment.
openssl enc -base64 -in our.db.sig.binary -out our.db.sig

The result is that your catalog (our.db) is unchanged, but you also have the accompanying signature file (our.db.sig) that Zyzzyva expects to be in the same location on the Internet when users fetch your catalog, for validation.

Because of the way this catalog validation works, it’s not critical that you host your catalog with SSL (https:) security, but that’s always good server-management practice.

When all this is done, you must send us three files: the catalog, its signature file, and the public key in PEM format (our.pub). We will run a validation check on these files. When your hosting location is finalized, send us the URL to the catalog file, and we will add the necessary description record to the appropriate parent catalog. Your last task is to test the link between catalogs in NZ and/or NZM by updating the parent catalog and then fetching and loading your catalog, as described above.

Update your catalog

When it’s time to make changes to your catalog, you can repeat the above steps to test, sign, and host the updated catalog. As long as you use the same private key to do the signing, you are free to do these updates without notifying us. We may intervene if we see evidence that you aren’t following the signed agreement regarding respect for publishing rights or other issues.

Relocate your catalog

At some point in the future, your catalog files may have to move to a different Internet domain or a different location on your existing Web server. This affects the parent catalog, which tells Zyzzyva where to look when a user asks to fetch or update your catalog.

The catalog tree design allows for this through a practice known in software engineering as “tombstoning”. Your catalog must contain a “self-description” record that matches the record in the parent catalog, including its own Internet URL. No catalog can load properly unless it contains a self-description record that matches its description in its parent catalog.

When you first know that you will be moving your catalog files, you should advise us, to make us aware of the coming change. When you place your catalog in its new location, and before it’s no longer available in its existing location, you must change the self-description record in the catalog at its old location to point to the new URL (and re-sign the catalog, so that it can still be validated). Zyzzyva will notify users that your catalog has changed, and when they update it, Zyzzyva will skip over your obsoleted catalog and fetch the one in the new location. In this way, you can relocate your catalog without involving us during your cutover.

Later, once everything is tested, you must advise us that your change is complete. We will update the parent catalog so that its description of your catalog contains the new URL, at which point you can take down the existing copy.

For more information

If you need clarification or assistance with any information in this document, please send a message to us with your specific request.