Skip to main content

Overview

Meteor uses a powerful package system that enables modular application development. Packages can contain JavaScript, CSS, assets, and even build plugins that extend the build system.
Meteor has over 140 core packages and thousands of community packages available through Atmosphere.

Package Types

Core Packages

Core packages are maintained in the official Meteor repository at packages/. They are:
  • Released together with Meteor tool versions
  • Don’t have .versions files (always released from checkout)
  • Located directly in packages/ (not in subdirectories)

Non-Core Packages

Packages in packages/non-core/ or packages/deprecated/ are:
  • Not considered core packages
  • May have different release schedules
  • Often for backwards compatibility
Examples: jquery, coffeescript, less, mongo-decimal

Community Packages

Published to Atmosphere by the community:

npm Packages

Meteor fully supports npm packages:

Package Structure

Every Meteor package has a package.js file that defines its metadata and configuration.

Basic package.js

package.js

Real Example: meteor Package

The core meteor package (packages/meteor/package.js):

Real Example: DDP Package

The ddp package demonstrates package composition:
packages/ddp/package.js

Package API

The package.js API provides several key methods:

Package.describe

Defines package metadata:

api.use

Declares dependencies:

api.imply

Makes dependencies available to package users:
Example from ecmascript package:
packages/ecmascript/package.js

api.export

Exports symbols globally:

api.addFiles

Adds source files to the package:

api.addAssets

Adds non-JS files:

Core Package Domains

Meteor’s 140+ core packages are organized by functionality:

Authentication & Accounts

accounts-base

Core authentication system

accounts-password

Username/password authentication

accounts-oauth

OAuth integration base

accounts-2fa

Two-factor authentication
OAuth providers: accounts-google, accounts-facebook, accounts-github, accounts-twitter, etc.

Database & Data

mongo

MongoDB driver and collections

minimongo

Client-side MongoDB implementation

ddp-server

Server-side DDP implementation

ddp-client

Client-side DDP implementation

Build & Compilation

ecmascript

ES2015+ compilation via Babel

babel-compiler

Babel integration for build plugins

typescript

TypeScript support

rspack

Modern bundler integration

Reactivity

tracker

Reactive computation system

reactive-var

Single reactive value

reactive-dict

Reactive key-value store

session

Global reactive dictionary

Web Server

webapp

HTTP server (Express-based)

autoupdate

Hot code push to clients

reload

Client reload coordination

server-render

Server-side rendering support

Build Plugins

Packages can register build plugins that extend the build system:

Compiler Plugin

Plugin Types

Compiles source files (e.g., .jsx, .ts, .vue)
Minifies JavaScript and CSS
Lints source code during build

npm Dependencies

Packages can declare npm dependencies:
From the meteor package:
packages/meteor/package.js

Package Dependencies Resolution

Meteor uses a constraint solver to determine package versions:
  1. Reads package constraints from .meteor/packages
  2. Resolves compatible versions using constraint solver
  3. Writes resolved versions to .meteor/versions
  4. Downloads and caches packages
.meteor/packages
.meteor/versions

Creating Packages

Local Package

Create a package in your app:
This creates:

Publishing to Atmosphere

Best Practices

Only depend on packages you actually need. Each dependency adds to bundle size and complexity.
Only imply packages that are part of your public API:
Specify version constraints for stability:
Be explicit about where code runs:

Next: Isobuild

Learn how Meteor’s build system compiles and packages your code