Skip to main content
Member storefront is in a limited pilot. Use a company with member storefront enabled and a current Fluid theme CLI that supports version 2 manifests.
members_sites.json is the portable member configuration at the theme root. It contains sites, access rules, page bindings, and complete navigation trees. Liquid, sections, layouts, and their settings remain in separate theme files. Use this file to change navigation from your editor or a coding agent such as Mist. You do not need to recreate the menu in the admin after each edit.
An upload is a complete snapshot, not a patch. Sites and pages omitted from the document are removed from the receiving theme. Start from the manifest pulled or exported from your theme, and preserve unrelated entries when editing one menu.

Edit navigation with theme dev

  1. Start with your theme’s current files, including members_sites.json and its referenced templates.
  2. Run fluid theme dev from the theme directory. By default, it creates or reuses an isolated development theme. --theme explicitly targets an existing theme; check the target before using it.
  3. Find your site in sites. Follow its menu_key to the matching entry in menus.
  4. Edit that menu’s items: change a title, update a target, reorder the array, or add nested children. Preserve every required field and keep keys unique.
  5. Save the manifest. Wait for synced members_sites.json in the CLI output.
  6. Check the CLI preview. With live reload enabled, it reloads after a successful upload and renders the updated menu.
The watcher submits the member document and its required local template dependencies together. Invalid member data or a missing dependency rejects the member upload, rather than applying only part of it. A concurrent remote edit can block the transfer; pull and reconcile the changes before retrying. Mist’s theme development workflow uses the same CLI watcher. An agent saving the file triggers the same upload as a manual edit. The CLI preview reloads automatically; a separately opened admin builder may need a refresh.
The layout must render the site’s menu, usually through settings.menu. Editing the manifest cannot change hardcoded navigation HTML. See Member sites for rendering behavior.

Document structure

Use the exact filename members_sites.json, including the s in members. Put it next to root-level variables.json, not inside config/. Fluid keeps config/members_sites.json for its own use, so an import that contains that file is rejected. These four top-level fields are required: Each object uses an exact set of fields. Include empty arrays, empty objects, or null where allowed; do not add your own fields. Document keys are portable references, not database IDs. Keep them stable while editing, but note that existing sites are matched by name, and pages by slug within their site. Changing a site name or page slug replaces that entry rather than performing an in-place rename.

Example: a customer menu

This complete example defines one customer site with two navigation links. It assumes the destination company has an active customer member type and the US country, and that layouts/member.liquid exists and renders settings.menu without additional selected menu settings. It has no custom pages. Use it as a format example. Do not replace an existing multi-site manifest with it to edit one link.
To rename Contact support to Get help, change that item’s title and save. If the item has translated labels in titles, update those labels too. To place it before Shop, move the whole item earlier in the items array.

Sites and access rules

Each site requires these fields: A rule has two keys: country_codes holds ISO country codes such as US and CA, and member_type_slugs holds member-type slugs such as customer and rep. Fluid resolves them when it imports the document, and neither case below clears a restriction:
  • Each entry in member_type_slugs must match exactly one active member type in the receiving company. Otherwise the upload or import fails with member type is missing or archived in destination, at that entry’s path. Before you copy a manifest to another company, check its slugs on the Member Types screen or with List company member types.
  • Fluid ignores a country code it doesn’t recognize. If none of a site’s country codes is recognized, the site is imported inactive, so it doesn’t widen to every country.
An empty rule axis is unconstrained. Clearing member_type_slugs broadens access; use active: false to disable a site. Country and member-type restrictions both apply when both are present. See Site access rules.

Custom pages

Every entry in a site’s pages array requires: For example, add this object to the intended site’s pages array and include its template file in the theme:
Some slugs are reserved, because the account host serves its own routes at them: messaging, contacts, my-site, profile, orders, subscriptions, media, playlists, auth, api, and accounts. A page with one of these slugs fails with reserved system route. A non-null template reference must resolve. Listing a path does not create the file’s content. Include the layout, sections, snippets, and settings files that the page uses as well. System screens are Fluid-provided destinations. Link to them with a MembersScreen target; do not create custom page entries to represent them. Each menu requires key, handle, title, active, country_codes, and items.
  • key connects the menu to sites and declared settings.
  • handle is the preferred menu slug. An unrelated existing menu with that slug is not a prerequisite. See Menu handles on import.
  • country_codes lists the countries the menu is available in. When it is empty, or none of its codes is recognized, the menu gets every country of the receiving company.
  • items is ordered. Each item requires key, title, titles, target, and children.
  • Item keys must be unique across all menus. titles maps locales to translated labels, such as {"en": "Shop", "fr": "Boutique"}. Use {} when there are no translations.
  • children contains more items of the same shape. Use [] for a leaf.
Every declared menu must be referenced by a site’s menu_key or a menu_references entry. Fluid preserves shared menus by creating a separate copy when an edit would otherwise change another consumer’s navigation. On import, Fluid updates the menu the site or setting already uses. When it has to create a menu and another menu in the company already has that handle, it adds a random suffix of 12 hexadecimal characters. For example, customer-navigation becomes customer-navigation-d4e420b8aada. Fluid rewrites two things to the handle it allocated:
  • Each site’s menu link, which the layout reads as settings.menu.
  • Each link_list setting listed in menu_references.
Fluid doesn’t rewrite a handle typed into Liquid, so that markup keeps pointing at the other menu that already had the handle. Read the site’s menu from settings.menu, or put the menu in a link_list setting, instead of naming a handle in markup. A MembersPage target must name a page belonging to the referenced site. A MembersScreen key must be a supported system screen, and the destination company must have the account screens runtime configured. Handle-based target types are Product, Medium, Page, EnrollmentPack, Collection, Post, and Library. Their content must already exist in the receiving company; the manifest does not transfer products or media. Built-in target types are HomePage, CollectionPage, CategoryPage, JoinPage, Shop, and PostPage. These take only type. Explicit links accept HTTP, HTTPS, mailto:, tel:, root-relative paths, and fragment links. Prefer MembersPage or MembersScreen targets for member destinations so Fluid resolves their routes.

Template files and menu settings

You do not need a templates array. New exports and pulls omit it, while the document version remains 2. Fluid resolves each custom page through its template_path and each site’s frame through layout_name. Referenced sections, blocks, and snippets stay in ordinary theme files; you do not maintain a second inventory in the manifest. For the Rewards page above and a site using layout_name: "member", keep these files together:
Include any additional files referenced by that layout or page. A member page file can contain Liquid or a JSON object with a sections key; Fluid detects that format from the file contents. You do not need a manifest entry to declare the format. Changing only sites or navigation in the manifest preserves unrelated template settings and unpublished content. Uploading a template file applies that file’s changes. When you import files into a new theme, templates use normal import defaults for settings that the files do not carry. The manifest does not transport template-only flags or translations in a separate metadata list. Older version 2 manifests with a templates array are still accepted, including their template metadata. You can continue importing those files, but a new export or pull omits the array. Keep the menu_references entries produced by a pull or export when editing navigation. They connect selected menus in theme settings to the portable menu definitions. menu_references describes selected link_list settings. Each entry requires: Every selected menu setting in the member composition needs exactly one matching reference. Use the references emitted by export or pull instead of guessing a pointer. If you add a new selected menu setting, add its reference and include the containing file.

Upload, import, and removal behavior

For a company theme, uploading the manifest updates that theme’s member configuration. Downloading it again reconstructs the document from the current sites, pages, menus, and templates.
  • Re-uploading unchanged configuration retains unchanged records.
  • Sites match by name; pages match by slug within their site. Document keys connect references within the file and are not persistent record identities.
  • Sites and pages omitted from a version 2 snapshot are removed. Removal can be rejected if a removed page is still referenced by another menu consumer.
  • Missing templates, unresolved content handles, invalid rules, and malformed documents reject the member upload.
  • Deleting or renaming members_sites.json is rejected. To intentionally clear the target theme’s member sites and pages, submit an explicit empty version 2 document. This is not a request to delete every company menu or theme file.
Older array-based exports do not include a complete portable menu tree. Re-export or pull a version 2 document before editing navigation; a legacy menu_slug alone cannot reconstruct a menu in another company.

Troubleshooting

Task brief for coding agents