AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative
App Wishlist
42
Posts
21
Posters
10.7k
Views
29
Watching
-
In general I'm not sure how these settings work either. For example if I change Chat to claude, it still sticks with Gemini. And if I select Gemini Pro, it tells me I need a subscription.




-
AFFiNE Copilot Findings
- Config lives in
/app/data/config/config.json– The admin UI doesn’t honor scenario overrides reliably, so edit the file directly (File Manager works). Setcopilot.scenarios.override_enabled: true, assign each scenario to a model you actually have access to, and restart the app. ENV overrides are gone; this file is the single source of truth. - Gemini model gating – AFFiNE’s frontend marks “Gemini Pro/Flash” as locked unless upstream billing flags are set. Those flags aren’t exposed in the self-host build, so the UI always shows the lock even if you provide a valid API key. Workaround: keep providers.gemini populated, set the model name directly in config.json, and ignore the badge—the backend will still call that model.
- Error if Gemini models remain without keys – Jobs like copilot.session.generateTitle still reference gemini-2.5-flash by default. If you remove the Gemini key but leave that model in the scenarios, the logs fill with no_copilot_provider_available errors and document-context chats fail (“I don’t see a document”).
- UI limitations – Even after the config update, the provider dropdown often stays empty. That’s cosmetic: check actual usage via
cloudron logs --app affine.tld.com | grep CopilotProvider. Responses are coming from whichever model you configured, regardless of what the UI shows. - Net result – All Copilot behavior is driven by
config.json; there’s no built-in way to “unlock” premium models in the UI because the hosted billing feature flags aren’t exposed. If you want to use Gemini Pro, set it manually in config.json (with a valid key) and ignore the warning.
- Config lives in