Mortar — open governance
Mortar is an Apache 2.0 open-source BaaS for the China market. This doc covers the governance model, contribution flow, and decision weights.
Mortar and Keel are two independent products in the same monorepo, with no interdependencies — Mortar can be sold standalone to any BaaS user; Keel can be sold standalone to any RN developer. The two products have separate governance; this doc is Mortar’s, and
/keel/docs/governance.mdis Keel’s.
License
Apache License 2.0. Why Apache 2.0 over MIT (same as Keel):
- Patent grant clause — irrevocable patent license from contributors; enterprise-friendly
- Explicit trademark clause — the “Mortar” name / logo is outside the license scope (§ 6)
- Industry convention: Kubernetes / TiDB / Apache Cassandra and other enterprise-service projects all use Apache 2.0
No CLA. Keep the contribution barrier low.
Repository
Mortar lives in the mortar/ subdirectory of the appunvs/appunvs
monorepo:
mortar/
├── internal/{primitive,feature}/ ← Go server implementation
├── sdk/{typescript,dart,swift,kotlin}/ ← 4-language client SDKs
├── docs/ ← this doc + architecture / pricing / etc.
└── LICENSE ← Apache 2.0
Why we don’t split into a separate repo:
- Sharing the Keel monorepo makes cross-product PRs easy (even though the two products have no hard dependency)
- Once the monorepo is public, Mortar-only contributors can focus
just on the
mortar/subtree - We’ll reconsider splitting once user numbers grow
Decision mechanism
Tier 1: core team decision
No RFC; direct PR merge:
- Compile errors / bug fixes
- Doc typos
- Internal refactors (no public-API change)
- CI / engineering improvements
Tier 2: RFC + open discussion (≥ 7 days)
Discussed in the mortar-rfc channel on GitHub Discussions:
- Public wire schema changes (OpenAPI / proto)
- New primitives or features
- Breaking changes in the 4 SDKs
- License / governance changes
- Major roadmap shifts
Tier 3: core team reserved
- Mortar Cloud commercial pricing (
pricing) - Trademark / brand identity
- Legal compliance (data export, ICP filing)
- Cross-product boundaries (how we work with Keel / appunvs)
Roadmap transparency
roadmap.md is public. Changes go through Tier 2 RFCs.
The GitHub Project tracker is sorted by milestone.
Contribution flow
- Bug reports: Issues +
mortarlabel - Feature requests / discussion: Discussions +
mortarchannel - RFCs: Discussions
mortar-rfcchannel - Security: security@appunvs.com
- Misconduct: conduct@appunvs.com
7 + 5 + 3 boundary preservation
Mortar’s core architecture is 7 primitives + 5 core features + 3 extension features. That boundary is what makes Mortar recognizable, and we don’t change it lightly.
Adding a new primitive or feature must demonstrate:
- Real user demand (≥ 30% of customers have asked)
- No overlap with existing items
- Feasible backend implementation (Aliyun / self-hosted)
- Maintenance commitment
- Goes through a Tier 2 RFC, ≥ 7 days discussion
Planned additions:
primitive/payment(a payment-channel primitive for WeChat Pay / Alipay server-side signature verification)
The bar for removing an existing primitive / feature is higher (Tier 2 RFC + 14 days + 3-maintainer consent) because removals break users.
Maintainer list
Current core team (alphabetical):
- TBD
Path to maintainer:
- Sustained high-quality contributions ≥ 3 months
- ≥ 5 accepted PRs (at least 1 changing a primitive / feature)
- ≥ 50% of existing maintainers agree
Boundary with Keel / appunvs
| Domain | Whose decision |
|---|---|
| Mortar primitive / feature / SDK / wire schema | Mortar community |
| Mortar Cloud operations (managed offering) | Mortar team |
| Mortar self-host / private deploy | The user |
| Keel internals | Keel team (/keel/docs/governance.md) |
| appunvs internals | appunvs team |
| How Keel integrates with Mortar | No special integration exists — Keel users wire Mortar with the standard Mortar SDK, identical to any other BaaS customer |
Important: Mortar does not reference Keel or appunvs in the opposite direction. Mortar is an independent BaaS product, with no “optimized-for-Keel” code paths. A Keel user calling Mortar uses exactly the same SDK as an Expo user calling Mortar — no differentiation.
Business model + open-source relationship
Mortar’s core code is fully open-source: every primitive impl, every feature, every SDK, the wire schema — all Apache 2.0.
Mortar Cloud (managed) wraps the open-source core. The closed parts include:
- Multi-tenant orchestration / billing / quota system
- Aliyun-specific backend optimizations (production-grade RDS / OSS / Tair config)
- Customer support ticketing
The self-hosted build uses the same open-source core code, with no features stripped — it just lacks Mortar Cloud’s ops / SLA / multi-tenant managed offering.
Same “open core + managed cloud” model as GitLab / Sentry / Supabase.
See deployment.
Code of conduct
Violations go to conduct@appunvs.com (a separate inbox, not the core team issue channel).
License + trademark policy
- Code + docs: Apache 2.0
- “Mortar” name + logo: outside the Apache 2.0 scope (per § 6 trademark clause); allowed only when describing this project, banned for naming forks / derivative works / commercial services
- Trademark requests: trademark@appunvs.com (long-term, needed later)