Tutorials

Cataloging Your First Zine

Step-by-step guide to creating your first ZineCore2 record

This tutorial walks you through cataloging a zine from start to finish. You'll learn how to gather information, choose vocabulary terms, create a valid JSON record, and validate it.

What You'll Learn

  • How to examine a zine and extract bibliographic data
  • How to choose appropriate subjects and genres
  • How to create a valid ZineCore2 JSON record
  • How to validate your record with JSON Schema

Prerequisites

  • A zine to catalog (physical or digital)
  • A text editor
  • Basic familiarity with JSON (we'll explain as we go)

Our Example Zine

For this tutorial, we'll catalog a real zine:

"Not Your Mom's Meatloaf"

  • A perzine/cookzine about vegan cooking
  • Created by Alex Martinez
  • Published in Portland, OR in 2023
  • 28 pages, half-letter size, photocopied with staple binding
  • Contains personal essays and recipes
  • Has a "freely duplicatable" statement inside

Step 1: Gather Required Information

ZineCore2 has four required fields. Let's identify them:

1. Title

Look at the cover. Our zine says: "Not Your Mom's Meatloaf"

{
  "title": "Not Your Mom's Meatloaf"
}

2. Creator

Who made it? Check the cover, credits page, or back cover. Our zine says: "by Alex Martinez"

{
  "title": "Not Your Mom's Meatloaf",
  "creator": ["Alex Martinez"]
}
Note: creator is an array (list) even if there's only one creator. Use square brackets [ ].

3. Subject

What is it about? Our zine is about vegan cooking, food, and personal stories about changing diet.

Looking at the subjects vocabulary, we find:

  • food - Yes, it's about food
  • cooking - Yes, it has recipes
{
  "title": "Not Your Mom's Meatloaf",
  "creator": ["Alex Martinez"],
  "subject": ["food", "cooking"]
}

4. Format

Is it print or digital? Our zine is a physical photocopied zine.

{
  "title": "Not Your Mom's Meatloaf",
  "creator": ["Alex Martinez"],
  "subject": ["food", "cooking"],
  "format": "print"
}
Congratulations! You now have a valid minimal ZineCore2 record with all required fields.

Let's add more information to make the record useful:

Date

When was it published? Our zine says "2023" on the back.

{
  "date": "2023"
}

Genre

What type of zine is it? Looking at genres vocabulary:

  • perzine - Yes, it has personal essays
  • cookzine - Yes, it has recipes
{
  "genre": ["perzine", "cookzine"]
}

Abstract

Write a brief description (1-3 sentences):

{
  "abstract": "A personal zine about transitioning to veganism, featuring recipes and essays about food, family, and identity. Includes veganized versions of traditional comfort foods."
}

Physical Description

Our zine is:

  • 28 pages (count them!)
  • Half-letter size (5.5" × 8.5")
  • Photocopied on white paper
  • Staple binding
{
  "number_of_pages": 28,
  "physical_dimensions": "5.5 x 8.5 inches",
  "binding_features": ["stapled"]
}

Place of Publication

The zine says "Portland, OR" on the back cover:

{
  "place_of_publication": "Portland, Oregon, United States"
}

Rights

Inside the front cover it says "This zine is freely duplicatable":

{
  "rights": "freely-duplicatable"
}

Step 3: Complete Record

Here's our complete record so far:

{
  "title": "Not Your Mom's Meatloaf",
  "creator": ["Alex Martinez"],
  "subject": ["food", "cooking"],
  "format": "print",
  "date": "2023",
  "genre": ["perzine", "cookzine"],
  "abstract": "A personal zine about transitioning to veganism, featuring recipes and essays about food, family, and identity. Includes veganized versions of traditional comfort foods.",
  "number_of_pages": 28,
  "physical_dimensions": "5.5 x 8.5 inches",
  "binding_features": ["stapled"],
  "place_of_publication": "Portland, Oregon, United States",
  "rights": "freely-duplicatable"
}

Step 4: Add Optional Enhancements

Let's add a few more useful fields:

Language

The zine is in English:

{
  "language": ["eng"]
}
Use ISO 639-3 language codes: eng for English, spa for Spanish, fra for French, etc.

Table of Contents

If the zine has a table of contents or clear sections:

{
  "table_of_contents": [
    "Introduction: Why Vegan?",
    "Veganizing Family Recipes",
    "Meatloaf (But Not Really)",
    "Mac and Cheese Without the Cheese",
    "Comfort Food, Comfortable Me"
  ]
}

Public Notes

Add any curatorial or cataloging notes:

{
  "public_notes": "Cover art is a collage of vegetables arranged to look like a meatloaf. Black and white interior."
}

Step 5: Final Complete Record

{
  "title": "Not Your Mom's Meatloaf",
  "creator": ["Alex Martinez"],
  "subject": ["food", "cooking"],
  "format": "print",
  "date": "2023",
  "genre": ["perzine", "cookzine"],
  "abstract": "A personal zine about transitioning to veganism, featuring recipes and essays about food, family, and identity. Includes veganized versions of traditional comfort foods.",
  "language": ["eng"],
  "number_of_pages": 28,
  "physical_dimensions": "5.5 x 8.5 inches",
  "binding_features": ["stapled"],
  "place_of_publication": "Portland, Oregon, United States",
  "rights": "freely-duplicatable",
  "table_of_contents": [
    "Introduction: Why Vegan?",
    "Veganizing Family Recipes",
    "Meatloaf (But Not Really)",
    "Mac and Cheese Without the Cheese",
    "Comfort Food, Comfortable Me"
  ],
  "public_notes": "Cover art is a collage of vegetables arranged to look like a meatloaf. Black and white interior."
}

Step 6: Validate Your Record

Now let's make sure it's valid!

Option 1: Online Validator

  1. Go to the Schema Validator
  2. Paste your JSON
  3. Click "Validate"
  4. Fix any errors

Option 2: Command Line (Advanced)

# Install ajv-cli
npm install -g ajv-cli

# Download the schema
curl -o zinecore2.schema.json \
  https://zinecore.org/v2/schema/zinecore2.schema.json

# Save your record as record.json

# Validate
ajv validate -s zinecore2.schema.json -d record.json

Common Mistakes

Forgetting Arrays

// ❌ Wrong
"creator": "Alex Martinez"

// ✅ Correct
"creator": ["Alex Martinez"]

Using Wrong Vocabulary Codes

// ❌ Wrong (not a vocabulary code)
"subject": ["Food", "Cooking"]

// ✅ Correct (lowercase codes from vocabulary)
"subject": ["food", "cooking"]

Misspelling Field Names

// ❌ Wrong
"title": "My Zine",
"creater": ["Jane Doe"]  // Typo!

// ✅ Correct
"title": "My Zine",
"creator": ["Jane Doe"]

Step 7: What's Next?

Now that you have a valid record, you can:

  1. Save it locally - Keep JSON files in a folder
  2. Submit to the API - If using the Reference Implementation
  3. Convert to other formats - Use JSON-LD contexts for RDF
  4. Create more records - Catalog your whole collection!

Your Turn: Practice Exercise

Try cataloging this zine:

"Bike Punx" by Jamie Chen A perzine about bike touring, published in 2022 20 pages, quarter-size, black and white photocopies Topics: bicycling, travel, DIY Genre: perzine Statement: "Please copy and distribute"

Click to see the answer
{
  "title": "Bike Punx",
  "creator": ["Jamie Chen"],
  "subject": ["travel", "diy"],
  "format": "print",
  "date": "2022",
  "genre": ["perzine"],
  "number_of_pages": 20,
  "physical_dimensions": "4.25 x 5.5 inches",
  "rights": "please-copy"
}

Note: You could also add "technology" or create a custom note about bicycles since there's no specific "bicycles" subject term.

Next Tutorials

Need Help?

Copyright ©2026 ZineCore2 Contributors,