Drawably: Hand-Drawn UI Controls
Recorded: Sept. 14, 2026, 12:09 p.m.
| Original | Summarized |
GitHub - Danilaa1/drawably: Hand-drawn UI controls. Every mount generates a fresh pen sketch from seeded randomness, and the stroke boils like an animated doodle. Zero dependencies, 4 KB of JS and one stylesheet. · GitHub Skip to content Navigation MenuSign inAppearance settingsPlatformAI CODE CREATIONGitHub CopilotWrite better code with AIGitHub Copilot appDirect agents from issue to mergeMCP RegistryIntegrate external toolsDEVELOPER WORKFLOWSActionsAutomate any workflowCodespacesInstant dev environmentsIssuesPlan and track workCode ReviewManage code changesCode QualityEnforce quality at mergeAPPLICATION SECURITYGitHub Advanced SecurityFind and fix vulnerabilitiesCode securitySecure your code as you buildSecret protectionStop leaks before they startEXPLOREWhy GitHubDocumentationBlogChangelogMarketplaceView all featuresSolutionsBY COMPANY SIZEEnterprisesSmall and medium teamsStartupsNonprofitsBY USE CASEApp ModernizationDevSecOpsDevOpsCI/CDView all use casesBY INDUSTRYHealthcareFinancial servicesManufacturingGovernmentView all industriesView all solutionsResourcesEXPLORE BY TOPICAISoftware DevelopmentDevOpsSecurityView all topicsEXPLORE BY TYPECustomer storiesEvents & webinarsEbooks & reportsBusiness insightsGitHub SkillsSUPPORT & SERVICESDocumentationCustomer supportCommunity forumTrust centerPartnersView all resourcesOpen SourceCOMMUNITYGitHub SponsorsFund open source developersPROGRAMSSecurity LabMaintainer CommunityGitHub StarsArchive ProgramREPOSITORIESTopicsTrendingCollectionsEnterpriseENTERPRISE SOLUTIONSEnterprise platformAI-powered developer platformAVAILABLE ADD-ONSGitHub Advanced SecurityEnterprise-grade security featuresCopilot for BusinessEnterprise-grade AI featuresPremium SupportEnterprise-grade 24/7 supportPricingSearch/Sign inSign upAppearance settings You signed in with another tab or window. Reload to refresh your session. Dismiss alert Danilaa1 drawably Public
Notifications
Fork
Star Code Issues Pull requests Actions Projects Security and quality Insights
Additional navigation options
Code Issues Pull requests Actions Projects Security and quality Insights
mainBranchesTagsGo to fileCodeOpen more actions menuLatest commit History52 Commits52 CommitsFolders and filesNameNameLast commit messageLast commit date.github.github assetsassets examplesexamples fontfont remotionremotion srcsrc teststests .gitignore.gitignore AGENTS.mdAGENTS.md CLAUDE.mdCLAUDE.md LICENSELICENSE PLAN.mdPLAN.md README.mdREADME.md package-lock.jsonpackage-lock.json package.jsonpackage.json style.cssstyle.css style.css.d.tsstyle.css.d.ts tsconfig.jsontsconfig.json vitest.config.tsvitest.config.ts View all filesRepository files navigationREADMEMIT licenseMore itemsdrawably Install drawablyButton(document.querySelector("#done"), { variant: "solid" }); <DrawablyButton variant="solid" onClick={submit}>Done</DrawablyButton> const button = drawablyButton(el); Function drawablyButton(el, opts) drawablyCheckbox(el, opts) drawablyRadio(el, opts) drawablyToggle(el, opts) drawablyInput(el, opts) drawablyTextarea(el, opts) drawablySelect(el, opts) drawablyDivider(el, opts) drawablyCard(el, opts) drawablyBadge(el, opts) drawablyList(el, opts) Badges take variant: "outline" | "scribble"; lists take Function drawablyUnderline(el, opts) drawablyHighlight(el, opts) drawablyCircle(el, opts) drawablyArrow(from, to, opts) import { DrawablyUnderline, DrawablyHighlight, DrawablyCircle, DrawablyArrow } from "drawably/react"; <p> Function drawablyChip(el, opts) drawablyTabs(el, opts) drawablyTooltip(tip, target, opts) drawablyAlert(el, opts) drawablySteps(el, opts) drawablyKbd(el, opts) drawablyQuote(el, opts) drawablyPager(el, opts) import { DrawablyChip, DrawablyTabs, DrawablyTooltip, DrawablyAlert, DrawablySteps, DrawablyKbd, DrawablyQuote, DrawablyPager } from "drawably/react"; <DrawablyChip defaultChecked>pen</DrawablyChip> Option seed roughness boil stroke, fill, paper width The colours are plain CSS custom properties, so a theme can set them once: const frames = variants( Footer © 2026 GitHub, Inc. Footer navigation Terms Privacy Security Status Community Docs Contact Manage cookies Do not share my personal information You can’t perform that action at this time. |
The drawably library is a system designed to create hand-drawn user interface controls, where every instance generates a unique pen sketch based on seeded randomness, resulting in strokes that animate like doodles. The library is characterized by its minimal footprint, requiring zero external dependencies, comprising approximately 4 kilobytes of gzipped JavaScript and a 3 kilobyte stylesheet. The core mechanism involves generating unique visual representations through seeded randomness; when an element mounts, it generates a fresh pen sketch. Control over this randomness is managed through options such as the seed, which allows for reproducible sketches if a specific number is provided, and roughness, which dictates the wobble of the base sketch, and boil, which controls the visual flicker of the frame-to-frame rendering. Color and stroke properties are managed using CSS custom properties, allowing for theme-based styling. The library provides a set of primary functions for drawing interactions on standard HTML elements, encompassing various controls such as buttons, checkboxes, radio buttons, inputs, textareas, and select menus, alongside elements like dividers and cards. These functions, such as drawablyButton or drawablyCheckbox, wrap the native HTML elements, ensuring that standard accessibility features like keyboard navigation, form handling, and screen reader compatibility remain fully operational. The resulting sketches are layered beneath the actual inputs as hidden SVG elements. Additional drawing functionality allows for annotations and complex compositions. Features include functions for drawing underlines, highlights, circles, and arrows between elements, enabling expressive annotations directly on the UI. Furthermore, the library supports composite functions for building complex UI patterns, such as chips, tabs, tooltips, alert boxes, step lists, and pagers, allowing users to sketch entire interactive components. Buttons offer three visual variants: outline, solid, and scribble. These buttons also incorporate a state machine capable of managing asynchronous workflows, allowing them to visually transition to states like loading, error, or success, which further influence the visual rendering. The system is decoupled, utilizing React components for these drawing interactions, such as DrawablyButton, providing a clear separation between the drawing logic and the underlying structure. The aesthetic experience can be further customized through optional font settings, where a specialized typeface, Drawably Pen, is included as an option, allowing the text labels to possess the same hand-drawn aesthetic. The system supports exporting the rough renderer, which provides the generated SVG path strings and the boil frames, which are essential for rendering the animated strokes. |