Quality Score: 90/100
Low RiskThis repo is in good health with CI, tests, and active maintenance.
Multiple anti-patterns -10
Maintainability grade
Static analysisHow maintainable the code looks — from complexity, code issues, test presence, file size, and hotspot load. It grades the shape of the code, not defect risk, and doesn't replace review.
A90/100
A ≥ 85, B ≥ 70, C ≥ 55, D ≥ 40, F < 40
Cyclomatic complexityavg 235/35 Code issues0 errors, 13 warnings14/20 Testspresent · ~49% of files19/20 Largest file954 lines12/15 Hotspot load0 high-risk files10/10 Configuration status
CI/CD Pipeline — configured
Test Suite — detected
330 test files detected
Where: frontend/appflowy_flutter/test/bloc_test/board_test · frontend/appflowy_flutter/assets/test/images · frontend/appflowy_flutter/assets/test/workspaces
Test Coverage — ~49%heuristic
330 test files / 675 source files. This is a file-count ratio, not real line coverage — set up Codecov for authoritative numbers.
Dependency Scanning — no config detected
No Dependabot / Renovate / Snyk / Trivy / CodeQL config found. Enable Dependabot or Renovate.
Top hotspots
Files edited often AND hard to reason about. Churn = recent commit frequency, Complexity = branches and nesting, Risk = both combined. These are the highest-leverage targets for refactoring or testing.
All hotspots
Files that change often and are complex tend to accumulate more bugs
AI-suggested anti-patterns
AI · unverifiedPattern-matches from the file structure and dependencies — useful as hypotheses, but not grounded in actual source. For real findings see Code Scanning above.
Hardcoded AI prompts in assets
MediumEmbedding prompts as static JSON requires app updates to modify; inflexible for experimentation and A/B testing.
frontend/appflowy_flutter/assets/built_in_prompts.json
Monorepo without clear dependency boundaries
MediumLack of clear module separation increases coupling risk; frontend and backend changes can conflict during builds.
frontend/appflowy_flutter and (inferred) backend root
Native binding via raw JNI
LowDirect JNI usage is error-prone and difficult to maintain; no abstraction layer for platform-specific logic.
frontend/appflowy_flutter/android/app/src/main/Classes/binding.h
AI-suggested bottlenecks
AI · unverifiedSpeculation from file structure, not profiling data. Validate against real metrics before acting on these.
Build Infrastructure Bottleneck
Single CI/CD orchestration point; failure here blocks all platform releases (Android, iOS, Web).
codemagic.yaml (CI/CD pipeline)
Service Architecture Bottleneck
All collaborative edits and AI requests funnel through backend; high contention point under load.
Rust Backend (inferred from Makefile.toml)
Startup Performance Bottleneck
Prompts loaded at app startup; large prompt library could delay initial UI render.
built_in_prompts.json asset loading
IPC Overhead Bottleneck
Serialization/deserialization overhead on every backend request; potential latency bottleneck for real-time collaboration.
Flutter Frontend (platform channel communication)
Code metrics
Static analysis on sampled source files (up to 15 files).
Avg Cyclomatic Complexity2
Counts if/for/while/switch/catch/ternary branches
Errors / Warnings0 / 13
Secrets, empty catches, console.log, var usage, long lines