Manually Installing Factor #

Creating a Factor project from scratch is easy, only a project folder and a package.json file are required. Create an empty directory to start:

mkdir <project-name>
cd <project-name>

Adding Core Dependency #

Next just add @factor/core as a dependency to your project. This will install the terminal CLI and all required tooling:

npm add @factor/core

Add Main File #

Next just add a main file in your project. Typically this is called index.ts. This is where you will add custom code.

Run Setup Routine #

Now that you've added Factor as a dependency. Run Factor from the command line and it should run the setup routine.

npx factor dev

Note: Factor's setup routine only runs if there is no factor property in your package.json.

Package.json #

Once you've run setup, yourpackage.json will look something like this:

{
  "name": "my-app",
  "factor": {
    "load": {
      "app": "index",
      "server": "index"
    },
    "app": {
      "name": "Example",
      "url": "https://example.com",
      "description": "My app",
      "email": "Example <[email protected]>"
    },
    "admins": ["[email protected]"]
  },
  "dependencies": {
    "@factor/core": "^1.0.0"
  }
}

Add A Theme #

Now you'll have a blank app that is ready for some custom code. If you want a head start, then that's what themes are for.

To add a theme, just add it as a dependency:

npm add @factor/theme-alpha

Other Files #

Environmental Variables with .env #

Your .env (dotenv) file is where you'll store all your secret API keys, at least locally. Create this file:

# Authentication Decode/Encode Secret
FACTOR_AUTH_SECRET="random-secret-abc213"

You'll need to add additional keys to this file to enable your "key services" discussed below.

Ignore Files in Git with .gitignore #

Assuming you're using Git to manage your source code, another crucially important file to add to your project is .gitignore. You'll need to make sure you don't commit a few Factor/Node files to source:

# factor
**/dist
**/.factor

# node
node_modules
**/node_modules

# secrets (Important!)
.env
**/**.env
report*
*.log