{"id":28875,"date":"0202-01-10T18:19:12","date_gmt":"0202-01-10T10:19:12","guid":{"rendered":"https:\/\/www.hongkiat.com\/blog\/?p=28875"},"modified":"2026-04-08T02:43:41","modified_gmt":"2026-04-07T18:43:41","slug":"tesseract-js","status":"publish","type":"post","link":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/","title":{"rendered":"Tesseract.js Makes OCR Possible in the Browser"},"content":{"rendered":"<p>If you need to <a href=\"https:\/\/www.hongkiat.com\/blog\/2019\/extract-text-from-images-imgclip\/\">extract text from images<\/a> in JavaScript, <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/naptha\/tesseract.js\/\">Tesseract.js<\/a> is still one of the easiest ways to get started.<\/p>\n<p>It brings OCR to both the browser and Node.js, supports more than 100 languages, and gives you a practical API for turning screenshots, scanned documents, and image-based text into real text you can work with.<\/p>\n<p>The original version of this post focused on the novelty of running OCR in the browser. That part is still interesting, but what makes Tesseract.js useful today is simpler than that: it gives web developers a solid way to add OCR without building the recognition engine themselves.<\/p>\n<h2 id=\"what-tesseractjs-does\">What Tesseract.js Does<\/h2>\n<p><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/tesseract.projectnaptha.com\/\">Tesseract.js<\/a> is a JavaScript wrapper around the Tesseract OCR engine. It runs in the browser and in Node.js, which makes it useful for everything from quick demos to real document-processing workflows.<\/p>\n<p>You can use it to:<\/p>\n<ul>\n<li>extract text from screenshots<\/li>\n<li>read scanned documents and image-based PDFs after image conversion<\/li>\n<li>build upload tools that pull text from receipts, forms, or notes<\/li>\n<li>process OCR on the client side without sending every image to a server<\/li>\n<\/ul>\n<p>It is not magic, and it is not perfect. Image quality still matters. Clean scans work better than noisy photos. Clear printed text works better than handwriting.<\/p>\n<p>But for many web projects, it is good enough to be genuinely useful.<\/p>\n<h2 id=\"why-it-still-matters\">Why It Still Matters<\/h2>\n<p>OCR in the browser used to sound like a gimmick. Now it is a practical building block.<\/p>\n<p>You might want to:<\/p>\n<ul>\n<li>let users paste a screenshot and grab the text from it<\/li>\n<li>extract text from uploaded forms<\/li>\n<li>build accessibility helpers<\/li>\n<li>create internal tools that index scanned content<\/li>\n<li>speed up data entry from image-based documents<\/li>\n<\/ul>\n<p>That is where OCR in the browser fits nicely. It saves you from wiring up a separate OCR service just to test an idea.<\/p>\n<h2 id=\"install-it\">Install It<\/h2>\n<p>The current package can be installed from npm:<\/p>\n<pre>npm install tesseract.js<\/pre>\n<p>If you want to use it directly in the browser, the project also provides a CDN build.<\/p>\n<h2 id=\"a-simple-example\">A Simple Example<\/h2>\n<p>The modern API uses <code>createWorker()<\/code> rather than the older <code>Tesseract.recognize()<\/code> pattern shown in many older examples.<\/p>\n<pre>import { createWorker } from 'tesseract.js';\n\n(async () =&gt; {\n  const worker = await createWorker('eng');\n  const result = await worker.recognize('https:\/\/tesseract.projectnaptha.com\/img\/eng_bw.png');\n\n  console.log(result.data.text);\n  await worker.terminate();\n})();<\/pre>\n<p>That is enough to get OCR running with a small amount of setup.<\/p>\n<p>If you are processing multiple images, create the worker once, reuse it, then terminate it at the end. That is the more efficient pattern.<\/p>\n<h2 id=\"where-it-works-best\">Where It Works Best<\/h2>\n<p>Tesseract.js works best when:<\/p>\n<ul>\n<li>the image is high contrast<\/li>\n<li>the text is reasonably clean and readable<\/li>\n<li>the language is known ahead of time<\/li>\n<li>you do not need perfect results on every scan<\/li>\n<\/ul>\n<p>It can also return more than plain text, including bounding-box data for words and other layout information, which is useful if you want to build selection, highlighting, or document analysis tools.<\/p>\n<h2 id=\"where-it-struggles\">Where It Struggles<\/h2>\n<p>You should keep expectations realistic.<\/p>\n<p>Tesseract.js can struggle with:<\/p>\n<ul>\n<li>low-quality photos<\/li>\n<li>skewed or noisy scans<\/li>\n<li>decorative fonts<\/li>\n<li>dense handwritten notes<\/li>\n<li>documents that need advanced PDF-specific handling<\/li>\n<\/ul>\n<p>If your project depends on higher OCR accuracy, more advanced document parsing, or direct PDF support, you may need a different pipeline for <a href=\"https:\/\/www.hongkiat.com\/blog\/2020\/google-drive-google-apps-scripts\/\">converting images to text<\/a>.<\/p>\n<h2 id=\"final-thoughts\">Final Thoughts<\/h2>\n<p>Tesseract.js is no longer just a neat browser demo. It is a mature OCR option for developers who want text recognition in JavaScript without starting from scratch.<\/p>\n<p>If you want to experiment with image-to-text features in a web app, it is still a very good place to begin.<\/p>\n<p>To learn more, start with the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/naptha\/tesseract.js\/\">official GitHub repo<\/a> and the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/tesseract.projectnaptha.com\/\">project demo page<\/a>.<\/p>\n<figure><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/tesseract.projectnaptha.com\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/assets.hongkiat.com\/uploads\/tesseract-js\/02-tesseract-translation-demo.jpg\" width=\"1200\" height=\"720\" alt=\"browser OCR demo\"><\/a><\/figure>\n<div class=\"ref-block ref-block--post\" id=\"ref-post-1\">\n\t\t\t\t\t<a href=\"https:\/\/www.hongkiat.com\/blog\/copy-image-text\/\" class=\"ref-block__link\" title=\"Read More: How to Easily Extract and Copy Text from Images Using GT Text\" rel=\"bookmark\"><span class=\"screen-reader-text\">How to Easily Extract and Copy Text from Images Using GT Text<\/span><\/a>\n<div class=\"ref-block__thumbnail img-thumb img-thumb--jumbo\" data-img='{ \"src\" : \"https:\/\/assets.hongkiat.com\/uploads\/thumbs\/250x160\/copy-image-text.jpg\" }'>\n\t\t\t\t\t\t\t<noscript>\n<style>.no-js #ref-block-post-14515 .ref-block__thumbnail { background-image: url(\"https:\/\/assets.hongkiat.com\/uploads\/thumbs\/250x160\/copy-image-text.jpg\"); }<\/style>\n<\/noscript>\n\t\t\t\t\t\t<\/div>\n<div class=\"ref-block__summary\">\n<h4 class=\"ref-title\">How to Easily Extract and Copy Text from Images Using GT Text<\/h4>\n<p class=\"ref-description\">\n\t\t\t\t\t\tHave you ever come across text or quotes within an image that you desperately wanted to copy and...\t\t\t\t\t\t<span>Read more<\/span><\/p>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>A refreshed look at Tesseract.js, a practical way to run OCR in the browser or Node.js for screenshots, scanned text, and lightweight document workflows.<\/p>\n","protected":false},"author":18,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[352],"tags":[3497],"topic":[4520],"class_list":["entry-content","is-maxi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.8 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Tesseract.js Makes OCR Possible in the Browser - Hongkiat<\/title>\n<meta name=\"description\" content=\"A refreshed look at Tesseract.js, a practical way to run OCR in the browser or Node.js for screenshots, scanned text, and lightweight document workflows.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tesseract.js Makes OCR Possible in the Browser\" \/>\n<meta property=\"og:description\" content=\"A refreshed look at Tesseract.js, a practical way to run OCR in the browser or Node.js for screenshots, scanned text, and lightweight document workflows.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/\" \/>\n<meta property=\"og:site_name\" content=\"Hongkiat\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/hongkiatcom\" \/>\n<meta property=\"article:published_time\" content=\"0202-01-10T10:19:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-07T18:43:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/assets.hongkiat.com\/uploads\/tesseract-js\/02-tesseract-translation-demo.jpg\" \/>\n<meta name=\"author\" content=\"Jake Rocheleau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hongkiat\" \/>\n<meta name=\"twitter:site\" content=\"@hongkiat\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jake Rocheleau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/\"},\"author\":{\"name\":\"Jake Rocheleau\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#\\\/schema\\\/person\\\/966b2daea15283b4145e71aa98a82c2a\"},\"headline\":\"Tesseract.js Makes OCR Possible in the Browser\",\"datePublished\":\"0202-01-10T10:19:12+00:00\",\"dateModified\":\"2026-04-07T18:43:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/\"},\"wordCount\":590,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/assets.hongkiat.com\\\/uploads\\\/tesseract-js\\\/02-tesseract-translation-demo.jpg\",\"keywords\":[\"Javascript Library\"],\"articleSection\":[\"Web Design\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/\",\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/\",\"name\":\"Tesseract.js Makes OCR Possible in the Browser - Hongkiat\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/assets.hongkiat.com\\\/uploads\\\/tesseract-js\\\/02-tesseract-translation-demo.jpg\",\"datePublished\":\"0202-01-10T10:19:12+00:00\",\"dateModified\":\"2026-04-07T18:43:41+00:00\",\"description\":\"A refreshed look at Tesseract.js, a practical way to run OCR in the browser or Node.js for screenshots, scanned text, and lightweight document workflows.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/#primaryimage\",\"url\":\"https:\\\/\\\/assets.hongkiat.com\\\/uploads\\\/tesseract-js\\\/02-tesseract-translation-demo.jpg\",\"contentUrl\":\"https:\\\/\\\/assets.hongkiat.com\\\/uploads\\\/tesseract-js\\\/02-tesseract-translation-demo.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/tesseract-js\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tesseract.js Makes OCR Possible in the Browser\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/\",\"name\":\"Hongkiat\",\"description\":\"Tech and Design Tips\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#organization\",\"name\":\"Hongkiat.com\",\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/wp-content\\\/uploads\\\/hkdc-logo-rect-yoast.jpg\",\"contentUrl\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/wp-content\\\/uploads\\\/hkdc-logo-rect-yoast.jpg\",\"width\":1200,\"height\":799,\"caption\":\"Hongkiat.com\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/hongkiatcom\",\"https:\\\/\\\/x.com\\\/hongkiat\",\"https:\\\/\\\/www.pinterest.com\\\/hongkiat\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#\\\/schema\\\/person\\\/966b2daea15283b4145e71aa98a82c2a\",\"name\":\"Jake Rocheleau\",\"description\":\"Jake is a writer and designer with over 10 years experience working on the web. He writes about user experience design and cool resources for designers\",\"sameAs\":[\"https:\\\/\\\/www.hongkiat.com\"],\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/author\\\/jake\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Tesseract.js Makes OCR Possible in the Browser - Hongkiat","description":"A refreshed look at Tesseract.js, a practical way to run OCR in the browser or Node.js for screenshots, scanned text, and lightweight document workflows.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/","og_locale":"en_US","og_type":"article","og_title":"Tesseract.js Makes OCR Possible in the Browser","og_description":"A refreshed look at Tesseract.js, a practical way to run OCR in the browser or Node.js for screenshots, scanned text, and lightweight document workflows.","og_url":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/","og_site_name":"Hongkiat","article_publisher":"https:\/\/www.facebook.com\/hongkiatcom","article_published_time":"0202-01-10T10:19:12+00:00","article_modified_time":"2026-04-07T18:43:41+00:00","og_image":[{"url":"https:\/\/assets.hongkiat.com\/uploads\/tesseract-js\/02-tesseract-translation-demo.jpg","type":"","width":"","height":""}],"author":"Jake Rocheleau","twitter_card":"summary_large_image","twitter_creator":"@hongkiat","twitter_site":"@hongkiat","twitter_misc":{"Written by":"Jake Rocheleau","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/#article","isPartOf":{"@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/"},"author":{"name":"Jake Rocheleau","@id":"https:\/\/www.hongkiat.com\/blog\/#\/schema\/person\/966b2daea15283b4145e71aa98a82c2a"},"headline":"Tesseract.js Makes OCR Possible in the Browser","datePublished":"0202-01-10T10:19:12+00:00","dateModified":"2026-04-07T18:43:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/"},"wordCount":590,"commentCount":0,"publisher":{"@id":"https:\/\/www.hongkiat.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/#primaryimage"},"thumbnailUrl":"https:\/\/assets.hongkiat.com\/uploads\/tesseract-js\/02-tesseract-translation-demo.jpg","keywords":["Javascript Library"],"articleSection":["Web Design"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hongkiat.com\/blog\/tesseract-js\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/","url":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/","name":"Tesseract.js Makes OCR Possible in the Browser - Hongkiat","isPartOf":{"@id":"https:\/\/www.hongkiat.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/#primaryimage"},"image":{"@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/#primaryimage"},"thumbnailUrl":"https:\/\/assets.hongkiat.com\/uploads\/tesseract-js\/02-tesseract-translation-demo.jpg","datePublished":"0202-01-10T10:19:12+00:00","dateModified":"2026-04-07T18:43:41+00:00","description":"A refreshed look at Tesseract.js, a practical way to run OCR in the browser or Node.js for screenshots, scanned text, and lightweight document workflows.","breadcrumb":{"@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hongkiat.com\/blog\/tesseract-js\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/#primaryimage","url":"https:\/\/assets.hongkiat.com\/uploads\/tesseract-js\/02-tesseract-translation-demo.jpg","contentUrl":"https:\/\/assets.hongkiat.com\/uploads\/tesseract-js\/02-tesseract-translation-demo.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hongkiat.com\/blog\/tesseract-js\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hongkiat.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tesseract.js Makes OCR Possible in the Browser"}]},{"@type":"WebSite","@id":"https:\/\/www.hongkiat.com\/blog\/#website","url":"https:\/\/www.hongkiat.com\/blog\/","name":"Hongkiat","description":"Tech and Design Tips","publisher":{"@id":"https:\/\/www.hongkiat.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hongkiat.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.hongkiat.com\/blog\/#organization","name":"Hongkiat.com","url":"https:\/\/www.hongkiat.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hongkiat.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hongkiat.com\/blog\/wp-content\/uploads\/hkdc-logo-rect-yoast.jpg","contentUrl":"https:\/\/www.hongkiat.com\/blog\/wp-content\/uploads\/hkdc-logo-rect-yoast.jpg","width":1200,"height":799,"caption":"Hongkiat.com"},"image":{"@id":"https:\/\/www.hongkiat.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/hongkiatcom","https:\/\/x.com\/hongkiat","https:\/\/www.pinterest.com\/hongkiat\/"]},{"@type":"Person","@id":"https:\/\/www.hongkiat.com\/blog\/#\/schema\/person\/966b2daea15283b4145e71aa98a82c2a","name":"Jake Rocheleau","description":"Jake is a writer and designer with over 10 years experience working on the web. He writes about user experience design and cool resources for designers","sameAs":["https:\/\/www.hongkiat.com"],"url":"https:\/\/www.hongkiat.com\/blog\/author\/jake\/"}]}},"jetpack_featured_media_url":"https:\/\/","jetpack_shortlink":"https:\/\/wp.me\/p4uxU-7vJ","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/posts\/28875","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/comments?post=28875"}],"version-history":[{"count":4,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/posts\/28875\/revisions"}],"predecessor-version":[{"id":74290,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/posts\/28875\/revisions\/74290"}],"wp:attachment":[{"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/media?parent=28875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/categories?post=28875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/tags?post=28875"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/topic?post=28875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}