{
  "schema": "tesign-radar/item/1",
  "generated_at": "2026-09-17T01:56:13.055Z",
  "lang": "en",
  "slug": "nurb",
  "url": "https://tesign.com/en/item/nurb/",
  "alternates": {
    "ko": {
      "html": "https://tesign.com/item/nurb/",
      "json": "https://tesign.com/item/nurb/index.json",
      "markdown": "https://tesign.com/item/nurb/index.md"
    },
    "en": {
      "html": "https://tesign.com/en/item/nurb/",
      "json": "https://tesign.com/en/item/nurb/index.json",
      "markdown": "https://tesign.com/en/item/nurb/index.md"
    }
  },
  "name": "nurb",
  "use_label": "Describe-it CAD for 3D printing",
  "one_liner": "Describe a part in words; AI models a real CAD solid, checks printability, exports a 3MF.",
  "text": {
    "why": "A nurb part is not a mesh but a true B-rep solid on the OCCT kernel (via build123d), so chamfers and fillets are real operations and STEP export opens in Fusion or FreeCAD. Because the AI cannot see, `nurb check` runs thirteen printability rules — overhangs, thin walls, floating regions, warp risk and more — against the exact solid and pins each finding to the face it fired on. It runs locally with the AI subscription you already have, with no account or cloud.",
    "take": "The bottleneck in AI CAD is not modelling but knowing whether it will print, and nurb turns that check into a tool.",
    "build": [
      "Set up a personal workflow where you measure a hose adapter or shelf bracket and order it in words, or put `nurb check --strict` in CI to gate a parametric parts library on printability."
    ],
    "who": [
      {
        "role": "Makers with a 3D printer",
        "situation": "design and print custom parts by describing them"
      },
      {
        "role": "Hobbyists who never learned CAD",
        "situation": "adjust dimensions with sliders and print variants"
      },
      {
        "role": "Developers using AI agents",
        "situation": "keep parts as Python functions and build, check and export from the CLI"
      }
    ],
    "start": [
      {
        "command": false,
        "text": "Mac app: download nurb.dmg (Apple silicon) or nurb-intel.dmg from GitHub Releases"
      },
      {
        "command": false,
        "text": "curl -fsSL https://nurb.dev/install.sh | sh   # one-line install (uv, nurb and the agent skill)"
      },
      {
        "command": false,
        "text": "# or: uv tool install nurb   (or pip install nurb) — then add the skill separately with the next line"
      },
      {
        "command": false,
        "text": "npx skills add shpigford/nurb --skill nurb   # installs the agent skill"
      },
      {
        "command": false,
        "text": "nurb update   # upgrades nurb and the installed agent skill together"
      }
    ],
    "caveat": [
      "Licence is FSL-1.1-MIT (confirmed from the LICENSE file): source-available for any purpose except building a competing product, converting to MIT two years after each release. It is not a conventional open-source licence, so read the terms before commercial use. The first build takes about 45 seconds while the CAD kernel loads; `nurb slice` needs OrcaSlicer or Bambu Studio installed; only `nurb render` needs a browser (Playwright chromium). Support for platforms other than the Mac app is [확인 필요]. Free; you supply your own AI subscription."
    ]
  },
  "cta": {
    "type": "install",
    "label": "INSTALL",
    "url": "https://nurb.dev/"
  },
  "ready": "install",
  "categories": [
    "hardware",
    "ai"
  ],
  "categories_confirmed": true,
  "tags": [
    "3d-printing",
    "cad",
    "ai-agent",
    "occt",
    "python",
    "cli"
  ],
  "platform": [
    "macos",
    "cli"
  ],
  "license": {
    "spdx": null,
    "scope": "unknown",
    "scope_text": "Unconfirmed — check before use.",
    "url": "https://github.com/shpigford/nurb?tab=License-1-ov-file",
    "note": null,
    "open_source": null
  },
  "language": "Python",
  "source_urls": {
    "canonical": "https://nurb.dev/",
    "github": "https://github.com/shpigford/nurb",
    "huggingface": null,
    "app_store": null,
    "sightings": [
      {
        "source": "showhn",
        "url": "https://github.com/Shpigford/nurb",
        "posted_at": "2026-07-29T19:46:24.000Z",
        "hn_url": "https://news.ycombinator.com/item?id=49102100"
      }
    ]
  },
  "numbers": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "stars": 539,
    "stars_unit": "GitHub stars",
    "stars_checked_at": "2026-09-15T19:35:29.303Z",
    "stars_observed_since_check": 0,
    "star_delta_24h": null,
    "star_delta_7d": null,
    "star_delta_30d": null,
    "star_delta_unit": "GitHub stars gained in the window, GH Archive events summed to as_of",
    "spark_14d": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ],
    "hf_likes": null,
    "hf_likes_observed_at": null,
    "hn_points": 2,
    "hn_points_observed_at": "2026-09-13T14:48:48.921Z",
    "store": null,
    "method": "Star total = the value last checked on GitHub (stars_checked_at) + increases observed via GH Archive since. The 24h · 7d · 30d gains are GH Archive hourly events summed to the reference time (as_of). No score of ours."
  },
  "ranks": null,
  "activity": {
    "pushed_at": "2026-09-05T11:41:55.000Z",
    "owner_type": "User",
    "open_issues": 12,
    "contributors": 11,
    "releases_count": 37,
    "latest_release": {
      "tag": "v0.26.0",
      "published_at": "2026-09-05T11:41:55.000Z",
      "prerelease": false
    },
    "checked_at": "2026-09-15T19:35:29.303Z",
    "core_checked_at": "2026-09-15T19:35:29.303Z"
  },
  "signals": [
    {
      "kind": "back",
      "label": "BACK CATALOG",
      "value": null
    }
  ],
  "images": {
    "og": "https://tesign.com/img/nurb-77b79fad3b.png",
    "cover": "https://tesign.com/img/nurb-77b79fad3b.png",
    "cover_width": 3218,
    "cover_height": 1900,
    "gallery": [
      "https://tesign.com/img/nurb-77b79fad3b.png",
      "https://tesign.com/img/nurb-0c67d8c9bd.png"
    ],
    "alt": "The nurb app: project rail, agent chat, and the live 3D viewer showing a part",
    "tier": 2
  },
  "dates": {
    "first_seen_at": "2026-09-13T14:48:48.921Z",
    "source_created_at": "2026-07-29T19:46:24.000Z",
    "discovery_hours": 1099.0402558333333,
    "launch_signal_at": "2026-07-29T19:46:24.000Z",
    "kept_at": "2026-09-14T19:27:43.560Z",
    "first_published_at": "2026-09-14T19:27:43.743Z",
    "updated_at": "2026-09-15T04:36:56.916Z",
    "ingestion_mode": "backfill"
  },
  "notes": [
    "This file was produced by the same build, from the same data, as the tesign.com item page. The text is editorial; the numbers are stored observations.",
    "null in the JSON means not observed — never zero. The Markdown writes [unconfirmed] for it.",
    "Star total = the value last checked on GitHub (stars_checked_at) + increases observed via GH Archive since. The 24h · 7d · 30d gains are GH Archive hourly events summed to the reference time (as_of). No score of ours.",
    "Reconstructed from archive data, not a live discovery.",
    "A summary, not legal advice."
  ]
}
