We are an ISV partner and are working on a managed package that we will release soon. We are mostly using LWC components and found that if we try to include one of our custom LWC component into a flexipage included in our package, then that component must be public (isExposed=true). This is a limitation that was not there with Aura components and it is problematic as we do not wish to make this specific LWC component visible in the App builder.

Is there a way to package a Flexipage that contains a LWC component that is not exposed?

We also tried embedding our LWC component inside an Aura Component and create a Lightning Component tab with that Aura Component but got the same error (the LWC component must be exposed) when trying to package that.

1 Answer 1


A component exposed for flexipages (Aura implements an availableForXyz interface or LWC specifies a target in js-meta.xml) is automatically exposed for Lightning App Builder. That is what that means, exposed for flexipages is same as Lightning App Builder. This has always been this way.

I guess the difference is LWC components must ALSO be isExposed=true to be able to be exposed for flexipages, making the component exposed for programmatic use in other LWC components in the process. I believe this is by design.

  • You are correct that if you expose an aura component for flexipages, it will be visible in the app builder too. But if you don't set its access control to global (developer.salesforce.com/docs/atlas.en-us.lightning.meta/…) and package the code, the component will not show up in the app builder within the org of a client who installed the package. LWC components do not provide the ability to distinguish between public and global access, so AFAIK there is no way to make an LWC component part of a flexipage, but not visible in the app builder in client orgs.
    – pdebaty
    Commented Apr 29, 2019 at 21:47
  • Hmm interesting. It seems to me that was not the intention, if the component implements one of the interfaces it was supposed to always show up (I've been on the App Builder team from the beginning). Maybe this is a gap in my memory and/or understanding of packaging, or something has changed over the years how the access control is enforced on aura components. I'll have to take this back to the team.
    – Kristian
    Commented Apr 30, 2019 at 22:21
  • 2
    It seems it was the intention of the access attribute on aura components to make the component visible outside a managed package (access="global") or not (access="public") as it is consistent with apex class visibility. But LWC does not seem to follow this pattern and defaults to making LWC components global (aka visible outside the managed package). Originally, I thought that isExposed=true in LWC components was the equivalent to access="global" in aura components but it is not the case. Global/Public access is an important distinction that we would like to see in LWC.
    – pdebaty
    Commented May 2, 2019 at 21:37
  • @pdebaty and Kristian, I know this question is a couple years old now, but we're in the same boat. We have child components in a parent LWC that we're packaging in a managed package but we don't want the children exposed on their own in App Builder. Is there really no way around this? Commented May 7, 2021 at 1:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .