Vulcan uses a package-based architecture, meaning that the entirety of its codebase resides in packages.
Vulcan makes use of many different packages types, so it might be a good idea to get them straight before we move on.
These are listed in your
Meteor Core Packages
In addition to NPM, Meteor also features its own package management system used in parallel. Meteor Core Packages are the packages that make up the Meteor framework itself.
Meteor Remote Packages
Meteor can also load packages from its package server. Remote packages must always follow the
username:package naming convention.
Meteor Local Packages
Finally, Meteor can also load packages from the local file system. These packages can be named whatever you want, and don't need to follow the
Note that if both a local and remote Meteor package use the same name, Meteor will use the local copy.
Different Vulcan packages can play different roles. So here's a quick overview of the different Vulcan package categories you'll come across.
vulcan:core package contains the heart of Vulcan, and itself depends on a set of core packages:
vulcan:lib vulcan:routing vulcan:users
Note that since
vulcan:core already includes these dependencies, you only need to make your own package depend on
These optional packages provide additional features for your Vulcan app.
vulcan:accounts vulcan:forms vulcan:email vulcan:events
Because Vulcan started its life as Telescope, a Hacker News-like forum app, it still includes quite a few packages that are made specifically to help you build a forum-type community app (enabled through the
vulcan:posts vulcan:comments vulcan:newsletter vulcan:notifications vulcan:getting-started vulcan:categories vulcan:voting vulcan:embedly vulcan:api vulcan:rss vulcan:subscribe
These contain the language strings used throughout Vulcan (for the app core, features packages, and forum packages). You need at least one of them enabled.
Accounts package contain the back-end authentication logic used by Meteor's account system. You need at least one of them enabled.
email@example.com # accounts-twitter # accounts-facebook
Any other package that contains your own logic.
Out of the box, four example custom packages are provided:
example-moviescontains a bare-bones forms and data loading example.
example-instagramgoes a little bit further with a simple Instagram clone.
example-forumincludes the original Telescope forum app.
example-customizationshows how to customize and extend the forum example packages without having to modify their code directly.
example-movies # example-movies-full # example-forum # example-customization
Generally speaking, there are two ways a package can be added to your codebase. It can be a top-level dependency, or one of your packages can itself depend on it.
For example, the
example-movies package depends on
vulcan:core, so adding
example-movies will automatically add
vulcan:core as well. This is why
vulcan:core is not listed in your
example-movies can use the English text strings stored in
vulcan:i18n-en-us, it doesn't depend on it. This means you can (for example) swap out
.meteor/packages to get French strings.
A complete list of all Meteor packages currently loaded is stored in the
Note that Meteor packages may be added even if they are not located within the Vulcan root directory, by setting the
METEOR_PACKAGE_DIRS environment variable. For example, the following commands will allow you to modify your
.profile file to add any package located in the
packages subdirectory of your home directory:
cat >> $HOME/.profile export METEOR_PACKAGE_DIRS=$HOME/packages