MCPcopy Index your code
hub / github.com/plasmicapp/plasmic

github.com/plasmicapp/plasmic @0.0.80 sqlite

repository ↗ · DeepWiki ↗ · release 0.0.80 ↗
4,876 symbols 11,302 edges 1,370 files 51 documented · 1%
README

Plasmic

Plasmic

The low-code visual builder for your codebase.

Build beautiful apps and websites incredibly fast. Drag and drop your own components, integrate with your codebase. Break through the no-code ceiling.

 

License Types code style: prettier PRs Welcome

Quick links

What is Plasmic?

Plasmic is a visual builder for the web.

You can use it to build web apps and websites, and you can use it as a visual content management system.

It lets anyone, regardless of coding background, design and build rapidly--code optional.

At the same time, it is powerful, with a deep feature set that scales to complex projects. And with codebase integration, it removes the ceiling typically associated with low-code tools.

Some highlights of what Plasmic provides:

  • Full design freedom and speedy modern design tool UX.
  • Create rich interactions and behavior.
  • Connect with arbitrary data source and backend integrations.
  • Content creator mode: give specific collaborators a more simplified and restricted editing experience.
  • Deep collaboration with multiplayer, branching, cross-project imports, and multi-workspace organizations.
  • Integrate with codebases for unlimited flexibility and scale.
  • Drag/drop and visually manipulate your own React components—design systems, interactions, data, behavior, and more. Extend and customize Studio with custom controls.
  • Import designs from Figma, translating its proprietary vector document format into DOM/CSS.
  • Powerful abstractions like components, variants, slots, composable state management, and more that promote composition and let you build and maintain at scale.
  • High-performance and high-quality codegen. Supports static site generation, automatic image optimization, layout shift reduction, and more.
  • Customizable design system components. Powered by react-aria. Most component libraries give you variables to tweak, but here you can completely change the structure and layout.
  • Deploy/host/export anywhere
  • End-user auth and permissions
  • Versatility in use cases. The line between websites and web apps can be blurry.

Learn more on our website and our docs. Or check out comparisons of Plasmic vs other tools.

Get help and join our community

Connect with the Plasmic team and with other Plasmic users on the Plasmic Community Slack.

How do I integrate Plasmic as a CMS?

This is one popular use case of Plasmic.

Step 1. Install Plasmic into your codebase (exact package depends on your framework).

npm install @plasmicapp/loader-nextjs

Step 2 (optional). Make components from your app or design system available for drag-and-drop in the visual editor:

// Take any component from your app or design system...
export default function HeroSection({ children }) {
  return 

{children}

;
}

// ...and make it available for drag-and-drop, along with any props you want to
// expose.
PLASMIC.registerComponent(HeroSection, {
  props: {
    children: "slot",
  },
});

Step 3. Add placeholders that render pages/components made in the visual editor anywhere in your app:

// pages/index.tsx

import {
  PlasmicRootProvider,
  PlasmicComponent,
} from "@plasmicapp/loader-nextjs";
import { PLASMIC } from "../plasmic-init";

// Here we fetch dynamically on the client, but you can also fetch and render
// components server-side in SSG/SSR frameworks, such as via getStaticProps
// in Next.js.
export default function IndexPage() {
  return (
    <PlasmicRootProvider plasmic={PLASMIC}>
      <PlasmicComponent component="Summer22LandingPage" />
    </PlasmicRootProvider>
  );
}

Step 4. Non-developers (or developers!) can now create new pages, sections, or components that ship directly into the app/website.

Step 5. When you hit Publish, changes get picked up via webhooks that trigger rebuilds, or more specific mechanisms such as incremental static revalidation or dynamic fetching from the Plasmic CDN.

Who uses Plasmic?

Plasmic is used by companies ranging from Fortune 500s to boutique brands to solo makers. It's used for websites ranging from headless commerce storefronts to marketing websites to logged-in app content.

Check out the Case Studies and Community Showcase.

Customer logos

Showcase

How does Plasmic work?

How codebase integration works

Note: you do not need to integrate Plasmic with a codebase. This is core to using Plasmic as a CMS, but you can build complete apps and websites without this, entirely within Plasmic.

Read the full technical overview.

Bring your own React components

You can register your own arbitrary custom React components for use as building blocks within Plasmic Studio. Learn more about code components.

Codegen

Besides the Headless API, you can also generate React code into your codebase. This is a powerful way to use Plasmic as a UI builder for creating rich interactive web applications—one example of this is Plasmic Studio itself. See the application development tutorials to learn more.

Note on versioning

One common issue we see is mismatched or duplicate versions of packages.

@plasmicapp packages can depend on each other. Each package always has an exact version of its @plasmicapp dependencies. This is because we want to ensure that all packages are always in sync, and that we don't end up with a mismatched set of packages.

Packages like @plasmicapp/host must also be deduped, since functionality such as registerComponent make use of globals and side effects, so with multiple versions you could end up using the wrong "instance" of this package. Additionally, types can be tightly coupled across multiple packages.

Unfortunately, npm and yarn make it easy for you to end up with mismatched versions and duplicate versions of packages. Use the npm list command to ensure that you have unique deduped versions of packages. Furthermore, issues can be "sticky," since npm/yarn are stateful. At times, you may need to rely on npm dedupe, or removing and reinstalling Plasmic packages (including @plasmicpkgs packages), resetting package-lock.json/yarn.lock, in order to unwedge npm/yarn.

@plasmicpkgs (the built-in code component packages) have @plasmicapp packages as peer dependencies, and these specify ranges rather than exact versions--this is to offer some flexibility for developers to use the core package versions they need, while still using @plasmicpkgs.

Note: exact versioning does not imply that every package increments versions for every release. Packages are only incremented if they or their dependencies have changed. Incrementing versions, including those referenced in dependencies and devDependencies, is done automatically when our deployment scripts run lerna version patch --exact..., which detects whether a package has changed since its last git-tagged release.

Contributing 🚀

Please see CONTRIBUTING.md.

Getting help

Feel free to join our Slack Community and ask us anything! We're here to help and always welcome contributions.

License

app/ is licensed under the AGPL--see LICENSE.app.md.

All other content is licensed under the MIT license--see LICENSE.md.

Contributors ❤️

Thanks to all the people who make Plasmic!

Extension points exported contracts — how you extend this code

SimpleQuestion (Interface)
* A simpler subset of the DistinctQuestion interface that we actually use.
packages/cli/src/actions/init.ts
InternalFieldCtx (Interface)
* - registeredFields: current mounted form fields * - preservedRegisteredFields: all fields that were registered and we
plasmicpkgs/antd5/src/registerForm.tsx
_BaseColumnConfig (Interface)
* Exprs are for things that can must re-evaluate from row to row. * * Literal values are for things that are column-le
plasmicpkgs/plasmic-rich-components/src/field-mappings.tsx
Env (Interface)
* Declare expected Env parameter in fetch handler.
examples/hydrogen-oxygen-with-model-renderer/remix.env.d.ts
Env (Interface)
* Declare expected Env parameter in fetch handler.
examples/hydrogen-oxygen-with-buildtime-codegen/remix.env.d.ts
TrackerOptions (Interface)
(no doc)
packages/loader-core/src/tracker/index.ts
BasicTrait (Interface)
(no doc)
packages/host/src/registerTrait.ts
PlasmicUser (Interface)
(no doc)
packages/auth-api/src/api.ts

Core symbols most depended-on inside this repo

hasVariant
called by 823
packages/react-web/src/render/elements.ts
registerComponent
called by 174
packages/loader-react/src/loader.ts
assert
called by 113
examples/hydrogen-oxygen-with-model-renderer/app/components/interpreter/common.ts
mkUnexpectedTypeMsg
called by 112
examples/hydrogen-oxygen-with-model-renderer/app/components/interpreter/common.ts
registerComponent
called by 110
packages/host/src/registerComponent.ts
getPlasmicComponentName
called by 109
plasmicpkgs/chakra-ui/src/utils.ts
fetch
called by 80
examples/hydrogen-oxygen-with-model-renderer/server.ts
getComponentNameAndImportMeta
called by 79
plasmicpkgs/chakra-ui/src/utils.ts

Shape

Function 3,255
Interface 759
Method 380
Class 317
Enum 165

Languages

TypeScript100%

Modules by API surface

examples/hydrogen-oxygen-with-model-renderer/app/components/interpreter/classes.ts854 symbols
plasmicpkgs/commerce-providers/saleor/src/schema.d.ts97 symbols
packages/react-web/src/stories/UseDollarState.stories.tsx54 symbols
packages/loader-react/src/loader.ts52 symbols
packages/code-merger/src/index.ts52 symbols
packages/cli/src/api.ts44 symbols
plasmicpkgs/antd5/src/registerForm.tsx40 symbols
packages/host/src/prop-types.ts36 symbols
plasmicpkgs/commerce-providers/swell/src/schema.d.ts32 symbols
plasmicpkgs/commerce-providers/shopify/src/schema.d.ts32 symbols
plasmicpkgs/plasmic-rich-components/src/utils.tsx31 symbols
packages/cli/src/utils/file-utils.ts31 symbols

Dependencies from manifests, versioned

@angular-devkit/build-angular12.2.1 · 1×
@angular/animations12.2.0 · 1×
@angular/cli12.2.1 · 1×
@angular/common12.2.0 · 1×
@angular/compiler12.2.0 · 1×
@angular/compiler-cli12.2.0 · 1×
@angular/core12.2.0 · 1×
@angular/elements14.1.1 · 1×
@angular/forms12.2.0 · 1×
@angular/platform-browser12.2.0 · 1×
@angular/platform-browser-dynamic12.2.0 · 1×
@angular/router12.2.0 · 1×

For agents

$ claude mcp add plasmic \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact