{
  "id": "nodejs",
  "version": "1.0.0",
  "name": "Node.js",
  "description": "Node.js is the open-source, cross-platform JavaScript runtime built on V8 — the foundation of server-side JavaScript, modern build tooling, and a substantial fraction of the web's infrastructure. Stewarded today by the OpenJS Foundation, the brand voice is community-led and infrastructural: stable, long-term, ECMAScript-tracking. The visual identity is the hexagon mark in Node Green (#5FA04E post-2024 refresh), with the historic green (#339933) preserved for legacy surfaces.\n",
  "provenance": {
    "source": "https://nodejs.org/static/documents/foundation-visual-guidelines.pdf",
    "license": "MIT",
    "attribution": "Node.js is MIT-licensed and stewarded by the OpenJS Foundation. The Node.js hexagon mark and word mark are trademarks of the OpenJS Foundation. Brand colors documented here are drawn from the Node.js Foundation Visual Identity Guidelines PDF (nodejs.org/static/documents/ foundation-visual-guidelines.pdf) and supplemented by the post-2024 refresh Node Green (#5FA04E) used on the current nodejs.org logo and verified against the simple-icons project. This atom is brand-atoms' machine-readable encoding; no logos are bundled.\n",
    "importedDate": "2026-05-18",
    "notes": "The Foundation Visual Identity Guidelines PDF publishes Node Green at #68A063 (PANTONE 7741 C). The current nodejs.org logo uses a refreshed Node Green at #5FA04E. Both values appear in this atom's palette; #5FA04E is the primary role mapping per the current published mark. Typography in the original guidelines is \"Open Sans equivalent\" — Open Sans is not in the brand-atoms catalog; this atom uses Inter as the catalog-equivalent humanist sans.\n"
  },
  "tags": [
    "nodejs",
    "javascript",
    "runtime",
    "server",
    "green",
    "open-source",
    "openjs"
  ],
  "palette": {
    "ref": "nodejs@1.0.0",
    "swatches": [
      {
        "id": "node-green",
        "name": "Node Green",
        "value": "#5FA04E",
        "description": "Primary brand color — the hexagon mark fill, post-2024 refresh. Source: nodejs.org current logo / simple-icons.\n",
        "aliases": []
      },
      {
        "id": "node-green-classic",
        "name": "Node Green Classic",
        "value": "#339933",
        "description": "Historic Node Green used in earlier marks and still common across badges and community materials. Preserved for legacy surfaces.\n",
        "aliases": []
      },
      {
        "id": "node-green-foundation",
        "name": "Node Green Foundation",
        "value": "#68A063",
        "description": "Node Green as published in the original Foundation Visual Identity Guidelines PDF. PANTONE 7741 C.\n",
        "aliases": []
      },
      {
        "id": "node-dark-green",
        "name": "Node Dark Green",
        "value": "#006837",
        "description": "Deep green used for hover states and shadowed accents per the Foundation guidelines. PANTONE 361 C (approx).\n",
        "aliases": []
      },
      {
        "id": "node-light-green",
        "name": "Node Light Green",
        "value": "#39B54A",
        "description": "Lighter green used for highlights per the Foundation guidelines. PANTONE 360 C (approx).\n",
        "aliases": []
      },
      {
        "id": "node-black",
        "name": "Node Black",
        "value": "#000000",
        "description": "Pure black per Foundation guidelines.",
        "aliases": []
      },
      {
        "id": "node-charcoal",
        "name": "Node Charcoal",
        "value": "#1C1C1C",
        "description": "Dark-mode page canvas (brand-atoms inversion).",
        "aliases": []
      },
      {
        "id": "node-gray",
        "name": "Node Gray",
        "value": "#666666",
        "description": "Mid neutral.",
        "aliases": []
      },
      {
        "id": "node-light-gray",
        "name": "Node Light Gray",
        "value": "#D5D5D5",
        "description": "Hairline borders.",
        "aliases": []
      },
      {
        "id": "node-off-white",
        "name": "Node Off-White",
        "value": "#F4F4F4",
        "description": "Subtle layered surface.",
        "aliases": []
      },
      {
        "id": "node-white",
        "name": "Node White",
        "value": "#FFFFFF",
        "description": "Page canvas in light mode.",
        "aliases": []
      }
    ],
    "modes": {
      "light": {
        "roles": {
          "background": "node-white",
          "surface": "node-off-white",
          "surface-elevated": "node-white",
          "text-primary": "node-black",
          "text-secondary": "node-gray",
          "text-tertiary": "node-dark-green",
          "primary": "node-green",
          "primary-hover": "node-dark-green",
          "accent": "node-light-green",
          "accent-hover": "node-green",
          "warning": "node-light-green",
          "warning-hover": "node-green",
          "error": "node-dark-green",
          "success": "node-green"
        }
      },
      "dark": {
        "roles": {
          "background": "node-charcoal",
          "surface": "node-black",
          "surface-elevated": "node-charcoal",
          "text-primary": "node-white",
          "text-secondary": "node-light-gray",
          "text-tertiary": "node-light-green",
          "primary": "node-light-green",
          "primary-hover": "node-green",
          "accent": "node-green",
          "accent-hover": "node-light-green",
          "warning": "node-light-green",
          "warning-hover": "node-green",
          "error": "node-dark-green",
          "success": "node-green"
        }
      }
    }
  },
  "fonts": [
    {
      "role": "heading",
      "ref": "inter@1.0.0",
      "family": "Inter",
      "classification": "sans-serif",
      "source": {
        "kind": "google-fonts",
        "family": "Inter",
        "url": "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"
      },
      "fallbackStack": [
        "-apple-system",
        "BlinkMacSystemFont",
        "Segoe UI",
        "Roboto",
        "Helvetica Neue",
        "Arial",
        "sans-serif"
      ],
      "availableStyles": [
        {
          "weight": 100,
          "style": "normal"
        },
        {
          "weight": 100,
          "style": "italic"
        },
        {
          "weight": 200,
          "style": "normal"
        },
        {
          "weight": 200,
          "style": "italic"
        },
        {
          "weight": 300,
          "style": "normal"
        },
        {
          "weight": 300,
          "style": "italic"
        },
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "italic"
        },
        {
          "weight": 500,
          "style": "normal"
        },
        {
          "weight": 500,
          "style": "italic"
        },
        {
          "weight": 600,
          "style": "normal"
        },
        {
          "weight": 600,
          "style": "italic"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "italic"
        },
        {
          "weight": 800,
          "style": "normal"
        },
        {
          "weight": 800,
          "style": "italic"
        },
        {
          "weight": 900,
          "style": "normal"
        },
        {
          "weight": 900,
          "style": "italic"
        }
      ]
    },
    {
      "role": "body",
      "ref": "inter@1.0.0",
      "family": "Inter",
      "classification": "sans-serif",
      "source": {
        "kind": "google-fonts",
        "family": "Inter",
        "url": "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"
      },
      "fallbackStack": [
        "-apple-system",
        "BlinkMacSystemFont",
        "Segoe UI",
        "Roboto",
        "Helvetica Neue",
        "Arial",
        "sans-serif"
      ],
      "availableStyles": [
        {
          "weight": 100,
          "style": "normal"
        },
        {
          "weight": 100,
          "style": "italic"
        },
        {
          "weight": 200,
          "style": "normal"
        },
        {
          "weight": 200,
          "style": "italic"
        },
        {
          "weight": 300,
          "style": "normal"
        },
        {
          "weight": 300,
          "style": "italic"
        },
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "italic"
        },
        {
          "weight": 500,
          "style": "normal"
        },
        {
          "weight": 500,
          "style": "italic"
        },
        {
          "weight": 600,
          "style": "normal"
        },
        {
          "weight": 600,
          "style": "italic"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "italic"
        },
        {
          "weight": 800,
          "style": "normal"
        },
        {
          "weight": 800,
          "style": "italic"
        },
        {
          "weight": 900,
          "style": "normal"
        },
        {
          "weight": 900,
          "style": "italic"
        }
      ]
    },
    {
      "role": "mono",
      "ref": "source-code-pro@1.0.0",
      "family": "Source Code Pro",
      "classification": "monospace",
      "source": {
        "kind": "google-fonts",
        "family": "Source Code Pro",
        "url": "https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,200..900;1,200..900&display=swap"
      },
      "fallbackStack": [
        "ui-monospace",
        "SFMono-Regular",
        "Menlo",
        "Consolas",
        "Liberation Mono",
        "monospace"
      ],
      "availableStyles": [
        {
          "weight": 200,
          "style": "normal"
        },
        {
          "weight": 200,
          "style": "italic"
        },
        {
          "weight": 300,
          "style": "normal"
        },
        {
          "weight": 300,
          "style": "italic"
        },
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "italic"
        },
        {
          "weight": 500,
          "style": "normal"
        },
        {
          "weight": 500,
          "style": "italic"
        },
        {
          "weight": 600,
          "style": "normal"
        },
        {
          "weight": 600,
          "style": "italic"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "italic"
        },
        {
          "weight": 800,
          "style": "normal"
        },
        {
          "weight": 800,
          "style": "italic"
        },
        {
          "weight": 900,
          "style": "normal"
        },
        {
          "weight": 900,
          "style": "italic"
        }
      ]
    }
  ],
  "roles": {
    "colors": {
      "identity": "node-green",
      "on-identity": "node-white",
      "primary": "node-green",
      "primary-hover": "node-dark-green",
      "accent": "node-light-green",
      "accent-hover": "node-green",
      "background": "node-white",
      "surface": "node-off-white",
      "text-primary": "node-black",
      "text-secondary": "node-gray"
    },
    "typography": {
      "display": "heading",
      "prose": "body",
      "code": "mono"
    }
  },
  "assets": [],
  "rules": [
    {
      "type": "forbiddenTreatment",
      "target": "logo",
      "severity": "error",
      "rationale": "The Node.js hexagon mark is the brand's signature shape; altering its geometry, gradient-filling it, or recoloring it outside the documented green range violates the Foundation Visual Identity Guidelines.\n",
      "treatments": [
        "hexagon-shape-modified",
        "stretched",
        "rotated",
        "recolored",
        "gradient-fill",
        "drop-shadow",
        "on-busy-photo"
      ]
    },
    {
      "type": "colorChoice",
      "target": "roles.colors.identity",
      "severity": "warning",
      "rationale": "Node.js maintains three legitimate \"Node Green\" values — the post-2024 refresh (#5FA04E), the historic mark (#339933), and the Foundation PDF (#68A063). Light Green and Dark Green are supporting tones from the Foundation Guidelines and must not stand in as the primary mark fill.\n",
      "allowed": [
        "node-green",
        "node-green-classic",
        "node-green-foundation"
      ],
      "forbidden": [
        "node-light-green",
        "node-dark-green"
      ]
    },
    {
      "type": "variantSelection",
      "target": "roles.colors.identity",
      "severity": "warning",
      "rationale": "The current published Node.js mark (post-2024 refresh) uses #5FA04E. Choose this value for net-new surfaces; preserve #339933 only when matching legacy badges or community-distributed assets.\n",
      "when": {
        "mode": "current"
      },
      "use": "node-green"
    },
    {
      "type": "contrastRatio",
      "target": "text-primary",
      "severity": "error",
      "rationale": "Black on White exceeds 21:1 — well above the WCAG AA threshold for body text. The Foundation Guidelines designate Black as the canonical body-text color on White.\n",
      "against": "background",
      "minRatio": 4.5,
      "standard": "WCAG-AA"
    },
    {
      "type": "contrastRatio",
      "target": "roles.colors.primary",
      "severity": "warning",
      "rationale": "Node Green (#5FA04E) on White sits around 3.4:1 — clears AA-large for headlines but does NOT clear AA for body text. Reserve Node Green for large display, mark fills, and accents; use Node Dark Green (#006837) for body-text-weight foreground.\n",
      "against": "background",
      "minRatio": 3,
      "standard": "WCAG-AA-large"
    },
    {
      "type": "fontPairing",
      "target": "typography.heading",
      "severity": "recommendation",
      "rationale": "nodejs.org uses a single humanist sans for heading and body. Maintain at least a 1.5× heading-to-body ratio to preserve hierarchy.\n",
      "requires": "body",
      "minSizeRatio": 1.5
    },
    {
      "type": "accessibilityRequirement",
      "target": "*",
      "severity": "error",
      "rationale": "WCAG 2.1 Success Criterion 1.4.3 (Contrast Minimum) — Level AA. Node.js's Foundation Guidelines pair Node Green with Black and White to satisfy AA; consumers must not derive intermediate stops that defeat that property.\n",
      "standard": "WCAG-AA",
      "criterion": "1.4.3"
    },
    {
      "type": "compositionConstraint",
      "target": "roles.colors.identity",
      "severity": "recommendation",
      "rationale": "The Foundation Guidelines pair Node Green canonically with Black and White; Dark Green appears for shadowed mark variants. Other pairings depart from the documented identity.\n",
      "pairsWith": [
        "node-black",
        "node-white",
        "node-dark-green"
      ]
    },
    {
      "type": "contextRestriction",
      "target": "trademark.use",
      "severity": "error",
      "rationale": "The OpenJS Foundation Trademark Policy forbids product names that imply OpenJS or Node.js endorsement. Use the mark to indicate compatibility, not as part of a product identity.\n",
      "forbiddenContexts": [
        "product-name-prefix",
        "implied-endorsement"
      ]
    }
  ]
}
