Plasmic.app: Visual editing and content platform for building websites and apps
plasmic.app
plasmic.app
In short, I have gone pretty deep with it as a proper "app" builder compared to maybe a more CMS/design use case. By far, for front-end low code UI tools it is my favorite. However, it isn't without the typical pains of that when the abstraction breaks it can be quite a hassle and requires some real knowledge (or support help) to figure things out. The real thing that keeps me on it though is that it really can have hand written react and Plasmic generated react live by side, which drastically lowers the risk compared to a lot of other app builders.
I do genuinely think it can speed up development for certain teams on app use cases, but I think the structure of those teams is a bit particular, because you do need someone who really knows react/next ecosystem to manage the underlying integration.
Thanks to the Plasmic team!
Happy to answer questions in thread
So this is react specific? It doesn't say so in the home page. It vaguely hints at it with a "Bring your data sources, React components, deployment environments, design system, and more.".
Yes - using Plasmic to manage landing pages design and content is our main use case!
We still need to improve the experience for open source contributions, but we are open to that! That being said, React is still our main priority at the moment.
I'm not familiar with Blazor, but you may also explore our render API (https://docs.plasmic.app/learn/render-api/). It allows fetching rendered HTML from Plasmic servers, then you would just render it in the DOM.
I don't understand why tools like this "pick a winner" with a specific framework instead of rendering to Web Components with a framework wrapper, or using something like Stencil[1] that can render to any framework.
It is possible to use Plasmic's render API (https://docs.plasmic.app/learn/render-api/) to fetch the rendered HTML and just render your designs using any framework, but that means it's a more limited experience.
I imagine it's possible to achieve this with other frameworks too, though the integrations would be deep and bespoke for each framework. We've just decided to focus on React first.
There are several lightweight wrapper libraries to "reactify" web components.
Going the other direction is not as easy. While it's possible, it involves loading all of react into another framework.
I'm curious about your approach to integrating APIs with Plasmic. Did you utilize Plasmic's backend integrations, or did you prefer a client-side fetcher?
In my case, I found that using backend integrations through Plasmic's servers resulted in noticeable latency issues, with response times varying between 1 to 3 seconds, which was quite slower compared to direct API calls that took no more than 200ms. Have you encountered similar challenges?
On another note, while the client-side Fetcher was a potential alternative, it fell short in several areas for my needs. Specifically, it lacked options for customizing SWR fetch options, built-in mutation support, and accessible state management. To address some of these issues, I've made a contribution through a pull request: https://github.com/plasmicapp/plasmic/pull/102. I thought it might be of interest to you. I would love to hear your thoughts on this and any insights you might have based on your experience.
I do think that is another weakness right now is the built in plugins aren't quite sophisticated for a lot of real use cases
Looking at the demo, does Plasmic have any killer features that MUI's offering doesn't? At the moment, MUI's main limitation is that it can't connect directly to a database: you have to go through an API, or write an API route for each app that proxies the SQL queries.
One big difference is that Plasmic is a platform and can be used by non-developers to make changes that go straight to production. Think marketers, content managers, and other non-devs that are on your team who want to ship new designs and content without bugging the dev.
And yes you can connect directly a database - critically, Plasmic lets you define backend operations that work with auth: https://docs.plasmic.app/learn/integrations/#security
I think the GitHub page is probably a bit clearer than our website right now:
https://github.com/plasmicapp/plasmic
Basically, it's a visual page builder that plugs into your own Next.js/Remix/React/etc. codebase. Your marketing/content/design team can then build and publish pages without filing tickets on eng. This (content management) is the main use case.
The most interesting aspect is that editors can drag and drop React components from your own codebase as building blocks. This is very powerful, esp. with e.g. data fetching React components.
Why open source? Because we love the tool. Plasmic has been in production deployment at companies big and small. But we think it can grow far beyond ourselves as an open source project. We’d love to see a broader community take it in unexplored directions. Community users have even started using it to build emails with React.Email and mobile screens in React Native.
Would love to hear folks' questions and feedback!
- Webflow, Wordpress and other page builders
- Retool and other tool builders
- Glide and no-code app builders
- Contentful and other CMSes
Today these are different tools to specialize in, but the line between, say, a website and an application is blurry (consider an ecommerce storefront with user logins, or a customer portal). With the right foundations, we think these can be unified—Plasmic’s UI can adapt to different levels of control for different personas/tasks.
So a newer use case is that you can use it to build applications as well as websites, for both developers and non-developers. This is the more experimental side of the project, beyond the content management use case.
Curious why you guys decided to go open-source, and whether that was always the plan.
All things considered, they seem pretty similar - visual UI to generate React code that works alongside existing codebase, open-source & self-hostable, etc.
Just a few of the differences: Plasmic....
- Is not specific to MUI
- Supports actual design control (beyond theming)
- Supports defining reusable components in the editor, with slots/props/variants
- Is suitable for websites and applications where page speed matters (static/SSR pre-rendering and data fetching, image optimization, etc.)
- Has a more structured layout system
- Is highly configurable UI for different personas - e.g. non-developers on the team
- Has cross-project imports / reusable libraries
- Has Figma import
- More...
If you pull all the marketing taglines together, it's a no/low-code app builder. We have those, what makes this different? That's the front page sell.
Framer has a great UI builder, but doesn’t connect to backends very well. They have their own CMS but the net result is that you typically use it for marketing sites but not business app interfaces.
Retool can connect to a lot of different data sources but is ugly and wouldn’t help build a customer-facing app that I would feel proud of. They give you easy to use UI primitives to get you up and running fast.
This seems like a UI builder that can hook into backend systems.
https://github.com/plasmicapp/plasmic?tab=readme-ov-file#how...
Still have questions about how component composition and layout work, but at least the readme is clearer about what the product IS.
For some more detailed docs, check out https://docs.plasmic.app/learn/styling-and-layout/
Our repo https://github.com/plasmicapp/plasmic might be a bit more concrete.
It's a visual page builder that integrates with React codebases. Content management is our biggest use case - i.e., dev team integrates with Plasmic, and then marketing/content/design teams can create landing pages on the marketing site.
(A newer use case is building applications as well, hence some of the comparisons with Retool etc. There's actually quite a bit of overlap between these use cases, esp. when considering external-facing "customer portal"-style applications.)
Our users have used Plasmic to build all sorts of things, from websites and e-commerce storefronts, to Retool-like internal tools, to full web apps (major parts of the Plasmic visual editor itself is built with Plasmic!). The most popular use case we have is as a CMS -- once developers set up Plasmic, the marketers are able to design and publish sections of the website without developer involvement. One remarkable thing is that the dynamically-fetched Plasmic-generated design is part of the same React tree as the rest of your React app, so it is able to read from your React contexts, etc., making it possible to have rather deep and interesting integrations into your site.
Ultimately, Plasmic generates React code from your designs. This code can either live in your code base alongside the rest of your code, or be dynamically fetched (like in the CMS use case).
What does that mean? Does it mean that you can import your own components like using a standard import statement?
The downside to Plasmic has been the community size and therefore lake of support so I hope Plasmic going open source will resolve these issues.
These types of tools can be overlooked by traditional siloed Design and Development, and is best suited to hybrid teams were the power of designing with code components can be realised.
Plasmic was like discovering a Gem, a rough diamond that a hybrid open source community get the chance to shape.
I highly recommend this product!
Just a sample of the output would go a very long way in telling me whether or not it can produce anything I can use.
Best of all, their customer support staff are top tier. Plasmic has a dedicated Slack channel where they respond to questions and solve problems almost immediately. They will literally respond within 5 minutes of a slack and start helping. It's white glove service that is rare.
I have no problem using these on smaller projects that are fairly static, but on more complex things it has always felt to me like the time you save by using a tool like this, you end up losing when you want to do something not supported by the tool and you have to hack through the spaghetti code it outputs.
Can anyone speak to the quality of the code that Plasmic puts out?
You can check out how it works (https://docs.plasmic.app/learn/codegen-guide/), but also happy to answer questions here!
I think that actually amplifies the concern. Basically it's "don't touch the output," but what if we want/need to?
In case you still want to see the code from codegen, here's an example. We generate 3 files per page/component:
1. JS/TS: https://github.com/plasmicapp/plasmic/blob/master/platform/w...
2. CSS: https://github.com/plasmicapp/plasmic/blob/master/platform/w...
3. An entry point wrapper JS/TS file: https://github.com/plasmicapp/plasmic/blob/master/platform/w...
While 1 and 2 will be overwritten as you update your project in Plasmic (and therefore you should never modify it), the wrapper (3) is yours to customize as needed, like setting props or binding event handlers. In the above example, we computed how much free trial time a customer has. You can read more about the generated code here: https://docs.plasmic.app/learn/codegen-components/
My question is more focused on the idea that at some point there will be something that I need to do that can't be done through the WYSIWYG editor. I'm wondering what happens in that use case. Can I open up VS code and start changing the underlying code myself? If so how does the tool maintain those changes through iterations and how maintainable is the code that Plasmic generates?
My concern comes from the fact that I've used some of these tools in the past and the code they spit out will have things like 8 levels of nested divs for no reason, empty tags, and inlined and !important styles all over the place. I'm not saying Plasmic will do that, but I'm wondering if anyone who has used this can say how good or bad the generated code actually is.
As for the actually generated code, it basically maps to what you've created yourself in the studio. Plasmic does have a styling / element abstraction, but it's fairly low-level, and everything is pretty close to how you'd write a React component yourself. If you're not creating empty divs in the editor, you shouldn't see empty divs in the generated code :-)
This is Plasmic-generated code that we ourselves use to build our visual editor.
I guess Firefox 121 isn't modern enough...
Curious, what API this page uses that's so valuable to discard another browser
Just for fun during the ETHDenver hackathon, I shipped an LLM-powered NFT generator, with 0 lines of code in 3 hours, and won a cash prize. This tool completely changes the game for me and my team.
For example, one huge advantage with Plasmic is that Plasmic components run within your React tree. This means you can naturally embed Plasmic components in your React components, and even the other way around!