Remote SWC Developer Jobs

Typical Software Engineering salary: $200k–$292k · 282 listings with salary data

SWC developers build and maintain the Rust-based JavaScript and TypeScript transformation infrastructure that compiles TypeScript, strips types, transforms JSX, and applies Babel-compatible syntax transforms at 20–70x the speed of Babel's JavaScript implementation — configuring .swcrc files for standalone transpilation, integrating SWC as the transform layer in Next.js, jest via @swc/jest, and webpack via swc-loader, and writing SWC plugins in Rust that hook into the Rust AST visitor for transformations that the swcrc configuration options cannot express. At remote-first technology companies, they serve as the build performance engineers who replace Babel-based transform pipelines with SWC's parallel Rust execution, reduce CI TypeScript compilation times by an order of magnitude, and maintain the transform infrastructure that modern Next.js, Nx, and Rspack deployments rely on as their compilation backbone.

What SWC developers do

SWC developers configure .swcrc — writing the JSON configuration file that controls SWC's JavaScript/TypeScript transformation: jsc (JavaScript compiler options including parser target, transform settings, and experimental plugins), module (output module system: commonjs, es6, amd, umd), env (browserslist target for syntax downleveling), and sourceMaps for source map generation; configure TypeScript transformation — setting jsc.parser.syntax: 'typescript' with tsx: true for React TypeScript files, configuring jsc.transform.react.runtime: 'automatic' for the new JSX transform, and understanding that SWC strips TypeScript types without type checking — requiring separate tsc --noEmit validation; configure Babel-compatible transforms — using jsc.transform.decorators for TypeScript experimental decorators, jsc.transform.legacyDecorator for older decorator syntax, and the SWC plugin ecosystem for transforms like styled-components, emotion, and relay that were previously Babel plugins; integrate with Next.js — understanding that Next.js 12+ uses SWC as its default compiler replacing Babel, configuring next.config.js swc options for styled-components support, relay transforms, and emotion, and using the experimental.swcPlugins array for community Rust plugins; integrate with jest — using @swc/jest as the transform for TypeScript test files, configuring transform in jest.config.js to replace ts-jest or babel-jest with @swc/jest for significantly faster test compilation, and managing the .swcrc configuration that @swc/jest reads; configure swc-loader for webpack — replacing babel-loader with swc-loader in webpack configuration for application builds that cannot migrate to Vite or esbuild, using jsc.parser.syntax and module.type to match the project's JavaScript dialect; write Rust plugins — using the SWC plugin SDK to write Rust crates that implement the Visitor trait for AST transformations, publishing as WASM plugins loaded in jsc.experimental.plugins, and understanding the versioning constraint that SWC plugins must be compiled against the exact SWC core version they target; configure minification — using SWC's built-in minifier (jsc.minify) as a fast Terser-compatible alternative, configuring compress and mangle options, and integrating with webpack's minification plugin; implement code generation — using @swc/core's programmatic API (swc.transform(code, options), swc.transformFile(filename, options), swc.parse(code, options)) in Node.js scripts for batch transformation pipelines; and integrate with Rspack — understanding that Rspack (the Rust webpack replacement) uses SWC as its built-in JavaScript transformer, making SWC configuration knowledge directly applicable to Rspack's builtins.swcOptions.

Key skills for SWC developers

  • .swcrc: jsc.parser (ecmascript/typescript/tsx); jsc.target; jsc.transform.react; module type
  • TypeScript: type stripping; tsx support; decorators; legacyDecorator; metadata
  • JSX: runtime (automatic/classic); importSource; pragma; pragmaFrag
  • jest integration: @swc/jest; jest.config.js transform; sourceMaps inline; moduleNameMapper
  • Next.js: SWC compiler in Next.js 12+; swcOptions; experimental.swcPlugins; styled-components
  • Rust plugins: SWC plugin SDK; Visitor trait; WASM compilation; jsc.experimental.plugins
  • swc-loader: webpack integration; replacing babel-loader; jsc + module config
  • Minification: jsc.minify; compress options; mangle; pure_funcs; Terser compatibility
  • Programmatic API: @swc/core transform(); transformFile(); parse(); printSync()
  • Rspack: builtins.swcOptions; Rspack's SWC integration; Rspack vs webpack configuration

Salary expectations for remote SWC developers

Remote SWC developers earn $95,000–$158,000 total compensation. Base salaries range from $80,000–$130,000, with equity at technology companies where TypeScript compilation speed, jest test suite execution time, and CI pipeline duration directly affect engineering team velocity and cloud compute costs for large JavaScript and TypeScript codebases. SWC developers with Rust plugin development expertise for custom AST transformations that Babel plugins previously provided, Next.js SWC optimization for production TypeScript compilation at scale, jest migration implementations that reduced test suite run times by 50% or more, and deep understanding of SWC's version-locked plugin architecture for production plugin maintenance command the strongest premiums. Those with SWC combined with Rust programming expertise who can contribute to or extend the SWC core earn toward the top of the range.

Career progression for SWC developers

The path from SWC developer leads to senior developer experience engineer (broader scope across TypeScript toolchain, build infrastructure, and testing pipeline performance across SWC, esbuild, Rollup, and Vite), JavaScript compiler engineer (specializing in AST transformation, code generation, and the Rust implementation of JavaScript tooling), or build systems architect (designing the complete TypeScript and JavaScript compilation infrastructure for large engineering organizations). Some SWC developers specialize into the Rust JavaScript toolchain ecosystem, contributing to SWC's open-source development, the Rspack project, or Rolldown — all of which use Rust for JavaScript tooling performance. Others transition into Next.js platform engineering, combining their SWC compiler knowledge with Next.js App Router, server components, and Vercel deployment expertise. SWC developers who write widely-used Rust plugins become recognized contributors to the SWC plugin ecosystem, shipping transforms for popular libraries that previously required Babel.

Remote work considerations for SWC developers

Building SWC-based transform pipelines for distributed engineering teams requires configuration documentation, type checking separation standards, and Rust plugin version management practices that prevent distributed engineers from assuming SWC provides type checking, deploying plugins compiled against mismatched SWC core versions, or configuring .swcrc options that silently produce incorrect output for edge-case JavaScript syntax. SWC developers at remote companies document the type checking gap explicitly — that SWC is a transpiler, not a type checker, and TypeScript errors will not fail SWC compilation — requiring a separate CI step (tsc --noEmit or tsc --build) that distributed engineers must add to their build scripts, because engineers migrating from ts-loader or tsc compilation expect type errors to block builds; establish SWC plugin version pinning — documenting that SWC plugins compiled against one SWC core version will crash when loaded by a different SWC version (even patch versions can break), and requiring that jsc.experimental.plugins entries pin exact SWC core versions with matching @swc/core dependency pins — because distributed engineers upgrading @swc/core without simultaneously updating plugin versions produce cryptic WASM errors; document the @swc/jest sourceMaps configuration — setting sourceMaps: 'inline' in the @swc/jest transform configuration for accurate stack traces in test failures, because the default external source map setting produces incorrect line numbers in jest output; and maintain a Babel-to-SWC migration checklist — documenting which Babel transforms have SWC equivalents (@babel/preset-envenv.targets; @babel/preset-reactjsc.transform.react; styled-components Babel plugin → SWC @swc/plugin-styled-components) and which require Rust plugin development — so distributed engineers migrating Babel configurations don't silently drop required transforms.

Top industries hiring remote SWC developers

  • Next.js and Vercel deployment companies where SWC ships as Next.js's default TypeScript compiler — with no configuration required for TypeScript and JSX transformation, and swcOptions in next.config.js enabling styled-components, emotion, and relay transforms that previously required Babel plugin configuration
  • Large TypeScript codebase companies where test suite execution time is measured in minutes with ts-jest or babel-jest and @swc/jest migration reduces test compilation to milliseconds — enabling sub-minute test suite runs for codebases with hundreds of TypeScript test files
  • Rspack and webpack organizations where SWC replaces Babel as the JavaScript transform layer — swc-loader in webpack and Rspack's built-in SWC integration deliver faster production builds for application teams that cannot migrate from webpack to Vite
  • Monorepo platform engineering teams where SWC's parallel TypeScript stripping enables fast incremental compilation across hundreds of workspace packages — combined with Turborepo or Nx for task caching, SWC transforms provide the compilation throughput that JavaScript build tools previously could not achieve
  • Developer tooling companies building on SWC's programmatic API for batch code transformation, codemod tooling, or custom compiler pipelines where SWC's Rust performance enables processing thousands of TypeScript files faster than Babel or tsc could process dozens

Interview preparation for SWC developer roles

Expect configuration questions: write the .swcrc for a React TypeScript project that targets Node.js 18, uses the automatic JSX transform, supports TypeScript decorators, and outputs CommonJS modules — what the jsc.parser, jsc.target, jsc.transform.react, and module sections look like. jest migration questions ask how you'd migrate a project from ts-jest to @swc/jest — what the jest.config.js transform configuration change looks like, what .swcrc settings @swc/jest reads, and how sourceMaps configuration affects test failure stack traces. Type checking questions ask why SWC doesn't catch TypeScript type errors and what CI configuration ensures type errors still block merges — what the separate tsc --noEmit step looks like. Rust plugin questions ask what a SWC Rust plugin is, when you'd write one instead of using .swcrc configuration, and what the version locking constraint means for plugin maintenance. Next.js questions ask how SWC integration in Next.js differs from standalone SWC usage — what configuration options are exposed in next.config.js versus what is handled automatically. Rspack questions ask how SWC's role in Rspack differs from swc-loader in webpack — what builtins.swcOptions configures. Be ready to compare SWC with Babel and esbuild — when SWC's Rust speed with Babel-compatible plugin support justifies it over esbuild's simplicity.

Tools and technologies for SWC developers

Core: @swc/core (Rust binaries); @swc/cli; .swcrc configuration; SWC WASM (browser). Configuration: jsc.parser (ecmascript/typescript options); jsc.target (es5-es2022); jsc.transform.react; jsc.transform.decorators; jsc.externalHelpers; module.type; env.targets. jest: @swc/jest (transform); jest.config.js transform map; sourceMaps: 'inline'; @swc/jest options. webpack: swc-loader; module.rules transform; jsc.parser + module.type. Next.js: built-in SWC compiler; next.config.js swcOptions; experimental.swcPlugins; styled-components plugin; emotion plugin; relay plugin. Rust plugins: @swc/plugin-styled-components; @swc/plugin-emotion; community plugins from crates.io; plugin SDK (swc_core crate); Visitor trait; WASM target. Programmatic API: @swc/core transform(code, options); transformFile; transformFileSync; parse; parseFile; print. Minification: jsc.minify; compress (dead_code, pure_funcs); mangle (keep_classnames); standalone SWC minifier. Rspack: rspack built-in SWC; builtins.swcOptions; rspack.config.js. Nx: @nx/js with SWC executor; swc.json; build with SWC. Alternatives: Babel (mature, more plugins, slower); esbuild (faster, fewer transforms, no Babel compat); tsc (type checking + emit, slow); ts-jest (slower jest TypeScript); Rolldown (Rust bundler with SWC integration).

Global remote opportunities for SWC developers

SWC developer expertise is in strong and growing demand globally, with SWC's adoption as the default TypeScript compiler in Next.js (powering millions of Next.js applications), its use as the transformation engine in Nx's JavaScript toolchain, and its role as the transformer in Rspack and the emerging Rust JavaScript tooling ecosystem creating consistent demand for engineers who understand both SWC's configuration model and the broader JavaScript compilation landscape. US-based SWC developers are in demand at Next.js application companies, large TypeScript monorepo teams seeking test suite performance improvements, and developer tooling organizations building on SWC's programmatic API for code transformation tools. EMEA-based SWC developers are well-positioned given the strong European TypeScript adoption — SWC's performance advantages are most pronounced in large TypeScript codebases, which are common in European enterprise software and fintech engineering organizations with mature TypeScript codebase practices. SWC's continued development — the Rust plugin ecosystem growth, Rspack integration, and the broader shift toward Rust-based JavaScript tooling — ensures sustained engineering demand as the JavaScript toolchain continues its performance-driven evolution toward native compilation.

Frequently asked questions

How does SWC differ from Babel and when should engineers choose SWC over Babel for TypeScript projects? Babel is a JavaScript transpiler written in JavaScript — it parses source code into a JavaScript AST, applies transform plugins written as JavaScript visitors, and generates output code. SWC is a transpiler written in Rust — it parses source code into a Rust AST, applies transforms written in Rust, and generates output code, executing in parallel on multiple CPU cores. Speed difference: SWC is 20–70x faster than Babel in benchmarks because Rust executes as native machine code versus V8-interpreted JavaScript, and SWC leverages multi-core parallelism that JavaScript's single-threaded execution cannot match. Plugin compatibility: Babel has thousands of community plugins covering every syntax proposal, framework-specific transform, and code modification scenario; SWC has a growing plugin ecosystem but significantly fewer options, with complex transforms requiring Rust plugin development. When to choose SWC: projects using standard TypeScript and JSX transforms where Babel plugins beyond preset-env and preset-typescript are not required; jest test suites where @swc/jest eliminates minutes of ts-jest compilation overhead; Next.js projects where SWC ships built-in; any project where compilation speed is the bottleneck. When to stick with Babel: projects requiring Babel plugins without SWC equivalents (specific syntax proposals, framework-specific transforms, complex codemods); projects where existing Babel configuration covers requirements and migration cost exceeds speed benefit. Hybrid approach: some projects use Babel for development (mature plugin ecosystem) and SWC for production minification (@swc/core minifier as Terser replacement).

How does @swc/jest work and how do engineers configure it for optimal jest performance? @swc/jest is a jest transform that replaces ts-jest and babel-jest for TypeScript and JavaScript test file compilation — instead of using TypeScript's slow compiler or Babel's JavaScript AST transforms, @swc/jest compiles each test file using SWC's Rust binaries, reducing test file compilation from hundreds of milliseconds to single-digit milliseconds. Configuration: in jest.config.js, set transform: { '^.+\\.(t|j)sx?

#39;: ['@swc/jest', swcOptions] } where swcOptions is the SWC configuration inline or a path to .swcrc. SWC options for jest: { sourceMaps: 'inline' } is critical — inline source maps allow jest to map stack traces back to TypeScript source lines in test failures; external source maps (the default) don't work with jest's error formatting and produce line numbers in the compiled output rather than the TypeScript source. Module resolution: @swc/jest compiles TypeScript to CommonJS by default (module.type: 'commonjs') for Node.js jest execution; if using --experimental-vm-modules for ESM jest, set module.type: 'es6'. Path aliases: TypeScript paths aliases in tsconfig.json are not honored by SWC — configure moduleNameMapper in jest.config.js to translate alias patterns to relative paths. Type safety: @swc/jest does not type check — tests with TypeScript errors compile and run; add tsc --noEmit to CI to catch type errors in test files separately. Coverage: jest coverage with @swc/jest requires Istanbul instrumentation — set jsc.transform.hidden.jest: true or use @swc/jest with the --coverage flag which automatically adds Istanbul instrumentation.

What are SWC Rust plugins and how do engineers develop, publish, and manage them? SWC plugins are Rust crates compiled to WASM that implement AST visitor transforms — they hook into SWC's compilation pipeline at the same point as built-in transforms, receiving the parsed AST and returning the modified AST. Plugin development: create a Rust crate with swc_core as a dependency; implement the Fold or Visit trait for AST traversal; the visit_call_expr handler intercepts function calls, visit_jsx_element intercepts JSX — return modified AST nodes to transform code. Compilation: compile the Rust crate to WASM target (cargo build --target wasm32-wasi) — the resulting .wasm file is the publishable plugin. Configuration: in .swcrc, add jsc.experimental.plugins: [['@swc/plugin-name', {}]] or ['/path/to/plugin.wasm', { option: value }]. npm publishing: SWC plugins are published as npm packages containing the compiled .wasm binary — @swc/plugin-styled-components, @swc/plugin-emotion. Version locking: SWC plugins are tightly coupled to the SWC core version they were compiled against — SWC's Rust AST types change between versions, and a plugin compiled against SWC core 1.3.x will fail to load with SWC core 1.4.x with a cryptic WASM error. Management: pin both @swc/core and all @swc/plugin-* packages to exact versions in package.json; update them together as a coordinated pair when upgrading. When to write custom plugins: custom Babel plugins that traverse the AST to add import statements, remove debug code, implement custom syntax sugar, or instrument function calls — if no SWC configuration option covers the transform, a Rust plugin is required.

Related resources

Ready to find your next remote swc developer role?

RemNavi aggregates remote jobs from dozens of platforms. Search, filter, and apply at the source.

Browse all remote jobs