📦 😯 Zero-config ESM/TS package builder. powered by oxc, rolldown and rolldown-plugin-dts.
✅ Zero-config ESM/TS package builder.
Powered by undefinedoxcundefined, undefinedrolldownundefined and undefinedrolldown-plugin-dtsundefined.
The obuild project aims to be the next-generation successor to the current unbuild.
Some differences are not easy to adopt. Developing as a standalone project allows for faster progress and dogfooding in real projects.
[!IMPORTANT]
This is a proof-of-concept project.
Features are incomplete, and API and output behavior may change between 0.x versions.
Feedback and contributions are very welcome! If you’d like to make changes with more than a few lines of code, please open an issue first to discuss.
# bundle
npx obuild ./src/index.ts
# transform
npx obuild ./src/runtime/:./dist/runtime
You can use --dir to set the working directory.
If paths end with /, obuild uses transpile mode using oxc-transform instead of bundle mode with rolldown.
import { build } from "obuild";
await build({
cwd: ".",
entries: ["./src/index.ts"],
});
You can use build.config.mjs (or .ts) or pass config to build() function.
import { defineBuildConfig } from "obuild/config";
export default defineBuildConfig({
entries: [
{
type: "bundle",
input: ["./src/index.ts", "./src/cli.ts"],
// outDir: "./dist",
// minify: false,
// stub: false,
// rolldown: {}, // https://rolldown.rs/reference/config-options
// dts: {}, // https://github.com/sxzz/rolldown-plugin-dts#options
},
{
type: "transform",
input: "./src/runtime",
outDir: "./dist/runtime",
// minify: false,
// stub: false,
// oxc: {},
// resolve: {}
},
],
hooks: {
// start: (ctx) => {},
// end: (ctx) => {},
// entries: (entries, ctx) => {},
// rolldownConfig: (config, ctx) => {},
// rolldownOutput: (output, res, ctx) => {},
},
});
When working on a package locally, it can be tedious to rebuild or run the watch command every time.
You can use stub: true (per entry config) or the --stub CLI flag. In this mode, obuild skips the actual build and instead links the expected dist paths to the source files.
.mjs and .d.mts files re-export the source file.undefinedCaveats:undefined
.ts or .mjs extensions.default export, you need to run the stub build again.(1) For Node.js, you have several options:
node --experimental-strip-types (Available in 22.6)node --import jiti/register)node --import @oxc-node/core/register)node --import unloader/register)💛 Released under the MIT license.