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.
Edit navigation with theme dev
- Start with your theme’s current files, including
members_sites.jsonand its referenced templates. - Run
fluid theme devfrom the theme directory. By default, it creates or reuses an isolated development theme.--themeexplicitly targets an existing theme; check the target before using it. - Find your site in
sites. Follow itsmenu_keyto the matching entry inmenus. - Edit that menu’s
items: change atitle, update atarget, reorder the array, or add nestedchildren. Preserve every required field and keep keys unique. - Save the manifest. Wait for
synced members_sites.jsonin the CLI output. - Check the CLI preview. With live reload enabled, it reloads after a successful upload and renders the updated menu.
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 filenamemembers_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 activecustomer 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.
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_slugsmust match exactly one active member type in the receiving company. Otherwise the upload or import fails withmember 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.
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’spages array requires:
For example, add this object to the intended site’s
pages array and include its template file in the theme:
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.
Menus and nested items
Each menu requireskey, handle, title, active, country_codes, and items.
keyconnects the menu to sites and declared settings.handleis the preferred menu slug. An unrelated existing menu with that slug is not a prerequisite. See Menu handles on import.country_codeslists 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.itemsis ordered. Each item requireskey,title,titles,target, andchildren.- Item keys must be unique across all menus.
titlesmaps locales to translated labels, such as{"en": "Shop", "fr": "Boutique"}. Use{}when there are no translations. childrencontains more items of the same shape. Use[]for a leaf.
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.
Menu handles on import
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_listsetting listed inmenu_references.
settings.menu, or put the menu in a link_list setting, instead of naming a handle in markup.
Link targets
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 atemplates 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:
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.jsonis 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.
menu_slug alone cannot reconstruct a menu in another company.