Sno Station
Sno Station은 AI 에이전트를 하나의 팀으로 묶는 오픈소스 워크스테이션으로, 로컬 머신에서 에이전트 협업을 가능하게 함
Forum Copilot XenForo용 무료 오픈소스 네이티브 모바일 앱
Forum Copilot is a free, open-source native mobile app for XenForo. Launch your community on iOS and Android, support multiple forums in one app, or build your own from the public codebase.
플러그인Dart · PHPGitHub @forumcopilot온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Open-source Flutter template for a single-forum XenForo mobile app (iOS, Android, macOS). Fork it, point it at your forum, ship your own branded app.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
This repository is an open-source Flutter template for building a single-forum mobile app for XenForo communities.
The app connects directly to one XenForo forum through the Forum Copilot add-on endpoint (for example forumcopilot.php) and does not require forumcopilot.com runtime APIs.
Forum Copilot: the only full-featured mobile app built specifically for XenForoREADME 전문 보기 ↗This repository is an open-source Flutter template for building a single-forum mobile app for XenForo communities.
The app connects directly to one XenForo forum through the Forum Copilot add-on endpoint (for example forumcopilot.php) and does not require forumcopilot.com runtime APIs.
Current release: 1.0.1 (October 2026), the same app as the official Forum Copilot app 1.0 plus one fix from it, with add-on 1.10.0. What changed: CHANGELOG.md.
forumcopilot.com is the home of this project. Forum Copilot is not a generic forum reader with a XenForo adapter bolted on: it speaks XenForo's own API through a purpose-built add-on, so threads, reactions, polls, attachments, conversations, alerts, custom profile fields, passkeys and push notifications all work the way your members expect. There are two ways to give your community that experience:
| Hosted Forum Copilot app | Build your own from this template | |
|---|---|---|
| Cost | Free. The app is free on the App Store and Google Play; hosted push is free too. | Free (MIT), plus your own Apple and Google developer accounts. |
| Setup | Install the add-on below; it registers your forum with forumcopilot.com automatically. Then tell your members. | Install the add-on, edit one config file, build and publish the app yourself. |
| Branding | Forum Copilot branding; your forum appears alongside others. | Your name, icon and store listing. |
| Best for | Most forums. Try this first and confirm everything works before deciding to build. | Communities that want their own branded app in the stores. |
Want a branded app without doing the build yourself? The Forum Copilot team builds and publishes customised, fully branded apps for individual forums, including store listing, push setup and ongoing maintenance. See forumcopilot.com/support or email [email protected] for a quote.
Project links:
Whichever path you choose, your forum needs the Forum Copilot Mobile App API add-on. It exposes the forumcopilot.php endpoint the app talks to, handles device registration for push, and adds the smart banner that invites web visitors to open the app. The add-on is MIT licensed and its source ships in this repository under plugins/FC_XenForo2/; the add-on changelog lists the latest version.
addon-v… release on GitHub Releases. App 1.0 is built for add-on 1.9.0 or newer; with an older add-on it still works, but sign-in on the website, account deletion, drafts shared with the web editor, notification channels and the forum's colours stay off. Or build it yourself: the source is in plugins/FC_XenForo2/upload/; zip that upload/ folder so the archive contains upload/src/addons/ForumCopilot/ and upload/js/ForumCopilot/.forumcopilot.php into your forum root, registers your forum with forumcopilot.com, and shows a success or error message plus a single-sign-on link to your forum's page on forumcopilot.com, where you can edit how it is listed in the hosted app (name, description, logo). Push and the smart banner are configured on this options page, not on forumcopilot.com.curl -s -X POST -H 'Content-Type: application/json' -d '{"method":"getConfig"}' https://your.forum/forumcopilot.php
should return JSON with "result":true, the add-on version and XenForo's systemVersion.lib/config/app_forum_config.dart at your forum.This app provides a full-featured forum experience for a single XenForo site:
gen-l10n.xenforo_core and Forum Copilot add-on API.^3.6.1^3.6.1Follow these steps to build and start the app on macOS.
flutter is on your PATH.xcode-select --install
flutter doctor
Fix any reported issues (e.g. Xcode license, Android licenses) before continuing.Click Use this template → Create a new repository. You get a repository of your own — private if you like — that starts from a single commit. Clone it:
git clone https://github.com/<you>/<your-app>.git
cd <your-app>
(Or open your existing clone in your editor.)
A template copy shares no history with this repository, so later releases can't simply be merged into it. If you want to keep pulling them in, clone this repository instead, rename its remote with git remote rename origin upstream, and push to a repository of your own; git pull upstream main then brings in each release like any other merge.
Edit lib/config/app_forum_config.dart and set at least:
static const String forumName = 'My XenForo Forum';
static const String forumBaseUrl = 'https://forum.example.com';
static const String pluginEndpoint = 'forumcopilot.php';
Optionally set forumDescription, logoUrl, backgroundUrl, androidPackageName, and androidSha256CertFingerprint as needed. Push has its own section: Push notifications.
Members who sign in on your website with Google, Facebook, a passkey or two-step have no password to type into the app; they sign in through the website instead ("Sign in on the forum's website", in the system browser sheet). For that, give the app a URL scheme of its own in browserLoginScheme (not forumcopilot, which the official app uses), put the same scheme in android/app/src/main/AndroidManifest.xml (the flutter_web_auth_2 CallbackActivity), and add it to the add-on option App sign-in schemes in your admin panel (Options > ForumCopilot Options). The button shows once the forum lists the app's scheme.
forumName and forumBaseUrl can also be overridden at build time without editing the file, which is handy for a CI build, a preview against a staging forum, or the benchmark harness:
flutter run -d macos \
--dart-define=FORUM_NAME="My Forum" \
--dart-define=FORUM_BASE_URL=https://forum.example.com
The values committed in app_forum_config.dart remain the defaults.
From the project root:
flutter pub get
The app uses local packages (forumcopilot_sdk, xenforo_core) and generated localizations. Run:
./buildlib.sh
This runs build_runner in packages/forumcopilot_sdk and then flutter gen-l10n. On Windows run buildlib.bat instead. Re-run it whenever you change an ARB file or an annotated model in the SDK.
A fresh clone does not build until two things are in place, even if you never turn on push:
macos/Runner.xcworkspace in Xcode, select the Runner target and choose your Team under Signing & Capabilities. The template's entitlements (push, associated domains) require one; without it the build stops with Signing for "Runner" requires a development team. Do the same in ios/Runner.xcworkspace before building for iOS.GoogleService-Info.plist and google-services.json to exist, and the repository ships only *.example placeholders. Create your Firebase project and download the real files now (Push notifications, steps 1 and 2); the rest of the push setup can wait.flutter run -d macos
If multiple devices are available, pick macos from the list. The app will start and connect to the forum configured in app_forum_config.dart.
flutter build macos
The built app is under build/macos/Build/Products/Release/. You can sign and distribute it according to Apple’s guidelines.
macos/Runner/DebugProfile.entitlements and macos/Runner/Release.entitlements (e.g. com.apple.security.files.user-selected.read-write). See docs/guides/MACOS_FILE_PICKER_SETUP.md for details.macos/Runner/GoogleService-Info.plist; see Push notifications.Push stays off until you connect the app to your own Firebase project. Your app has its own bundle ID and is signed with your own Apple and Google accounts, so its notifications have to go through a Firebase project you own. Forum Copilot's hosted push only serves the official Forum Copilot app; it cannot send to a branded build.
You don't run any extra server. The XenForo add-on sends notifications to Firebase itself, using a key from your Firebase project:
alert on your forum → add-on on your forum server → Firebase Cloud Messaging → Apple / Google → your app
You need:
.p8) with its Key ID;Firebase and Apple rename their menus from time to time, so the labels below may drift slightly.
Firebase ties each app entry to an exact bundle ID or package name, so set yours before you register anything. All three platforms start as com.example.forumapp:
| Platform | Where to change it |
|---|---|
| iOS | Xcode, Runner target, Signing & Capabilities: Bundle Identifier and Team (for all build configurations). |
| macOS | macos/Runner/Configs/AppInfo.xcconfig, PRODUCT_BUNDLE_IDENTIFIER. Set the Team in Xcode as for iOS. |
| Android | android/app/build.gradle, applicationId. Leave namespace as it is: the manifest and MainActivity.kt depend on it. |
Also set androidPackageName in lib/config/app_forum_config.dart to your Android package name (passkeys use it).
Two Android traps:
.xf to the package name (applicationIdSuffix ".xf" in android/app/build.gradle), so flutter run installs your.package.xf. Register that name in Firebase as a second Android app, or delete the suffix line. Otherwise the debug build fails with No matching client found for package name.android/app/build.gradle. The build.gradle.kts next to it is a leftover that Gradle ignores when both files exist.GoogleService-Info.plist..xf debug name if you kept the suffix). Download google-services.json after adding every Android app, because the file lists all of them.cp ~/Downloads/google-services.json android/app/google-services.json
cp ~/Downloads/GoogleService-Info.plist ios/Runner/GoogleService-Info.plist
cp ~/Downloads/GoogleService-Info.plist macos/Runner/GoogleService-Info.plist
The Xcode projects already reference the plist at those paths, and the app reads these native files directly, so you don't need flutterfire configure or a firebase_options.dart.
This is where the .p8 goes. Firebase uses it to hand notifications to Apple.
.p8 (Apple lets you download it only once) and note its Key ID..p8 and enter its Key ID and your Team ID. Repeat for each Apple app you registered.One key covers development and App Store builds. The template already carries the push entitlement (aps-environment in ios/Runner/Runner.entitlements and the macOS entitlements files) and the remote-notification background mode in ios/Runner/Info.plist. With automatic signing, Xcode enables Push Notifications on your App ID for you; with manual signing, enable it on the identifier in the Apple Developer portal.
/var/secrets/firebase-sa.json with chmod 600.The two switches are on by default; filling in the path is what starts direct push. Leave Hosted push (official Forum Copilot app) on if some of your members also use the official Forum Copilot app: each device gets its notifications through whichever service it registered with. The add-on needs PHP's openssl and curl extensions, which XenForo hosts normally have. Use the current add-on release; private-conversation pushes need v1.8.1 or newer.
In lib/config/app_forum_config.dart, pushSource must be 'direct' and pushApiBaseUrl must be ''. Both are the template defaults. Then do a full rebuild (stop the app and flutter run again; a hot restart does not pick up the Firebase files).
If nothing arrives:
have logged into the app in the last 90 days means the device never registered: sign out and back in on the phone and check pushSource. Turn the option off again afterwards; it is noisy.GoogleService-Info.plist doesn't match the app's.Unit and widget tests run without a device or network access to a forum:
flutter test
The live API suite in packages/xenforo_core runs the SDK's proxy tests against a real forum with the add-on installed. It writes to that forum, so use a throwaway instance. Copy test/config.json.example to test/config.json, fill in the forum URL, a test account and a few content ids, then:
cd packages/xenforo_core && flutter test test/xenforo_basic_tests.dart
Scroll performance is measured on a real phone with flutter drive --profile. The harness, the recorded baseline, and the traps that produce misleading numbers are documented in docs/perf-benchmarking.md. Run it before and after any change to the topic list, thread view or home feed.
For the full local setup, from a local XenForo with the add-on through ngrok to the app running on a phone, see docs/guides/LOCAL_E2E_TESTING.md.
Issues and pull requests are welcome at https://github.com/forumcopilot/xenforoapp. To contribute, fork the repository rather than using the template: a pull request needs the shared history that a template copy starts without.
flutter analyze and flutter test before opening a pull request; both run in CI.lib/config/app_forum_config.dart on the template placeholders. Point a build at a real forum with --dart-define instead.type(scope): summary form used in the history; RELEASING.md explains how they roll up into release notes.CLAUDE.md).Before publishing your app:
app_forum_config.dart.assetlinks.json, apple-app-site-association) with your package/team IDs and certificate fingerprints. On iOS, also replace forum.example.com in webcredentials:forum.example.com with your forum's host (exactly as in forumBaseUrl, www. included) in both ios/Runner/Runner.entitlements (com.apple.developer.associated-domains) and ios/Runner/Info.plist (AssociatedDomainsList). iOS reads the entitlements; the login page checks the forum against the copy in Info.plist, because an iOS app cannot read its own entitlements. Xcode's Signing & Capabilities edits only the entitlements, so a domain added there alone gets "Passkey is currently not available in this forum (code: 3)" on the login page although iOS would allow the passkey. test/ios_passkey_domains_test.dart fails when the two lists differ.This project is licensed under the MIT License — see LICENSE for the full text.
The plugins/FC_XenForo2/ add-on is also released under MIT, but installing or running it on a XenForo forum still requires a valid XenForo license from XenForo Ltd.