Install

Get the code into a repository of your own, install two sets of dependencies, and you are ready to configure a Firebase project.

Get the code

Build a website or an app

Your site or app lives in its own repository and keeps Arc CMS as a remote named upstream, so it can pull Arc CMS updates and so npm run check:core has something to compare with.

  1. Create an empty repository for your site or app on your git host.

  2. Clone Arc CMS under your project's name and turn the Arc CMS remote into upstream:

    git clone https://github.com/quadralyst/arccms.git my-app
    cd my-app
    git remote rename origin upstream
  3. Point origin at your own repository and push:

    git remote add origin YOUR_REPOSITORY_URL
    git push -u origin main
  4. Confirm the copy is clean:

    npm run check:core

    It compares your copy with the Arc CMS branch you copied (upstream/main or upstream/dev) and reports "No Arc CMS core file changed". Run it after the dependencies are installed (below) and before every commit.

Already have a copy without the remote? Add it once:

git remote add upstream https://github.com/quadralyst/arccms.git
git fetch upstream

What belongs in your copy and what does not is on Core and custom; pulling updates is on Upgrade Arc CMS.

Work on Arc CMS itself

To change Arc CMS for everyone, clone it directly. In this checkout npm run check:core sees the Arc CMS repository and has nothing to check.

git clone https://github.com/quadralyst/arccms.git
cd arccms

Install the dependencies

The site and the Cloud Functions each have their own dependencies. From the repository root:

npm install
npm install --prefix functions

There is no install hook that does the second one for you. The root .npmrc sets legacy-peer-deps, so peer dependency warnings do not stop the install.

Before every functions build, a prebuild step runs scripts/arc-features.mjs, which writes two files in functions/src/ from src/custom/features.ts. They are ignored by git and brought up to date on every build, so you never edit or commit them.

Check it worked

Run the whole test suite once. It does not need your Firebase project:

npm run test -- --run

Without --run, npm run test keeps watching for changes; press q to leave it.

If it stops with "Node 22.18 or later is needed", your Node is too old (see Requirements).

Next

Configure a project: point your copy at your Firebase project. For a map of what you just downloaded, see A tour of the folders.