esm.sh VS TypeScript

Compare esm.sh vs TypeScript and see what are their differences.

esm.sh

A fast, smart, & global CDN for modern(es2015+) web development. (by esm-dev)

TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output. (by microsoft)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
esm.sh TypeScript
58 1,305
2,808 97,944
2.7% 1.0%
9.8 9.9
10 days ago 3 days ago
Go TypeScript
MIT License Apache License 2.0
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

esm.sh

Posts with mentions or reviews of esm.sh. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-04-23.
  • Building a self-creating website with Supabase and AI
    6 projects | dev.to | 23 Apr 2024
    /* eslint-disable @typescript-eslint/ban-ts-comment */ // Follow this setup guide to integrate the Deno language server with your editor: // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. import { corsHeaders } from "../_shared/cors.ts"; import { createClient } from "https://esm.sh/@supabase/[email protected]"; import randomSample from "https://esm.sh/@stdlib/[email protected]"; import Replicate from "https://esm.sh/[email protected]"; import { base64 } from "https://cdn.jsdelivr.net/gh/hexagon/base64@1/src/base64.js"; const supabaseClient = createClient( Deno.env.get("SUPABASE_URL") ?? "", Deno.env.get("SUPABASE_SERVICE_ROLE_KEY") ?? "" ); const replicate = new Replicate({ auth: Deno.env.get("REPLICATE_API_TOKEN") ?? "", }); // @ts-expect-error Deno.serve(async (req) => { if (req.method === "OPTIONS") { return new Response("ok", { headers: corsHeaders }); } const { record } = await req.json(); const thought_id = record.id; if (!thought_id) { return new Response("Missing thought_id", { status: 400, headers: { "Content-Type": "application/json", ...corsHeaders }, }); } const allObjectIDsResponse = await fetch( "https://collectionapi.metmuseum.org/public/collection/v1/objects?departmentIds=11", { method: "GET", headers: { "Content-Type": "application/json", Accept: "application/json", }, } ); const { objectIDs } = await allObjectIDsResponse.json(); const listOfArtworks = []; const addedIDs: number[] = []; while (listOfArtworks.length < 80) { const randomObjectID = randomSample(objectIDs, { size: 1 })[0]; if (addedIDs.includes(randomObjectID)) continue; const res = await fetch( `https://collectionapi.metmuseum.org/public/collection/v1/objects/${randomObjectID}`, { method: "GET", headers: { "Content-Type": "application/json", Accept: "application/json", }, } ); const artwork = await res.json(); if (!artwork.primaryImageSmall) continue; addedIDs.push(artwork.objectID); listOfArtworks.push({ image_url: artwork.primaryImageSmall, artist_name: artwork.artistDisplayName, title: artwork.title, is_main: listOfArtworks.length === 0, is_variant: false, thought_id, }); } const mainImage = listOfArtworks[0]; const output = await replicate.run( "yorickvp/llava-13b:b5f6212d032508382d61ff00469ddda3e32fd8a0e75dc39d8a4191bb742157fb", { input: { image: mainImage.image_url, top_p: 1, prompt: "Describe this painting by " + mainImage.artist_name, max_tokens: 1024, temperature: 0.2, }, } ); const file = await fetch(mainImage.image_url).then((res) => res.blob()); const promises = []; for (let i = 0; i < 8; i++) { const body = new FormData(); body.append( "prompt", output.join("") + `, a painting by ${mainImage.artist_name}` ); body.append("output_format", "jpeg"); body.append("mode", "image-to-image"); body.append("image", file); body.append("strength", clamp(Math.random(), 0.4, 0.7)); const request = fetch( `${Deno.env.get( "STABLE_DIFFUSION_HOST" )}/v2beta/stable-image/generate/sd3`, { method: "POST", headers: { Accept: "application/json", Authorization: `Bearer ${Deno.env.get("STABLE_DIFFUSION_API_KEY")}`, }, body, } ); promises.push(request); } const results = await Promise.all(promises); const variants = await Promise.all(results.map((res) => res.json())); await supabaseClient.from("artworks").insert(listOfArtworks); for (let i = 0; i < variants.length; i++) { const variant = variants[i]; const randomId = Math.random(); await supabaseClient.storage .from("variants") .upload( `${thought_id}/${randomId}.jpeg`, base64.toArrayBuffer(variant.image), { contentType: "image/jpeg", } ); await supabaseClient.from("artworks").insert({ image_url: `${Deno.env.get( "SUPABASE_URL" )}/storage/v1/object/public/variants/${thought_id}/${randomId}.jpeg`, artist_name: mainImage.artist_name, is_main: false, is_variant: true, thought_id, }); } await supabaseClient .from("thoughts") .update({ generating: false }) .eq("id", thought_id); return new Response(JSON.stringify({ main: mainImage }), { headers: { "Content-Type": "application/json", ...corsHeaders }, }); }); function clamp(value: number, min: number, max: number) { return Math.min(Math.max(value, min), max); }
  • Bun 1.1
    17 projects | news.ycombinator.com | 1 Apr 2024
  • Show HN: Comma Separated Values (CSV) to Unicode Separated Values (USV)
    15 projects | news.ycombinator.com | 12 Mar 2024
    const extism = await import("https://esm.sh/@extism/extism");
  • JSR: The JavaScript Registry
    9 projects | news.ycombinator.com | 1 Mar 2024
    Unpkg serves whatever is published to NPM, and if it's a library intended for the browser, that often includes minified versions ready for use in script tags, for example, https://unpkg.com/[email protected]/mithril.min.js. Sometimes the default export is CJS (which has require() calls), in which case, you can usually use the browse url that I mentioned to see if there's another export you can use.

    https://esm.sh/ is definitely a good option too if you're OK with modules.

  • Deno Cron
    15 projects | news.ycombinator.com | 29 Nov 2023
    * Change my NPM imports to something that would work with Deno. The most straightforward thing to do was just change `import "foo"` to `import "npm:foo"`, but this felt hacky so eventually I used https://esm.sh, which worked for some packages but not others.
  • Esm.sh/Run
    1 project | news.ycombinator.com | 23 Nov 2023
  • Esm.sh run – 1KB script allows you to write JSX/TSX in HTML without build
    1 project | news.ycombinator.com | 23 Nov 2023
  • Supabase - allow user login with pin
    1 project | /r/Supabase | 12 Nov 2023
    import { createClient } from "https://esm.sh/@supabase/supabase-js@2"; import { create, Payload } from "https://deno.land/x/[email protected]/mod.ts"; interface User { username: string; pin: string; } const supabase = createClient(Deno.env.get('SUPABASE_URL'), Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')); const handler = async (req: Request): Promise => { if (req.method !== 'POST') { return new Response(null, { status: 405 }); } const { username, pin } = await req.json() as Vehicle; if (!username|| !pin) { return new Response(JSON.stringify({ error: 'username and PIN are required' }), { status: 400 }); } const { data, error } = await supabase .from('users') .select('*') .eq('username', username) .eq('pin', pin) .single(); if (error || !data) { return new Response(JSON.stringify({ valid: false }), { status: 401 }); } const jwtSecret = Deno.env.get('JWT_SECRET') as string;; const payload: Payload = { "username": username }; try { const token = await create({ alg: "HS256", typ: "JWT" }, payload, jwtSecret); // This line has the error console.log(token); return new Response(JSON.stringify({ token }), { status: 200 }); } catch (error) { console.error('Error creating JWT:', error); return new Response(JSON.stringify({ error: 'Error creating JWT' }), { status: 500 }); } }; Deno.serve(handler);
  • Let's optimize dependency management with URL Imports
    3 projects | dev.to | 13 Oct 2023
    Easily serve libraries from local server/private VPS: You can try to serve and cache libraries by running esm.sh to improve loading times on your server side. Or to keep things simple, just upload a code to pastebin or similar services and directly use it here!
  • Building a Slack Bot for AI-Powered Conversations with Supabase
    2 projects | dev.to | 10 Oct 2023
    import { serve } from 'https://deno.land/[email protected]/http/server.ts'; import { WebClient } from 'https://deno.land/x/[email protected]/mod.js'; import { SupabaseClient } from 'https://esm.sh/@supabase/supabase-js@2'; const slack_bot_token = Deno.env.get("SLACK_TOKEN") ?? ""; const bot_client = new WebClient(slack_bot_token); const supabase_url = Deno.env.get("SUPABASE_URL") ?? ""; const service_role = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY"); const supabase = new SupabaseClient(supabase_url, service_role); console.log(`Slack URL verification function up and running!`); serve(async (req) => { try { const req_body = await req.json(); console.log(JSON.stringify(req_body, null, 2)); const { token, challenge, type, event } = req_body; if (type == 'url_verification') { return new Response(JSON.stringify({ challenge }), { headers: { 'Content-Type': 'application/json' }, status: 200, }); } else if (event.type == 'app_mention') { const { user, text, channel, ts } = event; const url_path = text.toLowerCase() .includes('code') ? '/code' : '/general'; const { error } = await supabase.from('job_queue').insert({ http_verb: 'POST', payload: { user, text, channel, ts }, url_path: url_path }); if (error) { console.error(error); return new Response(JSON.stringify({ error: error.message }), { headers: { 'Content-Type': 'application/json' }, status: 400, }); } await post(channel, ts, `Taking a look and will get back to you shortly!`); return new Response('', { status: 200 }); } } catch (error) { return new Response(JSON.stringify({ error: error.message }), { headers: { 'Content-Type': 'application/json' }, status: 400, }); } }); async function post(channel: string, thread_ts: string, message: string): Promise { try { const result = await bot_client.chat.postMessage({ channel: channel, thread_ts: thread_ts, text: message, }); console.info(result); } catch (e) { console.error(`Error posting message: ${e}`); } }

TypeScript

Posts with mentions or reviews of TypeScript. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-04-25.
  • JSR Is Not Another Package Manager
    2 projects | news.ycombinator.com | 25 Apr 2024
    Regular expressions are part of the language, so it's not so unreasonable that TypeScript should parse them and take their semantics into account. Indeed, TypeScript 5.5 will include [new support for syntax checking of regular expressions](https://github.com/microsoft/TypeScript/pull/55600), and presumably they'll eventually be able to solve the problem the GP highlighted on top of those foundations.
  • TypeScript Essentials: Distinguishing Types with Branding
    2 projects | news.ycombinator.com | 24 Apr 2024
    Dedicated syntax for creating unique subsets of a type that denote a particular refinement is a longstanding ask[2] - and very useful, we've experimented with implementations.[3]

    I don't think it has any relation to runtime type checking at all. It's refinement types, [4] or newtypes[5] depending on the details and how you shape it.

    [1] https://github.com/microsoft/TypeScript/blob/main/src/compil...

  • What is an Abstract Syntax Tree in Programming?
    13 projects | dev.to | 5 Apr 2024
    GitHub | Website
  • Smart Contract Programming Languages: sCrypt vs. Solidity
    2 projects | dev.to | 5 Apr 2024
    Learning Curve and Developer Tooling sCrypt is an embedded Domain Specific Language (eDSL) based on TypeScript. It is strictly a subset of TypeScript, so all sCrypt code is valid TypeScript. TypeScript is chosen as the host language because it provides an easy, familiar language (JavaScript), but with type safety. There’s an abundance of learning materials available for TypeScript and thus sCrypt, including online tutorials, courses, documentation, and community support. This makes it relatively easy for beginners to start learning. It also has a vast ecosystem with numerous libraries and frameworks (e.g., React, Angular, Vue) that can simplify development and integration with Web2 applications.
  • Understanding the Difference Between Type and Interface in TypeScript
    1 project | dev.to | 2 Apr 2024
    As a JavaScript or TypeScript developer, you might have come across the terms type and interface when working with complex data structures or defining custom types. While both serve similar purposes, they have distinct characteristics that influence when to use them. In this blog post, we'll delve into the differences between types and interfaces in TypeScript, providing examples to aid your understanding.
  • Type-Safe Fetch with Next.js, Strapi, and OpenAPI
    8 projects | dev.to | 2 Apr 2024
    TypeScript helps you in many ways in the context of a JavaScript app. It makes it easier to consume interfaces of any type.
  • Proposal: Types as Configuration
    1 project | news.ycombinator.com | 1 Apr 2024
  • How to scrape Amazon products
    4 projects | dev.to | 1 Apr 2024
    In this guide, we'll be extracting information from Amazon product pages using the power of TypeScript in combination with the Cheerio and Crawlee libraries. We'll explore how to retrieve and extract detailed product data such as titles, prices, image URLs, and more from Amazon's vast marketplace. We'll also discuss handling potential blocking issues that may arise during the scraping process.
  • Shared Tailwind Setup For Micro Frontend Application with Nx Workspace
    6 projects | dev.to | 29 Mar 2024
    TypeScript
  • Building a Dynamic Job Board with Issues Github, Next.js, Tailwind CSS and MobX-State-Tree
    6 projects | dev.to | 28 Mar 2024
    Familiarity with TypeScript, React and Next.js

What are some alternatives?

When comparing esm.sh and TypeScript you can also consider the following projects:

import-maps - How to control the behavior of JavaScript imports

zod - TypeScript-first schema validation with static type inference

jsdelivr - A free, fast, and reliable Open Source CDN for npm, GitHub, Javascript, and ESM

Flutter - Flutter makes it easy and fast to build beautiful apps for mobile and beyond

deno - A modern runtime for JavaScript and TypeScript.

Tailwind CSS - A utility-first CSS framework for rapid UI development.

esbuild - An extremely fast bundler for the web

zx - A tool for writing better scripts

eleventy-high-performance-blog - A high performance blog template for the 11ty static site generator.

dayjs - ⏰ Day.js 2kB immutable date-time library alternative to Moment.js with the same modern API

gray-matter - Smarter YAML front matter parser, used by metalsmith, Gatsby, Netlify, Assemble, mapbox-gl, phenomic, vuejs vitepress, TinaCMS, Shopify Polaris, Ant Design, Astro, hashicorp, garden, slidev, saber, sourcegraph, and many others. Simple to use, and battle tested. Parses YAML by default but can also parse JSON Front Matter, Coffee Front Matter, TOML Front Matter, and has support for custom parsers. Please follow gray-matter's author: https://github.com/jonschlinkert