A tour of the folders
Know where things live before you change them. Most of the repository is Arc CMS itself (core); a small set of folders and files belongs to your app (the custom space).
The "Kind" column below is the same sorting npm run check:core uses: core is Arc CMS's own code, custom is your app's, and install is the settings of one installation. In an app built on a copy of Arc CMS, you change custom and install files only. Core and custom explains the rule.
The browser app
| Path | Kind | What it holds |
|---|---|---|
src/app/ | Core | The Angular app. src/app/pages/ holds the pages, found by file name (AnalogJS file-based routing), src/app/app.routes.ts the routes that need to be listed by hand, src/app/core/ the services every page uses (install settings, features, languages, the installable app) and src/app/guards/ the route guards. |
src/shared/ | Core | Building blocks shared by the pages: components (such as the table and the page header), services, models, constants and the email compiler. |
src/custom/ | Custom | Your app's pages, routes, admin menu items and changes to both menus, member dashboard, landing pages per role, translations, styles, installable app settings and feature choices (src/custom/features.ts). |
src/environments/ | Install | The Firebase web config for each build (src/environments/environment.ts, src/environments/environment.prod.ts, and one firebase-web.<projectId>.ts per project once you fetch them) and src/environments/arc-install.ts. npm run arc:configure writes the generated ones; you edit only environment.ts and environment.prod.ts. |
src/assets/, src/styles/ | Core | Files bundled into the app, such as the interface translations in src/assets/i18n/, and the global styles. |
src/test/ | Core | Test setup and the providers that page tests share. |
index.html | Core | The page the app starts in. It loads src/custom/styles.css last, so your styles win. |
The server side
| Path | Kind | What it holds |
|---|---|---|
functions/src/ | Core | The Cloud Functions, one folder per area (functions/src/users/, functions/src/search/, functions/src/pages/ and so on). functions/src/all.ts lists every function, functions/src/features/ the functions of each switchable feature, and functions/src/__tests__/ their tests. |
functions/src/custom/ | Custom | Your app's own functions and triggers, the callables the deploy checks, and the collections your app makes searchable. |
functions/scripts/ | Core | Helpers the deploy runs: publishing the generated pages and checking that callables are reachable. |
firestore.rules, storage.rules, firestore.indexes.json | Core | Arc CMS's security rules and database indexes. |
firestore.app.rules, storage.app.rules, firestore.app.indexes.json | Custom | Your app's rules and indexes. They are optional: create them when your app has data of its own. Every deploy combines them with the core files (see Set security rules and indexes). |
firebase.json | Core | The Firebase CLI config: the arccms functions codebase, the rules and index files, and the hosting settings. |
The public site
| Path | Kind | What it holds |
|---|---|---|
public/ | Core | Files served on the site as they are: Arc CMS's default website in public/_site/ (content templates, sample static pages, the sample header and footer, translations), including the placeholder home page, and assets. A website puts its own home page, templates, pages, header and footer in src/custom/site/ instead, which replace these; npm run check:core counts a change here as a core change. See Design templates. |
Tooling, tests and docs
| Path | Kind | What it holds |
|---|---|---|
scripts/ | Core | The command-line tools behind the npm scripts: the guided deploy, arc:configure, the rules build, check:core, the docs tools, and a helper vite.config.ts uses to build with less memory. See npm scripts. Also scripts/arc-admin-script.mjs, which your own scripts use to reach Firebase. |
custom/ | Custom | Your app's command-line scripts, the data they import, and design files. Not bundled into the site. See Run scripts and keep data. |
tests/rules/ | Core | Tests of the combined security rules, run with npm run test:rules. |
tests/rules/custom/ | Custom | Your app's own rules tests. |
docs/ | Core | This developer documentation. |
docs/custom/ | Custom | Your app's own docs. |
.github/ | Custom | Your app's CI workflows. Arc CMS ships none. See Deploy from CI. |
package.json, functions/package.json | Core, reviewed | The dependency lists and npm scripts. An app may add dependencies; npm run check:core lists the change for a look but allows it. |
vite.config.ts, angular.json, tsconfig.json, vitest.config.ts | Core | Build and test configuration. |
Files you will not find in the repository
Some files are made per checkout and are not committed:
.firebaserc: your Firebase project aliases, written byfirebase use --add.arccms.config.json: the install settings of each Firebase project (copyarccms.config.example.jsonto start). See Configure a project.firebase.{projectId}.jsonandfunctions/.env.{projectId}: generated fromarccms.config.jsonbynpm run arc:configureand by the guided deploy..arc-build/: the combined rules and indexes, built before every deploy..arc-deploy-state.json: what the guided deploy remembers about your last deploys.functions/src/*.gen.ts: the list of features the functions build includes, generated fromsrc/custom/features.tsbefore every functions build.