Skip to content

Support Gutenberg as a contribution target, not only WordPress Core #251

Closed

Description

@juanmaguitar

The gap

Today the toolkit assumes every site is a wordpress-develop checkout. The repo it
clones, the way it decides whether a site is "built", the dev/build workflow, and the
whole open-a-pull-request path are all hard-wired to WordPress Core. A contributor who
wants to work on the block editor has no path in — even though the shape of the work is
nearly identical.

Gutenberg is the obvious next contribution target: it is one of the largest and most
active areas people are pointed at on their first contribution, and its workflow parallels
Core closely enough that the app can host both without a second, separate flow.

The idea

Give each site a project type (WordPress Core or Gutenberg to start), chosen when the
site is created, and let that type drive the parts of the flow that differ:

  • Setup — clone the right upstream repository and default branch for the chosen type.
  • Status — "is this site ready / built?" is answered differently per project. The Core
    heuristic (a built wp-includes dist directory) does not describe a Gutenberg checkout,
    which has its own notion of dependencies installed and dev build having run.
  • Run / build — surface the dev and build commands that belong to the chosen project
    rather than Core's.
  • Submit a pull request — fork the correct upstream, target the correct default branch,
    and phrase the commit for the right project. The existing fork → push → compare flow
    stays the same in shape; only the repository coordinates change.

Scope notes

  • This should extend the current site model (a site that holds many tickets), not the
    older single-purpose layout. The project type is a property of the site alongside its
    existing metadata.
  • Default remains WordPress Core, so nothing changes for existing sites or the common path.
  • Keep the type set small and explicit at first (Core, Gutenberg). The value is proving the
    app can host more than one contribution target cleanly; a general plugin/theme framework
    can come later if it earns its place.

Why file this now

There is an early, unmerged sketch (PR #7) that stubbed a two-project config and a parallel
Gutenberg clone/PR path. It predates the current architecture by a wide margin and is not
revivable as code, but it confirms the intent is sound and worth doing properly against
today's trunk. This issue captures that intent so the implementation can start fresh.

Activity

  1. juanmaguitar commented on Aug 13, 2026

    @juanmaguitar
    CollaboratorAuthor

    Closing as not planned for the current validation phase. Expanding from WordPress Core to Gutenberg adds substantial product and maintenance scope before the Core workflow has enough real-user feedback. The related pull requests are intentionally not being changed by this issue triage; this issue can be reopened if a concrete Gutenberg testing cohort makes the expansion part of the next experiment.

  2. added this to the v1.2.0 milestone on Sep 15, 2026
  3. juanmaguitar commented on Sep 15, 2026

    @juanmaguitar
    CollaboratorAuthor

    Reopened for v1.2.0: this is the milestone's headline feature.

    The earlier stack (#255, #261, #264, #269) stays closed; it was cut at 907cb65 and trunk has since replaced the Git engine and added pull-request checkout (#459 to #461), so it is being redone on today's code. What ports as-is: the pure modules it introduced (project-type.cjs, playground-plan.cjs, work-item.cjs, renderer/github-issue.cjs) with their tests. What it no longer needs: #264's "apply a Gutenberg PR as a repo-relative patch", since a PR is now a checkout of refs/pull/N/head from the site's own origin, which works unchanged on a Gutenberg clone.

    The stack, in order, each PR on the previous one:

    1. [Update] Bundle npm 11, the floor wordpress-develop and Gutenberg now set (#251) #468, bundle npm 11. A spike on 15 Sep showed Gutenberg's npm ci refusing npm 10.9.3 in under a second (devEngines.packageManager npm >=11.16.0, onFail: error, which engine-strict=false does not relax). On npm 11 through the app's own Node shims: clone 21 s, npm ci 59 s, npm run build 29 s, npm run dev builds then watches.
    2. Project type registry, clone and the "Contribute to" choice in the create-site dialog.
    3. Build, watch and terminal commands per project (npm run dev for Gutenberg, grunt -- _watch stays for Core).
    4. Serve a Gutenberg site through Playground as a plugin mounted into a stock WordPress, with file modifications disabled so Plugins > Delete cannot touch the checkout.
    5. A GitHub issue as the work item, and the pull requests that cite it (checkout works already).
    6. Open a pull request against WordPress/gutenberg (fix/issue-N, Fixes #N).
    7. wpct://issue/N deep link.

    Out of scope for v1.2.0: a generic plugin or theme project type (the registry allows it, nothing wires it), Trac-style attachments for Gutenberg, running Gutenberg's own test suites from the app.

    One thing the spike changed from the old plan: Gutenberg no longer builds into build/block-library; packages land under build/scripts/<handle>/ and build/styles/, so that is the "is it built" marker.

  4. 128 remaining items

  5. juanmaguitar commented on Sep 25, 2026

    @juanmaguitar
    CollaboratorAuthor

    Shipped in v1.2.0: a site can now be a Gutenberg checkout, served as a plugin in a stock WordPress, with GitHub issues as work items, pull request checkout and opening a pull request from the app. The guide covers the workflows.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions