Installation — Build, Run, and Local Development
Install Dax Pro locally: create the project folder, run the first build, start the development server, and run Decap CMS side by side with two terminals. Guidance on local-first workflow before deploying to the cloud.
From ZIP to Running Site
In the previous chapter you downloaded Dax Pro from Gumroad, installed the .NET 9 SDK, and extracted the project ZIP. The project files exist on your machine — but they are just text. Nothing has compiled them yet.
This chapter turns those files into a running website. It walks through:
1. Creating a clean project folder — where to put Dax Pro and why location matters
2. Opening the project in a terminal — how to navigate there in Windows, Linux, and macOS
3. Running the first build — dotnet run -- build and what it produces
4. Starting the local development server — dotnet run -- start and what it serves
5. Running Decap CMS locally — the two-terminal pattern that makes local editing work
6. Deciding between local and cloud — why you should build locally first and deploy later
Read every step. Installation problems in static site generators almost always come from skipping steps or from running commands in the wrong directory.
Step 1 — Create a Clean Project Folder
Before running anything, decide where the project lives. The location matters for two reasons.
First, the path must not contain spaces. The .NET CLI and many static site tools break when the working directory has spaces in its path. C:\Users\John\My Projects\dax pro will cause inexplicable failures. C:\Users\John\Projects\dax-pro will work every time.
Second, the path must not be inside a synchronized cloud folder (iCloud Drive, OneDrive, Dropbox, Google Drive). These services sometimes modify files during a build or lock them, both of which cause intermittent build failures that are hard to diagnose.
Creating the folder on Windows
1. Open File Explorer
2. Navigate to your user directory: C:\Users\YourName
3. Right-click in the empty space and choose New → Folder
4. Name it Projects (no spaces, no accents)
5. Double-click to enter Projects
6. Right-click inside and choose New → Folder
7. Name it dax-pro
8. You should now have C:\Users\YourName\Projects\dax-pro
Move the extracted Dax Pro files into this folder. If you extracted the ZIP directly to Downloads\dax-pro, you have two options:
- Option A: Move the whole
dax-profolder intoC:\Users\YourName\Projects\ - Option B: Delete the extracted folder from Downloads and re-extract the ZIP directly into
C:\Users\YourName\Projects\
The end state should be:
C:\Users\YourName\Projects\dax-pro\
├── _data\
├── content\
├── templates\
├── public\
├── Dax.csproj
├── Program.cs
├── README.md
├── LICENSE
└── netlify.toml
Creating the folder on Linux
mkdir -p ~/projects/dax-pro
cd ~/projects/dax-pro
Move the extracted files into ~/projects/dax-pro:
unzip ~/Downloads/dax-pro-v1.0.zip -d ~/projects/
After extraction, the project lives at ~/projects/dax-pro/. Confirm:
ls -la ~/projects/dax-pro/
Creating the folder on macOS
mkdir -p ~/Projects/dax-pro
cd ~/Projects/dax-pro
Move the extracted files into ~/Projects/dax-pro. macOS folder names are case-insensitive by default, so Projects and projects are the same folder. That is fine.
Confirm the contents:
ls -la ~/Projects/dax-pro/
Step 2 — Open a Terminal in the Project Folder
Every command in the rest of this chapter assumes you are inside the dax-pro directory. If you are not in the right directory, dotnet run will look for Dax.csproj in the wrong place and fail with a confusing error.
Opening a terminal on Windows
The easiest way is through File Explorer:
1. Open File Explorer
2. Navigate to C:\Users\YourName\Projects\dax-pro
3. Click the address bar at the top
4. Type cmd and press Enter
A Command Prompt opens at that folder. You will see the folder path at the top of the window.
Alternatively, use PowerShell:
1. In File Explorer, navigate to the project folder
2. Right-click in the empty space
3. Choose Open in Terminal (Windows 11) or Open PowerShell window here (Windows 10)
To confirm you are in the right place, run:
dir
You should see _data, content, templates, public, Program.cs, Dax.csproj, and the other project files.
Opening a terminal on Linux
cd ~/projects/dax-pro
pwd
pwd should print /home/YourName/projects/dax-pro. Confirm contents with:
ls
Opening a terminal on macOS
cd ~/Projects/dax-pro
pwd
pwd should print /Users/YourName/Projects/dax-pro. Confirm:
ls
Opening the project in VS Code (recommended)
If you are using VS Code, skip the terminal navigation entirely. From the project folder:
code .
On Windows, this works if you installed VS Code with the "Add to PATH" option (the default). On macOS, you may need to install the code command first by opening VS Code, pressing Cmd + Shift + P, and choosing Shell Command: Install 'code' command in PATH.
Once VS Code is open, press ` Ctrl + ` (Windows/Linux) or Cmd + ` (macOS) to open the integrated terminal. It opens in the project directory automatically.
Step 3 — Run the First Build
The first build compiles the DAX engine (C#), reads your content and data files, applies templates, and writes static HTML to the site/ folder.
In your terminal, run:
dotnet run -- build
The first run will take 30–90 seconds because the SDK downloads NuGet packages and compiles the C# project. Subsequent builds take about one second.
You will see output like this:
D.A.X - Dotnet by AXcora
[DAX] build start...
[DAX] loaded yaml: config
[DAX] loaded yaml: footer
[DAX] loaded yaml: metadata
[DAX] loaded yaml: nav
[DAX] built 49 pages to /site - collections: posts,services - tags: 31
[DAX] built at 20/10/2026 15.40.23
The critical line is:
[DAX] built 49 pages to /site - collections: posts,services - tags: 31
This tells you:
folder and servicesIf the numbers differ on your machine, that is expected — your content is different from the demo content. What matters is that the build succeeded without errors.
What the Build Produces
Open the site/ folder in your file browser or in VS Code. You will see:
site/
├── index.html ← the homepage
├── about/
│ └── index.html ← /about/
├── contact/
│ └── index.html ← /contact/
├── posts/
│ ├── index.html ← /posts/ list
│ └── dax-pro-vs-blazor-wasm/
│ └── index.html ← /posts/dax-pro-vs-blazor-wasm/
├── services/
│ └── index.html ← /services/ list
├── tags/
│ └── index.html ← /tags/ index
├── css/
│ └── style.css ← copied from public/css/
├── js/
│ └── main.js ← copied from public/js/
├── images/
│ └── (your images) ← copied from public/images/
├── admin/
│ ├── index.html ← Decap CMS entry
│ ├── config.yml ← Decap CMS collections
│ └── daxlogo.webp ← Decap logo
├── sitemap.xml ← auto-generated
├── robots.txt ← auto-generated
└── rss.xml ← auto-generated
Every folder with an index.html inside is a URL path. /posts/dax-pro-vs-blazor-wasm/index.html becomes https://yoursite.com/posts/dax-pro-vs-blazor-wasm/.
The site/ folder is the final output. This is what you upload to a static host. During development, this folder is regenerated every time you change content, templates, or data.
If the Build Fails
Common errors and their causes:
MSBUILD : error MSB1009: Project file does not exist.
You are not in the dax-pro directory. Run cd to the correct folder and try again.
error CS0246: The type or namespace name 'X' could not be found.
A template file is missing or malformed. Check templates/ and confirm all files are present.
[BUILD ERROR] Object reference not set to an instance of an object.
A YAML file or Markdown frontmatter has a structural problem. Check _data/.yaml and content/.md for missing quotes, mismatched indentation, or Windows line endings.
UnauthorizedAccessException: Access to the path 'site/...' is denied.
Another program (often a file explorer or editor preview) is locking a file. Close it and try again.
Build hangs for 30+ seconds on the first run
The SDK is downloading NuGet packages. This is normal and happens only once. Wait for it to complete.
Step 4 — Start the Local Development Server
Once the build succeeds, you can start a local web server to preview your site. Run:
dotnet run -- start
The first time you run this, the DAX engine runs a build first (if necessary), then starts an HTTP server. You will see:
[DAX] serving at http://localhost:8080/
Open a browser and navigate to:
http://localhost:8080/
You will see your Dax Pro homepage. Click through the navigation, open a blog post, load /services/, submit the contact form — everything should work exactly as it will in production.
How the Development Server Works
The dotnet run -- start command starts a lightweight HTTP server on port 8080. It serves files from the site/ folder. It also starts a file watcher — every time you save a change to a .md, .dax, .yaml, or .css file, the server automatically rebuilds and the browser reflects the change when you refresh.
You do not need to restart the server after editing content or templates. Save the file, refresh the browser, see the change.
The server output shows rebuild events:
[DAX] changed posts.md -> rebuild
[DAX] built 49 pages to /site - collections: posts,services - tags: 31
Stopping the Server
Press Ctrl + C in the terminal. The server stops immediately. To restart it later, run dotnet run -- start again.
Changing the Port
If port 8080 is already in use (uncommon but possible), you can stop the conflicting process or edit Program.cs to use a different port. For most users, port 8080 is available by default.
Step 5 — Running Decap CMS Locally
Decap CMS is an editorial interface. When you open /admin/ in your browser, it loads a React application that lets you edit content through forms. Each save writes a Markdown or YAML file back into your project.
This means Decap CMS needs two things running simultaneously:
1. The Dax Pro development server — so the browser can load /admin/ and you can preview content
2. The Decap CMS proxy server — so the editorial interface can write files to your local project
Without the proxy server, Decap CMS will open in your browser but cannot save changes. You will see an error like "Failed to persist entry" when you click Publish.
The Two-Terminal Pattern
To use Decap CMS locally, you need two terminal windows running simultaneously.
Terminal 1 — the Dax Pro development server:
cd ~/Projects/dax-pro # or your project path
dotnet run -- start
Leave this terminal running. It serves the site at http://localhost:8080/.
Terminal 2 — the Decap CMS proxy server:
cd ~/Projects/dax-pro
npx decap-server
This starts a lightweight local server that Decap CMS uses to write files to your filesystem. It listens on port 8081 by default.
If you do not have Node.js installed, you have two options:
Opening the Editor
With both terminals running:
1. Open a browser
2. Navigate to http://localhost:8080/admin/
3. You will see the Decap CMS login screen
4. Click Login — because local_backend: true is set in config.yml, Decap CMS connects to the proxy server running in Terminal 2
5. You are now in the editorial interface
You can edit any collection: homepage, navbar, footer, posts, services, pages, contact. Every save writes back to the file system in your project folder. The development server detects the change and rebuilds automatically.
To verify: edit the site title in ⚙ Settings → Site Metadata, click Publish, wait two seconds, refresh http://localhost:8080/. The new title appears.
Closing the Local Session
When you are done editing:
1. Press Ctrl + C in Terminal 2 to stop the Decap CMS proxy
2. Press Ctrl + C in Terminal 1 to stop the development server
Your changes are saved to the project files. They will be included in the next build.
If You Skip Decap Locally
You do not have to run Decap CMS during development. You can edit Markdown and YAML files directly in VS Code. The development server rebuilds automatically on save.
The choice depends on your workflow:
| Workflow | When to use |
|---|---|
| Edit Markdown directly | Solo developer, comfortable with YAML |
| Run Decap CMS locally | Team with editors who need a visual interface |
| Edit locally, Decap in cloud | Recommended for most projects (see next section) |
Step 6 — Local First, Cloud Later
This is the most important architectural recommendation in the entire documentation. Read it carefully.
Build and validate your site entirely locally before touching any cloud service.
The reason is simple: cloud deployment adds an entire layer of potential failure — DNS, build pipeline, Git authentication, CMS authentication, environment variables — none of which you can debug if the local build itself is broken. If you deploy to the cloud before your local build works, every problem becomes two problems, and you cannot tell whether the cause is your project or the cloud configuration.
The recommended workflow is:
Phase 1 — Local Development
1. Install the SDK and unpack Dax Pro (previous chapter)
2. Run dotnet run -- build and confirm it succeeds
3. Run dotnet run -- start and preview the site at http://localhost:8080/
4. Edit content, tweak _data/*.yaml, change the CSS — all locally
5. Verify every page renders correctly, every link works, every image loads
6. If you plan to use Decap CMS, run the two-terminal pattern and test one save
7. Only when the site looks exactly how you want it locally — proceed to Phase 2
Phase 2 — Cloud Deployment
1. Push the project to a Git repository (GitHub, GitLab, or Azure Repos)
2. Connect the repository to Netlify, Vercel, or Azure Static Web Apps
3. The cloud service builds your site using the same dotnet run -- build command
4. Configure Decap CMS with Netlify Identity or Git Gateway
5. Invite editors via the cloud dashboard
6. Done
This order prevents the classic failure mode where a user deploys to Netlify on day one, hits a build error, and spends three days debugging whether the problem is their YAML, their Netlify configuration, or their Decap CMS authentication. By validating locally first, you eliminate half of those variables.
What About Decap CMS in the Cloud?
You can configure Decap CMS locally (as described in Step 5). But for most projects, the local Decap setup is unnecessary friction. Here is the pragmatic approach:
. They commit changes. Netlify rebuilds. Everything works.This means you only need to run one terminal during development (dotnet run -- start). You do not need Node.js. You do not need npx decap-server. You do not need two terminals.
The local Decap setup exists for teams that want to test the editorial workflow before deploying. If you are a solo developer or a small team, skip it.
The Cloud-First Path — When It Makes Sense
There is exactly one situation where cloud-first makes sense: when you are deploying a site whose content is entirely managed by a non-technical editor from day one.
Example: a marketing team has purchased Dax Pro, hired you to build the site, and wants to start writing content through a CMS interface immediately. In that case, you would:
1. Build the site structure locally (theme, layout, pages)
2. Deploy to Netlify
3. Configure Decap CMS in the cloud
4. Invite the editor
5. The editor writes content via Decap; every save triggers a cloud rebuild
Note that even in this scenario, the theme and layout were still built locally. Only the content editing happens in the cloud. The distinction is: build locally, edit in the cloud. Never build in the cloud before building locally.
A Warning About Repeated Cloud Rebuilds
If you configure Decap CMS in the cloud and then continue making structural changes (theme, layout, data files) locally, every local change you push to Git will trigger a cloud rebuild. This is fine for a few changes, but it becomes slow and expensive if you are making hundreds of small commits.
The recommended rhythm:
1. Development phase: all structural work locally, no Decap, no cloud rebuilds
2. Content phase: site is deployed, Decap configured, editors write content, cloud rebuilds on every save
3. Maintenance phase: rare structural changes are made locally, tested locally, then pushed to Git once — one cloud rebuild
Follow this rhythm and your cloud build minutes stay low.
Quick Reference — The Commands You Will Use
For day-to-day use, you only need these commands. Bookmark this section.
Build the site
dotnet run -- build
Produces site/. Use this when you want to generate the final output for deployment.
Start the development server
dotnet run -- start
Serves the site at http://localhost:8080/ and rebuilds on every file change.
Run Decap CMS locally (optional, two-terminal)
# Terminal 1
dotnet run -- start
Terminal 2
npx decap-server
Then open http://localhost:8080/admin/.
Stop the development server
Ctrl + C
Check the SDK version
dotnet --version
Should print 9.0.x.
Build and deploy to production
dotnet run -- build
Upload the site/ folder to your static host
Or push to Git and let Netlify/Vercel build automatically
What You Have Now
After completing this chapter, you have:
project folder on your machine with 40+ pagesThe next chapter covers Configuration — editing metadata.yaml, nav.yaml, and footer.yaml` to match your brand, your navigation, and your footer structure.
If your build succeeded and the site looks correct in your browser, you are ready. If anything failed, re-read the section covering the failure — the answer is in this chapter, in the previous chapter, or in the troubleshooting section of the README.
→ Continue to Configuration