SlideShare a Scribd company logo
"Technical Challenges behind Visual IDE for React Components" Tetiana Mandziuk
Technical Challenges
behind Visual IDE
for React Components
Tetiana Mandziuk
tetianaman@wix.com
https://www.wixcomponentstudio.com/
Introduction
Tetiana Mandziuk
— FE developer @ Wix
— 10+ years of experience
— A scientific researcher, lecturer, and
UI/UX designer in the past
Agenda
What is Wix Components Studio?
Technical Challenges
— Pluggable Architecture
— Code Analysis & Generation
— Data Synchronization
— Code Compilation & Execution
What is Wix Components
Studio?
01
Designer and Developer Collaboration
● State
● Styles
● Behaviour
● Platform
● etc.
Visual IDE for React components
that enables collaboration of
designers and developers in the
source code environment
Demo Time!
Technical Challenges
02
Enable multiple teams to build
one editor that is performant,
easily extendable, multi-environment
Pluggable Architecture
Issues from the Past
Pluggable
Architecture
— Tight coupling between features of the application
— Difficult integration of new functionality
— Team boundaries are not reflected in the code
— Challenge to maintain a growing codebase
Addressing Issues from the Past
Include or exclude parts of the application
Avoid tight coupling between the parts of the application
Speed-up development process of isolated parts of the application
Allow both internal and external engineers to add custom functionality
Pluggable
Architecture
Support multiple environments, i.e. browser, web workers, Node.js
</>
Properties Panel
Git
Components Panel
Pluggable
Architecture
Git
Git
Pluggable
Architecture
Not compiled
Not included in the bundle
Engine provides runtime abstractions for
creating multi-environment web applications
https://github.com/wixplosives/engine
Engine
Provides communication between features in different environments
Defines pluggable features and dependencies between them
Allows a feature to expose its API through services
Initializes the application by building features dependency graph,
performs compiling, bundling, and application start
Defines slots, a way for features to provide another feature data
Pluggable
Architecture
Environments
Browser: user interface
Node.js: file system access and code compilation
Web workers: off-main-thread computations
iframes: component simulations rendering
Pluggable
Architecture
Cross-Environment Feature, e.g. Git
Shortcuts
Feature
Compilation
Feature
Environments
Pluggable
Architecture
Engine provides unified API for communication
between environments
FileExplorerFeature
FSService.createFile
(‘component.tsx’);
FSFeature
class FSService {
createFile(…) { }
}
send({
service: ‘FSService’,
method: ‘createFile’,
args: [‘component.tsx’]
});
onMessage(data => {
const service = getService(data.service);
service[data.method](data.args);
});
Engine
WebSocket
Communication
Pluggable
Architecture
Pluggable Architecture
Summary: Engine
Code Analysis & Generation
Visual Code Editing
Source file
★★★★☆
Properties Panel Rendering
Abstract
Syntax
Tree
Code Analysis &
Generation
Abstract Syntax Tree
a tree representation of the abstract
syntactic structure of source code
written in a programming language
Typescript AST
{ rating: 4 }
https://ts-ast-viewer.com/
Code Analysis &
Generation
{
kind: SyntaxKind.ObjectLiteralExpression,
properties: [
{
kind: SyntaxKind.PropertyAssignment,
name: {
kind: SyntaxKind.Identifier,
escapedText: "rating",
pos: 2,
end: 9,
flags: 0,
originalKeywordKind: undefined
},
initializer: {
kind: SyntaxKind.NumericLiteral,
text: "4",
pos: 10,
end: 12,
flags: 0,
questionToken: undefined,
exclamationToken: undefined
},
pos: 2,
end: 12,
flags: 0,
decorators: undefined,
modifiers: undefined
}
],
pos: 1,
end: 14,
flags: 0
}
{
kind: 'object',
properties: [
{
kind: 'property',
name: {
kind: 'string',
value: 'rating'
},
initializer: {
kind: 'number',
value: 4
}
}
]
}
Simple AST is a simplified version of native AST
Typescript AST Simple AST
➞
Typescript AST
{
kind: SyntaxKind.PrefixUnaryExpression,
operator: SyntaxKind.MinusToken,
operand: {
kind: SyntaxKind.NumericLiteral,
text: '42'
}
}
Simple AST
➞
{ kind: 'number', value: -42 }
const x = -42;
Conversion includes native AST nodes simplification
Simple AST Core Attributes
Lossy format: recomputation back to native AST is not possible
Language-agnostic: works for Typescript, CSS, etc.
Metadata: relationship between Simple AST and native AST nodes
Code Analysis &
Generation
let componentProps = {
rating: 4
};
simulation.tsx
TypeScript AST
Simple AST
Parse
Simple AST
change: {
astNodeId: ‘p17’,
type: ‘number’,
value: 5
}
convert()
applyChanges()
sync
recomputeBack()
compute()
applyString
ChangesToFile()
Optimistic update
Code Analysis & Generation
Summary: SimpleAST
Data Synchronization
let componentProps = {
rating: 4
};
simulation.tsx
TypeScript AST
Simple AST
Parse
Simple AST
change: {
astNodeId: ‘p17’,
type: ‘number’,
value: 5
}
convert()
sync
applyChanges()
recomputeBack()
compute()
applyString
ChangesToFile()
Optimistic update
Resource
a store that represents
a piece of immutable data
It allows to create a new version of the data
and manages subscriptions to updates
Resources Core Attributes
Built-in synchronization mechanism between environments
Allows batching, i.e. performing multiple changes in a single event
Supports transactions
Allows versioning and snapshot creation / disposal
Data
Synchronization
Supports any serializable types of data
Resource, e.g. file
Syncer Syncer
sync
Resource
Created one per each environment
Resources support variety of unique synchronization strategies
One way strategy
Resource, e.g. file
Syncer Syncer
Resource
sync
Created one per each environment
Two way strategy
let componentProps = {
rating: 4
};
simulation.tsx
TypeScript AST
Simple AST
Parse
Simple AST
change: {
astNodeId: ‘p17’,
type: ‘number’,
value: 5
}
convert()
applyChanges()
recomputeBack()
compute()
applyString
ChangesToFile()
Optimistic update
sync
File Resource
simulation.tsx
TypeScript AST
Simple AST Resource Simple AST Resource
sync
One way computed strategy One way computed strategy
One way computed strategy
File Resource
simulation.tsx
TypeScript AST
Simple AST Resource Simple AST Resource
change: {
astNodeId: ‘p17’,
type: ‘number’,
value: 5
}
Resource.
applyChanges()
sync
Two way computed strategy Two way computed strategy
Two way computed strategy
Data Synchronization
Summary: Resources
Code Compilation
Compilation
Visual Code Editing
Source file
★★★★☆
Properties Panel Rendering
Abstract
Syntax
Tree
Code
Compilation
Traditional Compiling / Bundling
Transpiles the .ts file into .js,
styles (.scss, .st.css, etc.) into .css
Leverages module bundlers (Webpack) and compilers (tsc, SASS)
Code
Compilation
Create bundle
Compiling for WCS
We don’t want users to configure their bundlers for WCS
Support compilation in static online version of WSC, but webpack works in
node.
WCS does not want to limit ourselves to support projects using specific
bundlers
Code
Compilation
All entry points in webpack should be configured ahead of time
WCS Vision
Compile simulations dynamically
just-in-time in browser
Code Execution
Runs code without bundling it
Prepares transpiled code for evaluation in a browser
Uses custom CommonJS module system implementation that
works in browser
Code
Compilation
let componentProps = {
rating: 4
};
simulation.tsx
TypeScript AST
Simple AST
Parse
Simple AST
change: {
astNodeId: ‘p17’,
type: ‘number’,
value: 5
}
convert()
applyChanges()
recomputeBack()
compute()
applyString
ChangesToFile()
Optimistic update
sync
Execution Resource
sync
Names of the files + compiled source code
CommonJS Modules System
Uses Execution Resource instead of File System
Recursive evaluation of
simulation file and dependencies
Rendered Simulation
Execution Resource
Dependency
Resource
Compilation
Resource
Providing a graph of
dependencies by deep
analysis of ASTs
Transpiling
source code by using
dedicated compilers
Names of the files + compiled source code
Simulation Entry Point
simulation.tsx
Code Compilation
Summary: Code Execution
Summary: Technical Challenges
— Pluggable Architecture
— Code Analysis & Generation
— Data Synchronization
— Code Compilation & Execution
https://www.wix.com/jobs/locations/lviv
Thank
You!
tetianaman@wix.com
https://www.wixcomponentstudio.com/
Q&A
tetianaman@wix.com
https://www.wixcomponentstudio.com/
Any questions?
"Technical Challenges behind Visual IDE for React Components" Tetiana Mandziuk
Assets
Database Security Application Developer Developer Browser Code Network Network Network Copy
Tools Library Library Library Dependency Dependency Client Server Pros Pros Cons
Cons Error Error Error Monitor Bug Bug Search Search User Team
API Design Design Log in Keyboard Request Open
Source
Web Message
Domain
You can write here
a long quote with
an important message
You can
write here
short quote
Small Title
Before Bullets
INSERT YOUR
TOPIC NAME
— This is bullet no’ 1
— This is the second bullet
— And that’s the third
— This is bullet no’ 4
You don’t have to have a title
INSERT YOUR
TOPIC NAME
You don’t have to have a title
INSERT YOUR
TOPIC NAME
Screen
Shot
Title
INSERT YOUR
TOPIC NAME
Just Some Title Above The Bullets
— This is bullet no’ 1
— This is the second bullet
— And that’s the third
— This is bullet no’ 4
— And no’ ih here
INSERT YOUR
TOPIC NAME
Just Some Title Above The Bullets
— This is bullet no’ 1
— This is the second bullet
— And that’s the third
— This is bullet no’ 4
— And no’ 5 is here
INSERT YOUR
TOPIC NAME
Title and Picture
"Technical Challenges behind Visual IDE for React Components" Tetiana Mandziuk
Title Above Paragraph
I'm a paragraph. Click here to add your own text and edit me. It’s easy.
Just click “Edit Text” or double click me to add your own content and make changes to
the font. Feel free to drag and drop me anywhere you like on your page. I’m a great
place for you to tell a story and let your users know a little more about you.
This is a great space to write long text about your company and your services. You can
use this space to go into a little more detail about your company.
INSERT YOUR
TOPIC NAME
Title Above Paragraph
I'm a paragraph. Click here to add your own text and edit me. It’s easy.
Just click “Edit Text” or double click me to add your own content and make changes to
the font. Feel free to drag and drop me anywhere you like on your page. I’m a great
place for you to tell a story and let your users know a little more about you.
This is a great space to write long text about your company and your services. You can
use this space to go into a little more detail about your company.
INSERT YOUR
TOPIC NAME
Title Above Paragraph
I'm a subtitle
I'm a paragraph. Click here to add your own
text and edit me. It’s easy. Just click “Edit
Text” or double click me to add your own
content and make changes to the font. Feel
free to drag and drop me anywhere you like
on your page. I’m a great place for you to tell
a story and let your users know a little more
about you.
I'm a subtitle
This is a great space to write long text about
your company and your services. You can use
this space to go into a little more detail about
your company. Talk about your team and what
services you provide. Tell your visitors the story
of how you came up with the idea for your
business and what makes you different from
your competitors.
INSERT YOUR
TOPIC NAME
Title Above Paragraph
I'm a subtitle
I'm a paragraph. Click here to add your own
text and edit me. It’s easy. Just click “Edit
Text” or double click me to add your own
content and make changes to the font. Feel
free to drag and drop me anywhere you like
on your page. I’m a great place for you to tell
a story and let your users know a little more
about you.
I'm a subtitle
This is a great space to write long text about
your company and your services. You can use
this space to go into a little more detail about
your company. Talk about your team and what
services you provide. Tell your visitors the story
of how you came up with the idea for your
business and what makes you different from
your competitors.
INSERT YOUR
TOPIC NAME
STEP 01
STEP 02
STEP 03
If you have a pic,
you can put it here
Process Chart
INSERT YOUR
TOPIC NAME
STEP 01
STEP 02
STEP 03
If you have a pic,
you can put it here
Process Chart
INSERT YOUR
TOPIC NAME
Title
2016
2014 2015
2013
2012
2011
2010
2009
2008
Title
Title
If you have more text
here is where you can
add it
Timeline
INSERT YOUR
TOPIC NAME
2016
2013
2011
Title
Title
If you have more text
here is where you can
add it
Title
Short Period Timeline
INSERT YOUR
TOPIC NAME
Demo Time!
Code Snippet Title
Code snippet subtitle
You can add some text.
Lorem Ipsum yada yada
yadda.
— And
— Bullets
— Too!
// Add awesome your code snippet below!
// You can use Github Gists or go to this code highlighter.
// From the Style picker, select monokai and then hit ‘Highlight’.
// Copy and paste your highlighted code here.
// In text formatting, select a transparent highlight (as the font’s background).
function wrapValue(value) {
return {
getValue: function () { return value; },
setValue: function (newValue) { value = newValue; }
};
}
var x = wrapValue(5);
console.log(x.getValue()); // output 5
x.setValue(7);
console.log(x.getValue()); // output 7
This is what I want you to take
from this talk:
— Take away 01
— Take away 02
— Take away 03
— Take away 04
— Take away 05
This is what I want you to take
from this talk:
— Take away 01
— Take away 02
— Take away 03
— Take away 04
— Take away 05
This is what I want you to take
from this talk:
— Take away 01
— Take away 02
— Take away 03
— Take away 04
— Take away 05
This is what I want you to take
from this talk:
— Take away 01
— Take away 02
— Take away 03
— Take away 04
— Take away 05
Thank You
talkol@wix.com twitter@koltal linkedin/talkol github.com/talkol
Q&A
talkol@wix.com twitter@koltal linkedin/talkol github.com/talkol
Assets
Musa GIFs and PNGs
Logos of Mussa's Wix 7, Wix TLV and Wix Haifa
Icons (at the end, for people to use):
server,
keyboard,
laptop,
database,
code,
user,
Request,
browser.
Assets
Database Security Application Developer Developer Browser Code Network Network Network Copy
Tools Library Library Library Dependency Dependency Client Server Pros Pros Cons
Cons Error Error Error Monitor Bug Bug Search Search User Team
API Design Design Log in Keyboard Request Open
Source
Web Message
Domain
Assets
Database Security Application Developer Developer Browser Code Network Network Network Copy
Tools Library Library Library Dependency Dependency Client Server Pros Pros Cons
Cons Error Error Error Monitor Bug Bug Search Search User Team
API Design Design Log in Keyboar Request Open
Source
Web Message
Domain
Assets
Database Security Application Developer Developer Browser Code Network Network Network Copy
Tools Library Library Library Dependency Dependency Client Server Pros Pros Cons
Cons Error Error Error Monitor Bug Bug Search Search User Team
API Design Design Log in Keyboar Request Open
Source
Web Message
Domain
Infographic Assets
Infographic Assets

More Related Content

What's hot (20)

PDF
Mete Atamel
CodeFest
 
PDF
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Ukraine
 
PDF
Node, express & sails
Brian Shannon
 
PPTX
Web Performance & Latest in React
Talentica Software
 
PDF
Alexander Mostovenko "'Devide at impera' with GraphQL and SSR"
Fwdays
 
PPTX
Job DSL Plugin for Jenkins
Niels Bech Nielsen
 
PDF
Integrating React.js Into a PHP Application
Andrew Rota
 
PDF
Play framework And Google Cloud Platform GCP.
Eng Chrispinus Onyancha
 
PPTX
C# 6
Pascal Laurin
 
PDF
Евгений Жарков "React Native: Hurdle Race"
Fwdays
 
PDF
Web Development with NodeJS
Riza Fahmi
 
PDF
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
Gavin Pickin
 
PDF
The Job DSL Plugin: Introduction & What’s New
Daniel Spilker
 
PDF
How to go about testing in React?
Lisa Gagarina
 
PDF
Webpack & React Performance in 16+ Steps
Grgur Grisogono
 
PDF
Web Performance Part 4 "Client-side performance"
Binary Studio
 
PDF
Unit Testing your React / Redux app (@BucharestJS)
Alin Pandichi
 
PPTX
Configuration As Code: The Job DSL Plugin
Daniel Spilker
 
PPTX
Node js Introduction
sanskriti agarwal
 
PDF
Intro to React
SheilaJimenezMorejon
 
Mete Atamel
CodeFest
 
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Ukraine
 
Node, express & sails
Brian Shannon
 
Web Performance & Latest in React
Talentica Software
 
Alexander Mostovenko "'Devide at impera' with GraphQL and SSR"
Fwdays
 
Job DSL Plugin for Jenkins
Niels Bech Nielsen
 
Integrating React.js Into a PHP Application
Andrew Rota
 
Play framework And Google Cloud Platform GCP.
Eng Chrispinus Onyancha
 
Евгений Жарков "React Native: Hurdle Race"
Fwdays
 
Web Development with NodeJS
Riza Fahmi
 
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
Gavin Pickin
 
The Job DSL Plugin: Introduction & What’s New
Daniel Spilker
 
How to go about testing in React?
Lisa Gagarina
 
Webpack & React Performance in 16+ Steps
Grgur Grisogono
 
Web Performance Part 4 "Client-side performance"
Binary Studio
 
Unit Testing your React / Redux app (@BucharestJS)
Alin Pandichi
 
Configuration As Code: The Job DSL Plugin
Daniel Spilker
 
Node js Introduction
sanskriti agarwal
 
Intro to React
SheilaJimenezMorejon
 

Similar to "Technical Challenges behind Visual IDE for React Components" Tetiana Mandziuk (20)

KEY
20120514 nodejsdublin
Richard Rodger
 
PDF
Charlas CityJS, una por una, atestiguando el crecimiento tech
Eligreg López
 
PDF
Introduction to Node.js
Troy Miles
 
PDF
Building a game with JavaScript (March 2017, washington dc)
Daniel Friedman
 
PDF
Practical JavaScript Programming - Session 8/8
Wilson Su
 
KEY
The Architect Way
Jan Jongboom
 
PPTX
Don't Be Afraid of Abstract Syntax Trees
Jamund Ferguson
 
PDF
Modern front-end Workflow
Ryukyuinteractivevietnam
 
PPTX
Building Open-Source React Components
Zack Argyle
 
PPTX
Building Open-source React Components
Zack Argyle
 
PPTX
Client Building Functional webapps.
Arun Kumar
 
KEY
Internals - Exploring the webOS Browser and JavaScript
fpatton
 
PPTX
SubmitJS: Is react + redux + typescript a good combination? Dmytro Beseda
Binary Studio
 
PDF
Content-Driven Apps with React
Netcetera
 
KEY
Node.js - The New, New Hotness
Daniel Shaw
 
PPTX
Adding a modern twist to legacy web applications
Jeff Durta
 
PDF
Using Web Standards to create Interactive Data Visualizations for the Web
philogb
 
PDF
Talk Paris Infovis 091207132953 Phpapp01(2)
johnnybiz
 
PDF
Introduction to Node.js
Aaron Rosenberg
 
PDF
Using Node-RED for building IoT workflows
Aniruddha Chakrabarti
 
20120514 nodejsdublin
Richard Rodger
 
Charlas CityJS, una por una, atestiguando el crecimiento tech
Eligreg López
 
Introduction to Node.js
Troy Miles
 
Building a game with JavaScript (March 2017, washington dc)
Daniel Friedman
 
Practical JavaScript Programming - Session 8/8
Wilson Su
 
The Architect Way
Jan Jongboom
 
Don't Be Afraid of Abstract Syntax Trees
Jamund Ferguson
 
Modern front-end Workflow
Ryukyuinteractivevietnam
 
Building Open-Source React Components
Zack Argyle
 
Building Open-source React Components
Zack Argyle
 
Client Building Functional webapps.
Arun Kumar
 
Internals - Exploring the webOS Browser and JavaScript
fpatton
 
SubmitJS: Is react + redux + typescript a good combination? Dmytro Beseda
Binary Studio
 
Content-Driven Apps with React
Netcetera
 
Node.js - The New, New Hotness
Daniel Shaw
 
Adding a modern twist to legacy web applications
Jeff Durta
 
Using Web Standards to create Interactive Data Visualizations for the Web
philogb
 
Talk Paris Infovis 091207132953 Phpapp01(2)
johnnybiz
 
Introduction to Node.js
Aaron Rosenberg
 
Using Node-RED for building IoT workflows
Aniruddha Chakrabarti
 
Ad

More from Fwdays (20)

PPTX
"Як ми переписали Сільпо на Angular", Євген Русаков
Fwdays
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
"Validation and Observability of AI Agents", Oleksandr Denisyuk
Fwdays
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PPTX
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
Fwdays
 
PPTX
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
Fwdays
 
PDF
"AI is already here. What will happen to your team (and your role) tomorrow?"...
Fwdays
 
PPTX
"Is it worth investing in AI in 2025?", Alexander Sharko
Fwdays
 
PDF
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
PDF
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
PDF
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
PDF
"Scaling in space and time with Temporal", Andriy Lupa .pdf
Fwdays
 
PPTX
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
Fwdays
 
PPTX
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
Fwdays
 
PPTX
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
PPTX
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
Fwdays
 
PPTX
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 
PPTX
"Confidential AI: zero trust concept", Hennadiy Karpov
Fwdays
 
PPTX
"Choosing Tensor Accelerators for Specific Tasks: Compute vs Memory Bound Mod...
Fwdays
 
"Як ми переписали Сільпо на Angular", Євген Русаков
Fwdays
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
"Validation and Observability of AI Agents", Oleksandr Denisyuk
Fwdays
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
Fwdays
 
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
Fwdays
 
"AI is already here. What will happen to your team (and your role) tomorrow?"...
Fwdays
 
"Is it worth investing in AI in 2025?", Alexander Sharko
Fwdays
 
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
"Scaling in space and time with Temporal", Andriy Lupa .pdf
Fwdays
 
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
Fwdays
 
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
Fwdays
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
Fwdays
 
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 
"Confidential AI: zero trust concept", Hennadiy Karpov
Fwdays
 
"Choosing Tensor Accelerators for Specific Tasks: Compute vs Memory Bound Mod...
Fwdays
 
Ad

Recently uploaded (20)

PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
July Patch Tuesday
Ivanti
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Biography of Daniel Podor.pdf
Daniel Podor
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
July Patch Tuesday
Ivanti
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 

"Technical Challenges behind Visual IDE for React Components" Tetiana Mandziuk

  • 2. Technical Challenges behind Visual IDE for React Components Tetiana Mandziuk [email protected] https://www.wixcomponentstudio.com/
  • 4. Tetiana Mandziuk — FE developer @ Wix — 10+ years of experience — A scientific researcher, lecturer, and UI/UX designer in the past
  • 5. Agenda What is Wix Components Studio? Technical Challenges — Pluggable Architecture — Code Analysis & Generation — Data Synchronization — Code Compilation & Execution
  • 6. What is Wix Components Studio? 01
  • 7. Designer and Developer Collaboration ● State ● Styles ● Behaviour ● Platform ● etc.
  • 8. Visual IDE for React components that enables collaboration of designers and developers in the source code environment
  • 11. Enable multiple teams to build one editor that is performant, easily extendable, multi-environment
  • 13. Issues from the Past Pluggable Architecture — Tight coupling between features of the application — Difficult integration of new functionality — Team boundaries are not reflected in the code — Challenge to maintain a growing codebase
  • 14. Addressing Issues from the Past Include or exclude parts of the application Avoid tight coupling between the parts of the application Speed-up development process of isolated parts of the application Allow both internal and external engineers to add custom functionality Pluggable Architecture Support multiple environments, i.e. browser, web workers, Node.js </>
  • 18. Engine provides runtime abstractions for creating multi-environment web applications https://github.com/wixplosives/engine
  • 19. Engine Provides communication between features in different environments Defines pluggable features and dependencies between them Allows a feature to expose its API through services Initializes the application by building features dependency graph, performs compiling, bundling, and application start Defines slots, a way for features to provide another feature data Pluggable Architecture
  • 20. Environments Browser: user interface Node.js: file system access and code compilation Web workers: off-main-thread computations iframes: component simulations rendering Pluggable Architecture
  • 21. Cross-Environment Feature, e.g. Git Shortcuts Feature Compilation Feature Environments Pluggable Architecture
  • 22. Engine provides unified API for communication between environments
  • 23. FileExplorerFeature FSService.createFile (‘component.tsx’); FSFeature class FSService { createFile(…) { } } send({ service: ‘FSService’, method: ‘createFile’, args: [‘component.tsx’] }); onMessage(data => { const service = getService(data.service); service[data.method](data.args); }); Engine WebSocket Communication Pluggable Architecture
  • 25. Code Analysis & Generation
  • 26. Visual Code Editing Source file ★★★★☆ Properties Panel Rendering Abstract Syntax Tree Code Analysis & Generation
  • 27. Abstract Syntax Tree a tree representation of the abstract syntactic structure of source code written in a programming language
  • 28. Typescript AST { rating: 4 } https://ts-ast-viewer.com/ Code Analysis & Generation
  • 29. { kind: SyntaxKind.ObjectLiteralExpression, properties: [ { kind: SyntaxKind.PropertyAssignment, name: { kind: SyntaxKind.Identifier, escapedText: "rating", pos: 2, end: 9, flags: 0, originalKeywordKind: undefined }, initializer: { kind: SyntaxKind.NumericLiteral, text: "4", pos: 10, end: 12, flags: 0, questionToken: undefined, exclamationToken: undefined }, pos: 2, end: 12, flags: 0, decorators: undefined, modifiers: undefined } ], pos: 1, end: 14, flags: 0 } { kind: 'object', properties: [ { kind: 'property', name: { kind: 'string', value: 'rating' }, initializer: { kind: 'number', value: 4 } } ] } Simple AST is a simplified version of native AST Typescript AST Simple AST ➞
  • 30. Typescript AST { kind: SyntaxKind.PrefixUnaryExpression, operator: SyntaxKind.MinusToken, operand: { kind: SyntaxKind.NumericLiteral, text: '42' } } Simple AST ➞ { kind: 'number', value: -42 } const x = -42; Conversion includes native AST nodes simplification
  • 31. Simple AST Core Attributes Lossy format: recomputation back to native AST is not possible Language-agnostic: works for Typescript, CSS, etc. Metadata: relationship between Simple AST and native AST nodes Code Analysis & Generation
  • 32. let componentProps = { rating: 4 }; simulation.tsx TypeScript AST Simple AST Parse Simple AST change: { astNodeId: ‘p17’, type: ‘number’, value: 5 } convert() applyChanges() sync recomputeBack() compute() applyString ChangesToFile() Optimistic update
  • 33. Code Analysis & Generation Summary: SimpleAST
  • 35. let componentProps = { rating: 4 }; simulation.tsx TypeScript AST Simple AST Parse Simple AST change: { astNodeId: ‘p17’, type: ‘number’, value: 5 } convert() sync applyChanges() recomputeBack() compute() applyString ChangesToFile() Optimistic update
  • 36. Resource a store that represents a piece of immutable data It allows to create a new version of the data and manages subscriptions to updates
  • 37. Resources Core Attributes Built-in synchronization mechanism between environments Allows batching, i.e. performing multiple changes in a single event Supports transactions Allows versioning and snapshot creation / disposal Data Synchronization Supports any serializable types of data
  • 38. Resource, e.g. file Syncer Syncer sync Resource Created one per each environment Resources support variety of unique synchronization strategies One way strategy
  • 39. Resource, e.g. file Syncer Syncer Resource sync Created one per each environment Two way strategy
  • 40. let componentProps = { rating: 4 }; simulation.tsx TypeScript AST Simple AST Parse Simple AST change: { astNodeId: ‘p17’, type: ‘number’, value: 5 } convert() applyChanges() recomputeBack() compute() applyString ChangesToFile() Optimistic update sync
  • 41. File Resource simulation.tsx TypeScript AST Simple AST Resource Simple AST Resource sync One way computed strategy One way computed strategy One way computed strategy
  • 42. File Resource simulation.tsx TypeScript AST Simple AST Resource Simple AST Resource change: { astNodeId: ‘p17’, type: ‘number’, value: 5 } Resource. applyChanges() sync Two way computed strategy Two way computed strategy Two way computed strategy
  • 45. Compilation Visual Code Editing Source file ★★★★☆ Properties Panel Rendering Abstract Syntax Tree Code Compilation
  • 46. Traditional Compiling / Bundling Transpiles the .ts file into .js, styles (.scss, .st.css, etc.) into .css Leverages module bundlers (Webpack) and compilers (tsc, SASS) Code Compilation Create bundle
  • 47. Compiling for WCS We don’t want users to configure their bundlers for WCS Support compilation in static online version of WSC, but webpack works in node. WCS does not want to limit ourselves to support projects using specific bundlers Code Compilation All entry points in webpack should be configured ahead of time
  • 48. WCS Vision Compile simulations dynamically just-in-time in browser
  • 49. Code Execution Runs code without bundling it Prepares transpiled code for evaluation in a browser Uses custom CommonJS module system implementation that works in browser Code Compilation
  • 50. let componentProps = { rating: 4 }; simulation.tsx TypeScript AST Simple AST Parse Simple AST change: { astNodeId: ‘p17’, type: ‘number’, value: 5 } convert() applyChanges() recomputeBack() compute() applyString ChangesToFile() Optimistic update sync
  • 51. Execution Resource sync Names of the files + compiled source code CommonJS Modules System Uses Execution Resource instead of File System Recursive evaluation of simulation file and dependencies Rendered Simulation Execution Resource Dependency Resource Compilation Resource Providing a graph of dependencies by deep analysis of ASTs Transpiling source code by using dedicated compilers Names of the files + compiled source code Simulation Entry Point simulation.tsx
  • 53. Summary: Technical Challenges — Pluggable Architecture — Code Analysis & Generation — Data Synchronization — Code Compilation & Execution
  • 58. Assets Database Security Application Developer Developer Browser Code Network Network Network Copy Tools Library Library Library Dependency Dependency Client Server Pros Pros Cons Cons Error Error Error Monitor Bug Bug Search Search User Team API Design Design Log in Keyboard Request Open Source Web Message Domain
  • 59. You can write here a long quote with an important message
  • 61. Small Title Before Bullets INSERT YOUR TOPIC NAME — This is bullet no’ 1 — This is the second bullet — And that’s the third — This is bullet no’ 4
  • 62. You don’t have to have a title INSERT YOUR TOPIC NAME
  • 63. You don’t have to have a title INSERT YOUR TOPIC NAME
  • 65. Just Some Title Above The Bullets — This is bullet no’ 1 — This is the second bullet — And that’s the third — This is bullet no’ 4 — And no’ ih here INSERT YOUR TOPIC NAME
  • 66. Just Some Title Above The Bullets — This is bullet no’ 1 — This is the second bullet — And that’s the third — This is bullet no’ 4 — And no’ 5 is here INSERT YOUR TOPIC NAME
  • 69. Title Above Paragraph I'm a paragraph. Click here to add your own text and edit me. It’s easy. Just click “Edit Text” or double click me to add your own content and make changes to the font. Feel free to drag and drop me anywhere you like on your page. I’m a great place for you to tell a story and let your users know a little more about you. This is a great space to write long text about your company and your services. You can use this space to go into a little more detail about your company. INSERT YOUR TOPIC NAME
  • 70. Title Above Paragraph I'm a paragraph. Click here to add your own text and edit me. It’s easy. Just click “Edit Text” or double click me to add your own content and make changes to the font. Feel free to drag and drop me anywhere you like on your page. I’m a great place for you to tell a story and let your users know a little more about you. This is a great space to write long text about your company and your services. You can use this space to go into a little more detail about your company. INSERT YOUR TOPIC NAME
  • 71. Title Above Paragraph I'm a subtitle I'm a paragraph. Click here to add your own text and edit me. It’s easy. Just click “Edit Text” or double click me to add your own content and make changes to the font. Feel free to drag and drop me anywhere you like on your page. I’m a great place for you to tell a story and let your users know a little more about you. I'm a subtitle This is a great space to write long text about your company and your services. You can use this space to go into a little more detail about your company. Talk about your team and what services you provide. Tell your visitors the story of how you came up with the idea for your business and what makes you different from your competitors. INSERT YOUR TOPIC NAME
  • 72. Title Above Paragraph I'm a subtitle I'm a paragraph. Click here to add your own text and edit me. It’s easy. Just click “Edit Text” or double click me to add your own content and make changes to the font. Feel free to drag and drop me anywhere you like on your page. I’m a great place for you to tell a story and let your users know a little more about you. I'm a subtitle This is a great space to write long text about your company and your services. You can use this space to go into a little more detail about your company. Talk about your team and what services you provide. Tell your visitors the story of how you came up with the idea for your business and what makes you different from your competitors. INSERT YOUR TOPIC NAME
  • 73. STEP 01 STEP 02 STEP 03 If you have a pic, you can put it here Process Chart INSERT YOUR TOPIC NAME
  • 74. STEP 01 STEP 02 STEP 03 If you have a pic, you can put it here Process Chart INSERT YOUR TOPIC NAME
  • 75. Title 2016 2014 2015 2013 2012 2011 2010 2009 2008 Title Title If you have more text here is where you can add it Timeline INSERT YOUR TOPIC NAME
  • 76. 2016 2013 2011 Title Title If you have more text here is where you can add it Title Short Period Timeline INSERT YOUR TOPIC NAME
  • 78. Code Snippet Title Code snippet subtitle You can add some text. Lorem Ipsum yada yada yadda. — And — Bullets — Too! // Add awesome your code snippet below! // You can use Github Gists or go to this code highlighter. // From the Style picker, select monokai and then hit ‘Highlight’. // Copy and paste your highlighted code here. // In text formatting, select a transparent highlight (as the font’s background). function wrapValue(value) { return { getValue: function () { return value; }, setValue: function (newValue) { value = newValue; } }; } var x = wrapValue(5); console.log(x.getValue()); // output 5 x.setValue(7); console.log(x.getValue()); // output 7
  • 79. This is what I want you to take from this talk: — Take away 01 — Take away 02 — Take away 03 — Take away 04 — Take away 05
  • 80. This is what I want you to take from this talk: — Take away 01 — Take away 02 — Take away 03 — Take away 04 — Take away 05
  • 81. This is what I want you to take from this talk: — Take away 01 — Take away 02 — Take away 03 — Take away 04 — Take away 05
  • 82. This is what I want you to take from this talk: — Take away 01 — Take away 02 — Take away 03 — Take away 04 — Take away 05
  • 83. Thank You [email protected] twitter@koltal linkedin/talkol github.com/talkol
  • 85. Assets Musa GIFs and PNGs Logos of Mussa's Wix 7, Wix TLV and Wix Haifa Icons (at the end, for people to use): server, keyboard, laptop, database, code, user, Request, browser.
  • 86. Assets Database Security Application Developer Developer Browser Code Network Network Network Copy Tools Library Library Library Dependency Dependency Client Server Pros Pros Cons Cons Error Error Error Monitor Bug Bug Search Search User Team API Design Design Log in Keyboard Request Open Source Web Message Domain
  • 87. Assets Database Security Application Developer Developer Browser Code Network Network Network Copy Tools Library Library Library Dependency Dependency Client Server Pros Pros Cons Cons Error Error Error Monitor Bug Bug Search Search User Team API Design Design Log in Keyboar Request Open Source Web Message Domain
  • 88. Assets Database Security Application Developer Developer Browser Code Network Network Network Copy Tools Library Library Library Dependency Dependency Client Server Pros Pros Cons Cons Error Error Error Monitor Bug Bug Search Search User Team API Design Design Log in Keyboar Request Open Source Web Message Domain