{"id":13991746,"url":"https://github.com/johnelm/node-jxa","last_synced_at":"2026-01-12T05:47:39.748Z","repository":{"id":53346670,"uuid":"126541200","full_name":"johnelm/node-jxa","owner":"johnelm","description":"Use your favorite node.js modules (and JS editor) for your Javascript OSX automation scripts","archived":false,"fork":false,"pushed_at":"2020-08-29T22:05:03.000Z","size":208,"stargazers_count":80,"open_issues_count":18,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-08-09T12:14:25.806Z","etag":null,"topics":["applescript","jxa","osa","osascript","osx"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/johnelm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-23T21:37:10.000Z","updated_at":"2025-07-16T02:45:13.000Z","dependencies_parsed_at":"2022-09-11T05:01:40.680Z","dependency_job_id":null,"html_url":"https://github.com/johnelm/node-jxa","commit_stats":{"total_commits":72,"total_committers":4,"mean_commits":18.0,"dds":"0.41666666666666663","last_synced_commit":"396cd0a52d20c2a2427572c23d14ca475c314580"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/johnelm/node-jxa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnelm%2Fnode-jxa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnelm%2Fnode-jxa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnelm%2Fnode-jxa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnelm%2Fnode-jxa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnelm","download_url":"https://codeload.github.com/johnelm/node-jxa/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnelm%2Fnode-jxa/sbom","scorecard":{"id":528367,"data":{"date":"2025-08-11","repo":{"name":"github.com/johnelm/node-jxa","commit":"396cd0a52d20c2a2427572c23d14ca475c314580"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.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":"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":"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":"Code-Review","score":0,"reason":"Found 0/28 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":"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":"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":"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":"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":"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":"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":"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 3 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":"Vulnerabilities","score":0,"reason":"85 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-6chw-6frg-f759","Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-8w4h-3cm3-2pm2","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-hc9w-4p87-j549","Warn: Project is vulnerable to: GHSA-wg6g-ppvx-927h","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-rq8g-5pc5-wrhr","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-hr2v-3952-633q","Warn: Project is vulnerable to: GHSA-vh7m-p724-62c2","Warn: Project is vulnerable to: GHSA-r9p9-mrjm-926w","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-qrmc-fj45-qfc2","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-8r6j-v8pm-fqw3","Warn: Project is vulnerable to: MAL-2023-462","Warn: Project is vulnerable to: GHSA-xf7w-r453-m56c","Warn: Project is vulnerable to: GHSA-q42p-pg8m-cqh6","Warn: Project is vulnerable to: GHSA-w457-6q6x-cgp9","Warn: Project is vulnerable to: GHSA-62gr-4qp9-h98f","Warn: Project is vulnerable to: GHSA-f52g-6jhx-586p","Warn: Project is vulnerable to: GHSA-2cf5-4w76-r9qv","Warn: Project is vulnerable to: GHSA-3cqr-58rm-57f8","Warn: Project is vulnerable to: GHSA-g9r4-xpmj-mj65","Warn: Project is vulnerable to: GHSA-q2c6-c6pm-g3gh","Warn: Project is vulnerable to: GHSA-765h-qjxv-5f44","Warn: Project is vulnerable to: GHSA-f2jv-r9rf-7988","Warn: Project is vulnerable to: GHSA-44pw-h2cw-w3vq","Warn: Project is vulnerable to: GHSA-jp4x-w63m-7wgm","Warn: Project is vulnerable to: GHSA-c429-5p7v-vgjp","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-2pr6-76vf-7546","Warn: Project is vulnerable to: GHSA-8j8c-7jfh-h6hx","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-6c8f-qphg-qjgp","Warn: Project is vulnerable to: GHSA-4xc9-xhrj-v574","Warn: Project is vulnerable to: GHSA-x5rq-j2xg-h7qm","Warn: Project is vulnerable to: GHSA-jf85-cpcp-j695","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-4xcv-9jjx-gfj3","Warn: Project is vulnerable to: GHSA-f9cm-qmx5-m98h","Warn: Project is vulnerable to: GHSA-7wpw-2hjm-89gp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-fhjf-83wg-r2j9","Warn: Project is vulnerable to: GHSA-5fw9-fq32-wv5p","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-6g33-f262-xjp4","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-4g88-fppr-53pp","Warn: Project is vulnerable to: GHSA-4jqc-8m5r-9rpr","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7","Warn: Project is vulnerable to: GHSA-mf6x-7mm4-x2g7","Warn: Project is vulnerable to: GHSA-j44m-qm6p-hp7m","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T05:03:21.729Z","repository_id":53346670,"created_at":"2025-08-20T05:03:21.729Z","updated_at":"2025-08-20T05:03:21.729Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28335265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T00:36:25.062Z","status":"online","status_checked_at":"2026-01-12T02:00:08.677Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["applescript","jxa","osa","osascript","osx"],"created_at":"2024-08-09T14:01:34.062Z","updated_at":"2026-01-12T05:47:39.734Z","avatar_url":"https://github.com/johnelm.png","language":"JavaScript","readme":"# node-jxa\n\n[![Build Status](https://travis-ci.org/johnelm/node-jxa.svg?branch=master)](https://travis-ci.org/johnelm/node-jxa)\n[![npm version](https://img.shields.io/npm/v/node-jxa.svg?maxAge=60)](https://www.npmjs.com/package/node-jxa)\n[![downloads](https://img.shields.io/npm/dt/node-jxa.svg?maxAge=60)](https://www.npmjs.com/package/node-jxa)\n[![github](https://img.shields.io/github/package-json/v/johnelm/node-jxa.svg?label=github\u0026maxAge=60)](https://github.com/johnelm/node-jxa)\n\nUse your favorite node.js modules, or your own local modules, in your JXA (OSX Javascript automation) scripts.  Based on [this awesome tip](https://github.com/JXA-Cookbook/JXA-Cookbook/wiki/Importing-Scripts#commonjs--browserify) from the [JXA Cookbook](https://github.com/JXA-Cookbook/JXA-Cookbook).\n\n### What is JXA?\n\nIt's OS X automation, using Javascript.\n\n*Applescript* has long been the scripting language provided by Apple for automating and integrating apps on Mac OS X.  The Internet is replete with Q \u0026 A, tips and examples of how to use Applescript to automate various menial tasks, like:\n\n- Archiving anything to Evernote\n- Capturing an email or Evernote link to your task manager (e.g. OmniFocus)\n- Capture your Safari reading list to your task manager\n\nSince OS X 10.10 (Yosemite), Javascript (called Javascript for Automation, or **JXA**) is also supported for app automation.  This is great news, especially for Javascript developers who want to automate workflows on their Mac.\n\n### What is *node-jxa*?\n\nBased on [this awesome tip](https://github.com/JXA-Cookbook/JXA-Cookbook/wiki/Importing-Scripts#commonjs--browserify), `node-jxa` allows you to use commonJS modules in your JXA scripts.  You can `require` modules installed from npm, or your own local modules:\n\n```javascript\nconst _ = require( 'lodash' ); // from npm\nconst myModule = require( './my-module' );  // local modules too\n```\n\n\u003e ES6 module syntax (`import from`) isn't currently supported, so stick with `require()`, and use `module.exports` in your own local modules.\n\nYou can also use your **favorite Javascript editor** instead of the OS X Script Editor, and use workflow that is much more familiar to JS developers (vs. compiling .js files to .scpt binary format).\n\nSo long as your editor can launch a shebang'd script, you can run or debug JXA while you edit.\n \n## Installation and usage\n\nYou'll likely want to install node-jxa globally:\n```bash\nyarn global add node-jxa # or the npm equivalent: npm install -g node-jxa\n```\n\nThis will install `node-jxa` and make it available in your `PATH` env var.\n\n.. then you can (optionally) use a shebang at the top of your JXA script:\n\n```javascript\n#! /usr/bin/env node-jxa\n\n// ... rest of script\n```\n\nand make your script executable:\n\n```bash\nchmod u+x my-jxa-script.js\n```\n\n.. so you can run it from the command line (**or**, using your favorite script launcher, keyboard shortcuts, etc).\n\n```bash\n./my-jxa-script.js\n```\n\nYou can of course use the `node-jxa` command on the command line; simply provide the jxa script as the first argument:\n\n```bash\nnode-jxa ./my-jxa-script.js\n```\n\n### Node.js engine and JXA runtime\n\nNote that your installed node.js engine is only used by `node-jxa` to bundle up your module dependencies, and to decorate your script with a couple of needed additions (using the Browserify API).  The resulting code is then piped to `osascript`, and your OS X JavaScriptCore (modified for OSA integration) is used to execute it.  Node.js is *not* ultimately used to execute your script.\n\n### ES6+ syntax support\n\nFortunately the supported ES syntax and features is quite modern (depending on your OS X version).  As long as your installed node.js engine is recent enough for Browserify to bundle your code, you should be able to use just about any modern ES syntax you like (except for ES6 module syntax, i.e. `import from`).  To see what's supported, check what version of Safari you have, then find its column at [the Kangax compatibility site](https://kangax.github.io/compat-table/es6/).\n\n\u003e Note: the Kangax table has a column for JXA, but it doesn't appear to be current.\n\n### Project structure and availability of node modules\n\nAll modules you `require` in your scripts must be installed (i.e. in the `node_modules` dir) to be available, so Browserify can bundle them into your script.\n\nI suggest managing your node-jxa scripts like any node.js project, with a package.json specifying the needed module dependencies.  Simply use `yarn` or `npm` to add and remove the libraries you need.\n\n\u003e Note that Browserify won't automatically package modules for which the `require`d path is computed at runtime.  For example, `let myNeededModulePath = './my/needed/module' ;  let myModule = require( myNeededModulePath );` will leave the module out and it won't work.  This can happen within modules you're getting from npm.\n\u003e Browserify has techniques for handling this, but node-jxa doesn't currently employ them.\n\n### Using Applescript libraries\n\nYou can use your Applescript libraries in your JXA scripts using the `Library` global function, like so:\n\n```javascript\nlet myAsLib = Library( 'myApplescriptLibary' ) // skip the .scpt suffix\n```\n\nAll top-level Applescript routines and handlers in the library will be available as functions on the imported object.\n\nLibrary files must be located in your [Script Libraries folder or in your OSA_LIBRARY_PATH](https://developer.apple.com/library/content/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-11.html#//apple_ref/doc/uid/TP40014508-CH110-SW11) (the latter as of OS X 10.11) to be used in this way.\n\nThis works with JXA libraries too - you can use `Library()` to import .scpt scripts compiled from Javascript.  But since node-jxa allows you to `require()` from your local js files, it's much better to use your js libraries like local node.js modules, using `module.exports`.\n\n\u003e There are several other globals added by the JXA runtime; they are detailed by [Apple, here](https://developer.apple.com/library/content/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html#//apple_ref/doc/uid/TP40014508-CH109-SW1).\n\n### Scripting Dictionaries\n\nWith node-jxa you can use your favorite JS editor for writing and managing your JXA code, but the OS X Script is still useful for viewing the Scripting Dictionaries for your scriptable apps.  Essentially, this is the documentation for the API exposed by the apps' developers.  Look for **Open Dictionary...** on the File Menu, and be sure to select `JavaScript` in the language selector at the top.\n\n### Be prepared for some weirdness\n\nSome things are weird, including but not limited to:\n\n- trying to `console.log` a JXA application object will probably crash the process.\n- [Element Arrays](https://developer.apple.com/library/content/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html#//apple_ref/doc/uid/TP40014508-CH109-SW9) (arrays provided directly by Applications ( or [filtering via `whose()`](https://developer.apple.com/library/content/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html#//apple_ref/doc/uid/TP40014508-CH109-SW10) ) are weird.  A simple trick like `array.map( el =\u003e el )` will give you a real JS array.\n- property access for JXA objects is expensive.  If you're doing many reads, your script can take a long time and may even time out.  A caching strategy can help.\n\n### Debugging\n\nYou can debug your JXA scripts using Safari dev tools.  To debug, [enable JSContexts support](https://developer.apple.com/library/content/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-11.html#//apple_ref/doc/uid/TP40014508-CH110-SW3) in Safari, then simply include the `debugger;` command in your script.  When you run the script it'll stop and open at that spot in the Safari debugger (from here, you can add additional breakpoints in Safari's debugger).\n\nIf you add the `--debug` (or `-d`) switch to the `node-jxa`, command (including in your shebangs), Browserify will include sourcemaps in the bundled code, for a cleaner debugging experience that is more focused on your own code.\n\nSourcemaps will also be included if the environment variable `NODE_DEBUG_JXA` is set to `true` or `1`, regardless of whether the `--debug` or `-d` switches are used.\n\n\u003e Depending on your Mac, you might never notice a difference in performance when including sourcemaps.  You'll definitely see more of a performance hit from requiring many large or spurious libraries, regardless of sourcemaps.\n\n### Other JXA resources\n\n- [The JXA Cookbook](https://github.com/JXA-Cookbook/JXA-Cookbook)\n- From Apple:\n  - [Apple's JXA release notes for OS X 10.10](https://developer.apple.com/library/content/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html#//apple_ref/doc/uid/TP40014508-CH109-SW1)\n  - [Apple's JXA release notes for OS X 10.11](https://developer.apple.com/library/content/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-11.html#//apple_ref/doc/uid/TP40014508-CH110-SW1)\n  - [JXA Resources from Apple's dev groups](https://apple-dev.groups.io/g/jxa/wiki/JXA-Resources)\n  - Applescript [Fundamentals](https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/conceptual/ASLR_fundamentals.html), [Class Reference](https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_classes.html) and [Script Objects](https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/conceptual/ASLR_script_objects.html)\n  - [Using Script Libraries](https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/UseScriptLibraries.html#//apple_ref/doc/uid/TP40016239-CH36-SW1)\n- [A Beginners Guide to JXA, JavaScript Application Scripting](https://computers.tutsplus.com/tutorials/a-beginners-guide-to-javascript-application-scripting-jxa--cms-27171)\n- [Example OS X applications written in JavaScript](https://github.com/tylergaw/js-osx-app-examples) and [Building OS X Apps with JavaScript](https://tylergaw.com/articles/building-osx-apps-with-js/) by Tyler Gaw\n- [Automation for OS X: the JavaScript way](https://hackmag.com/coding/getting-to-grips-with-javascript-automation-for-os-x/) – HackMag\n- [lucaswoj/slick](https://github.com/lucaswoj/slick): A port of React Native to OS X using the \"JavaScript for Automation\" framework\n\n\nNote that there are many more resources available for Applescript on the interwebs (or even from Apple) than there is for JXA.  When googling for an example or recipe, you'll probably find much more help by looking an Applescript that does what you want, and then converting to Javascript yourself.  You can temporarily use an Applescript library if the conversion eludes you for a time.\n\n\n","funding_links":[],"categories":["JavaScript","Node.js helpers"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnelm%2Fnode-jxa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnelm%2Fnode-jxa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnelm%2Fnode-jxa/lists"}