Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (2024)

'; if (j_me_like[i]==1) meLikeStr = 'animatelike liked'; else meLikeStr = 'not-liked'; var product_str = '', product_css = '', product_str_buy = '', product_home_buy = '', product_orig = '', product_moth = '', product_tested = ''; if (p_status[i]==1) //a product { if (orig_des[i]==journal_id[i]) product_orig = 'Original Designer'; product_css = ' product_item'; product_str = '

'+price[i]+'Handmade |

only 1

'; product_str_buy = '

__pro__Buy me'+product_orig+'

'; product_home_buy = '

__pro__Buy me'+product_orig+'

'; if (motm[i]==1) //motm (make of the month) product_moth = '

Make of the month

'; } if (journal_id[i]==user_id && make_tested[i]==0) { //check if make was by tester product_tested = '

Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (1)

'; }if (page=="home")str+= '
  • '+'

    '+ product_moth+product_home_buy+''+''+ ''+'

    '+'

    '+thepattern_name[i]+' by '+store_name[i] +'

    '+product_str+ '
  • '; elsestr+= '
  • '+'

    '+likesStr+ 'Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (3)'+'

    '+ '

    '+ product_tested+product_moth+product_str_buy+''+''+'

    '+'

    '+thepattern_name[i]+' by '+store_name[i] +'

    '+product_str+ '
  • '; //add an ad list -> according to page frequency var add_ad = false; switch (page) { case "craft_0": case "craft_1": case "craft_2": case "craft_3": case "search": case "craft_crochet": case "mywishlist": case "bundle": case "discover": case "journalfeed": if (isMobile) add_ad = ((list_offset+i)%7==2 && (list_offset+i)>0); //every 7 (exclude pos 0) else //desktop add_ad = ((list_offset+i)%9==0 && (list_offset+i)>0); //every 10 break; case "home": //no ads break; } if (add_ad){ str+=''; //add adstot_ads++;} } //loop... if (tot_items>0) { $(intoObj).append(svgAdd(str)).fadeIn(); //add to bottom $(".fill-"+intoObj.substring(1)).remove(); //remove this placeholder list_offset+=tot_items; //for next time store_me(page,str); //save for "back" (must be AFter offset for next time is set) if (tot_items0 && tot_items!=list_max) fill_placeholders(intoObj,4); if (tot_ads>0) loadAds(page,tot_ads,showAds,my_zone); //load ads recentScroll = false; //re-allow scroll again (Was blocked till here) } else //no items { $('.loader-contain').remove(); //first remove all
  • placeholders if (list_offset==0) $(".all_patterns_list_class").html('No makes yet'); } list_limit_init = list_limit; //next one is a regular size (e.g. 21) withinUpdate = false;}var lastHref = "",infoStat = 0; //===================================================function alongTimer() { //console.debug("along_schedule"); var is_ios = /iPad|iPhone|Macintosh/.test(navigator.userAgent); var is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); var now_date = new Date(); //all times are GMT! //var offset = -(now.getTimezoneOffset())/60; $('.along_div').each(function() //loop through all alive items { along_schedule = $(this).data("schedule"); //get scheduled event var along_time = $(this).find(".along_time"); if (is_safari || is_ios) //SAFARI / iphone? { var schedule = along_schedule +"+00:00"; //SAFARI -> don`t write `GMT` var endTime = new Date(schedule.replace(/\s/, 'T'));//SAFARI doesn`t understand ' ' needs `t` before the time } else { var schedule = along_schedule + " GMT+00:00"; var endTime = new Date(schedule.replace(/-/g, ' '));//firefox doesn`t understand '-' within date... :( } endTime = (Date.parse(endTime) / 1000); //f = navigator.userAgent.search("Firefox"); //navigator.userAgent.search("Firefox") -> check later not Firefox var timeLeft = endTime - (Date.parse(now_date) / 1000); var days = Math.floor(timeLeft / 86400); var hours = Math.floor((timeLeft - (days * 86400)) / 3600); var minutes = Math.floor((timeLeft - (days * 86400) - (hours * 3600 )) / 60); var seconds = Math.floor((timeLeft - (days * 86400) - (hours * 3600) - (minutes * 60))); if (hours < "10") hours = "0" + hours; if (minutes < "10") minutes = "0" + minutes; if (seconds < "10") seconds = "0" + seconds; if (days<0) { if (hours>22 && days==-1) //e.g. -1d 23:10:xx -> already started 50min ago (upto 1 hour) along_time.html(" now!"); else if (days>=-5) //upto 5 days ago -> re-watch along_time.html(" rewatch"); else $(this).css("display","none"); } else if (days>0) along_time.html(" "+days+"d "+hours+":"+minutes+":"+seconds); else //same day along_time.html(" "+hours+":"+minutes+":"+seconds); }) }//---------------------------------------------------------------------------function aNewPattern(bundle_list, status) { var is_bundle = ''; if (bundle_list.length) is_bundle = '&bundle=1'; notify({title:'Please wait...', message:'Creating a new item.'}); $.ajax( { cache: false, url: "/db_api", type: "post", data: { bundle_list : bundle_list, status: status, magic:"O4d@", cmd:"new_pattern" } }) .done( function(pattern_id) { if (pattern_id==0) { //alert exists? -> remove it if ($('sl-alert').attr('open') != undefined) { $('sl-alert').remove(); } notify({title:'Pattern creation failed', message:'If this is happens again, kindly contact Ribblr tech support', icon: 'exclamation-circle' }); return; } window.location.href = '/pat?new_pat=1&edit=1'+is_bundle+'&pattern_id='+pattern_id; //redirect to /pat }).fail( function(XMLHttpRequest, textStatus, errorThrown) { //alert exists? -> remove it if ($('sl-alert').attr('open') != undefined) { $('sl-alert').remove(); } notify({title:'Communication Error!', message:'Pattern creation failed. Try again later', icon: 'exclamation-circle' }); }); }//---------------------------------------------$(window).on('load', function() //when fully loaded/rendered{});$(window).on("pageshow",function() //called also on cache!{ $(".loader-main").css("display","none"); //hide preloader rotating icon when this page loads for navigation (FWD/Back cache)});$(document).ready(function(){ subselected = $(".My_selected").width(); $("body").css("--submenuwidth", subselected+"px"); $("body").css("--submenumargin", "-"+subselected+"px"); $(".accessibility-btn").click(function() {$(".accessiblity").css("display","block"); $(".black_overlay_accessibility").css("display","block");}); $("#anon-my, #anon-community, #anon-buy").on("click", function(e) { $($(this).data("which")).css("display","block"); //open window $(".black_overlay").css("display","block"); //darken background //so that document.click won`t close it e.preventDefault(); //must for ios e.stopPropagation(); //must for ios return e.returnValue = false; }); $(".partner-callout-btn").click(function() { event.stopPropagation();$(".partner-callout-pop").css("display","block"); $(".callout_overlay").css("display","block");}); $("body").click(function(e) {$(".partner-callout-pop").css("display","none"); $(".callout_overlay").css("display","none");});//--------------------------------------------------------------------------- //`hook` all href and prevent many clicks on link!! -> can crash the site! var tooManyClicks = 0;$(document).on("click","a[href]",function(e) { var scrollOffset = $(window).scrollTop(); if (thisPage.length) //page name set already? { if (!isLocalStorageNA()) localStorage.setItem(thisPage+'_scroll', scrollOffset);//save current offset loaded if (e.currentTarget.href.indexOf('sort=') >= 0) //if someone pressed the "sort by" -> clear cache for this page (so it won't mix cache & loading) clear_page(thisPage); } if (e.currentTarget.href.match(/(java)|(\#)|(download)/i)) return true; //if clicking on JS or # anchor within page -> allow//console.debug(" was: "+lastHref+",now: "+e.currentTarget.href+"..."+e.currentTarget.baseURI);if (lastHref==e.currentTarget.href && !e.currentTarget.hasAttribute("target") && e.currentTarget.href.indexOf(window.location.hostname)>=0) //prevent the same page to be multi-click! (unless javascript! or just # or an Ad), allow external link always { tooManyClicks++; lastHref = e.currentTarget.href; //save fot next time if (tooManyClicks>1) //after 3 clicks alert('Hold on tight! Page is loading'); e.preventDefault(); //must for ios e.stopPropagation(); //must for ios return e.returnValue = false; } tooManyClicks = 0; lastHref = e.currentTarget.href; //save fot next time //e.currentTarget.attributes.target.nodeValue if (!e.ctrlKey && !e.currentTarget.hasAttribute("target") && !e.currentTarget.download && //no need to show reloader Ctrl-Click or _blank e.currentTarget.href.indexOf(window.location.hostname)>=0) //internal link, not Ad $(".loader-main").css("display","block"); //show preloader rotating icon until next page is loadedreturn true;}); isNew = setTimeout(function(){ $("#anon-what-is-new").css("display","block"); $(".black_overlay").css("display","block"); }, 7000); $(document).on("click", "#anon-what-is-new .more-info, #anon-what-is-new #release-notes-summary, #community-click .more-info, #community-click #release-notes-summary, #my-stuff-click .more-info, #my-stuff-click #release-notes-summary, #buy-click .more-info, #buy-click #release-notes-summary", function () { $("#registrationDialog").prop("open", true); $(".black_overlay, #anon-what-is-new, #community-click, #my-stuff-click, #buy-click").css("display","none"); }); $("#sharemenu").hide(); //close share menu upon load (???maybe in CSS??) $("#sharemenu").jsSocials({ showLabel: false, showCount: false, shares: ["twitter", "facebook", "pinterest","copy"], url: "https://"+$(location).attr('hostname')+$(".share_it").data("share"), //get actual link even if it is `mine`... on: { click: function(e) { $("#sharemenu").hide(); if(this.share === "copy") { var $inp = $(""); $("body").append($inp); $inp.val(this.url).select(); document.execCommand("copy"); $inp.remove(); if ($("#sharemenu").data("share")==1) //Selfee share notify({ title: 'Selfee link copied!', message: 'Selfee link copied to your clipboard', }); else //normal share notify({ title: 'Link copied!', message: 'Link copied to your clipboard', }); return false; } } } }); $('.share_it').on('click', function(e) { if (typeof sharetitle == 'undefined' || !navigator.canShare) //cannot use share (e.g. firefox WebView Android) ... https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share { //show old style $("#sharemenu").css("display","block"); $(".jssocials-shares").attr('style', 'display: flex !important'); e.preventDefault(); return false; } //can use share -> use navigator's share (based on OS) try {// navigator.share({ title: sharetitle, text: sharetext, url: sharepage }); //with header etc. navigator.share({ url: sharepage });// console.debug('success share'); } catch (err) {// console.debug('error share'); } }) $(document).on("click", function(){ $(".newuserpopup, .release-notes, .black_overlay").css("display","none"); //closes pop-ups & backgorund $("#sharemenu").hide(); //close share menu $('.autoclose').each(function () { $(this).prop("checked",false); });//console.debug("click"); }); //replace broken images with default one: not working when loading image later (i.e. via Jquery append) $("img").on("error", function () {console.debug("img loading error"); if (yesItsMe)// if (window.location.pathname=='/myshop') //do not erase patterns with broken cover! $(this).attr("src", "/images/empty.png"); //hide image else emptyImg(this,`li`); }); //prevent right click menu $(this).on("contextmenu", function(e) { e.preventDefault(); }); //Note: click on "sort" label $(".menu-label").on("click",function(e) { $("#menu").prop("checked", true); e.stopPropagation(); e.preventDefault(); //prevent document click -> so it only fires on "outside" click-event }); const mediaScreenSmall = window.matchMedia('(max-width: 1024px)'); //Note: click on "sort" label $(".sortbymenu-label").on("click",function(e) { if (isMobile && mediaScreenSmall.matches) { popupMobile("#sortbymenu-content","sortbymenu-content",true); popupMobile("#filterbymenu-content","filterbymenu-content",false); } else //desktop { $("#sortbymenu").prop("checked", true); //set form $("#filterbymenu").prop("checked", false); //make sure to close } e.stopPropagation(); e.preventDefault(); //prevent document click -> so it only fires on "outside" click-event }); $(".filterbymenu-label").on("click",function(e) { if (isMobile && mediaScreenSmall.matches) { popupMobile("#filterbymenu-content","filterbymenu-content",true); popupMobile("#sortbymenu-content","sortbymenu-content",false); } else //desktop { $("#filterbymenu").prop("checked", true); //set form $("#sortbymenu").prop("checked", false); //make sure to close } e.stopPropagation(); e.preventDefault(); //prevent document click -> so it only fires on "outside" click-event }); $(".popup_close,.popup_close2").on("click", function() { if (isMobile && mediaScreenSmall.matches) { popupMobile("#sortbymenu-content","sortbymenu-content",false); popupMobile("#filterbymenu-content","filterbymenu-content",false); $(".actionmenu_popup").animate({"bottom":"-400px"},500); //slide down action for the menu setTimeout(function() { $(".actionmenu_popup").css({"display":"none"}); }, 500); } }); //Note: click on sub-menu label happens before doument-click and before checkbox-event! (click on label for input generates double click) $(".labelclose").on("click",function(e) { let num = parseInt(this.id.match(/\d+/)); //get the suffix number $(".labelclose").each(function(index) { let itemNum = parseInt(this.id.match(/\d+/)); //get the suffix number if (num!=itemNum) //clear all OTHER menus which might have been previously open $("#settingsmenu"+itemNum).prop("checked", false); else { if (isMobile && mediaScreenSmall.matches) { popupMobile("#settingsmenu-content"+num,"settingsmenu-content",true); } else { $("#settingsmenu"+itemNum).prop("checked", true); //turn it on } } }); e.stopPropagation(); e.preventDefault(); //prevent document click -> so it only fires on "outside" click-event }); $(".information-epattern").on("click",function (e) { var num = parseInt(this.id.match(/\d+/)); //get the suffix number if (isMobile && mediaScreenSmall.matches) { popupMobile("#hover-epattern"+num,"hover-epattern",true); return; } //desktop if (infoStat==0) $("#information-epattern").show(); else $("#information-epattern").hide(); infoStat = 1 - infoStat; }); $(".info_onoff").on("click",function (e) { if (isMobile && mediaScreenSmall.matches) { popupMobile("#hover-selfee-explain","info_onoff_div",true); return; } //desktop if (infoStat==0) $("#hover-selfee-explain").show(); else $("#hover-selfee-explain").hide(); infoStat = 1- infoStat; //flip });//--------------- $('sl-card.pattern_image img, sl-card.material_image img').on('touchstart', function() { // Add a class to mark the image as touched $(this).addClass('touched'); }); $('sl-card.pattern_image img, sl-card.material_image img').on('touchmove', function(event) { // Prevent opacity change if the touchmove event occurred on the image $(this).css("opacity","1!important"); if (event.target === this) { event.preventDefault(); } });//--------------- $(".all_patterns_list").on("click",".likejournal_contain", function() { var that = $(this); var likeItem = $(this).find(".likejournal-total"); var svgItem = $(this).find(".likejournal"); var add_rem = 1; //assume adding var tot_likes = 0; //assume first one if (likeItem.length) tot_likes = parseInt(likeItem.html().match(/\d+/)); //if number exist -> use it as total (else = 0) if (svgItem.hasClass('not-liked')) //add like :) { svgItem.addClass('animatelike').addClass('liked').removeClass('not-liked'); tot_likes++; } else //remove like :( { svgItem.removeClass('animatelike').addClass('not-liked').removeClass('liked'); add_rem = 0; tot_likes--; } likeItem.html(tot_likes+' likes'); if (tot_likes==0) likeItem.css("visibility","hidden"); else likeItem.css("visibility","visible"); //show or hide (do no use display:none or similar as we use this field to calulcate++/--) $.ajax({ type: "POST", cache: false, url: "/db_api", dataType: 'json', data : { magic:"O4d@", pattern_id : svgItem.data("pattern"), journal_id: svgItem.data("journal"), add_rem : add_rem, cmd:"like_journal", } }) .done( function(res) { if (res != 0) console.debug("journal liked failed!"); }) .fail( function(XMLHttpRequest, textStatus, errorThrown) { console.debug(XMLHttpRequest); }); }); //...like //--------------- $('input[type="checkbox"]').change(function(e) {// console.debug( $(this).prop("checked") ); }); $(".all_patterns_list, .discover_list, .all_featured_list, .product-details, .journal_page, .our_wishlist, .ribblr_free_list, .product_wishlist").on("click","[id^=heart]", function (e) //note: do not use just `heart` since it may double fire click (and won't work on dynamic pages e.g. crafts) { e.preventDefault(); //prevent document click -> so it won't redirect or do HREF e.stopPropagation(); var id = this.id.match(/\d+/); //get the suffix number var onoff = $(this).html().indexOf("add_to_wishlist_true")>=0; updateWishlist(e,this,id[0],onoff,"pattern"); }); $(".all_patterns_list,.page_container_all").on("click","[id^=like-]", function (e) //materials note: do not use just `heart` since it may double fire click (and won't work on dynamic pages e.g. crafts) { e.preventDefault(); //prevent document click -> so it won't redirect or do HREF e.stopPropagation(); var id = this.id.match(/like-(.*)/); //get the suffix number var onoff = $(this).html().indexOf("add_to_wishlist_true")>=0; updateWishlist(e,this,id[1],onoff,"material"); }); $("#topbtn").click(function() {//console.debug("topbtn"); if ($($(".pattern_item")[0]).hasClass("patterns_list_offset0")) //top is still in buffer/screen -> scroll back to it $("html, body").animate({ scrollTop: 0 }, "slow"); else //not on screen -> reload page { if (thisPage) { clear_page(thisPage); location.reload(); } else //shouldn't happen... $("html, body").animate({ scrollTop: 0 }, "slow"); //scroll to top } return false; }); // When the user clicks on the button, scroll to the top of the document var mybutton = document.getElementById("topbtn"); if (mybutton) { // When the user scrolls down 20px from the top of the document, show the button window.onscroll = function() {scrollFunction()}; function scrollFunction() { if (document.body.scrollTop > 40 || document.documentElement.scrollTop > 40) mybutton.style.display = "block"; else mybutton.style.display = "none"; } } $(".new-gift").on("click", function() { $.ajax( { cache: false, url: "/db_api", type: "post", data: { magic:"O4d@", art : $(this).data("art"), sub : $(this).data("sub"), qty : $(this).data("qty"), cmd:"gift4new" } }) .done( function(response) { let craftOrShop = 'Gifted 🎁
    What would you like to do next?

    Go to libraryOpen a shop

    '; $("#what-is-new").html(craftOrShop); //shop or crafter? $("#what-is-new").css("display","block"); $(".black_overlay").css("display","block"); }) .fail( function(XMLHttpRequest, textStatus, errorThrown) {} ); }); $(document).on("click", "#newUserShop", function() { $.ajax( { cache: false, url: "/db_api_util", type: "post", data: { magic:"O4d@", cmd:"open_a_shop" } }) .done( function(res) { window.location.replace("/myshop"); }).fail( function(XMLHttpRequest, textStatus, errorThrown) { notify({ title: "Error", message: "Internet failed or something went wrong :("}); }); }); $(document).on("click", "#newUserNoShop", function() { window.location.replace("/mypatterns"); }); if ($('.join_in_banner').length) { $('.cd-cart__trigger').addClass('cd-cart-trigger-anon'); $('.cd-cart__layout').addClass('cd-cart-layout-anon'); } $('.add_pattern_menu').click(function() { // Call the aNewPattern function with an empty bundle_list aNewPattern("",0); });}); //...readyvar pref = 0;

    Materials

    Patterns

    Makes

    Update your notifications

    When your liked patterns/materials go on sale or shops you follow drop a new release

    Reminders to continue a pattern, update stash and journal

    Reminders to use your prizes and updates to win even more

    Important news and special offers You can also update your community notifications

    To see #NSFW community posts- go to your profile, `prefrences`, `tracking`, `muted`

    Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (20)

    We're excited to partner with JOANN 🎉 Sign up and get 2 premium patterns gift!

    CLAIM YOUR GIFT 🎁 Ribblr's innovative tech fused with the huge, high-quality yarn assortment from JOANN guarantees endless creative opportunities. Enjoy the best crafting experience with Ribblr ePattern and delve into a collection of amazing and exclusive offers on your beloved yarns and fabrics,

    powered by JOANN

    .

    Learn more about Ribblr What is Ribblr? How can I download the free Ribblr app? What is the Ribblr ePattern format? How can I join the Ribblr community?

    Log in Or use a password

    OR

    Not a Ribblr yet? Sign up

    Become a Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (21)

    Open your free account

    Craft easily with Ribblr ePattern

    Connect with crafters worldwide

    Buy and sell patterns, yarn and more

    Claim your username

    OR

    Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (22)

    Already a Ribblr? Login

  • '; } //...loop } else //pat { tot_footer_items = full_list.length; for (i=0; ilist_first_footer) //show only 12 images for fast showing showPic = ""; else showPic = thePic[list_offset_footer+i]; str+='
  • \ \ \ \ \ '+thepatternName+'\
  • '; } //...loop } if (tot_footer_items>0) { $("#footerSlider").append(str).fadeIn(); //add to bottom list_offset_footer+=tot_footer_items; //for next time if (tot_footer_items??? messes design since lSSlideOuter is wrapping again and again... :( } withinFooterUpdate = false; //indicate we're done fetching }) .fail( function(XMLHttpRequest, textStatus, errorThrown) { console.log(XMLHttpRequest); withinFooterUpdate = false; //indicate we're done fetching });}$("#readmorebtn").click(function() {$(".about_ribblr").prop("open","true");}); $("#choose_language").on("click", function() { if (user_id>0) //only for login users { $(".langpreferences").css("display","inline-block"); $(".black_overlay_accessibility").css("display","block"); } }); // on faq page only $("#language-currency-faq").on("click", function() { if (user_id>0) //only for login users { $(".langpreferences").css("display","inline-block"); $(".black_overlay_accessibility").css("display","block"); } }); $("#pref_lang , #pref_currency, #pref_country").on("change", function() //called on change in dropdown { if (user_id==0) return; $(".langpreferences").css("display","none"); $(".black_overlay_accessibility").css("display","none"); var lang = $("#pref_lang").val(); var currency = $("#pref_currency").val(); var country_code = $("#pref_country").val(); $.ajax( { cache: false, url: "/db_api", type: "post", data: { lang : lang, currency : currency, country_code : country_code, magic:"O4d@", cmd:"update_user_loc" } }) .done( function(response) { location.reload(); //refresh page after it was saved }) .fail( function(XMLHttpRequest, textStatus, errorThrown) {} ); });}); //...ready

    Ribblr ePattern Unveiling the first-of-its-kind digital pattern format
    featuring a modern and minimalistic design and
    built-in interactive tools like progress tracking.
    Craft easily, anywhere you are.

    Inspiration We want to inspire you with patterns you’ll love.
    Check out the ’For You’ section where you’ll find lots
    of patterns based on your interests & skill level.
    Your craft - your way.

    User & eco friendlyMade for everyone, with a variety of accessibility tools.
    And thanks to Ribblr ePattern every 36 crafters on Ribblr
    save a whole tree and 200kW of energy every year.
    WIN-WIN.

    Read more

    Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (24) Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (25) Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (26) Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (27)

    Help center About us Press enquiries Work with us

    Craft on the go with Ribblr.Download the app now

    Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (28) Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (29)

    © 2020 Ribblr ltd. Terms Privacy Cookies

    English US&nbsp |&nbsp £ (GBP) &nbsp|&nbsp United Kingdom

    Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (30)

    Our goals.

    Create the best crafting experience.

    Build a home for all crafters.

    Innovate and modernize the crafting industry.

    Empowering crafters

    We believe crafters deserve better.
    We have a clear mission: make crafting accessible and empower crafters through innovation.

    On Ribblr you can find lots of unique designs you will love and create using our interactive Ribblr ePattern format.
    You can also sell your makes, sell & design patterns, and meet other crafters!

    Introducing: Ribblr ePattern

    Similar to an eBook, Ribblr ePattern is a digital version of your pattern, packed with lots of unique features, to provide you with the best crafting experience.
    Track your progress, select your size with smart sizing, translate patterns, built-in videos & charts, and so much more.

    Built for designers

    Say hello to Ribbuild, our streamlined pattern editor.
    Built by and for designers, the idea is simple: you add the instructions and Ribbuild does the rest.
    That includes automatic pattern translation, measuring units conversion, smart sizing, and so much more.

    Start selling your patterns in an interactive format and use $elFee, your personal smart fee, that gives you full control over your fees.
    Patterns you upload to Ribblr are not exclusive and always remains yours.

    We recommend your patterns to crafters who will love them, based on their interests, all completely for FREE. Pretty, cool, ha?

    Find out

    all Ribblr has to offer for designers.

    A home for all crafters

    Ribblr is a place for passionate crafts to connect and share.
    Maintaining an inclusive and positive environment and making sure everyone on Ribblr feels safe is our top priority.
    That’s why we continue to welcome and support people from all over the world, regardless of religion, nationality, race, gender identity, sexual orientation, and disability.

    Violent, harassing, and/or discriminating behavior of any kind is strictly prohibited on Ribblr.
    This is part of our

    Terms and Conditions

    that all users agree to when they use our services.

    User & eco friendly

    We believe that crafting should be accessible for everyone and that’s why Ribblr is designed to be user and eco friendly.
    Ribblr is truly responsive and is available on any device, with free iOS and Android apps available.
    On your personal accessibility menu you will find dark mode, reduce motion, and left-hand mode.
    Ribblr ePattern, with its unified design, makes it easier for everyone to craft thanks to many accessibility tools such as smart sizing, language translation, font and pictures zoom, and more.
    And to help make patterns even more accessible, designers can add built-in photos, videos and even audio instructions to their patterns on Ribblr.

    Search

    Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (33)

    My stuff

    Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (34) Community

    ✅ Added! Click to checkout

    Cart 00

    Checkout to claim freebie 🎁

    clear all

    Welcome to Ribblr! Meet crafters, buy & sell interactive patterns

    JOIN NOW

    FREE

    🎁
    Log in

    Ribblr | Ribblr x JOANN - explore the fusion of craft retail and craft tech! (2024)
    Top Articles
    Latest Posts
    Article information

    Author: Sen. Ignacio Ratke

    Last Updated:

    Views: 6031

    Rating: 4.6 / 5 (76 voted)

    Reviews: 83% of readers found this page helpful

    Author information

    Name: Sen. Ignacio Ratke

    Birthday: 1999-05-27

    Address: Apt. 171 8116 Bailey Via, Roberthaven, GA 58289

    Phone: +2585395768220

    Job: Lead Liaison

    Hobby: Lockpicking, LARPing, Lego building, Lapidary, Macrame, Book restoration, Bodybuilding

    Introduction: My name is Sen. Ignacio Ratke, I am a adventurous, zealous, outstanding, agreeable, precious, excited, gifted person who loves writing and wants to share my knowledge and understanding with you.