This repo catalogs links and metadata for free (preferably commercially usable) game assets and related tools. It does not host binary asset dumps.
Please follow the Code of Conduct.
- Asset libraries, packs, and aggregators with a clear free tier
- Tools useful for creating or processing game assets
- Free engine add-ons / plugins that materially help asset or production pipelines (e.g. Godot Asset Library tools)
- Engines only when they ship substantial free asset libraries
- Paid-only marketplaces with no free content worth listing
- Broken, abandoned, or license-unclear sources (use
status: needs-reviewor open an issue) - Redistributed ZIP/GLB/WAV files of third-party work
- Assets that are free only for non-commercial / personal use (unless clearly tagged
commercial: false) - GTA V / RDR2 extracts, FiveM MLO leaks, Tebex reuploads, and anonymous
fivem-propsdumps (seedocs/fivem.mdanddocs/high-risk.md)
The website rebuilds from frontmatter on deploy. Node 22 or newer is all you need; there are no dependencies to install.
- Run
node site/new-entry.mjs <category> <id>(ornpm run new-entry -- <category> <id>). It copiescatalog/TEMPLATE.mdtocatalog/<category>/<id>.mdwith the id, category and today's date filled in, and refuses an id already used anywhere in the catalog. Use a short kebab-caseid; a mixed kit already listed in another category is a duplicate, not a second entry. - Verify the license on the live source page the day you submit, and fill every frontmatter field from it (rules below). Prefer primary URLs over mirror/aggregator pages.
- Write the body: a one-paragraph summary,
## Notes, and## Evidencewith a dated line quoting the source, such as- Live page (2026-09-25): "Free for commercial use". Every Evidence section needs at least one date, andverifiedmay not be newer than the newest one. The scaffold starts atstatus: needs-review; setactiveonce the licence, the commercial stance and the credit requirement are all settled. - Add a row to the matching category
README.md. This is required: the validator fails an entry that is not listed there, and the row's licence cell must match your frontmatter. - Run
node site/sync-counts.mjs(npm run counts). It updates every place the repo restates the entry count: both category count tables, the README badge and "Browse N sources" line, andexpectedEntryCountinsite/config.json. - Run
npm run check: the check tests,node site/validate.mjsandnode site/build.mjs, all of which must pass. The build renders your entry's page and fails if the body uses markdown the site does not support (tables, code fences, blockquotes, images, raw HTML,###headings, numbered lists) or links to a file that does not exist. - Optional: add the
idtosite/config.json→featuredto pin it under Safe starting points.
To add a starter stack (one pick per need for a kind of game), follow stacks/README.md.
license: the source's licence, written as one of the values insite/license-vocabulary.json(e.g.CC0,CC-BY-3.0,SIL OFL,GPL-3.0-or-later,custom,varies). If the source uses a licence the vocabulary lacks, add it there first, with its SPDX mapping and attribution class. For GPL, record-onlyor-or-lateronly when the project itself says which; otherwise use the bareGPL-2.0orGPL-3.0.license_spdx: the SPDX identifier the vocabulary maps yourlicenseto. The validator rejects a missing one when a mapping exists, and an invented one when it does not.commercial:true/false/unknown/varies. Usevariesfor aggregators where some files are commercial-ok and others are not. The site still shows these under Commercial OK, labeled per-file review, so they are not silently excluded and not silently treated as a blanket grant.attribution_required:true/false/unknown. If the licence normally requires credit (CC-BY) but the publisher waives it, setfalseand add a- Attribution waived:line in Notes saying so.attribution_string: the copy-paste credit line. Required whenattribution_requiredistrue; optional otherwise.publisher: optional. Name the rights-holding publisher, never the host. Set it whenever that publisher has more than one catalog entry, so the entries group; setting it on a publisher that currently has only one entry is also fine and saves a backfill later. Do not set it to a generic host or distributor (GitHub, Hugging Face, itch.io, OpenGameArt, the Internet Archive, Google Fonts) or to a distributor that does not hold the rights. Distinguish sibling organisations that are genuinely different rights holders:blender.md(the application, Blender Foundation) carries nopublisher, while the asset bundles understudio.blender.orgcarryBlender Studio. Kenney, Quaternius, KayKit, LuizMelo, 0x72, Blender Studio, Material Maker, Alif Type, GGBotNet and 3dmodelscc0 are the largest groups in use today; treat that as illustrative, not as the permitted set.subcategories: lower-case kebab-case (base-meshes,field-recordings). Reuse a value already in the catalog before inventing one, and do not add a variant of an existing value that differs only in plural or spelling. Where both forms were in use, the more common one was kept (characters,environment,interior,tileset,vectors,pixel,impulse-responses,base-meshes). Retired spellings are listed insite/value-aliases.json, which the validator enforces (V19); add a line there when you merge two values.formats: what you actually get, in one of four kinds. File formats, as commonly written: usually upper case (PNG,FBX,JSON,VOX), tool-specific ones as the tool writes them (gdshader,tmx,ktx2). Engine or language targets, as the product writes them (glTF,Godot,Unity,Python,React). Delivery types for software with no file format of its own, lower-case kebab-case (godot-addon,blender-extension,npm,cli,library,desktop-app,mobile-app,middleware,model). Andvariousfor an aggregator whose files come in too many formats to list. Platforms (windows,macos,ios) and descriptions (heightfield,examples) aretags, not formats. The allowed values are the closed list insite/format-vocabulary.json, which the validator enforces (V20): reuse a listed spelling, and add a genuinely new format there in the same change that first uses it. Itsgroupsdrive the site's Format filter, so a new format that belongs to a group (another glTF or font container) goes into that group too.tags: lower-case kebab-case words describing the content (low-poly,modular,platformer). Do not restate another field: the licence (cc0,mit,ofl,open-source,royalty-free), the credit requirement (no-attribution) or the entry's ownpublisher(kenney) are rejected (V19 viasite/value-aliases.json, V21), because search and the filters read those fields directly and a copied tag drifts. Avariesentry lists its licence mix in the body, not in tags.- Frontmatter is one
key: valueper line; lists are[a, b]or indented- itemlines. A key given twice is an error. Entry files may not contain emoji. grid_dimensions/camera_perspective/hardware_tags: optional metadata for 2D and UI entries.3dandcharactersentries leavecamera_perspectiveout: it describes a 2D camera, and those entries have none.maintenance: optional,archived|inactive(V22). Setarchivedwhen the source repository is archived, andinactivewhen it has had no push for over three years, with a dated- Maintenance:line in Notes saying what you read. Leave it out otherwise. The weekly link check reports a GitHub source whose state no longer matches.url: anhttps://address (http://only where the source has no https). Other schemes are rejected.verified: ISO date (YYYY-MM-DD) of your last license check. It must be a real date, no later than tomorrow in UTC, and no newer than the newest date in## Evidence(V8): a newverifieddate needs a new dated Evidence line from the same check. Dates inside URLs do not count as Evidence dates.status:active|needs-review|deprecated. Adeprecatedentry needs a- Deprecated:line in its body giving the reason (V9).activemeans the licence, the commercial stance and the credit requirement are all settled: anunknowninlicense,commercialorattribution_requiredkeeps an entry atneeds-review. The validator enforces this (V14), and rejectsformats,subcategoriesortagsvalues that differ only by case, punctuation or a trailing "s" from one already in use (V13).
- License text or badge visible on the source
- Commercial use explicitly allowed (or marked false) — free download ≠ commercial
- Interactive/game use confirmed, not just "commercial use" in the abstract (see
docs/game-vs-video-licensing.md) - Attribution / share-alike / NC / ND flags recorded
- Marketplace EULA checked if Unity/Fab/Unreal/itch
- Supplier looks reputable (not an anonymous laundering risk — see
docs/provenance.md) - Not on the
docs/high-risk.mdblocklist (MB-Lab, default Shadertoy, ND music, Unity Companion, GTA/FiveM rips, etc.) - Entry does not claim rights we don’t have
- Tool entries distinguish software license from exported asset ownership
Local Gemini / deep-research drafts live under RESEARCH/ as R0N-<topic>.md (mostly gitignored; see docs/research-index.md). Promote durable findings into catalog entries and docs/ — don’t rely on drafts as the public source of truth.