Create an App Fair app
Process overview
Bash/zsh commands; Git Bash on Windows.
Read the inclusion criteria before starting. For a new app, open a discussion before submitting it.
00Install prerequisites
Day compiles Rust against each platform’s native SDK. Development Computer selects your host’s tools and commands; it does not limit the platforms your app can support.
Only local builds need local SDKs. GitHub CI supplies its own build environment.
macOS
- Install GitUse Bash or zsh for the commands below.
- Install rustupRestart your terminal after installation.
- Install Android StudioInstall the SDK and NDK; create an emulator in Device Manager.
- Install XcodeOpen Xcode once and install an iOS simulator runtime.
- Install GTK development packagesGTK 4.10+, libadwaita 1.5+ and pkg-config.
- Install VSCode (optional)An IDE is not required to build and run Day apps; the
daycli can be used without VSCode.
01Install Day
Cargo installs the Day CLI. It creates projects, builds native apps and runs dayscript tests. day doctor checks whether the required tools are available.
For VSCode users, the Day extension adds build and launch controls; rust-analyzer adds Rust completion and navigation. The extension commands are optional and use VSCode’s code CLI.
Any directory
cargo install day-cli
day doctorVSCode extensions (optional)
Run only if you installed VSCode and plan to use it. Skip these commands for CLI-only development.
code --install-extension daybrite.day-vscode
code --install-extension rust-lang.rust-analyzer02Create the Orbit-Notes organization on GitHub
The app token is an arbitrary, unique identifier. It need not match the app name. This workflow uses the token for both the GitHub organization and its repository: Orbit-Notes/Orbit-Notes. The refresh button suggests a name; it does not reserve it.
Installing the App Fair Publisher is required. Grant it access to the app repository when you create it, and keep access enabled. It attaches signed packages and promotes approved pre-releases. Store credentials remain with the App Fair.
GitHub
- Create the organization
- Install the App Fair Publisher (required)Select the newly created organization. Grant access to the app repository when it exists, and keep access enabled.
03Create the app
The App Fair template supplies starter screens, store metadata, a dayscript walkthrough, a website and GitHub Actions workflows. The default platform selection is included.
Day-appfair.toml holds the generated store identities; these must remain stable after publication. The template’s license texts and source notices stay with the project.
Parent directory for your new project
day new app 'Orbit-Notes' --title 'Orbit Notes' --template https://github.com/appfair/day-appfair --no-input
cd 'Orbit-Notes'04Build and test locally
Day projects include mobile and desktop targets by default. The App Fair currently distributes only the iOS and Android versions through the Apple App Store and Google Play Store.
Remove unwanted desktop targets from both [app] targets in Day.toml and targets in .github/workflows/ci.yml. Keep ios-uikit and android-mdc for both mobile stores, and keep web-dom: the template uses it to publish the required project website. Keeping at least one desktop target is useful for fast testing and iteration.
day launch builds and runs the selected target. The dayscript walkthrough checks behavior and captures screenshots; keep dayscript/demo.yaml in step with UI changes.
Inside Orbit-Notes/
Replace the starter screens, icon, listing and walkthrough before testing.
Android
- From Android Studio’s welcome screen, open More Actions → Virtual Device Manager. With a project open, use View → Tool Windows → Device Manager.
- Select Create Virtual Device, choose a phone and system image, and finish the setup. Download the image if prompted.
- Click the device’s Launch button and wait for Android to finish starting.
Android Studio: create and start an emulator
From the app directory, build and launch the Android version:
day doctor --toolkit android
day lint
day launch -p android-mdc
# Close the app before running the walkthrough.
day launch -p android-mdc --script dayscript/demo.yamliOS
- In Xcode, choose Xcode → Open Developer Tool → Device Hub.
- Select an iPhone simulator, or use + to add one with an installed iOS runtime.
- Click Start and wait for the simulator to finish starting.
On older Xcode versions, use Window → Devices and Simulators to configure the device, then Xcode → Open Developer Tool → Simulator to open it. Apple’s simulator guide
day doctor --toolkit uikit
day launch -p ios-uikit
# Close the app before running the walkthrough.
day launch -p ios-uikit --script dayscript/demo.yamlDesktop testing (optional)
If you kept this computer’s default desktop target, use it for quick iterations between mobile tests:
day launchBuild and launch in VSCode (optional)
With VSCode and the Day extension installed, open the project folder containing Day.toml:
code .- Open the Day icon in the activity bar and expand your project’s Targets.
- Tick android-mdc to run on the Android emulator. Leave other targets unchecked.
- For desktop iteration, select macos-appkit for this computer instead.
- Select ios-uikit instead to run on the iOS simulator you started above.
- Press Run in the Day view’s title bar to build and launch. Use Build when you only want to compile.
- Build output appears in the task terminal; compiler errors also appear in Problems. If a toolchain is missing, run Day: Doctor (check toolchains) from the Command Palette.
05Create the app repository
The App Fair expects a public repository named Orbit-Notes/Orbit-Notes. Source, license files and Cargo.lock belong in the initial commit; credentials and build output do not.
Git manages the local history. The remote can be created in GitHub’s website or with the optional GitHub CLI.
Both methods connect the same local project to the same remote. Choose one; running both would try to create the repository and its origin remote twice.
Inside Orbit-Notes/
Commit the project, then choose one method to create the remote repository.
git init -b main
git add .
git diff --cached --stat
git commit -m 'Create Orbit Notes'GitHub CLI
Create the repository and connect the local project with the optional GitHub CLI.
gh auth login
gh auth setup-git
gh repo create 'Orbit-Notes/Orbit-Notes' --public --source=. --remote=originGitHub website
Create a public repository without a README, license or .gitignore, then connect it:
git remote add origin 'https://github.com/Orbit-Notes/Orbit-Notes.git'- Check Publisher repository accessEnsure the App Fair Publisher can access this repository.
06Enable the website
The template publishes the website through GitHub Actions. The Pages environment must permit deployments from both the main branch and release tags, because a release also updates download links.
Keep the generated site published for validation and review, even if you use a separate landing page. The default GitHub Pages address is sufficient. A custom domain is optional and requires additional setup. It can be added later if you decide to acquire a domain for the project.
GitHub repository settings · before the first push
- Configure PagesSet Source to GitHub Actions.
- Configure deployment rulesUnder github-pages, allow main and v* tags. If the environment is missing, return after the first deployment.
07Push and inspect CI
A push starts lint, platform builds and the walkthrough across the configured locales and themes. CI produces test results, packages and screenshots, then publishes the website and web app.
A passing run confirms the automated checks. Review its screenshots for layout or rendering problems before releasing.
Inside Orbit-Notes/
git push -u origin main- Inspect the CI runWait for a passing run and review its screenshots.
- Check the website
08Release v0.1.1
A version tag pins the source the App Fair will review. Tagging starts CI and creates a public pre-release containing packages, gallery.json and screenshots.zip. A draft release is not accessible to the catalog; a separate manual release is unnecessary.
The template starts at version 0.1.0, build 1. The patch bump below produces version 0.1.1, build 2; the release link and submission commands use that version. If your project has a different starting version, use the tag reported by Day instead. Once submitted, correct a faulty release with a new tag instead of moving the reviewed tag.
Inside Orbit-Notes/
Commit app changes first. From a clean working tree, bump the patch version and build number, update Cargo.lock, commit, tag and push in one command.
day metadata --version-bump patch --git-push09Open the catalog pull request
The catalog entry, apps/Orbit-Notes.yaml, records the release tag, full commit hash and requested stores. The helper generates it from release metadata in a separate fork of the App Fair catalog. Link your first-app discussion in the pull request.
The App Fair rebuilds that pinned commit for review. Metadata corrections stay on the catalog pull request; source changes require a new app release and an updated submission.
A separate working directory · first submission
After release assets are available, choose one method. Both use Git and the Python catalog helper; review the generated file before committing.
GitHub CLI
With gh authenticated, fork the catalog, prepare the entry and open a pull request.
gh repo fork appfair/appfair-apps --clone --remote -- appfair-submission
cd appfair-submission
git fetch upstream main
git switch -c 'add-Orbit-Notes-v0.1.1' upstream/main
python3 -m venv ../appfair-submit-venv
../appfair-submit-venv/bin/python -m pip install PyYAML
../appfair-submit-venv/bin/python scripts/queue.py add 'Orbit-Notes' --tag 'v0.1.1'
../appfair-submit-venv/bin/python scripts/queue.py validate 'apps/Orbit-Notes.yaml'
git diff -- 'apps/Orbit-Notes.yaml'
cat 'apps/Orbit-Notes.yaml'
git add 'apps/Orbit-Notes.yaml'
git commit -m 'Add Orbit Notes v0.1.1'
git push -u origin HEAD
GH_USER=$(gh api user --jq .login)
gh pr create --repo appfair/appfair-apps --base main \
--head "$GH_USER:add-Orbit-Notes-v0.1.1" \
--title 'Add Orbit Notes v0.1.1' \
--body 'Submit Orbit-Notes/Orbit-Notes at v0.1.1. Release: https://github.com/Orbit-Notes/Orbit-Notes/releases/tag/v0.1.1.'- Add your first-app discussion link to the pull request description.
GitHub website
Create a personal fork. Replace YOUR-LOGIN below with your GitHub username; configure Git HTTPS credentials or SSH before pushing.
git clone https://github.com/YOUR-LOGIN/appfair-apps.git appfair-submission
cd appfair-submission
git remote add upstream https://github.com/appfair/appfair-apps.git
git fetch upstream main
git switch -c 'add-Orbit-Notes-v0.1.1' upstream/main
python3 -m venv ../appfair-submit-venv
../appfair-submit-venv/bin/python -m pip install PyYAML
../appfair-submit-venv/bin/python scripts/queue.py add 'Orbit-Notes' --tag 'v0.1.1'
../appfair-submit-venv/bin/python scripts/queue.py validate 'apps/Orbit-Notes.yaml'
git diff -- 'apps/Orbit-Notes.yaml'
cat 'apps/Orbit-Notes.yaml'
git add 'apps/Orbit-Notes.yaml'
git commit -m 'Add Orbit Notes v0.1.1'
git push -u origin HEAD- Open your fork on GitHub and select Compare & pull request.
- Use appfair/appfair-apps as the base repository, main as the base branch, and add-Orbit-Notes-v0.1.1 as the head branch.
- Link https://github.com/Orbit-Notes/Orbit-Notes/releases/tag/v0.1.1 and your first-app discussion in the description, then create the pull request.
10Track approval and store deployment
After a maintainer approves publication, the App Fair signs and submits the packages through its store accounts. Apple and Google then process and review the app. A merged catalog pull request does not mean the app is live; the store listings confirm availability.
Updates keep the same organization, repository and store IDs. Each version goes through a new release and catalog pull request.
Catalog PR and linked workflow run
- Review your catalog pull requestAddress review comments.
- Track store deploymentFollow the linked workflow run and check the published listings.