{"id":21402609,"url":"https://github.com/caoccao/swc4j","last_synced_at":"2025-07-13T22:31:59.758Z","repository":{"id":225919050,"uuid":"767243064","full_name":"caoccao/swc4j","owner":"caoccao","description":"swc4j (SWC for Java) is an ultra-fast JavaScript and TypeScript compilation and bundling tool on JVM.","archived":false,"fork":false,"pushed_at":"2024-10-22T22:46:58.000Z","size":2612,"stargazers_count":55,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-10-29T23:50:02.547Z","etag":null,"topics":["compiler","java","javascript","javet","jsx","parser","rust","swc","transpile","transpiler","tsc","tsx","typescript"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/caoccao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"github":null,"patreon":null,"open_collective":"caocao","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":"caoccao","otechie":null,"custom":["https://paypal.me/caoccao?locale.x=en_US"]}},"created_at":"2024-03-05T00:11:20.000Z","updated_at":"2024-10-26T15:14:45.000Z","dependencies_parsed_at":"2024-11-07T01:38:00.150Z","dependency_job_id":null,"html_url":"https://github.com/caoccao/swc4j","commit_stats":{"total_commits":506,"total_committers":1,"mean_commits":506.0,"dds":0.0,"last_synced_commit":"ecfb0ad3bd37c6661239719a10a4995ea0b81030"},"previous_names":["caoccao/swc4j"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caoccao%2Fswc4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caoccao%2Fswc4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caoccao%2Fswc4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caoccao%2Fswc4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/caoccao","download_url":"https://codeload.github.com/caoccao/swc4j/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225341562,"owners_count":17459232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["compiler","java","javascript","javet","jsx","parser","rust","swc","transpile","transpiler","tsc","tsx","typescript"],"created_at":"2024-11-22T15:39:29.168Z","updated_at":"2025-07-13T22:31:59.747Z","avatar_url":"https://github.com/caoccao.png","language":"Java","funding_links":["https://opencollective.com/caocao","https://issuehunt.io/r/caoccao","https://paypal.me/caoccao?locale.x=en_US"],"categories":["JavaScript Targets"],"sub_categories":[],"readme":"# swc4j\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.caoccao.javet/swc4j?style=for-the-badge)](https://central.sonatype.com/artifact/com.caoccao.javet/swc4j) [![Discord](https://img.shields.io/discord/870518906115211305?label=join%20our%20Discord\u0026style=for-the-badge)](https://discord.gg/R4vvKU96gw)\n\n[![swc4j Build](https://github.com/caoccao/swc4j/actions/workflows/swc4j_build.yml/badge.svg)](https://github.com/caoccao/swc4j/actions/workflows/swc4j_build.yml)\n\n[swc4j](https://github.com/caoccao/swc4j) ([SWC](https://github.com/swc-project/swc) for Java) is an ultra-fast JavaScript and TypeScript compilation and bundling tool on JVM. It is part of the [Javet](https://github.com/caoccao/Javet) portfolio serving the processing of JavaScript and TypeScript code before the code is executed in Node.js or V8 on JVM.\n\n\u003cimg src=\"https://github.com/caoccao/swc4j/assets/17514279/5ddddfca-91fc-45dc-83fe-ee7731564b90\" alt=\"swc4j and Javet\" width=\"400\"/\u003e\n\n## Features\n\n* Android + Linux + MacOS + Windows\n* JavaScript, TypeScript, JSX, TSX, etc.\n* [Parse](docs/parse.md)\n  * [AST](docs/features/ast.md)\n    * [Visitor](docs/features/ast_visitor.md)\n    * [Plugin](docs/features/plugin.md)\n  * Comments\n  * Tokens\n* [Transform](docs/transform.md)\n  * Minify\n  * Multiple Target ES Version\n  * Source Map\n* [Transpile](docs/transpile.md)\n  * TS → JS\n  * JSX → JS\n  * TSX → JS\n  * Source Map\n* [Sanitizer](docs/sanitizer.md)\n  * [Built-in Object Protection](docs/features/built_in_object_protection.md)\n  * [Keyword Restriction](docs/features/keyword_restriction.md)\n  * [Function Restriction](docs/features/function_restriction.md)\n  * [Identifier Restriction](docs/features/identifier_restriction.md)\n  * [Identifier Deletion](docs/features/identifier_deletion.md)\n  * [Identifier Freeze](docs/features/identifier_freeze.md)\n  * [Identifier Naming Convention](docs/features/identifier_naming_convention.md)\n\n## Quick Start\n\n### Dependency\n\n#### Maven\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j\u003c/artifactId\u003e \u003c!-- Must Have --\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-android-arm\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-android-arm64\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-android-x86\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-android-x86_64\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-linux-arm64\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-linux-x86_64\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-macos-arm64\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-macos-x86_64\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-windows-arm64\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.caoccao.javet\u003c/groupId\u003e\n    \u003cartifactId\u003eswc4j-windows-x86_64\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### Gradle Kotlin DSL\n\n```kotlin\nimplementation(\"com.caoccao.javet:swc4j:1.6.0\") // Must Have\nimplementation(\"com.caoccao.javet:swc4j-android-arm:1.6.0\")\nimplementation(\"com.caoccao.javet:swc4j-android-arm64:1.6.0\")\nimplementation(\"com.caoccao.javet:swc4j-android-x86:1.6.0\")\nimplementation(\"com.caoccao.javet:swc4j-android-x86_64:1.6.0\")\nimplementation(\"com.caoccao.javet:swc4j-linux-arm64:1.6.0\")\nimplementation(\"com.caoccao.javet:swc4j-linux-x86_64:1.6.0\")\nimplementation(\"com.caoccao.javet:swc4j-macos-arm64:1.6.0\")\nimplementation(\"com.caoccao.javet:swc4j-macos-x86_64:1.6.0\")\nimplementation(\"com.caoccao.javet:swc4j-windows-arm64:1.6.0\")\nimplementation(\"com.caoccao.javet:swc4j-windows-x86_64:1.6.0\")\n```\n\n#### Gradle Groovy DSL\n\n```groovy\nimplementation 'com.caoccao.javet:swc4j:1.6.0' // Must Have\nimplementation 'com.caoccao.javet:swc4j-android-arm:1.6.0'\nimplementation 'com.caoccao.javet:swc4j-android-arm64:1.6.0'\nimplementation 'com.caoccao.javet:swc4j-android-x86:1.6.0'\nimplementation 'com.caoccao.javet:swc4j-android-x86_64:1.6.0'\nimplementation 'com.caoccao.javet:swc4j-linux-arm64:1.6.0'\nimplementation 'com.caoccao.javet:swc4j-linux-x86_64:1.6.0'\nimplementation 'com.caoccao.javet:swc4j-macos-arm64:1.6.0'\nimplementation 'com.caoccao.javet:swc4j-macos-x86_64:1.6.0'\nimplementation 'com.caoccao.javet:swc4j-windows-arm64:1.6.0'\nimplementation 'com.caoccao.javet:swc4j-windows-x86_64:1.6.0'\n```\n\n### Transpile\n\n* Run the following Java code to transpile TypeScript to JavaScript.\n\n```java\n// Prepare a simple TypeScript code snippet.\nString code = \"function add(a:number, b:number) { return a+b; }\";\n// Prepare a script name.\nURL specifier = new URL(\"file:///abc.ts\");\n// Prepare an option with script name and media type.\nSwc4jTranspileOptions options = new Swc4jTranspileOptions()\n        .setSpecifier(specifier)\n        .setMediaType(Swc4jMediaType.TypeScript);\n// Transpile the code.\nSwc4jTranspileOutput output = new Swc4j().transpile(code, options);\n// Print the transpiled code.\nSystem.out.println(output.getCode());\n```\n\n* The transpiled JavaScript code and inline source map are as follows.\n\n```js\nfunction add(a, b) {\n  return a + b;\n}\n//# sourceMappingURL=data:application/json;base64,...\n```\n\n### Sanitize\n\n* Run the following Java code to sanitize the JavaScript code.\n\n```java\nJavetSanitizerStatementListChecker checker = new JavetSanitizerStatementListChecker();\n\n// 1. Check if keyword const can be used.\nString codeString = \"const a = 1;\";\nchecker.check(codeString);\nSystem.out.println(\"1. \" + codeString + \" // Valid.\");\n\n// 2. Check if keyword var can be used.\ncodeString = \"var a = 1;\";\ntry {\n    checker.check(codeString);\n} catch (JavetSanitizerException e) {\n    System.out.println(\"2. \" + codeString + \" // Invalid: \" + e.getMessage());\n}\n\n// 3. Check if Object is mutable.\ncodeString = \"Object = {};\";\ntry {\n    checker.check(codeString);\n} catch (JavetSanitizerException e) {\n    System.out.println(\"3. \" + codeString + \" // Invalid: \" + e.getMessage());\n}\n```\n\n* The output is as follows.\n\n```js\n1. const a = 1; // Valid.\n2. var a = 1; // Invalid: Keyword var is not allowed.\n3. Object = {}; // Invalid: Identifier Object is not allowed.\n```\n\n## Docs\n\n* [Tutorials](docs/tutorials/)\n* [Release Notes](docs/release_notes.md)\n\n## Blog\n\n* [Run TypeScript Directly in Java](https://blog.caoccao.com/run-typescript-directly-in-java-82b7003b44b8)\n* [Hello Swc4j, Goodbye Antlr](https://blog.caoccao.com/hello-swc4j-goodbye-antlr-f9a63e45a3d4)\n* [How to Compromise V8 on JVM](https://blog.caoccao.com/how-to-compromise-v8-on-jvm-ceb385572461)\n* Write SWC Plugins in Java: [Part 1](https://blog.caoccao.com/write-swc-plugins-in-java-part-1-d48139c6c675), [Part 2](https://blog.caoccao.com/write-swc-plugins-in-java-part-2-039d54611863), [Part 3](https://blog.caoccao.com/write-swc-plugins-in-java-part-3-b82c8bea4069)\n\n## License\n\n[APACHE LICENSE, VERSION 2.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaoccao%2Fswc4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcaoccao%2Fswc4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaoccao%2Fswc4j/lists"}