# Vanilla JavaScript

Published articles for Vanilla JavaScript.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## How to Handle Styled Unicode Text in JavaScript

DevFeed: [How to Handle Styled Unicode Text in JavaScript](<https://devfeed.tech/articles/how-to-handle-styled-unicode-text-in-javascript-104217.md>)

Original publisher: [Read original article](<https://www.sitepoint.com/how-to-handle-styled-unicode-text-in-javascript/>)

Author: Mohsin Qureshi

Published: 2026-10-25T10:19:58Z

Content type: article

Language: en

Sources: [SitePoint](<https://devfeed.tech/sources/sitepoint.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [case folding](<https://devfeed.tech/topics/case-folding.md>), [Emoji](<https://devfeed.tech/topics/emoji.md>)

Tags: [how-to](<https://devfeed.tech/tags/how-to.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [styled](<https://devfeed.tech/tags/styled.md>), [text](<https://devfeed.tech/tags/text.md>), [unicode](<https://devfeed.tech/tags/unicode.md>), [vanilla-javascript](<https://devfeed.tech/tags/vanilla-javascript.md>)

### AI overview

Styled Unicode letters such as hello are distinct code points from plain "hello," so ordinary equality and substring search do not match them. The excerpt recommends preserving users' original text for display and deriving a separate NFKC, case-normalized representation for search when the product requires those forms to match. Apply transformations by field: NFC can standardize canonically equivalent sequences, while NFKC can erase compatibility distinctions; neither should be applied destructively to all content. Unicode property escapes support international letters and numbers, but are not a security policy for identifiers, where confusables need separate restrictions. Normalization also does not solve character counting: use code-point iteration or Intl.Segmenter for grapheme counts, depending on the need. Test varied scripts, combining marks, styled letters, and emoji through validation, search, storage, and length handling.

### Source excerpt

null Continue reading How to Handle Styled Unicode Text in JavaScript on SitePoint.

## Your JavaScript Character Counter Is Probably Wrong: Unicode Explained

DevFeed: [Your JavaScript Character Counter Is Probably Wrong: Unicode Explained](<https://devfeed.tech/articles/your-javascript-character-counter-is-probably-wrong-unicode-explained-86794.md>)

Original publisher: [Read original article](<https://www.sitepoint.com/your-javascript-character-counter-is-probably-wrong-unicode-explained/>)

Author: Mohsin Qureshi

Published: 2026-10-14T14:38:28Z

Content type: tutorial

Language: en

Sources: [SitePoint](<https://devfeed.tech/sources/sitepoint.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [Encoding](<https://devfeed.tech/topics/encoding.md>)

Tags: [ascii](<https://devfeed.tech/tags/ascii.md>), [browser](<https://devfeed.tech/tags/browser.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [typography](<https://devfeed.tech/tags/typography.md>), [unicode](<https://devfeed.tech/tags/unicode.md>), [vanilla-javascript](<https://devfeed.tech/tags/vanilla-javascript.md>)

### AI overview

JavaScript string length counts UTF-16 code units, which can differ from the characters users perceive. This tutorial explains the distinction among code units, code points and grapheme clusters, and shows how to use Intl.Segmenter for user-facing character counts and truncation. It also covers normalization, aligning frontend validation with backend limits, and testing text handling with emoji, combining marks, flags and non-Latin scripts.

### Source excerpt

null Continue reading Your JavaScript Character Counter Is Probably Wrong: Unicode Explained on SitePoint.

## How to Build Smarter Marketplace Search with Vanilla JavaScript

DevFeed: [How to Build Smarter Marketplace Search with Vanilla JavaScript](<https://devfeed.tech/articles/how-to-build-smarter-marketplace-search-with-vanilla-javascript-64912.md>)

Original publisher: [Read original article](<https://www.sitepoint.com/how-to-build-smarter-marketplace-search-with-vanilla-javascript/>)

Author: Jhon-Harry

Published: 2026-10-05T09:14:58Z

Content type: tutorial

Language: en

Sources: [SitePoint](<https://devfeed.tech/sources/sitepoint.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [hybrid-search](<https://devfeed.tech/topics/hybrid-search.md>), [search-engines](<https://devfeed.tech/topics/search-engines.md>)

Tags: [how-to](<https://devfeed.tech/tags/how-to.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [search](<https://devfeed.tech/tags/search.md>), [vanilla-javascript](<https://devfeed.tech/tags/vanilla-javascript.md>)

### AI overview

This tutorial shows how to build marketplace search with vanilla JavaScript using structured listing data, text normalization, multi-term matching, weighted scoring, filters, sorting, debounced input, and helpful empty states. It also explains when a small in-memory search should give way to a server-side index.

### Source excerpt

null Continue reading How to Build Smarter Marketplace Search with Vanilla JavaScript on SitePoint.

## Building a 33-Ending Capacitor Game Without a Framework or Custom Backend

DevFeed: [Building a 33-Ending Capacitor Game Without a Framework or Custom Backend](<https://devfeed.tech/articles/building-a-33-ending-capacitor-game-without-a-framework-or-custom-backend-61138.md>)

Original publisher: [Read original article](<https://hackernoon.com/building-a-33-ending-capacitor-game-without-a-framework-or-custom-backend?source=rss>)

Author: Eugene Kozlovsky

Published: 2026-09-28T11:30:24Z

Content type: article

Language: en

Sources: [HackerNoon](<https://devfeed.tech/sources/hackernoon.md>)

Topics: [Full Stack Development](<https://devfeed.tech/topics/full-stack-development.md>), [Angular](<https://devfeed.tech/topics/angular.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [css3](<https://devfeed.tech/tags/css3.md>), [fine-state-machines](<https://devfeed.tech/tags/fine-state-machines.md>), [gamedev](<https://devfeed.tech/tags/gamedev.md>), [google-play-testing](<https://devfeed.tech/tags/google-play-testing.md>), [hidden](<https://devfeed.tech/tags/hidden.md>), [html5](<https://devfeed.tech/tags/html5.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [nichlyst](<https://devfeed.tech/tags/nichlyst.md>), [offline](<https://devfeed.tech/tags/offline.md>), [revenuecat](<https://devfeed.tech/tags/revenuecat.md>), [shipaton](<https://devfeed.tech/tags/shipaton.md>), [vanilla-javascript](<https://devfeed.tech/tags/vanilla-javascript.md>), [webview-performance](<https://devfeed.tech/tags/webview-performance.md>)

### AI overview

The article describes building NICHLYST, an offline mobile narrative game, on an aging 8 GB PC in wartime Kyiv. It explains the choice of vanilla JavaScript, CSS, and HTML5 wrapped with Apache Capacitor, and a modular JSON loader designed to work without a heavyweight framework or custom backend. It also discusses the game's finite resource ledger, testing, and planned Shipaton submission.

### Source excerpt

How an indie builder created a zero-framework, offline mobile game on an 8 GB PC in wartime Kyiv, using Git color gates, strict FSM, and RevenueCat.

## The Case for Tri-State Dark Mode Toggles

DevFeed: [The Case for Tri-State Dark Mode Toggles](<https://devfeed.tech/articles/the-case-for-tri-state-dark-mode-toggles-48159.md>)

Original publisher: [Read original article](<https://www.bram.us/2026/08/18/the-case-for-tri-state-dark-mode-toggles/>)

Author: Bramus!

Published: 2026-08-18T08:26:19Z

Content type: article

Language: en

Sources: [Bram.us](<https://devfeed.tech/sources/bram-us.md>)

Topics: [Dark Mode](<https://devfeed.tech/topics/dark-mode.md>), [User Experience](<https://devfeed.tech/topics/user-experience.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Users](<https://devfeed.tech/topics/users.md>)

Tags: [css](<https://devfeed.tech/tags/css.md>), [dark-mode](<https://devfeed.tech/tags/dark-mode.md>), [implementing](<https://devfeed.tech/tags/implementing.md>), [original-content](<https://devfeed.tech/tags/original-content.md>), [ux](<https://devfeed.tech/tags/ux.md>), [vanilla-javascript](<https://devfeed.tech/tags/vanilla-javascript.md>), [website](<https://devfeed.tech/tags/website.md>)

### AI overview

The article argues that website dark mode controls should offer three choices--system, light, and dark--instead of a binary light/dark switch. It discusses user intent, persisted preferences, and local visual feedback, drawing on a Vanilla JavaScript implementation and a related UX debate.

### Source excerpt

Adding a Dark Mode toggle to your website is a nice touch that many users appreciate. When implementing one, the default instinct for many developers is to reach for a simple binary switch: Light on one side, Dark on the other. While a two-state control might seem like the most straightforward solution, I firmly believe it's flawed from a user experience perspective. Instead, we should all be using tri-state controls. Let me explain why.

## Build a Dependency Injection Container in Vanilla JavaScript

DevFeed: [Build a Dependency Injection Container in Vanilla JavaScript](<https://devfeed.tech/articles/build-a-dependency-injection-container-in-vanilla-javascript-87897.md>)

Original publisher: [Read original article](<https://jsdev.space/di-container-javascript/>)

Author: anton liberant

Published: 2026-08-02T00:00:00Z

Content type: tutorial

Language: en

Sources: [JavaScript Development](<https://devfeed.tech/sources/javascript-development.md>)

Topics: [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [vanilla-javascript](<https://devfeed.tech/tags/vanilla-javascript.md>)

### AI overview

A tutorial builds a lightweight dependency injection container in vanilla JavaScript, using declared component metadata instead of TypeScript, decorators, or runtime reflection. It covers class, factory, and value providers; singleton, scoped, and transient lifetimes; recursive dependency resolution; circular dependency detection; and an example application architecture that keeps domain objects independent from the container. The implementation is presented as an experiment rather than a production-ready framework.

### Source excerpt

Learn how to build a dependency injection container in vanilla JavaScript with singleton, scoped, and transient lifetimes, all without TypeScript.

## What's new in Apollo Client 3.10

DevFeed: [What's new in Apollo Client 3.10](<https://devfeed.tech/articles/what-s-new-in-apollo-client-3-10-23583.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/whats-new-in-apollo-client-3-10>)

Author: Lenz Weber-Tronic

Published: 2024-04-25T12:26:16Z

Content type: release

Language: en

Sources: [Apollo Blog](<https://devfeed.tech/sources/apollo-blog.md>)

Topics: [apollo-client](<https://devfeed.tech/topics/apollo-client.md>), [Software Testing](<https://devfeed.tech/topics/software-testing.md>), [Test automation](<https://devfeed.tech/topics/test-automation.md>)

Tags: [announcement](<https://devfeed.tech/tags/announcement.md>), [api](<https://devfeed.tech/tags/api.md>), [apollo](<https://devfeed.tech/tags/apollo.md>), [apollo-client](<https://devfeed.tech/tags/apollo-client.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [react](<https://devfeed.tech/tags/react.md>), [resolvers](<https://devfeed.tech/tags/resolvers.md>), [schema](<https://devfeed.tech/tags/schema.md>), [stable](<https://devfeed.tech/tags/stable.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [tools](<https://devfeed.tech/tags/tools.md>), [vanilla-javascript](<https://devfeed.tech/tags/vanilla-javascript.md>), [what-s-new](<https://devfeed.tech/tags/what-s-new.md>)

### AI overview

Apollo Client 3.10 adds experimental schema-based testing utilities that let tests alter resolvers to simulate changing results. The excerpt presents this as an alternative to the existing testing approach and says the schema can be used with Mock Service Worker or another new option to simulate a GraphQL server; both approaches use the real link chain instead of a mocked one. It also adds a function to the client class for using hook functionality in vanilla JavaScript or other frameworks. Finally, an API introduced as alpha in 3.9 is now stable; it starts a query outside React, such as in a router action, and later attaches to the generated result with a hook.

### Source excerpt

Apollo Client 3.10 has just been released, and we want to provide you with an overview of what's new: - Introducing new experimental schema-based testing utilities - New API: - reaches "stable" status Let's take a look: Introducing new experimental schema-based testing utilities In Apollo Client 3.10, we are introducing new schema-based testing utilities under the import. This adds two new tools: You can modify the resolvers inside your tests to simulate changing results.

## Using Bootstrap Native with Phoenix LiveView

DevFeed: [Using Bootstrap Native with Phoenix LiveView](<https://devfeed.tech/articles/using-bootstrap-native-with-phoenix-liveview-44030.md>)

Original publisher: [Read original article](<https://dashbit.co/blog/using-bootstrap-native-with-live-view>)

Author: José Valim

Published: 2020-06-16T00:00:00Z

Content type: tutorial

Language: en

Sources: [Dashbit Blog](<https://devfeed.tech/sources/dashbit-blog.md>)

Topics: [Bootstrap](<https://devfeed.tech/topics/bootstrap.md>), [phoenix](<https://devfeed.tech/topics/phoenix.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Webpack](<https://devfeed.tech/topics/webpack.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [Sass](<https://devfeed.tech/topics/sass.md>)

Tags: [bootstrap](<https://devfeed.tech/tags/bootstrap.md>), [forms](<https://devfeed.tech/tags/forms.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [liveview](<https://devfeed.tech/tags/liveview.md>), [phoenix](<https://devfeed.tech/tags/phoenix.md>), [sass](<https://devfeed.tech/tags/sass.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>), [vanilla-javascript](<https://devfeed.tech/tags/vanilla-javascript.md>), [webpack](<https://devfeed.tech/tags/webpack.md>)

### AI overview

A step-by-step tutorial for integrating Bootstrap Native with Phoenix LiveView. It explains how to avoid the full jQuery dependency by using Bootstrap components implemented in vanilla JavaScript, configure Webpack and Sass assets, and reapply JavaScript hooks when LiveView injects dynamic content.

### Source excerpt

A step by step description on how to use Bootstrap Native with Phoenix LiveView.

## Frameworkless JavaScript Part 2: Templates and Rendering

DevFeed: [Frameworkless JavaScript Part 2: Templates and Rendering](<https://devfeed.tech/articles/frameworkless-javascript-part-2-templates-and-rendering-32302.md>)

Original publisher: [Read original article](<https://jack.ofspades.com/frameworkless-javascript-part-2-templates-and-rendering/>)

Author: Jack Tarantino

Published: 2017-01-08T18:19:00Z

Content type: tutorial

Language: en

Sources: [Jacopo Tarantino](<https://devfeed.tech/sources/jacopo-tarantino.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Code](<https://devfeed.tech/topics/code.md>), [Framework](<https://devfeed.tech/topics/framework.md>)

Tags: [best-practices](<https://devfeed.tech/tags/best-practices.md>), [code](<https://devfeed.tech/tags/code.md>), [frameworks](<https://devfeed.tech/tags/frameworks.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [templates](<https://devfeed.tech/tags/templates.md>), [templating](<https://devfeed.tech/tags/templating.md>), [vanilla-javascript](<https://devfeed.tech/tags/vanilla-javascript.md>)

### AI overview

This tutorial explains how to implement basic HTML templating and string interpolation with vanilla JavaScript, using native APIs and methods instead of libraries or frameworks.

### Source excerpt

This article is one in a series about writing client-focused JavaScript without the help of libraries and frameworks. It's meant to help developers remember that they can write good code on their own using nothing but native APIs and methods. For more, check out the original article on writing small