Creating LDraw Parts

  Introduction | File Format | Primitives | Numbers | Patterned Part Numbers | Meta Statements | Errors

Creating LDraw Parts: CATEGORY and KEYWORDS FAQ

FAQ for CATEGORY and KEYWORDS meta-statements

Quick Lookup

This FAQ should get you started with keywords and categories. If you have more questions, please ask! You can post to lugnet.cad.dev, or email Steve Bliss.

What are '0 CATEGORY' and '0 KEYWORDS'?
A: They are two specific meta-statements. Meta-statements are commands in an LDraw file other than the graphics commands. Meta-statements do things like clear the screen, pause momentarily, or display a comment.

Both CATEGORY and KEYWORDS are used in part files exclusively. They don't appear in models, primitives, or subparts. They provide information for organizing and searching the part library. Before the CATEGORY and KEYWORDS meta-statements were defined, the only way to organize the part library was by the descriptive name and part number. While useful, the name and number do not provide enough information to thoroughly catalog a large directory of parts (currently some 1700 files!).

What is the difference between CATEGORY and KEYWORDS, i.e. what belongs to the one and what to the other?
A: CATEGORY provides a method to place all parts in a comprehensive classification system.

KEYWORDS provides a method to associate freeform search terms with a part.

CATEGORY is good for locating a part by drilling into the list of categories. KEYWORDS are good for locating a part by doing text searches.

The Partsref pages (at http://guide.lugnet.com/partsref/) illustrate how both KEYWORDS and CATEGORIES can be used. The list of categories on Partsref is based on the CATEGORY entries in the LDraw parts, and Partsref's Search allows users to search for specific words and terms contained in the KEYWORDS of parts (as well as their names, numbers, and categories).

What is the syntax for these two meta-statements?

0 CATEGORY <categoryname>
0 KEYWORDS <words>, <more words>, ..., <final words>

The CATEGORY and/or KEYWORDS lines should appear at the beginning of the part-file, just after the standard header. Something like this:

0 Some Part
0 Name: 0000.dat
0 Author: Me
0 Unofficial Part

0 CATEGORY Some
0 KEYWORDS shape, theme, useful

What is the exact purpose of the "0 CATEGORY" statement?
A: Their main purpose is to make it easier to find parts in the part library.

More specifically, the 0 CATEGORY meta-statement provides a way to specify the categorization/classification of parts in the LDraw part library.

Currently, any program or service that recognizes 0 CATEGORY uses it as a single-level classification. Whatever text is included after CATEGORY is used as a single category name. There was some discussion of whether 0 CATEGORY should support a multi-level classification system, but this was never decided.

So if a part contained the statement:

0 CATEGORY Minifig Accessory
it would specify that the part belongs in the category "Minifig Accessory" (as opposed to belonging to the "Accessory" subcategory of the "Minifig" category).

Are there any "rules" for what you can put in 0 CATEGORY?
Rule 1. Don't specify any category that doesn't already exist.
Rule 2. If you've got a new part (or several existing parts) that you feel belong(s) in a new category, discuss it on lugnet.cad.dev or e-mail the parts administrator.

Currently, the 'categories' of the LDraw part library are mostly limited to the first word in each of the various part names. We will get beyond this, because the descriptive part names should not have to include all the classification information.

It's simpler/easier to have part names like "Minifig Sword" rather than "Minifig Accessory Sword". If a part has a 0 CATEGORY setting, there is more freedom to give the part a name that is easy to use.

Is it allowed to name more than one category?
A: That wasn't the intent of the 0 CATEGORY meta-statement. Categories were meant to be a strict classification system, with the long-term possibility of having sub-categories.

As the LDraw/LCAD part library continues to grow, the advantages of a multi-level classification system may become more obvious.

Why should category names be restricted to some kind of "official" list?
A: To prevent different people from making up different names/spellings when they mean the same thing, and to avoid completely arbitrary names being used for categories.

Everybody's got their own ideas for classifying LEGO pieces. Some categories are common ('basic brick', 'sloped piece', etc.). But most everyone is going to have some unusual categories for unusual pieces ('gizmo', '>10 studs', etc.) The LDraw classification should avoid these 'unusual' categories, since they tend to be non-intuitive for everyone except the person who thought of them.

Classification will be most useful when there is a balance between the number of categories, the number of parts in each category, and clear definition for each category. If every author defined their own categories, the overall classification would be much less clear.

What is the current list of categories?
A: By default, if a part does not have a CATEGORY entry, the first word in the part name is used as the category. So the default list of categories is the unique list of words used at the beginning of the part names.

But some of these default categories are less useful than they could be. Some are too narrow/small, such as 'Tap'. Some are not very useful for clear classification, such as 'Town' and 'Space'.

For new parts, the category names should be selected from the following list:

  • Animal
  • Antenna
  • Arch
  • Arm
  • Bar
  • Baseplate
  • Belville
  • Boat
  • Bracket
  • Brick
  • Car
  • Cone
  • Container
  • Conveyor
  • Crane
  • Cylinder
  • Door
  • Electric
  • Exhaust
  • Fence
  • Flag
  • Forklift
  • Freestyle
  • Garage
  • Gate
  • Glass
  • Grab
  • Hinge
  • Homemaker
  • Hose
  • Jack
  • Ladder
  • Lever
  • Magnet
  • Minifig
  • Minifig Accessory
  • Panel
  • Plane
  • Plant
  • Plate
  • Platform
  • Propellor
  • Rack
  • Roadsign
  • Rock
  • Scala
  • Slope
  • Staircase
  • Support
  • Tail
  • Tap
  • Technic
  • Tile
  • Tipper
  • Tractor
  • Trailer
  • Train
  • Turntable
  • Tyre
  • Wedge
  • Wheel
  • Winch
  • Window
  • Windscreen
  • Wing

In the near future, this list will be changing, as more parts are deliberately classified. Overall, there should be fewer categories, with a better balance between the categories.

What is the purpose of the 0 KEYWORDS meta-statement?
A: KEYWORDS provides a place to put search-text. The 0 KEYWORDS meta-statement may specify any terms the author feels would be useful in identifying the part, especially terms which are not included in the part's filename, descriptive name, or the CATEGORY.

Any rules for KEYWORDS?
Rule 1: Keywords typically include alternate part uses, geometric terms, synonyms (if the part name includes the term "rounded", a keyword might be "curved"), the unique set the part appeared in, and playthemes. Other useful keywords are categories that the part is similar to.
Rule 2: Don't duplicate words and terms from the part name or number.

We should probably start compiling a list of suggested keywords. Just like with categories, having standard keywords will make it easier to locate parts.

Do KEYWORDS allow multiple entries?
A: Yes, there may be multiple entries on a KEYWORDS statement. Also, there may be multiple 0 KEYWORDS meta-statements in a single part file. Each KEYWORDS meta-statement should be limited to 80 characters.

Entries on a 0 KEYWORDS meta-statement can be comma-delimited, or just space-delimited.

Each entry can be any string of text. Most search-engines will probably perform searches on all the entries, as a single string of text. So internal delimiters are probably not all that important.

- Manfred Moolhuysen, initial question asker
- Steve Bliss, initial question answerer



  Introduction | File Format | Primitives | Numbers | Patterned Part Numbers | Meta Statements | Errors

Original documentation by LDraw.org. Edited by Steven.