Skip to content
This page was generated and translated with the assistance of AI. If you spot any inaccuracies, feel free to help improve it. Edit on GitHub

Quick Start ​

This guide walks you through starting Fenfa, creating a product, uploading a build, and sharing the download page -- all in under 5 minutes.

Step 1: Start Fenfa ​

bash
docker run -d --name fenfa -p 8000:8000 fenfa/fenfa:latest

Open http://localhost:8000/admin in your browser. Log in with the default admin token: dev-admin-token.

Step 2: Create a Product ​

  1. In the admin panel, click Products in the sidebar.
  2. Click Create Product.
  3. Fill in the product details:
    • Name: Your app name (e.g., "MyApp")
    • Slug: URL-friendly identifier (e.g., "myapp") -- this becomes the download page URL
    • Description: Brief description of your app
  4. Click Save.

Step 3: Add a Variant ​

A variant represents a platform-specific build target. Each product can have multiple variants (iOS, Android, macOS, etc.).

  1. Open the product you just created.
  2. Click Add Variant.
  3. Configure the variant:
    • Platform: Select the target platform (e.g., "ios")
    • Display Name: Human-readable name (e.g., "iOS App Store")
    • Identifier: Bundle ID or package name (e.g., "com.example.myapp")
    • Architecture: CPU architecture (e.g., "arm64")
    • Installer Type: File type (e.g., "ipa", "apk", "dmg")
  4. Click Save.

Step 4: Upload a Build ​

Via Admin Panel ​

  1. Navigate to the variant you created.
  2. Click Upload Release.
  3. Select your build file (IPA, APK, DMG, etc.).
  4. Fill in version and changelog (optional -- Fenfa auto-detects from IPA/APK metadata).
  5. Click Upload.

Via API (CI/CD) ​

Upload directly from your build pipeline:

bash
curl -X POST http://localhost:8000/upload \
  -H "X-Auth-Token: dev-upload-token" \
  -F "variant_id=var_xxxxx" \
  -F "app_file=@build/MyApp.ipa" \
  -F "version=1.0.0" \
  -F "changelog=Initial release"

Smart Upload

Use the smart upload endpoint for automatic metadata detection:

bash
curl -X POST http://localhost:8000/admin/api/smart-upload \
  -H "X-Auth-Token: dev-admin-token" \
  -F "variant_id=var_xxxxx" \
  -F "app_file=@build/MyApp.ipa"

This auto-extracts the bundle ID, version, build number, and icon from the uploaded package.

Step 5: Share the Download Page ​

Your app is now available at:

http://localhost:8000/products/myapp

This page features:

  • Platform detection -- Automatically shows the correct download button based on the visitor's device.
  • QR code -- Scan to open the download page on a mobile device.
  • Per-release changelogs -- Each release displays its version and changelog.
  • iOS OTA install -- iOS builds use itms-services:// for direct installation (requires HTTPS in production).

Share this URL or the QR code with your testers and stakeholders.

What's Next? ​

GoalGuide
Set up iOS ad-hoc distribution with UDID bindingiOS Distribution
Configure S3/R2 for scalable file storageConfiguration
Automate uploads from CI/CDUpload API
Deploy behind Nginx with HTTPSProduction Deployment
Add Android, macOS, and Windows variantsPlatform Variants

Released under the Apache-2.0 License.