espresso

An experimental next-generation package registry, package manager, and toolchain for the JavaScript ecosystem.

Powered by Rust

Everything from the registry to the package manager espm is written in and powered by Rust. Expect dependency installs in seconds, not minutes.

ESM only, no CJS

Only packages written with ECMAScript modules will be publishable to the registry. No more CommonJS, conditional imports, or compatibility issues. It's time to move forward.

New manifest and lockfile

Say goodbye to package.json, and all the headaches that come with it. No more exports, imports, module type, peerDependencies, and instead, say hello to esp.toml.

Integrated toolchain

Avoid the hassle of installing and configuring code formatters, linters, and typecheckers. With espresso, these are built-in and pre-configured with sane defaults, simply espm lint or espm format to use them.

For package consumers

Install dependencies for any runtime

JavaScript is unique in that it has multiple runtimes and environments that it runs in, so why shouldn't dependencies model this? With espresso, dependencies can be installed for Node, Bun, Deno, or a general vendor approach.

Build dependencies on demand

Non-prebuilt packages within the registry will automatically be built when depended on, for a desired compilation target , using swc, a performant JavaScript compiler.

Set compilation targets for dependencies

With our build-on-demand service, all installed package dependencies will be transformed to a target that meets your application requirements. Want es2018? Or maybe es2022? The choice is yours!

Host a private registry

Work for a company that wants to publish their internal packages to a private registry? Our registry is being built from the ground up to support self-hosting.

For package authors

Package namespaces

All packages will require a unique namespace (similar to private scope). No global scoped packages, or package name squatting, and easier scoped configuration.

Build pipelines

The days of pre-building packages before publishing is over. Stop fiddling with complex configurations and build pipelines, and instead simply publish source files and let the registry build it for you.

Registry categories

Improve discoverability of your packages by categorizing them, and denoting which runtime they are intended for (Node, Deno, etc).

Asset optimization

Our build pipeline will automatically copy assets and optimize png according to configured compression levels.

TypeScript declarations

Generating TypeScript declarations can be non-trivial. With espresso, declarations will be created as part of the build pipeline, according to the configured compilation target (es2018, etc).

Current roadmap

August v0.1 - Workspace management & package building

  • Manifest files (esp.toml)
  • Workspace (monorepo) support
  • Topological package graph
  • Package selection and filtering
  • Package building (with swc)
  • ESM only validation checks
  • ES compilation targets
  • TypeScript declaration generation
  • Optimizing assets (png)
  • espm build command
  • espm init command
  • espm new command

September v0.2 - Package publishing

  • Registry: OAuth APIs
  • Registry: Package publishing endpoints
  • Registry: Package building via agents/queues
  • Categories and keywords
  • JS runtime detection
  • Namespace reserving
  • Pre-publish validation checks
  • Readme, changelog, and license support
  • Release channels (stable, nightly, etc)
  • espm login command
  • espm version command
  • espm publish command

October v0.3 - Dependency installation

  • Lockfile format (espm.lock)
  • Dependency graph
  • Dependency installation
  • Version resolution
  • Stand-alone vendor linker
  • Node modules compatibility linker
  • espm install command
  • espm add command
  • espm remove command

Learn more

Support the project

espresso is an experiment, a proof of concept. If there's enough interest and support, we'll keep working on it to fruition!

With that being said, help test and verify the ideas behind espresso!

Test espresso

Share your thoughts

We're looking to gather interest in espresso, and to document all the pain points you have with the current ecosystem and state of things. Please spend a few minutes answering this survey!

Take survey

Join the waitlist

Want to reserve a namespace before the registry is publicly available? Be notified about major milestones? Or simply contribute in general?

A moonrepo, Inc. product. Copyright 2023.

IN DEVELOPMENT