Documentation Index Fetch the complete documentation index at: https://mintlify.com/meteor/meteor/llms.txt
Use this file to discover all available pages before exploring further.
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)
List Core Packages
Using Core Packages
# From the Meteor repository root
ls packages/
# Example output:
accounts-base/
accounts-password/
ddp/
ddp-client/
ddp-server/
mongo/
minimongo/
tracker/
reactive-var/
...
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
Published to Atmosphere by the community:
meteor add username:package-name
npm Packages
Meteor fully supports npm packages:
meteor npm install react react-dom
Package Structure
Every Meteor package has a package.js file that defines its metadata and configuration.
Basic package.js
Package . describe ({
name: 'myusername:mypackage' ,
version: '1.0.0' ,
summary: 'A short description of the package' ,
git: 'https://github.com/myusername/mypackage' ,
documentation: 'README.md'
});
Package . onUse ( function ( api ) {
// Minimum Meteor version
api . versionsFrom ( '3.0' );
// Dependencies
api . use ( 'ecmascript' );
api . use ( 'mongo' );
// Export symbols
api . export ( 'MyAPI' );
// Add files
api . addFiles ( 'mypackage.js' );
});
Package . onTest ( function ( api ) {
api . use ( 'ecmascript' );
api . use ( 'tinytest' );
api . use ( 'myusername:mypackage' );
api . addFiles ( 'mypackage-tests.js' );
});
Real Example: meteor Package
The core meteor package (packages/meteor/package.js):
Package . describe ({
summary: "Core Meteor environment" ,
version: '2.2.0' ,
});
Package . registerBuildPlugin ({
name: "basicFileTypes" ,
sources: [ 'plugin/basic-file-types.js' ]
});
Package . onUse ( function ( api ) {
api . use ( 'isobuild:compiler-plugin@1.0.0' );
api . use ( 'core-runtime' );
api . export ( 'Meteor' );
api . export ( 'global' );
api . addFiles ( 'global.js' , [ 'client' , 'server' ]);
api . addFiles ( 'client_environment.js' , 'client' );
api . addFiles ( 'server_environment.js' , 'server' );
api . addFiles ( 'helpers.js' , [ 'client' , 'server' ]);
api . addFiles ( 'timers.js' , [ 'client' , 'server' ]);
// ... more files
});
Real Example: DDP Package
The ddp package demonstrates package composition:
Package . describe ({
summary: "Meteor's latency-compensated distributed data framework" ,
version: '1.4.2' ,
});
Package . onUse ( function ( api ) {
// Use other packages
api . use ([ 'ddp-client' ], [ 'client' , 'server' ]);
api . use ([ 'ddp-server' ], 'server' );
api . addAssets ( 'ddp.d.ts' , 'server' );
api . export ( 'DDP' );
api . export ( 'DDPServer' , 'server' );
// Make dependencies available to users
api . imply ( 'ddp-client' );
api . imply ( 'ddp-server' );
});
Package API
The package.js API provides several key methods:
Package.describe
Defines package metadata:
Package . describe ({
name: 'username:package' , // Unique identifier
version: '1.0.0' , // Semantic version
summary: 'Short description' , // Max 100 chars
git: 'https://...' , // Git repository
documentation: 'README.md' // Docs file
});
api.use
Declares dependencies:
// Single package
api . use ( 'mongo' );
// Multiple packages
api . use ([ 'mongo' , 'tracker' , 'reactive-var' ]);
// With version constraints
api . use ( 'ddp@1.4.0' );
// Architecture-specific
api . use ( 'accounts-base' , 'server' );
api . use ( 'tracker' , [ 'client' , 'server' ]);
// Weak dependency (optional)
api . use ( 'jquery' , { weak: true });
api.imply
Makes dependencies available to package users:
// When users add your package, they also get these
api . imply ( 'modules' );
api . imply ( 'ecmascript-runtime' );
api . imply ( 'babel-runtime' );
api . imply ( 'promise' );
Example from ecmascript package:
packages/ecmascript/package.js
Package . onUse ( function ( api ) {
api . use ( 'isobuild:compiler-plugin@1.0.0' );
api . use ( 'react-fast-refresh' );
// These packages are implied - users get them automatically
api . imply ( 'modules' );
api . imply ( 'ecmascript-runtime' );
api . imply ( 'babel-runtime' );
api . imply ( 'promise' );
api . imply ( 'dynamic-import' );
});
api.export
Exports symbols globally:
// Export to all architectures
api . export ( 'MyAPI' );
// Export to specific architecture
api . export ( 'ServerAPI' , 'server' );
api . export ( 'ClientAPI' , 'client' );
// Export multiple symbols
api . export ([ 'API1' , 'API2' ]);
api.addFiles
Adds source files to the package:
// Add to all architectures
api . addFiles ( 'common.js' );
// Add to specific architectures
api . addFiles ( 'client.js' , 'client' );
api . addFiles ( 'server.js' , 'server' );
api . addFiles ( 'shared.js' , [ 'client' , 'server' ]);
// Add with options
api . addFiles ( 'bare.js' , 'client' , { bare: true });
api.addAssets
Adds non-JS files:
// TypeScript definitions
api . addAssets ( 'meteor.d.ts' , 'server' );
// Templates, JSON, etc.
api . addAssets ( 'template.html' , 'client' );
Core Package Domains
Meteor’s 140+ core packages are organized by functionality:
Authentication & Accounts
accounts-base Core authentication system Meteor . user ()
Meteor . userId ()
Meteor . users
accounts-password Username/password authentication Accounts . createUser ()
Meteor . loginWithPassword ()
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 new Mongo . Collection ( 'items' )
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 Tracker . autorun (() => {})
reactive-var Single reactive value new ReactiveVar ( initialValue )
session Global reactive dictionary Session . set ( 'key' , value )
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
Package . registerBuildPlugin ({
name: 'compile-ecmascript' ,
use: [ 'babel-compiler' , 'react-fast-refresh' ],
sources: [ 'plugin.js' ],
});
Plugin Types
Compiles source files (e.g., .jsx, .ts, .vue) Plugin . registerCompiler ({
extensions: [ 'jsx' ],
filenames: [ 'component.jsx' ]
}, () => new MyCompiler ());
Minifies JavaScript and CSS Plugin . registerMinifier ({
extensions: [ 'js' ]
}, () => new MyMinifier ());
Lints source code during build Plugin . registerLinter ({
extensions: [ 'js' ]
}, () => new MyLinter ());
npm Dependencies
Packages can declare npm dependencies:
Npm . depends ({
'denque' : '2.1.0' ,
'@babel/runtime' : '7.20.7'
});
From the meteor package:
packages/meteor/package.js
Npm . depends ({
"denque" : "2.1.0"
});
Package Dependencies Resolution
Meteor uses a constraint solver to determine package versions:
Reads package constraints from .meteor/packages
Resolves compatible versions using constraint solver
Writes resolved versions to .meteor/versions
Downloads and caches packages
# Direct dependencies
meteor-base@1.5.2
mongo@2.0.0
reactive-var@1.0.13
# Fully resolved dependency tree
allow-deny@1.1.1
autoupdate@2.0.0
base64@1.0.13
binary-heap@1.0.12
...
Creating Packages
Local Package
Create a package in your app:
meteor create --package username:mypackage
This creates:
packages/
└── username:mypackage/
├── package.js
├── mypackage.js
├── mypackage-tests.js
└── README.md
Publishing to Atmosphere
# Login to Meteor account
meteor login
# Publish package
meteor publish
# Publish release
meteor publish-release
Best Practices
Only depend on packages you actually need. Each dependency adds to bundle size and complexity. // Good - minimal dependencies
api . use ([ 'ecmascript' , 'mongo' ]);
// Avoid - unnecessary dependencies
api . use ([ 'ecmascript' , 'mongo' , 'jquery' , 'underscore' , ... ]);
Only imply packages that are part of your public API: // Good - users need these
api . imply ( 'ddp-client' );
// Avoid - internal dependency
api . use ( 'some-helper' ); // Not imply
Specify version constraints for stability: api . use ( 'ddp@1.4.0' ); // Exact version
api . use ( 'mongo@2.0.0' ); // Compatible updates
api . versionsFrom ( '3.0' ); // Minimum Meteor version
Be explicit about where code runs: api . addFiles ( 'server-only.js' , 'server' );
api . addFiles ( 'client-only.js' , 'client' );
api . addFiles ( 'shared.js' , [ 'client' , 'server' ]);
Next: Isobuild Learn how Meteor’s build system compiles and packages your code