Zero Width Shortener: URL shortening with invisible characters and what it costs
Project brief: Shorten URLs using invisible spaces. Individuals Organizations [Support this project with your organization][open-collective].
At a glance
- What is it?
- ZWS shortens URLs by hiding them inside invisible Unicode spaces. This review covers the mechanism, the self-hosting path, the trade-offs, and why the project's last push in 2021 matters for adoption.
- Who is it for?
- Adopt ZWS only if you need a URL shortener that hides the shortened link entirely, such as for print or chat contexts where a visible short domain is undesirable, and if you can tolerate the security and compatibility risks of invisible characters. Do not adopt it if you need long-term maintenance, active support, or a project that has seen recent commits, since the last push was in November 2021 and the only recent releases are for the schemas package.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 18, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What ZWS actually does
Zero Width Shortener, or ZWS, turns a long URL into a string that contains no visible characters. The README states it directly: "Shorten URLs with invisible spaces." The idea is that the shortened URL is composed of invisible Unicode characters, so when pasted into a document, a chat message, or a social media post, it appears as nothing. The original URL is embedded in those invisible characters. This solves a specific problem: a visible short link can be long, ugly, or blocked, but an invisible link can be placed anywhere without drawing attention. The target user is someone who wants to share a URL in a context where a visible link is undesirable, such as a printed page, a video description, or a message where the link itself would be a distraction. It is not a general-purpose URL shortener for everyday sharing, because the invisible result is hard to verify and can be confusing to the recipient.
The mechanism: invisible characters as a data channel
The core mechanism is not a typical redirect service. When you submit a URL to ZWS, the service encodes the target URL into a set of zero-width characters, likely zero-width spaces (U+200B) or similar, and returns that encoded string as the short URL. When a user clicks or copies that string, the service decodes it and redirects to the original URL. The README does not detail the exact encoding algorithm, but the name and the description make the principle clear. The API is documented via an OpenAPI schema at zws.im/api-docs, which is the authoritative source for the request and response formats. The service also exposes statistics endpoints that implement the Shields endpoint schema, meaning you can embed badges showing the number of shortened URLs and the number of visits. This is a concrete data flow: client sends a URL, server returns an invisible string, and later, when that string is requested, the server looks up the mapping and redirects. The use of invisible spaces means the URL is not human-readable, which is both the feature and the core risk.
Running it: what the repository tells you
The repository is written in TypeScript and licensed under Apache-2.0. There is no explicit installation guide in the README, but the presence of a package named @zws.im/schemas, which has recent releases, suggests that the project is structured as a monorepo with a schemas package for API validation. To run it, you would likely clone the repository, install dependencies with a package manager like npm or yarn, and start the server. The README does not provide a specific command, so you cannot confirm the exact startup procedure from the material. However, the existence of an OpenAPI schema and a public instance at zws.im means you can test the API before committing to a self-hosted setup. The CLI is mentioned, with a link to a separate repository, but no commands are given. This lack of concrete setup instructions is a limitation: an engineer evaluating ZWS must rely on the repository structure and the API docs, not a quick-start guide.
Where it breaks: the real limitations
The primary limitation is that invisible characters are not universally supported. Some platforms strip zero-width spaces, others render them as a visible placeholder, and some security systems flag them as suspicious. A link that appears as nothing can be accidentally copied incorrectly, or the recipient may not realize a link is present at all. This makes ZWS a wrong tool for any environment where the user needs to see the destination before clicking. Another limitation is that the service is not actively maintained: the last push to the default branch was in November 2021, and the only recent releases are for the schemas package, not the core application. This means bugs in the URL encoding or the API may not be fixed. Finally, because the short URL is invisible, there is no way to preview it, and if the service goes down, all links break without any visible trace of what they pointed to.
The alternative: conventional shorteners with a visible domain
The obvious alternative is a traditional URL shortener like a self-hosted YOURLS or a commercial service like Bitly. Those services use a short visible domain, such as yourdomain.com/abc123, which is human-readable, easy to copy, and works across all platforms. The approach differs fundamentally: ZWS hides the URL in invisible characters, while conventional shorteners rely on a visible, memorable domain. The trade-off is that a visible short link is recognizable and trustworthy, but it can be blocked by content filters or simply look spammy. ZWS offers stealth, but at the cost of compatibility and user comprehension. If your use case is a printed QR code or a podcast description where you want the link to be unobtrusive, ZWS might be worth trying, but for most web sharing, a visible shortener is the safer choice.
Maintenance and licensing considerations
The project is licensed under Apache-2.0, which permits commercial use, modification, and distribution, with the condition that you retain the license notice. This is a permissive license, so you can fork and modify the code without releasing your changes. However, the maintenance situation is a concern: the last push to the default branch was over three years ago, and the only recent releases are for the schemas package, which suggests that the core codebase is not actively developed. The README mentions that Jonah Snider maintains the project, but there is no indication of a roadmap or a release schedule. For an engineer, this means you are adopting a project that may have unpatched security vulnerabilities or compatibility issues with newer Node.js versions. The Apache-2.0 license gives you the freedom to fix it yourself, but you must be prepared to take over maintenance if you rely on it in production.
Editorial conclusion
Adopt ZWS only if you need a URL shortener that hides the shortened link entirely, such as for print or chat contexts where a visible short domain is undesirable, and if you can tolerate the security and compatibility risks of invisible characters. Do not adopt it if you need long-term maintenance, active support, or a project that has seen recent commits, since the last push was in November 2021 and the only recent releases are for the schemas package. Before using it, verify that your target platforms (browsers, email clients, messaging apps) handle zero-width spaces consistently, and test the API endpoints against the OpenAPI schema at zws.im/api-docs. If you cannot confirm that, choose a conventional shortener with a visible domain.
Community notes