{"id":18243784,"url":"https://github.com/jalyna/oakdex-pokedex","last_synced_at":"2026-03-04T05:31:20.016Z","repository":{"id":48446547,"uuid":"83232921","full_name":"jalyna/oakdex-pokedex","owner":"jalyna","description":"Ruby Gem and Node Package for comprehensive Generation 1-7 Pokedex data, including 809 Pokémon, uses JSON schemas to verify the data","archived":false,"fork":false,"pushed_at":"2021-07-26T04:15:01.000Z","size":10926,"stargazers_count":56,"open_issues_count":16,"forks_count":11,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-28T19:21:59.131Z","etag":null,"topics":["json","json-schema","nodejs","pokedex","pokemon","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jalyna.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"MIT-LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-02-26T19:02:12.000Z","updated_at":"2025-10-04T03:13:00.000Z","dependencies_parsed_at":"2022-09-05T02:10:10.393Z","dependency_job_id":null,"html_url":"https://github.com/jalyna/oakdex-pokedex","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/jalyna/oakdex-pokedex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jalyna%2Foakdex-pokedex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jalyna%2Foakdex-pokedex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jalyna%2Foakdex-pokedex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jalyna%2Foakdex-pokedex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jalyna","download_url":"https://codeload.github.com/jalyna/oakdex-pokedex/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jalyna%2Foakdex-pokedex/sbom","scorecard":{"id":503270,"data":{"date":"2025-08-11","repo":{"name":"github.com/jalyna/oakdex-pokedex","commit":"69a836ff29829cfb26eb8974ae4663e056e62a77"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/20 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: MIT-LICENSE:0","Info: FSF or OSI recognized license: MIT License: MIT-LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-19T22:34:06.392Z","repository_id":48446547,"created_at":"2025-08-19T22:34:06.392Z","updated_at":"2025-08-19T22:34:06.392Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30072491,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T05:13:31.218Z","status":"ssl_error","status_checked_at":"2026-03-04T05:10:24.293Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["json","json-schema","nodejs","pokedex","pokemon","ruby"],"created_at":"2024-11-05T09:03:06.298Z","updated_at":"2026-03-04T05:31:19.986Z","avatar_url":"https://github.com/jalyna.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"https://v20.imgup.net/oakdex_logfbad.png\" alt=\"fixer\" width=282\u003e\n\n[![Gem Version](https://badge.fury.io/rb/oakdex-pokedex.svg)](https://badge.fury.io/rb/oakdex-pokedex) [![npm version](https://badge.fury.io/js/oakdex-pokedex.svg)](https://badge.fury.io/js/oakdex-pokedex) [![Build Status](https://travis-ci.org/jalyna/oakdex-pokedex.svg?branch=master)](https://travis-ci.org/jalyna/oakdex-pokedex) [![Code Climate](https://codeclimate.com/github/jalyna/oakdex-pokedex/badges/gpa.svg)](https://codeclimate.com/github/jalyna/oakdex-pokedex) [![Test Coverage](https://codeclimate.com/github/jalyna/oakdex-pokedex/badges/coverage.svg)](https://codeclimate.com/github/jalyna/oakdex-pokedex/coverage) [![Issue Count](https://codeclimate.com/github/jalyna/oakdex-pokedex/badges/issue_count.svg)](https://codeclimate.com/github/jalyna/oakdex-pokedex)\n\n\n## Getting Started\n\n### Ruby\n\nAdd oakdex to your Gemfile and do `bundle install`:\n\n```ruby\ngem 'oakdex-pokedex'\n```\n\nThen you can use the library:\n\n```ruby\nrequire 'oakdex/pokedex'\n\neevee = Oakdex::Pokedex::Pokemon.find('Eevee')\n# =\u003e #\u003cOakdex::Pokedex::Pokemon:0x007fe3dd6a88f8 @attributes={\"names\"=\u003e{\"fr\"=\u003e\"Évoli\", \"de\"=\u003e\"Evoli\", \"it\"=\u003e\"Eevee\", \"en\"=\u003e\"Eevee\"}, \"national_id\"=\u003e133 ...\u003e\n\nbulbasaur = Oakdex::Pokedex::Pokemon.find(1)\n# =\u003e #\u003cOakdex::Pokedex::Pokemon:0x007fe3dc55da80 @attributes={\"names\"=\u003e{\"fr\"=\u003e\"Bulbizarre\", \"de\"=\u003e\"Bisasam\", ...\u003e\n\nbulbasaur.name\n# =\u003e \"Bulbasaur\"\n\nbulbasaur.name('de')\n# =\u003e \"Bisasam\"\n\nbulbasaur.types\n# =\u003e [\"Grass\", \"Poison\"]\n\nbulbasaur.attributes\n# =\u003e {\"names\"=\u003e{\"fr\"=\u003e\"Bulbizarre\", \"de\"=\u003e\"Bisasam\", \"it\"=\u003e\"Bulbasaur\", \"en\"=\u003e\"Bulbasaur\"}, \"national_id\"=\u003e1, \"types\"=\u003e[\"Grass\", \"Poison\"], \"abilities\"=\u003e[{\"name\"=\u003e\"Overgrow\"}, {\"name\"=\u003e\"Chlorophyll\", \"hidden\"=\u003etrue}], \"gender_ratios\"=\u003e{\"male\"=\u003e87.5, \"female\"=\u003e12.5}, \"catch_rate\"=\u003e45, \"egg_groups\"=...}\n\ntackle = Oakdex::Pokedex::Move.find('Tackle')\n# =\u003e #\u003cOakdex::Pokedex::Move:0x007fbc9a10cda0 @attributes={\"index_number\"=\u003e33, \"pp\"=\u003e35, \"max_pp\"=\u003e56, \"power\"=\u003e50, \"accuracy\"=\u003e100, \"category\"=\u003e\"physical\", \"priority\"=\u003e0, \"target\"=\u003e\"target\", ...\u003e\n\npotion = Oakdex::Pokedex::Item.find('Potion')\n# =\u003e #\u003cOakdex::Pokedex::Item:0x007fd48f1b14b0 @attributes={\"names\"=\u003e{\"en\"=\u003e\"Potion\", \"de\"=\u003e\"Trank\", \"fr\"=\u003e\"Potion, ...\u003e\n\ncontrary = Oakdex::Pokedex::Ability.find('Contrary')\n# =\u003e #\u003cOakdex::Pokedex::Ability:0x007fbc9b033540 @attributes={\"index_number\"=\u003e126, \"names\"=\u003e{\"fr\"=\u003e\"Contestation\", \"de\"=\u003e\"Umkehrung\", \"it\"=\u003e\"Inversione\", \"en\"=\u003e\"Contrary\"}, \"descriptions\"=\u003e{\"en\"=\u003e\"Inverts stat modifiers.\", \"de\"=\u003e\"Attacken, die einen Statuswert des Pokémon erhöhen würden, senken ihn und umgekehrt.\"}}\u003e\n\nfairy = Oakdex::Pokedex::Type.find('Fairy')\n# =\u003e #\u003cOakdex::Pokedex::Type:0x007fbc9a943c30 @attributes={\"names\"=\u003e{\"de\"=\u003e\"Fee\", \"gr\"=\u003e\"νεράιδα Neraida\", \"it\"=\u003e\"Folletto\", \"pl\"=\u003e\"Baśniowy (XY13) Bajkowy (XY46)\", \"en\"=\u003e\"Fairy\"}, \"effectivness\"=\u003e{\"Normal\"=\u003e1.0, \"Fighting\"=\u003e2.0, \"Flying\"=\u003e1.0, \"Poison\"=\u003e0.5, \"Ground\"=\u003e1.0, \"Rock\"=\u003e1.0, \"Bug\"=\u003e1.0, \"Ghost\"=\u003e1.0, \"Steel\"=\u003e0.5, \"Fire\"=\u003e0.5, \"Water\"=\u003e1.0, \"Grass\"=\u003e1.0, \"Electric\"=\u003e1.0, \"Psychic\"=\u003e1.0, \"Ice\"=\u003e1.0, \"Dragon\"=\u003e2.0, \"Dark\"=\u003e2.0, \"Fairy\"=\u003e1.0}, \"color\"=\u003e\"#D685AD\"}\u003e\nfairy.effectivness_for('Dark')\n# =\u003e 2.0\n\nwater1 = Oakdex::Pokedex::EggGroup.find('Water 1')\n# =\u003e #\u003cOakdex::Pokedex::EggGroup:0x007fbc9a853398 @attributes={\"names\"=\u003e{\"en\"=\u003e\"Water 1\", \"jp\"=\u003e\"すいちゅう1 (水中1) Suichū1\", \"fr\"=\u003e\"Eau 1\", \"de\"=\u003e\"Wasser 1\", \"it\"=\u003e\"Acqua 1\", \"es\"=\u003e\"Agua 1\"}}\u003e\n\ngeneration6 = Oakdex::Pokedex::Generation.find('Generation VI')\n# =\u003e #\u003cOakdex::Pokedex::Generation:0x007fbc9b0382c0 @attributes={\"number\"=\u003e6, \"dex_name\"=\u003e\"kalos_id\", \"names\"=\u003e{\"en\"=\u003e\"Generation VI\", \"de\"=\u003e\"Generation VI\"}, \"games\"=\u003e[{\"en\"=\u003e\"X\", \"de\"=\u003e\"X\"}, {\"en\"=\u003e\"Y\", \"de\"=\u003e\"Y\"}, {\"en\"=\u003e\"Omega Ruby\", \"de\"=\u003e\"Omega Rubin\"}, {\"en\"=\u003e\"Alpha Sapphire\", \"de\"=\u003e\"Alpha Saphir\"}]}\u003e\n\nbold = Oakdex::Pokedex::Nature.find('Bold')\n# =\u003e #\u003cOakdex::Pokedex::Nature:0x007fbc9a92b2c0 @attributes={\"names\"=\u003e{\"en\"=\u003e\"Bold\", \"de\"=\u003e\"Kühn\"}, \"increased_stat\"=\u003e\"def\", \"decreased_stat\"=\u003e\"atk\", \"favorite_flavor\"=\u003e\"Sour\", \"disliked_flavor\"=\u003e\"Spicy\"}\u003e\n\n\nOakdex::Pokedex::Pokemon.all.size\n# =\u003e 809\nOakdex::Pokedex::Pokemon.where(type: 'Dark').size\n# =\u003e 46\nOakdex::Pokedex::Pokemon.where(egg_group: 'Human-Like').size\n# =\u003e 52\nOakdex::Pokedex::Pokemon.where(dex: 'alola').size\n# =\u003e 307\nOakdex::Pokedex::Pokemon.where(alola_id: 1)\n# =\u003e [#\u003cOakdex::Pokedex::Pokemon:0x007fbc9e542510 @attributes={\"names\"=\u003e{\"en\"=\u003e\"Rowlet\", \"jp\"=\u003e\"モクロー Mokuroh\", \"fr\"=\u003e\"Brindibou\", \"es\"=\u003e\"Rowlet\", \"de\"=\u003e\"Bauz\", \"it\"=\u003e\"Rowlet\"}, \"national_id\"=\u003e722, \"alola_id\"=\u003e1, ...\u003e]\n\nOakdex::Pokedex::Move.where(type: 'Ground').size\n# =\u003e 26\n\nOakdex::Pokedex::Item.all.size\n# =\u003e 69, still WIP\n\nOakdex::Pokedex::Item.where(category: 'Potion').size\n# =\u003e 5\n```\n\n\n### Javascript\n\nInstall the package:\n\n```\n$ npm install oakdex-pokedex --save\n```\n\nThen you can use the library:\n\n```js\noakdexPokedex = require('oakdex-pokedex');\n\nconst eevee = oakdexPokedex.findPokemon('Eevee')\n// returns data/pokemon/eevee.json\nconsole.log(eevee.names.en); // Eeevee\n\nconst charmander = oakdexPokedex.findPokemon(4)\n// returns data/pokemon/charmander.json\nconsole.log(charmander.names.en); // Charmander\n\nconst tackle = oakdexPokedex.findMove('Tackle')\n// returns data/move/tackle.json\nconsole.log(m.names.en); // Tackle\n\nconst potion = oakdexPokedex.findItem('Potion')\n// returns data/item/potion.json\nconsole.log(m.names.en); // Potion\n\nconst contrary = oakdexPokedex.findAbility('Contrary')\n// returns data/ability/contrary.json\nconsole.log(a.names.en); // Contrary\n\nconst fairy = oakdexPokedex.findType('Fairy')\n// returns data/type/fairy.json\nconsole.log(fairy.names.en); // Fairy\n\nconst water1 = oakdexPokedex.findEggGroup('Water 1')\n// returns data/egg_group/water_1.json\nconsole.log(water1.names.en); // Water 1\n\nconst genVI = oakdexPokedex.findGeneration('Generation VI')\n// returns data/generation/6.json\nconsole.log(genVI.names.en); // Generation VI\n\nconst bold = oakdexPokedex.findNature('Bold')\n// returns data/nature/bold.json\nconsole.log(bold.names.en); // Bold\n\nconst allPokemon = oakdexPokedex.allPokemon()\nconsole.log(allPokemon.length); // 809\n\nconst allItems = oakdexPokedex.allItems()\nconsole.log(allItems.length); // 69, WIP\n\nconst darkPokemon = oakdexPokedex.allPokemon({ type: 'Dark' })\nconsole.log(darkPokemon.length); // 46\n\nconst humanLike = oakdexPokedex.allPokemon({ egg_group: 'Human-Like' })\nconsole.log(humanLike.length); // 52\n\nconst alola = oakdexPokedex.allPokemon({ dex: 'alola' })\nconsole.log(alola.length); // 302\n\nconst moves = oakdexPokedex.allMoves({ type: 'Ground' })\nconsole.log(moves.length); // 26\n```\n\n\n### Add custom Pokemon / Fakemon\n\nYou can add your own Pokémon and it will be checked if it is valid. You can and should add them as a batch as evolutions need to present at the same time.\n\nFakemon need to have a national_id that is greater than 10000.\n\nCheckout [the fakemon examples](fixtures).\n\n```rb\nfakemon_stage1 = File.read('my_fakemon1.json')\nfakemon_stage2 = File.read('my_fakemon2.json')\n\nOakdex::Pokedex::Pokemon.import!([fakemon_stage1, fakemon_stage2])\n\nOakdex::Pokedex::Pokemon.find('My Fakemon')\n```\n\n```js\nfakemonStage1 = fs.readFileSync('./fixtures/my_fakemon1.json', 'utf8')\nfakemonStage2 = fs.readFileSync('./fixtures/my_fakemon2.json', 'utf8')\n\noakdexPokedex.importPokemon([fakemonStage1, fakemonStage2])\n\noakdexPokedex.findPokemon('My Fakemon')\n```\n\n\n### Schemas\n\nIf you want to know what the structure of the given data is, checkout the following documentations:\n\n- [Pokemon](doc/pokemon.md)\n- [Item](doc/item.md)\n- [Move](doc/move.md)\n- [Ability](doc/ability.md)\n- [Type](doc/type.md)\n- [Egg Group](doc/egg_group.md)\n- [Nature](doc/nature.md)\n- [Generation](doc/generation.md)\n- [Region](doc/region.md)\n\n\n### Sprites\n\nIf you want also to include sprites in your pokedex, check out [oakdex-pokedex-sprites](https://github.com/jalyna/oakdex-pokedex-sprites).\n\n## Contributing\n\nI would be happy if you want to add your contribution to the project. In order to contribute, you just have to fork this repository.\n\nPlease respect the [Code of Conduct](//github.com/jalyna/oakdex-pokedex/blob/master/CODE_OF_CONDUCT.md).\n\n### Minify json files before releasing new version:\n\n```\n$ rake compress_data:run\n```\n\n## License\n\nMIT License. See the included MIT-LICENSE file.\n\n## Credits\n\nLogo Icon by [Roundicons Freebies](http://www.flaticon.com/authors/roundicons-freebies).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjalyna%2Foakdex-pokedex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjalyna%2Foakdex-pokedex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjalyna%2Foakdex-pokedex/lists"}