Project Overview
macrozheng/mall is a Java e-commerce codebase centered on Spring Boot, MyBatis, and containerized deployment. Your team gets both storefront and back-office scope in one repository: catalog browsing, search, cart and order flow on the mall side, plus product, order, member, promotion, operations, content, reporting, finance, and permission management on the admin side.
You can use it as a reference implementation for a full B2C workflow when your roadmap includes both customer-facing APIs and internal operations tooling. You should expect meaningful domain customization work around pricing, inventory, fulfillment, and permission policy before production rollout.
Key Challenges Addressed
Your team typically hits three hard problems in commerce systems: keeping customer and admin workflows aligned, managing complex order lifecycle states, and shipping repeatable environments.
- One codebase covers storefront and admin domains, so your team can keep business rules closer together instead of splitting logic across disconnected services.
- Spring Boot service patterns plus MyBatis persistence give your team explicit SQL control when order and promotion logic needs deterministic queries.
- Dockerized deployment paths reduce machine-specific drift and make reproducible environments easier during integration and release work.
- Built-in module scope across products, members, promotions, and operations gives your team a starting point for cross-domain process wiring.
Getting Started
You can start quickly when your team treats the repository as a baseline and follows the exact runtime matrix in the upstream docs.
- Clone the repository and review the README and module layout.
- Provision the required backing services listed by the project configuration.
- Start the selected application modules and verify API reachability.
- Seed baseline data from the repository-provided SQL/data assets before testing end-to-end flows.
git clone https://github.com/macrozheng/mall.git
cd mall
# Follow the repository README for required services, profiles, and module startup order.
You should validate environment variables, database initialization order, and service connectivity first, because those are the most common first-run blockers in multi-module commerce stacks.
Features and Use Cases
Your team can map documented modules directly to operational scenarios:
- Storefront experience: home portal, recommendations, search, product display, cart, checkout, member center, and customer service flows.
- Admin operations: product lifecycle, order operations, member management, promotions, content, reporting, finance, and permission administration.
- Commerce process prototyping: test promotion and order-policy changes in a realistic domain model before custom extraction.
- Internal platform base: extend existing modules when your team needs a self-hosted Java commerce foundation instead of starting from a blank service set.
Ecosystem and Dependencies
Your integration baseline is clear and practical:
- Spring Boot for service runtime and configuration conventions.
- MyBatis for persistence mappings and SQL-centric data access.
- Docker-based deployment paths for environment consistency.
This combination favors teams that want explicit database control and incremental refactoring options over highly abstract, generated data layers.
Architectural Overview
You work with a layered service architecture where HTTP/API entrypoints map into domain services and persistence adapters. Your team can separate storefront and admin concerns at the module/API boundary while still sharing core commerce entities and rule paths.
Operationally, this matters because your team can:
- isolate risk by changing admin workflows without rewriting storefront endpoints,
- keep SQL-visible behavior for sensitive paths like pricing and order transitions,
- containerize repeatable local, CI, and staging environments,
- phase extraction into services later if your throughput or ownership model demands it.
Pros and Cons
-
Pros
- Full storefront plus admin scope in one project accelerates your initial capability build.
- Java + Spring Boot + MyBatis is familiar and auditable for teams with strong JVM and SQL practice.
- Docker deployment support improves reproducibility during onboarding and release cycles.
-
Cons
- Your team still owns substantial domain adaptation work for production-grade business rules.
- Repository breadth can increase onboarding time when your team only needs a narrow slice.
- Monolithic coupling risk can grow if your team extends modules without clear boundaries.
Comparison and Alternatives
GitHub stars
Weekly star gains
Full metrics details
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
Mall
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Saleor
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
43 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Medusa
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
135 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Spree
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
43 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
nopCommerce
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
44 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Apache OFBiz
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
45 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Issues opened
Weekly total
Full metrics details
GitHub API observation. Historical values render only when the source provides a real observation for that day.
Mall
GitHub API observation. Historical values render only when the source provides a real observation for that day.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Medusa
GitHub API observation. Historical values render only when the source provides a real observation for that day.
101 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Issues closed
Weekly total
Full metrics details
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
Mall
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Medusa
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
101 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Pull requests opened
Weekly total
Full metrics details
GitHub API observation. Historical values render only when the source provides a real observation for that day.
Mall
GitHub API observation. Historical values render only when the source provides a real observation for that day.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Medusa
GitHub API observation. Historical values render only when the source provides a real observation for that day.
101 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Pull requests closed
Weekly total
Full metrics details
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
Mall
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Medusa
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
101 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Pull requests merged
Weekly total
Full metrics details
GitHub API observation. Historical values render only when the source provides a real observation for that day.
Mall
GitHub API observation. Historical values render only when the source provides a real observation for that day.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Medusa
GitHub API observation. Historical values render only when the source provides a real observation for that day.
101 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Open/closed pull request ratio
Weekly average
Full metrics details
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
Mall
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Saleor
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
43 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Medusa
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
135 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Spree
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
43 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
nopCommerce
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
44 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Apache OFBiz
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
45 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Open/closed issues ratio
Weekly average
Full metrics details
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
Mall
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Saleor
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
43 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Medusa
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
135 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Spree
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
43 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
nopCommerce
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
44 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Apache OFBiz
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
45 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Releases
Weekly total
Full metrics details
GitHub release published_at events bucketed by UTC day; drafts are excluded.
Mall
GitHub release published_at events bucketed by UTC day; drafts are excluded.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Saleor
GitHub release published_at events bucketed by UTC day; drafts are excluded.
43 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Medusa
GitHub release published_at events bucketed by UTC day; drafts are excluded.
135 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Spree
GitHub release published_at events bucketed by UTC day; drafts are excluded.
43 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
nopCommerce
GitHub release published_at events bucketed by UTC day; drafts are excluded.
44 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Apache OFBiz
GitHub release published_at events bucketed by UTC day; drafts are excluded.
45 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Hotness score
Weekly average
Full metrics details
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
Mall
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
Saleor
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
43 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
Medusa
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
135 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
Spree
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
43 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
nopCommerce
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
44 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
Apache OFBiz
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
45 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
Reliability score
Weekly average
Full metrics details
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
Mall
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
Saleor
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
43 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
Medusa
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
135 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
Spree
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
43 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
nopCommerce
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
44 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
Apache OFBiz
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
45 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
If your team is evaluating long-term fit, compare macrozheng/mall with Saleor, Medusa, Spree, nopCommerce, and Apache OFBiz.
| Project | Repo | Adoption confidence (~6mo) | PRs merged (~6mo) | Star growth (~6mo) |
|---|---|---|---|---|
| mall | https://github.com/macrozheng/mall | metrics pending | 0 | metrics pending |
| Saleor | https://github.com/saleor/saleor | metrics pending | 0 | metrics pending |
| Medusa | https://github.com/medusajs/medusa | metrics pending | 0 | metrics pending |
| Spree | https://github.com/spree/spree | metrics pending | 0 | metrics pending |
| nopCommerce | https://github.com/nopSolutions/nopCommerce | metrics pending | 0 | metrics pending |
| Apache OFBiz | https://github.com/apache/ofbiz-framework | metrics pending | 0 | metrics pending |
Best overall alternative: Saleor. Your team gets strong API-first commerce patterns, broad community momentum, and mature extension paths with clear operational documentation.
Conclusion
macrozheng/mall works best when your team wants a Java-first, SQL-visible commerce foundation that already includes both storefront and back-office scope. Your main trade-off is customization depth: you gain speed from existing modules, but your team still needs disciplined boundary management and domain hardening for production. Start from the official repository, validate setup details in the README, and track maintenance signals through issues.
