{"id":653,"name":null,"description":"Embed the V8 Javascript Interpreter into Ruby","url":"https://github.com/rubyjs/therubyracer","last_synced_at":"2026-04-30T01:30:17.822Z","repository":{"id":680379,"uuid":"324134","full_name":"rubyjs/therubyracer","owner":"rubyjs","description":"Embed the V8 Javascript Interpreter into Ruby","archived":true,"fork":false,"pushed_at":"2023-12-04T13:55:10.000Z","size":16891,"stargazers_count":1655,"open_issues_count":20,"forks_count":193,"subscribers_count":34,"default_branch":"master","last_synced_at":"2026-04-28T09:44:04.623Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rubyjs.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2009-10-02T02:18:03.000Z","updated_at":"2026-04-10T06:14:56.000Z","dependencies_parsed_at":"2024-06-18T11:01:25.272Z","dependency_job_id":"887d8c94-3cc9-4a8e-bcf1-fbb1b17eea4b","html_url":"https://github.com/rubyjs/therubyracer","commit_stats":{"total_commits":857,"total_committers":34,"mean_commits":"25.205882352941178","dds":"0.10151691948658115","last_synced_commit":"fe285637b4e7b970244659d21833f8e3ddb1d465"},"previous_names":["cowboyd/therubyracer"],"tags_count":71,"template":false,"template_full_name":null,"purl":"pkg:github/rubyjs/therubyracer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyjs%2Ftherubyracer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyjs%2Ftherubyracer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyjs%2Ftherubyracer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyjs%2Ftherubyracer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rubyjs","download_url":"https://codeload.github.com/rubyjs/therubyracer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyjs%2Ftherubyracer/sbom","scorecard":{"id":306278,"data":{"date":"2025-08-11","repo":{"name":"github.com/rubyjs/therubyracer","commit":"125eee3bd1148eb1318a82de7bc74307e53a195a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"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":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":3,"reason":"Found 8/22 approved changesets -- score normalized to 3","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":"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":"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"}},{"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":"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":"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":"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":"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":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 16 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"}}]},"last_synced_at":"2025-08-17T22:08:01.264Z","repository_id":680379,"created_at":"2025-08-17T22:08:01.264Z","updated_at":"2025-08-17T22:08:01.264Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32405903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T19:38:08.556Z","status":"ssl_error","status_checked_at":"2026-04-28T19:37:55.688Z","response_time":56,"last_error":"SSL_read: 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"}},"owner":{"login":"rubyjs","name":"rubyjs","uuid":"2748558","kind":"organization","description":"","email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/2748558?v=4","repositories_count":7,"last_synced_at":"2024-03-25T20:03:02.054Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/rubyjs","funding_links":[],"total_stars":2691,"followers":5,"following":0,"created_at":"2022-11-02T16:23:31.738Z","updated_at":"2024-03-25T20:03:02.070Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rubyjs","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rubyjs/repositories"},"packages":[],"commits":{"id":3466,"full_name":"rubyjs/therubyracer","default_branch":"master","total_commits":858,"total_committers":34,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":25.235294117647058,"dds":0.09324009324009319,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-04-27T21:38:35.927Z","last_synced_commit":"125eee3bd1148eb1318a82de7bc74307e53a195a","created_at":"2023-03-07T09:17:51.996Z","updated_at":"2026-04-27T21:38:25.875Z","committers":[{"name":"Charles Lowell","email":"cowboyd@thefrontside.net","login":"cowboyd","count":778},{"name":"Bill Robertson","email":"billrobertson42@gmail.com","login":"billrobertson42","count":24},{"name":"Petko Bordjukov","email":"bordjukov@gmail.com","login":"ignisf","count":9},{"name":"Koichi ITO","email":"koic.ito@gmail.com","login":"koic","count":4},{"name":"Sam","email":"sam.saffron@gmail.com","login":"SamSaffron","count":3},{"name":"Sean","email":"sean.fao@gmail.com","login":"senfo","count":3},{"name":"dpree","email":"whiterabbit.init@gmail.com","login":"bsingr","count":3},{"name":"Scott Bronson","email":"brons_github@rinspin.com","login":"bronson","count":3},{"name":"Anton Sidelnikov","email":"ndmeredian@gmail.com","login":"meredian","count":2},{"name":"Jeroen Jacobs","email":"github@jeroenj.be","login":"jeroenj","count":2},{"name":"Jim","email":"jneuendorf","login":"jneuendorf","count":2},{"name":"MSathieu","email":"MSathieu","login":"MSathieu","count":2},{"name":"Logan Lowell","email":"fractaloop@thefrontside.net","login":null,"count":2},{"name":"bill","email":"bill@localhost.localdomain","login":null,"count":1},{"name":"Sonya Green","email":"sonya@github.com","login":null,"count":1},{"name":"Julien Sanchez","email":"julien.sanchez@lim.eu","login":null,"count":1},{"name":"Daniël van de Burgt","email":"daniel [at] daandev [dot] net","login":null,"count":1},{"name":"stuartnkent","email":"stuartnkent@gmail.com","login":"stuartkent14-zz","count":1},{"name":"sachaos","email":"sakataku7@gmail.com","login":"sachaos","count":1},{"name":"nisusam","email":"nishant.samel@gmail.com","login":"nisusam","count":1},{"name":"Will","email":"will@dhappy.org","login":"dysbulic","count":1},{"name":"Vangelis Tsoumenis","email":"kioopi@gmail.com","login":"kioopi","count":1},{"name":"Ulysse Buonomo","email":"buonomo.ulysse@gmail.com","login":"BuonOmo","count":1},{"name":"Salimane Adjao Moustapha","email":"me@salimane.com","login":"salimane","count":1},{"name":"Rodrigo Kochenburger","email":"divoxx@gmail.com","login":"divoxx","count":1},{"name":"Loic Nageleisen","email":"loic.nageleisen@gmail.com","login":"lloeki","count":1},{"name":"KalabiYau","email":"skullzeek@gmail.com","login":"kalabiyau","count":1},{"name":"Jeff Pereira","email":"jeff.r.pereira@gmail.com","login":"jeffpereira","count":1},{"name":"Georgy Angelov","email":"georgyangelov@gmail.com","login":"georgyangelov","count":1},{"name":"David Celis","email":"me@davidcel.is","login":"davidcelis","count":1},{"name":"Dan Rice","email":"dan@zoombody.com","login":"dnrce","count":1},{"name":"Chris Gaffney","email":"gaffneyc@gmail.com","login":"gaffneyc","count":1},{"name":"Chris Farber","email":"chris@chrisfarber.net","login":"chrisfarber","count":1},{"name":"Brad Landers","email":"brad@bradlanders.com","login":"bradland","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyjs%2Ftherubyracer/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-27T00:00:06.983Z","repositories_count":6220425,"commits_count":899865588,"contributors_count":34880034,"owners_count":1146414,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"rubyjs/therubyracer","html_url":"https://github.com/rubyjs/therubyracer","last_synced_at":"2026-04-27T00:00:42.604Z","status":"error","issues_count":110,"pull_requests_count":24,"avg_time_to_close_issue":148205100.8888889,"avg_time_to_close_pull_request":31169769.416666668,"issues_closed_count":99,"pull_requests_closed_count":12,"pull_request_authors_count":18,"issue_authors_count":98,"avg_comments_per_issue":7.4818181818181815,"avg_comments_per_pull_request":3.5416666666666665,"merged_pull_requests_count":7,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-12T18:20:06.173Z","updated_at":"2026-04-27T00:00:42.604Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyjs%2Ftherubyracer","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyjs%2Ftherubyracer/issues","issue_labels_count":{"memory-management":19,"feature":5,"libv8":1,"bug":1},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":103,"COLLABORATOR":5,"CONTRIBUTOR":2},"pull_request_author_associations_count":{"NONE":12,"CONTRIBUTOR":8,"COLLABORATOR":4},"issue_authors":{"cowboyd":4,"Sega100500":3,"palfvin":3,"seanmakesgames":2,"wycats":2,"denisdefreyne":2,"alexkwolfe":2,"ghost":2,"SamSaffron":1,"snuggs":1,"BenTalagan":1,"bestony":1,"Roger-Tong":1,"karlentwistle":1,"Hax4us":1,"lucas-clemente":1,"dparnell":1,"superandrew":1,"Star0dubtsev":1,"georgiypl":1,"MassMadankumar":1,"purecreative":1,"voxik":1,"james-ai":1,"raquelhortab":1,"jfirebaugh":1,"arifb":1,"PhilCoggins":1,"ryancheung":1,"xlwindlx":1,"papilip":1,"dlangille":1,"atwoodjw":1,"Geesu":1,"Bkahler":1,"alsoscotland":1,"kzaitsev":1,"bhushangahire":1,"abscondment":1,"coldnebo":1,"rien":1,"dapiam":1,"rainkinz":1,"sergeych":1,"benson-basis":1,"rhertzog":1,"retorquere":1,"lloeki":1,"alejandroldev":1,"idoo":1,"astropanic":1,"dinhtuan1991vt":1,"AryeShemesh":1,"wr0ngway":1,"jasonlynes":1,"sleekweasel":1,"Hostert":1,"kdisneur":1,"koops":1,"pikajude":1,"victorteokw":1,"ATL-Flaneur":1,"bogdan":1,"h0i":1,"vipin04":1,"0xdevalias":1,"ignisf":1,"hlascelles":1,"jvenezia":1,"ibotty":1,"scott-knight":1,"itkin":1,"simcookies":1,"envygeeks":1,"ollie":1,"luisincrespo":1,"etolstoy":1,"anandraj007":1,"jeyb":1,"matkoniecz":1,"paulschreiber":1,"tirdadc":1,"bugstersolving":1,"acrlewis":1,"tagliala":1,"dudleysr":1,"blshkv":1,"bjm88":1,"dojutsu-user":1,"coding-bunny":1,"tgmerritt":1,"cstrahan":1,"michaelbaisch":1,"tscolari":1,"EverybodyKurts":1,"rogsmith":1,"ahuigo":1,"morandanieli":1},"pull_request_authors":{"cowboyd":3,"koic":3,"wk8":2,"stereobooster":2,"TikiTDO":1,"msabramo":1,"msathieu":1,"timocp":1,"jneuendorf":1,"mclaros":1,"georgyangelov":1,"olleolleolle":1,"jeffpereira":1,"BuonOmo":1,"noraj":1,"victorsosa":1,"nisusam":1,"dedene":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-27T00:00:06.950Z","repositories_count":14433188,"issues_count":34445042,"pull_requests_count":112711998,"authors_count":11247020,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[{"login":"cowboyd","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/cowboyd"},{"login":"georgyangelov","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/georgyangelov"},{"login":"ignisf","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ignisf"}],"active_maintainers":[]},"events":{"total":{"ForkEvent":1,"WatchEvent":4},"last_year":{"ForkEvent":1,"WatchEvent":1}},"keywords":[],"dependencies":[{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2022-08-16T10:40:34.739Z","updated_at":"2022-08-16T10:40:34.739Z","repository_link":"https://github.com/rubyjs/therubyracer/blob/master/Gemfile","dependencies":[{"id":1851482024,"package_name":"rubysl","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":1851482025,"package_name":"redjs","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":1851482026,"package_name":"rake","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":1851482027,"package_name":"rspec","ecosystem":"rubygems","requirements":"~\u003e 3.5.0","direct":true,"kind":"development","optional":false},{"id":1851482028,"package_name":"rake-compiler","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":1851482029,"package_name":"gem-compiler","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false}]},{"ecosystem":"rubygems","filepath":"therubyracer.gemspec","sha":null,"kind":"manifest","created_at":"2022-08-16T10:40:34.900Z","updated_at":"2022-08-16T10:40:34.900Z","repository_link":"https://github.com/rubyjs/therubyracer/blob/master/therubyracer.gemspec","dependencies":[{"id":1851482030,"package_name":"ref","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":1851482031,"package_name":"libv8","ecosystem":"rubygems","requirements":"~\u003e 3.16.14.15","direct":true,"kind":"runtime","optional":false}]}],"score":10.949928968875328,"created_at":"2024-12-15T21:38:08.637Z","updated_at":"2026-04-30T01:30:17.823Z","avatar_url":"https://github.com/rubyjs.png","language":"C++","monthly_downloads":0,"readme":"# therubyracer\n\n[![Gem Version](https://badge.fury.io/rb/therubyracer.png)](http://badge.fury.io/rb/therubyracer)\n[![Build Status](https://travis-ci.org/cowboyd/therubyracer.png?branch=master)](https://travis-ci.org/cowboyd/therubyracer)\n[![Build status](https://ci.appveyor.com/api/projects/status/aqw06doke164dca7?svg=true)](https://ci.appveyor.com/project/cowboyd/therubyracer)\n[![Dependency Status](https://gemnasium.com/cowboyd/therubyracer.png)](https://gemnasium.com/cowboyd/therubyracer)\n[![Join the chat at https://gitter.im/cowboyd/therubyracer](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/cowboyd/therubyracer?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n\n* GitHub Project: [http://github.com/cowboyd/therubyracer](http://github.com/cowboyd/therubyracer)\n* Mailing List: [http://groups.google.com/group/therubyracer](http://groups.google.com/group/therubyracer)\n* Documentation: [GitHub Wiki](https://github.com/cowboyd/therubyracer/wiki) and [RubyDoc](http://rubydoc.info/gems/therubyracer)\n\n### Status: UNMAINTAINED\n\nThis project is [UNMAINTAINED](https://github.com/rubyjs/therubyracer/issues/462).\n\nWhy?\n\n- The binding to libv8 that therubyracer implements is quite tight, making updating libv8 a huge amount of work. [mini_racer](https://github.com/rubyjs/mini_racer) has a thinner interface for that reason.\n- So many issues come from depot tools and the bespoke v8 toolchain, which only support what Google Chrome needs to support. [libv8-node](https://github.com/rubyjs/libv8-node) has been created to tackle those issues, leveraging the good work of Node.js people, and mini_racer uses that.\n\nIf you use a mini_racer that depends on libv8, please move to a more recent version.\n\nIf you use therubyracer and are thus stuck with v8 3.16, please move to mini_racer. If one of your dependencies uses therubyracer, please reach out to them so that they upgrade to mini_racer.\n\nIf there are needs coming from either libv8 or therubyracer that you feel are unmet by mini_racer + libv8-node, please open issues on their respective repositories.\n\n### DESCRIPTION\n\nEmbed the V8 JavaScript interpreter into Ruby.\n\n### FEATURES\n\n* Evaluate JavaScript from within Ruby\n* Embed your Ruby objects into the JavaScript world\n* Manipulate JavaScript objects and call JavaScript functions from Ruby\n* API compatible with the The Ruby Rhino (for JRuby: http://github.com/cowboyd/therubyrhino)\n\n### SYNOPSIS\n\n    gem install therubyracer\n\nthen in your Ruby code\n\n    require 'v8'\n\nor if using bundler (as with Rails), add the following to your Gemfile\n\n    gem \"therubyracer\"\n\nevaluate some simple JavaScript\n\n    cxt = V8::Context.new\n    cxt.eval('7 * 6') #=\u003e 42\n\naccess values inside your JavaScript context from Ruby\n\n    cxt.eval 'var val = {num: 5, isTruthy: function (arg) { return !!arg }}'\n    val = cxt[:val] #=\u003e V8::Object\n    cxt[:val] == cxt.scope.val #=\u003e true\n    val.num #=\u003e 5\n    val.isTruthy(1) #=\u003e true\n\nthis includes references to JavaScript functions\n\n    truthy = val[:isTruthy] #=\u003e V8::Function\n    truthy.call(' ') #=\u003e true\n    truthy.call(0) #=\u003e false\n\n\nembed values into the scope of your context\n\n    cxt['foo'] = \"bar\"\n    cxt.eval('foo') # =\u003e \"bar\"\n\nembed Ruby code into your scope and call it from JavaScript\n\n    cxt[\"say\"] = lambda {|this, word, times| word * times}\n    cxt.eval(\"say('Hello', 3)\") #=\u003e HelloHelloHello\n\nembed a Ruby object into your scope and access its properties/methods\nfrom JavaScript\n\n    class MyMath\n      def plus(lhs, rhs)\n        lhs + rhs\n      end\n    end\n\n    cxt['math'] = MyMath.new\n    cxt.eval(\"math.plus(20,22)\") #=\u003e 42\n\nmake a Ruby object *be* your global JavaScript scope.\n\n    math = MyMath.new\n    V8::Context.new(:with =\u003e math) do |cxt|\n      cxt.eval(\"plus(20,22)\") #=\u003e 42\n    end\n\nyou can do the same thing with Object#eval_js\n\n    math.eval_js(\"plus(20,22)\")\n\n### Different ways of loading JavaScript source\n\nIn addition to just evaluating strings, you can also use streams, such\nas files.\n\nevaluate bytes read from any File/IO object:\n\n    File.open(\"mysource.js\") do |file|\n      cxt.eval(file, \"mysource.js\")\n    end\n\nor load it by filename\n\n    cxt.load(\"mysource.js\")\n\n### Safe by default, dangerous by demand\n\nThe Ruby Racer is designed to let you evaluate JavaScript as safely as\npossible unless you tell it to do something more dangerous. The\ndefault context is a hermetically sealed JavaScript environment with\nonly the standard JavaScript objects and functions. Nothing from the\nRuby world is accessible at all.\n\nFor Ruby objects that you explicitly embed into JavaScript, by default\nonly the _public_ methods _below_ `Object` are exposed by default.\nE.g.\n\n    class A\n      def a\n        \"a\"\n      end\n\n      def to_s\n        super\n      end\n    end\n\n    class B \u003c A\n      def b\n        \"b\"\n      end\n    end\n\n\n    V8::Context.new do |cxt|\n      cxt['a'] = A.new\n      cxt['b'] = B.new\n      cxt.eval(\"a.a\") # =\u003e 'a'\n      cxt.eval(\"b.b\") # =\u003e 'b'\n      cxt.eval(\"b.a\") # =\u003e 'a'\n      cxt.eval(\"b.to_s\") # =\u003e #\u003cB:0x101776be8\u003e (because A explicitly defined it)\n      cxt.eval(\"b.object_id\") #=\u003e undefined, object_id is on Object\n    end\n\nIf needed, you can override the [Ruby Access][access] to allow whatever\nbehavior you'd like.\n\n[access]:https://github.com/cowboyd/therubyracer/blob/master/lib/v8/access.rb\n\nMore documentation can be found on the [GitHub wiki](https://github.com/cowboyd/therubyracer/wiki)\n\n### Protecting Your CPU cycles\n\nWhen running untrusted JavaScript code, you not only have to protect\nwhich functions it has access to, but also how much of your CPU it can\nconsume. Take this simple, yet thoroughly malicious script:\n\n```javascript\nwhile (true) {}\n```\n\nIt will loop forever and never return control to the calling Ruby\nthread. To protect against such JavaScript code that either\ndeliberately or accidentally runs longer that it should, you can\nset an explicit timeout on your context. If the code runs longer that\nthe allowed timeout, then it will throw an exception. Note that this\nexception could be raised at any point in the execution of the\nJavaScript.\n\nTo specify the timeout (in milliseconds), pass in the `timeout` option\nto the constructor.\n\n```ruby\ncxt = V8::Context.new timeout: 700\ncxt.eval \"while (true);\" #= exception after 700ms!\n```\n\n### PREREQUISITES\n\nThe Ruby Racer requires the V8 Javascript engine, but it offloads the\nhandling of this dependency to the\n[libv8](https://github.com/cowboyd/libv8) gem. Because libv8 is now a\ngem dependency, you do not need a separate libv8 entry in your\nproject's Gemfile.\n\nPlease see [libv8](https://github.com/cowboyd/libv8) for V8 runtime\ninstallation options.\n\n### DEVELOP\n\n    git clone git://github.com/cowboyd/therubyracer.git\n    cd therubyracer\n    bundle install\n    rake compile\n\n### Sponsored by\n\n\u003ca href=\"https://frontside.io\"\u003e![The Frontside](/thefrontside.png)\u003c/a\u003e\n\n### LICENSE:\n\n(The MIT License)\n\nCopyright (c) 2009,2010,2011,2012 Charles Lowell\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n[1]: https://github.com/cowboyd/libv8\n[2]: http://code.google.com/p/v8/wiki/BuildingWithGYP\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["activejob","activerecord","mvc","rubygem","rack","code-formatter","rubocop","static-code-analysis","sinatra","gem"],"project_url":"https://ruby.ecosyste.ms/api/v1/projects/653","html_url":"https://ruby.ecosyste.ms/projects/653"}