Connect Adobe XD to Zeplin and Avocode for enhanced developer handoff — automatic redlines, component documentation, code snippets in multiple languages, and structured asset delivery beyond XD's built-in share links.
Zeplin and Avocode are developer-focused handoff tools that sit between the design file (XD, Figma, Sketch) and the development codebase. While XD's built-in share links provide basic inspection, Zeplin and Avocode add measurement redlines, multi-platform code generation, component documentation, and structured asset management that teams working on large projects find essential.
As a developer, working with Zeplin means accessing a structured representation of every design component with CSS (or Swift, or Android XML) values pre-calculated, assets pre-exported, and designer notes attached. As a designer-developer bridge, these tools reduce back-and-forth and make implementation faster.
This lesson covers using Zeplin with XD as the design source — from publishing artboards to reading complete component specifications.
Zeplin integrates with XD via a plugin that exports artboards to a Zeplin project directly from XD.
Setup workflow:
What Zeplin imports from XD:
Zeplin project settings that affect developer experience:
For web projects:
Updating Zeplin after design changes:
Zeplin's developer interface provides measurement overlays, spacing guides, and code generation that exceed XD's built-in inspect capability.
Zeplin interface layout:
Measurement system in Zeplin:
Right panel sections:
Code panel (the most valuable for developers):
Colors panel:
Fonts panel:
Assets panel:
Zeplin CSS generation example:
1/* Zeplin-generated CSS for a course card title */
2.title {
3 font-family: 'Inter', sans-serif;
4 font-size: 18px; /* Zeplin shows px — convert to rem: 1.125rem */
5 font-weight: 600;
6 font-style: normal;
7 line-height: 1.44; /* Zeplin shows unitless line-height */
8 color: #111827;
9 letter-spacing: normal;
10}
11
12/* Developer-corrected version */
13.course-card__title {
14 font-family: 'Inter', system-ui, -apple-system, sans-serif;
15 font-size: 1.125rem; /* converted from 18px */
16 font-weight: 600;
17 line-height: 1.44; /* already unitless in Zeplin — good */
18 color: #111827;
19 display: -webkit-box;
20 -webkit-line-clamp: 2;
21 -webkit-box-orient: vertical;
22 overflow: hidden;
23}Zeplin allows designers and developers to add documentation to individual components — usage guidelines, implementation notes, variant descriptions, and links to related resources.
Adding documentation in Zeplin:
Component documentation template (for design → code alignment):
1## Button - Primary
2
3**React Component**: `<Button variant="primary">`
4**Storybook**: [Button Stories](https://storybook.devbootstrap.com/button)
5**GitHub**: `src/components/ui/Button.tsx`
6
7### States
8| State | CSS Selector | Visual |
9|----------|------------------------|------------------|
10| Default | .btn-primary | Blue bg, white text |
11| Hover | .btn-primary:hover | Darker blue, shadow |
12| Focus | .btn-primary:focus-visible | Blue outline ring |
13| Active | .btn-primary:active | Darker blue, scale 0.98 |
14| Disabled | .btn-primary:disabled | Gray bg, muted text |
15
16### Usage
17- Use for primary actions (one per view)
18- DO NOT use for destructive actions — use Danger variant instead
19- Minimum width: 80px
20
21### Accessibility
22- Always include text label (no icon-only primary buttons)
23- Use `aria-busy="true"` during loading state
24- Use native `<button>` — never `<div>` or `<a>` for action buttons
25
26### Notes for developers
27- Transition: 150ms ease on all properties
28- Shadow on hover: box-shadow: 0 4px 16px rgb(37 99 235 / 0.25)
29- The loading state hides the label (color: transparent) and shows a spinnerZeplin Connected Components (linking Zeplin to Storybook):
npm install -g @zeplin/clizeplin.json in project root:1 {
2 "projects": ["your-project-id"],
3 "components": [
4 {
5 "path": "src/components/Button.tsx",
6 "zeplinNames": ["Button / Primary", "Button / Secondary"]
7 }
8 ]
9 }zeplin connect to link Zeplin components to source filesBoth Zeplin and Avocode serve the same purpose (design-to-code handoff) but have different strengths. The choice depends on team size, XD usage, and whether you need cross-platform code generation.
Feature comparison:
1Feature Zeplin Avocode
2XD integration Plugin Plugin
3Figma integration Yes Yes
4Sketch integration Yes No (discontinued)
5CSS code generation Yes Yes
6Swift/iOS code Yes Yes
7Android XML Yes Yes
8Flutter code Yes No
9React Native code Yes No
10Component docs Yes (markdown) Basic notes
11Connected components Yes (Storybook) No
12Design diff Yes Yes
13Version history Yes Yes
14Free tier 1 project, 1 user Limited
15Team pricing Per seat Per seat
16Active development Yes Limited (acquired by Kitemaker)When to use Zeplin:
When to use Avocode:
Current recommendation (2026):
With XD discontinued and Avocode under limited development, neither is ideal for new projects starting fresh. For XD-based teams finishing existing projects, Zeplin is the more actively maintained option. For new projects, Figma's built-in Dev Mode with Figma design specs provides equivalent capability without additional tooling.
Alternative handoff workflows without Zeplin/Avocode:
Using Zeplin to extract all measurements, colors, typography, and states for a lesson item component and implementing it in CSS without additional designer input.
1/*
2Zeplin spec for 'Lesson Item' component:
3
4General:
5 Screen: 'Course Detail - Desktop'
6 Component: 'Lesson Item / Default'
7 H: 64px, W: full-width
8 Background: #FFFFFF (transparent on parent bg)
9 Border-bottom: 1px solid #E5E7EB
10 Padding: 0 16px (from Zeplin spacing measurement)
11
12Lesson Number Badge:
13 W:24 H:24, radius:50%, bg:#EFF6FF, text:#2563EB
14 Font: Inter 13px/500
15
16Lesson Title:
17 Font: Inter 15px/500/#374151, line-height:1.47
18 Truncate at 1 line
19 Flex:1
20
21Duration Label:
22 Font: Inter 13px/400/#6B7280
23 White-space: nowrap
24
25Progress Icon:
26 24x24 SVG, color:#16A34A (complete), #6B7280 (incomplete)
27
28Hover state:
29 Background: #F9FAFB
30 (from prototype: 150ms ease transition)
31
32Active/Playing state:
33 Background: #EFF6FF
34 Lesson title color: #2563EB
35 Number badge bg: #DBEAFE
36 Left border: 3px solid #2563EB
37*/
38
39/* CSS implementation from Zeplin spec */
40
41.lesson-item {
42 display: flex;
43 align-items: center;
44 gap: 0.75rem; /* 12px measured in Zeplin */
45 height: 4rem; /* 64px from Zeplin */
46 padding: 0 1rem; /* 0 16px from Zeplin */
47 border-bottom: 1px solid #e5e7eb;
48 background-color: transparent;
49 cursor: pointer;
50 text-decoration: none;
51 color: inherit;
52
53 /* Transition from prototype notes in Zeplin */
54 transition:
55 background-color 150ms ease,
56 border-left-color 150ms ease;
57
58 /* Active state left border (3px) — use box-shadow to avoid layout shift */
59 box-shadow: inset 3px 0 0 transparent;
60}
61
62/* Hover state */
63.lesson-item:hover {
64 background-color: #f9fafb; /* Zeplin hover state */
65}
66
67/* Active/playing state */
68.lesson-item[data-active="true"] {
69 background-color: #eff6ff; /* Zeplin active state */
70 box-shadow: inset 3px 0 0 #2563eb; /* left border without layout shift */
71}
72
73/* Number badge */
74.lesson-item__number {
75 display: flex;
76 align-items: center;
77 justify-content: center;
78 width: 1.5rem; /* 24px */
79 height: 1.5rem;
80 border-radius: 50%;
81 background-color: #eff6ff; /* Zeplin: blue-50 */
82 color: #2563eb; /* Zeplin: blue-600 */
83 font-size: 0.8125rem; /* 13px */
84 font-weight: 500;
85 flex-shrink: 0;
86}
87
88.lesson-item[data-active="true"] .lesson-item__number {
89 background-color: #dbeafe; /* Zeplin active: blue-100 */
90}
91
92/* Title */
93.lesson-item__title {
94 font-size: 0.9375rem; /* 15px */
95 font-weight: 500;
96 color: #374151; /* Zeplin default */
97 line-height: 1.47;
98 flex: 1;
99 min-width: 0;
100 white-space: nowrap;
101 overflow: hidden;
102 text-overflow: ellipsis;
103}
104
105.lesson-item[data-active="true"] .lesson-item__title {
106 color: #2563eb; /* Zeplin active */
107 font-weight: 600;
108}
109
110/* Duration */
111.lesson-item__duration {
112 font-size: 0.8125rem; /* 13px */
113 font-weight: 400;
114 color: #6b7280; /* Zeplin: neutral-500 */
115 white-space: nowrap;
116 flex-shrink: 0;
117}
118
119/* Progress icon */
120.lesson-item__status {
121 width: 1.5rem; /* 24px */
122 height: 1.5rem;
123 color: #6b7280; /* Zeplin incomplete state */
124 flex-shrink: 0;
125}
126
127.lesson-item[data-complete="true"] .lesson-item__status {
128 color: #16a34a; /* Zeplin complete: green-600 */
129}Every CSS value comes from the Zeplin spec: height 64px → 4rem, padding 0 16px → 0 1rem, all font sizes converted to rem, all colors used directly from Zeplin's hex display. The box-shadow: inset 3px 0 0 #2563eb technique for the left border avoids a layout shift that would occur if border-left-width changed from 0 to 3px — the box-shadow version adds the visual border without affecting element width. The 150ms ease transition came from the prototype notes left by the designer as a documentation comment in Zeplin.
The next lesson covers XD post-discontinuation migration strategies — moving existing XD files and workflows to Figma, preserving design history, and maintaining continuity for development teams during the transition.
Your progress is saved in this browser, on this device only.