# swc4j
**Repository Path**: guoci/swc4j
## Basic Information
- **Project Name**: swc4j
- **Description**: No description available
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-10
- **Last Updated**: 2025-05-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# swc4j
[](https://central.sonatype.com/artifact/com.caoccao.javet/swc4j) [](https://discord.gg/R4vvKU96gw)
[](https://github.com/caoccao/swc4j/actions/workflows/swc4j_build.yml)
[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.
## Features
* Android + Linux + MacOS + Windows
* JavaScript, TypeScript, JSX, TSX, etc.
* [Parse](docs/parse.md)
* [AST](docs/features/ast.md)
* [Visitor](docs/features/ast_visitor.md)
* [Plugin](docs/features/plugin.md)
* Comments
* Tokens
* [Transform](docs/transform.md)
* Minify
* Multiple Target ES Version
* Source Map
* [Transpile](docs/transpile.md)
* TS → JS
* JSX → JS
* TSX → JS
* Source Map
* [Sanitizer](docs/sanitizer.md)
* [Built-in Object Protection](docs/features/built_in_object_protection.md)
* [Keyword Restriction](docs/features/keyword_restriction.md)
* [Function Restriction](docs/features/function_restriction.md)
* [Identifier Restriction](docs/features/identifier_restriction.md)
* [Identifier Deletion](docs/features/identifier_deletion.md)
* [Identifier Freeze](docs/features/identifier_freeze.md)
* [Identifier Naming Convention](docs/features/identifier_naming_convention.md)
## Quick Start
### Dependency
* Add the following dependency to your project or download a snapshot build from the [Actions](https://github.com/caoccao/swc4j/actions).
```xml
com.caoccao.javet
swc4j
1.5.0
```
```kotlin
// Gradle Kotlin DSL
// Linux + MacOS + Windows
implementation("com.caoccao.javet:swc4j:1.5.0")
// Android
implementation("com.caoccao.javet:swc4j-android:1.5.0")
```
```groovy
// Gradle Groovy DSL
// Linux + MacOS + Windows
implementation 'com.caoccao.javet:swc4j:1.5.0'
// Android
implementation 'com.caoccao.javet:swc4j-android:1.5.0'
```
### Transpile
* Run the following Java code to transpile TypeScript to JavaScript.
```java
// Prepare a simple TypeScript code snippet.
String code = "function add(a:number, b:number) { return a+b; }";
// Prepare a script name.
URL specifier = new URL("file:///abc.ts");
// Prepare an option with script name and media type.
Swc4jTranspileOptions options = new Swc4jTranspileOptions()
.setSpecifier(specifier)
.setMediaType(Swc4jMediaType.TypeScript);
// Transpile the code.
Swc4jTranspileOutput output = new Swc4j().transpile(code, options);
// Print the transpiled code.
System.out.println(output.getCode());
```
* The transpiled JavaScript code and inline source map are as follows.
```js
function add(a, b) {
return a + b;
}
//# sourceMappingURL=data:application/json;base64,...
```
### Sanitize
* Run the following Java code to sanitize the JavaScript code.
```java
JavetSanitizerStatementListChecker checker = new JavetSanitizerStatementListChecker();
// 1. Check if keyword const can be used.
String codeString = "const a = 1;";
checker.check(codeString);
System.out.println("1. " + codeString + " // Valid.");
// 2. Check if keyword var can be used.
codeString = "var a = 1;";
try {
checker.check(codeString);
} catch (JavetSanitizerException e) {
System.out.println("2. " + codeString + " // Invalid: " + e.getMessage());
}
// 3. Check if Object is mutable.
codeString = "Object = {};";
try {
checker.check(codeString);
} catch (JavetSanitizerException e) {
System.out.println("3. " + codeString + " // Invalid: " + e.getMessage());
}
```
* The output is as follows.
```js
1. const a = 1; // Valid.
2. var a = 1; // Invalid: Keyword var is not allowed.
3. Object = {}; // Invalid: Identifier Object is not allowed.
```
## Docs
* [Tutorials](docs/tutorials/)
* [Release Notes](docs/release_notes.md)
## Blog
* [Run TypeScript Directly in Java](https://blog.caoccao.com/run-typescript-directly-in-java-82b7003b44b8)
* [Hello Swc4j, Goodbye Antlr](https://blog.caoccao.com/hello-swc4j-goodbye-antlr-f9a63e45a3d4)
* [How to Compromise V8 on JVM](https://blog.caoccao.com/how-to-compromise-v8-on-jvm-ceb385572461)
* 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)
## License
[APACHE LICENSE, VERSION 2.0](LICENSE)