# Build and contribute

> The application architecture, local verification and the handbook source.

Redcast is native SwiftUI and AppKit, built in Swift 6 with complete strict concurrency. It supports macOS 26 and later. The app has no third-party package dependencies; the documentation website has its own Node dependencies.

## Build the app

Use Xcode 26 and the committed project:

```bash
xcodebuild -project Tinycast.xcodeproj -scheme Tinycast \
  -configuration Debug CODE_SIGNING_ALLOWED=NO build
```

If `xcode-select` points at Command Line Tools, use the full Xcode path:

```bash
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
  xcodebuild -project Tinycast.xcodeproj -scheme Tinycast \
  -configuration Debug CODE_SIGNING_ALLOWED=NO build
```

For a signed installed Redcast build, use [the fork installer](/docs/install). Debug builds are a separate channel; Xcode project and source names deliberately remain Tinycast.

## Read before changing code

| Document | Covers |
| --- | --- |
| [AGENTS.md](https://github.com/alesha-pro/redcast/blob/main/AGENTS.md) | Repository rules and the short map |
| [Architecture](https://github.com/alesha-pro/redcast/blob/main/docs/architecture.md) | Ownership, feature boundaries and windows |
| [Standards](https://github.com/alesha-pro/redcast/blob/main/docs/standards.md) | Swift style, concurrency, naming and localization |
| [Development](https://github.com/alesha-pro/redcast/blob/main/docs/development.md) | Toolchain, signing, generators and editor setup |
| [Testing](https://github.com/alesha-pro/redcast/blob/main/docs/testing.md) | Standalone harnesses and manual checks |
| [Feature internals](https://github.com/alesha-pro/redcast/tree/main/docs/features) | Invariants and implementation details per feature |
| [Fork tooling](https://github.com/alesha-pro/redcast/blob/main/docs/fork-tooling.md) | Installation, rebranding and upstream sync |

`AppCore` owns long-lived state. Views reach feature coordinators through the environment. Model files stay free of AppKit and SwiftUI. Heavy work leaves the main actor; short UI operations stay synchronous.

## Project generation and tests

`project.yml` owns the Xcode project. After editing it, run `xcodegen generate` and keep both files in the change. Generated emoji, currency, country and Raycast-runtime files must be regenerated by their scripts instead of hand-edited.

```bash
./Scripts/run-tests.sh
./Scripts/lint.sh
```

The harnesses compile shipped Swift sources. A clean Debug build, the pure-model import check and accurate docs are also part of completion. Read testing.md for specific harness requirements and the manual sweep.

## Contribute

Read [CONTRIBUTING.md](https://github.com/alesha-pro/redcast/blob/main/CONTRIBUTING.md), describe the user-visible problem and keep unrelated changes separate. File bugs and feature requests against the fork when they concern Redcast additions.

## This documentation site

The handbook source is **docs-site/** in the separate **redcast-site** website repository. It uses the same engine as upstream: Fumadocs, Next.js static export and Tailwind. Markdown files are in `docs-site/content/docs/`; each section's `meta.json` controls navigation.

```bash
cd docs-site
npm ci
npm run dev
npm run build
npm run check
```

The build exports HTML, a local search index, a sitemap, raw Markdown per page, `llms.txt` and `llms-full.txt`. No server-side model or search service is needed. Production combines this export with the existing English and Russian landing pages and deploys the complete static bundle through Wrangler.

See [the downloadable documentation source](/docs-assets/redcast-docs-source.tar.gz) for publishing, checks and attribution. The handbook describes user workflows; the repository's `docs/features/` remains the detailed engineering reference.
