Giter VIP home page Giter VIP logo

website's Introduction

Documentation

Documentation for grammY. Contributions are welcome!

The logos/ directory only contains the logos of grammY—all website-related things are in site/.

Building the Website Locally

Setup (once): cd into site/ and run npm install.

You can now run

npm run docs:dev

to view the documentation in your browser.

Checking Correct Formatting of Docs

In addition to the VS Code extension that lints the Markdown, Deno formatting is used to check the formatting of markdown files and the TypeScript and JavaScript code contained in them. You can use the following two commands in the site/ directory.

cd site/

# Checks if all files are formatted correctly
deno fmt --check

# Automatically formats all files directly
deno fmt

You can also run

npm run docs:fmt

in the site/ directory to perform the formatting if you don't have Deno installed.

website's People

Contributors

andrrms avatar backmeupplz avatar calsibotdev avatar chimit avatar code-withashish avatar dcdunkan avatar dzek69 avatar edjopato avatar emidio21 avatar grammyz avatar habemuscode avatar heeroml avatar kidonng avatar knightniwrem avatar knorpelsenf avatar linbuxiao avatar loskir avatar lwjerri avatar niusia-ua avatar ponomarevlad avatar puffmeow avatar quadratz avatar rnbsov avatar roj1512 avatar roziscoding avatar sartoshi-foot-dao avatar satont avatar slavafomin avatar taotie111 avatar winglim avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

website's Issues

feat: `SetWebhookUtil` component

It would be awesome to have a tiny utility component which can be included in all the hosting guides which require a webhook to be set. While it is not hard for many users to correctly set the webhook URL using curl or other tools, some beginners struggle with understanding which URL to fetch.

It would be nice to have a small interactive component on the website which lets users paste their token and URL and then it will set the webhook for them. It could also get some neat information to validate the info:

  1. Call getMe with the token to confirm the bot name
  2. Pass the URL to the URL constructor to validate the URL
  3. Display information from getWebhookInfo so that there is an easy way to confirm that things are working correctly
  4. Provide a tooltip that explains that the bot token will never be used for anything else than setting for this component to function, and tell users to never give away their token to anyone, no matter how polite a website asks.
  5. Have a link that opens the chat with the new bot in a new tab so that users can easily head over to Telegram when the webhook was set and the bot is working.
  6. Perhaps have a second button to delete the webhook again? This might not be necessary, but it could be that it feels more natural to have it. Sometimes people feel the urge to clean up after themselves.
  7. Perhaps store the token locally in the browser so that it persists across page loads? We must not do this if it feels shady, I don't want anyone to believe we store the token server-side (even though we will never do this)

Russian translation tracking

This issue is for tracking the translation progress of all pages. It will be closed when the translation of the whole documentation is finished.

Want to collaborate?

Before translating

  • Before you start, read the translation guide
  • Pick one untranslated page from the list below and start translating it locally

While translating

  • DO NOT just copy the translation from some translator tool, use your own native-speaker skills

After translating

  • Create PR from your fork against the ru branch

Progress

Landing Page and Config

Learn

Guide

Advanced

Plugins

Introduction

Built-in

Official

Third-party

Resources

grammY

Hosting

Overview

Tutorials

Ukrainian translation tracking

This issue is for tracking the translation progress of all pages. It will be closed when the translation of the whole documentation is finished.

Want to collaborate?

Before translating

  • Before you start, read the translation guide
  • Pick one untranslated page from the list below and start translating it locally

While translating

  • DO NOT just copy the translation from some translator tool, use your own native-speaker skills

After translating

  • Create PR from your fork against the uk branch

Progress

Landing Page and Config

Learn

Guide

Advanced

Plugins

Introduction

Built-in

Official

Third-party

Resources

grammY

Hosting

Overview

Tutorials

Wrong commit order for restoring Chinese

Before #547 was merged, there were a number of PQs that do not include Chinese translations but still change all other languages.

It would be great to have a single commit to put into TRANSLATING.md which marks the point at which Chinese was removed. If anyone wants to pick it up, all they have to do is to look what changed since that commit. With the current history, it would be 0ef23b6 but then the commit range 48aa702..d4f552c (which happened before) would also have to be applied, as the translations are missing here.

A good strategy to mitigate this is to create 3 PQs:

feat: Migration guides

Migration guides from other frameworks. Should be linked from the framework comparison. Made for Telegraf and NTBA users. Potentially also explains how grammY differs from libs in other languages, but it isn't clear if that makes sense.

Improving the guide to hosting bots on VPS

The current guide only explains how to keep the bot running continuously, leaving out other aspects such as the actual server rental, SSH settings, deployments, security issues, etc.

I have considerable experience in these matters, so I decided to contribute to the development of grammY documentation.

My goal is to describe the entire path of deploying the bot on a VPS, taking into consideration both a long polling and webhooks, namely:

  1. Renting a server and a domain for the webhook. In the guide, I will use Hostinger as an example because of its rich documentation, multilingualism, and the best rates in terms of [quality, resources]:price.
  2. Setting up the server control panel. For this, I will use Fastpanel because I know it well, and it has good documentation, a nice looking interface, is easy to customize, and is generally free.
  3. Actually writing deployment scripts for GitHub and GitLab.
  4. Support for bot work (systemd or pm2).

I think that the new guide will be very useful for beginners, who will save their time, which they would otherwise spend on learning all these aspects on their own.

Soon I will create a PR draft where I will develop a new manual. I will write it in Ukrainian first, then translate it into English, and then submit it for review.

P.S. @KnorpelSenf supported my idea.

feat: How to set up a local Bot API server

We have an example bot on how to set up a local Bot API server in the repo, but we don't yet have a document that really explains how to do it. Could be in the docs, could be in the README in the other repo—this needs to be decided.

Italian translation tracking

This issue is for tracking the translation progress of all pages. It will be closed when the translation of the whole documentation is finished.

Want to collaborate?

Before translating

  • Before you start, read the translation guide
  • Pick one untranslated page from the list below and start translating it locally

While translating

  • DO NOT just copy the translation from some translator tool, use your own native-speaker skills

After translating

  • Create PR from your fork against the it branch

Progress

Landing Page and Config

Learn

Guide

Advanced

Plugins

Introduction

Built-in

Official

Third-party

Resources

grammY

Hosting

Overview

Tutorials

chore: Re-arrange hosting section

Right now, the Resources tab has a part for Hosting. As more and more articles get added, we should have a dedicated tab for Hosting, i.e. just split that part out into its own tab. Should be done as soon as we have one more article.

fix: Search

The recent changes at Algolia broke our setup. This needs to be investigated

feat: Telegram payments guide

  1. Introduction
  • Provide a brief overview of the purpose of the Payments Guide.
  • Explain the importance of understanding payment integration for bot development on the platform.
  1. Feature Overview
  • Describe the functionality of the payment feature in bot development, highlighting its benefits and potential use cases.
  • Include a link to the official Telegram documentation for accepting payments from users.
  1. Understanding Payments on Telegram
  • Explain how payments on Telegram work, emphasizing that Telegram doesn't handle the money itself.
  • Outline the general setup process and the involvement of payment providers.
  • Describe the flow of data between Telegram, payment providers, and the bot.
  • Explain the flow of money from users to the bot developer's account.
  1. Prerequisites
  • List the requirements and prerequisites for getting started with accepting payments on Telegram.
  • Mention if a credit card is needed, any specific accounts that need to be set up, or any tokens/secrets required for integration.
  1. Integration Steps with grammY
  • Provide step-by-step instructions on how to code the payment integration using the grammY framework.
  • Include example code snippets for each relevant step, demonstrating how to set up and handle payments within a bot.
  1. Advanced Topics and Tips
  • Offer additional tips, tricks, and best practices for working with payments on Telegram.
  • Include information on advanced settings and customization options for payment integration.
  • Provide links to other relevant resources, such as official Telegram documentation or community forums for further exploration.

Add warning about build() to keyboard plugin

Something like "In the past it was required to use .build() to add properties like resize_keyboard. Now they are supported out of the box and you shouldn't use .build(). Note that if you use build, properties set with .resized() won't be applied"

Must have an anchor link so we can use it in the code

reply with poll bug

when I submit a vote using the bot and the first person votes, I get the following error. looks like a bug?
CleanShot 2021-12-01 at 04 12 46@2x

Router : Type 'MyContext' does not satisfy the constraint 'Context'.

according to:
https://grammy.dev/plugins/router.html#combining-routers-with-sessions

env:

In use router section
const router = new Router<MyContext>((ctx) => ctx.session.step);

error raise top of MyContext :

Type 'MyContext' does not satisfy the constraint 'Context'. The types of 'api.raw.setWebhook' are incompatible between these types. Type '(args: { url: string; certificate?: import("https://deno.land/x/[email protected]/platform.deno").InputFile | undefined; ip_address?: string | undefined; max_connections?: number | undefined; allowed_updates?: readonly ("poll" | ... 12 more ... | "chat_join_request")[] | undefined; drop_pending_updates?: boolean | undef...' is not assignable to type '(args: { url: string; certificate?: import("https://deno.land/x/[email protected]/platform.deno").InputFile | undefined; ip_address?: string | undefined; max_connections?: number | undefined; allowed_updates?: readonly ("poll" | ... 12 more ... | "chat_join_request")[] | undefined; drop_pending_updates?: boolean | undef...'. Types of parameters 'args' and 'args' are incompatible. Type '{ url: string; certificate?: import("https://deno.land/x/[email protected]/platform.deno").InputFile | undefined; ip_address?: string | undefined; max_connections?: number | undefined; allowed_updates?: readonly ("poll" | ... 12 more ... | "chat_join_request")[] | undefined; drop_pending_updates?: boolean | undefined; }' is not assignable to type '{ url: string; certificate?: import("https://deno.land/x/[email protected]/platform.deno").InputFile | undefined; ip_address?: string | undefined; max_connections?: number | undefined; allowed_updates?: readonly ("poll" | ... 12 more ... | "chat_join_request")[] | undefined; drop_pending_updates?: boolean | undefined; }'. Types of property 'certificate' are incompatible. Type 'import("https://deno.land/x/[email protected]/platform.deno").InputFile | undefined' is not assignable to type 'import("https://deno.land/x/[email protected]/platform.deno").InputFile | undefined'. Property '[toRaw]' is missing in type 'import("https://deno.land/x/[email protected]/platform.deno").InputFile' but required in type 'import("https://deno.land/x/[email protected]/platform.deno").InputFile'.deno-ts(2344)

feat: migrate vuepress to vuepress-vite or vitepress

vuepress is using webpack which is much slower than vuepress-vite or vitepress(they are using vite and esbuild).

I have tested the build time between vuepress and vuepress-vite, here is the result:

+---------+----------+---------------+
|         | vuerepss | vuepress-vite |
+---------+----------+---------------+
| Time1   | 30.29s   | 17.77s        |
| Time2   | 29.67s   | 16.87s        |
| Average | 29.98s   | 17.32s        |
+---------+----------+---------------+

vuepress-vite is 40% faster than vuepress in my i5-9500 computer.

Migrate to vuepress-vite is very simple and easy, or we can migrate to vitepress(to vitepress is a bit complicated, but I will do the job).

There will be a PR migrate to vuepress-vite, you can take a look about it.

Indonesian Translation Tracking

🇮🇩 Indonesian

Deskripsi

Issue ini digunakan untuk memantau proses translasi semua halaman. Issue akan ditutup ketika semua dokumentasi berhasil diselesaikan.

Ikutan dong...!!!

Menjadi Penerjemah

  1. Sebelum memulai, pahami dulu panduan berkontribusi untuk penerjemah.
  2. Terjemahkan dengan bahasa yang kamu kuasai. JANGAN hanya copas alias copy-paste mentah-mentah dari google translate. Gunakan pemahaman kamu agar menghasilkan terjemahan yang baik dan enak dibaca.
  3. Ambil satu halaman yang belum diterjemahkan. Terus terjemahkan. Kalau sudah, buat pull request (PR) sesuai panduan di point satu di atas. Ingat, satu PR untuk satu halaman agar mudah dikerjakan dan dikoreksi.

Menjadi Penyunting

Silahkan dikoreksi PR translasi yang sudah dibuat. Tambahkan catatan jika diperlukan.

Catatan

Kata-kata yang berhubungan dengan methods, nama function, variables... tidak perlu diterjemahkan. Berikut beberapa contohnya:

bot
update
keyboard / inline keyboard
webhook
payload
... (dan lain-lain)

🇬🇧 English

Description

This issue is for tracking the translation progress of all pages and will be closed when the documentation is finished.

I want to collaborate too!

Being a translator

  1. Read how to contribute in translations
  2. Translate with your native-speaker level, DO NOT just copy the section to some translator tool and paste back the result
  3. Take one untranslated page, translate and create PR from your fork to the main project. One PR for page, to better split in parallel the work and less tired reviews

Being a reviewer

Find the PR's created for translations and review them. Add all notes that you consider.

Note

Words related to methods, function names, variables... mustn't be translated. Here are some examples:

bot
update
keyboard / inline keyboard
webhook
payload
... (feel free to add more, but make sense)

📝 Translation progress

README

Advanced

Demo

Guide

Hosting

Plugins

Resources

Config

Rearrange the navbar

The existing navbar is excessively dense, resulting in some content being cut off. Perhaps combining some menus into one or converting texts to icons (e.g. GitHub link as icon instead of plain text) may help.

Screenshot 2022-08-19 at 14-15-44 grammY

feat: Interactive filter query explorer

Paste your filter query, and get visualised what it means, and what kinds of updates would be caught. Not sure how much effort this is. Ideally, we don't have to manually keep this in sync with the code.

We might have to drop this if it is too much work. After all, filter queries are not that hard to understand, so it might not justify the effort.

Type issue

Error message

TS2345: Argument of type '{ reply_markup: { remove_keyboard: boolean; }; }' is not assignable to parameter of type 'Other<"sendMessage", "text" | "chat_id">'.
  Types of property 'reply_markup' are incompatible.
    Type '{ remove_keyboard: boolean; }' is not assignable to type 'InlineKeyboardMarkup | ReplyKeyboardMarkup | ReplyKeyboardRemove | ForceReply | undefined'.
      Type '{ remove_keyboard: boolean; }' is not assignable to type 'ReplyKeyboardRemove'.
        Types of property 'remove_keyboard' are incompatible.
          Type 'boolean' is not assignable to type 'true'.

it works when I ignored it with // @ts-ignore

image

feat: Web Bots

They are cool, but they are also relatively difficult to build. The grammY docs can build a bridge from novice programmers to advanced web tooling by providing a step-by-step guide that introduces all the necessary features and explains things along the way.

The official Telegram docs are more of a reference, or an explanation for experienced programmers. There is a lot of potential to boil it down.

This will have to wait a while until we had time to gain some experience building web bots ourselves. It does not make sense to explain anything while we're still learning how to use them ourselves.

Uzbek translation tracking

This issue is tracking for translating Uzbek documentation.

For someone who wants to join to translate documentation to the Uzbek language, you can take a look at this issue, find out the untranslated section.

This issue will be closed when the documentation is largely translated.

There is more detail about translation in TRANSLATING guide, please read it first!

Here are some of the formats we are following:

First and the most important:
DO NOT just copy the section to google translator or something like that and paste back the result

Second, some words we are not going to translate:

  • bot
  • update
  • keyboard / inline keyboard
  • webhook/polling
  • payload
  • middleware
  • ...(feel free to add more, but make sense)

Bu issue dokumentatsiyani O'zbek tiliga tarjima qilinishini kuzatib borish uchun.

Dokumentatsiyani O'zbek tiliga tarjima qilishga o'z hissangizni qo'shmoqchi bo'lsangiz bu issueni ko'rib chiqib, tarjima qilinmagan bo'limni topishingiz mumkin..

Bu issue dokumentatsiya to'liq tarjima qilinganda yopiladi.

Tarjima qilish haqida TRANSLATING qo'llanmasida ko'proq ma'lumot bor, oldin shuni o'qishni maslahat beramiz.

Quyida biz amal qilayotgan ba'zi bir formatlar keltirilgan:

Birinchi va eng muhimi:
Matnni shunchaki google tarjimon yoki shunga o'xshash platformaga TARJIMA QILDIRMANG

Ikkinchi, ba'zi bir so'zlarni tarjima qilish kerak emas:

  • bot
  • update
  • keyboard / inline keyboard
  • webhook/polling
  • payload
  • middleware
  • ...(boshqa so'zlarni bemalol qo'shishingiz mumkin)

Readme

Advanced

Demo

  • examples.md
  • README.md

Guide

  • api.md
  • basics.md
  • commands.md
  • context.md
  • deployment-types.md
  • errors.md
  • files.md
  • filter-queries.md
  • games.md
  • getting-started.md
  • inline-queries.md
  • introduction.md
  • middleware.md
  • README.md -> Pull request

Hosting

  • deno-deploy.md
  • gcf.md
  • heroku.md

Plugins

  • auto-retry.md
  • command-filter.md
  • console-time.md
  • files.md
  • hydratate.md
  • i18n.md
  • keyboard.md
  • menu.md
  • parse-mode.md
  • ratelimiter.md
  • README.md
  • router.md
  • runner.md
  • session.md
  • stateless-question.md
  • transformer-throttler.md

Resources

  • comparison.md
  • faq.md

Spanish translation tracking

English

Description

  • This issue is for tracking the translation progress of all pages.
  • This issue will be closed when the documentation is finished.

I want to collaborate

  1. Being a translator
  • Read how to contribute in translations
  • Translate with your native-speaker level, DO NOT just copy the section to some translator tool and paste back the result
  • Take one untranslated page, translate and create PR from your fork to the main project. One PR for page, to better split in parallel the work and less tired reviews
  1. Being a reviewer
  • Find the PR's created for translations and review them. Add all notes that you consider.

Note

Words related to methods, function names, variables... mustn't be translated. Here are some examples:

  • bot
  • update
  • keyboard / inline keyboard
  • webhook
  • payload
  • ... (feel free to add more, but make sense)

Español

Descripción

  • Esta issue es para rastrear el progreso de traducción de todas las páginas.
  • Está issue será cerrada cuando la documentación este completada.

Me gustaría colaborar

  1. Como traductor
  • Leéte como contribuir en las traducciones
  • Traduce con tu nivel nativo, NO simplemente copies el contenido en una herramienta de traducción y pegues el resultado
  • Escoge una página no traducida, traducela y crea un PR desde el fork del projecto al projecto principal. Un PR por página, para favorecer la parallelización del trabajo y reducir el cansancio de la revisión.
  1. Como validador
  • Encuentra un PR creado de traducciones y revisalo. Añade todos los comentarios que consideres.

Nota

Palabras relativas a métodos, nombres de funciones, variables... no se traducen. Aquí algunos ejemplos:

  • bot
  • update
  • keyboard / inline keyboard
  • webhook
  • payload
  • ... (añade más si consideras, pero con sentido común)

Readme

Advanced

Demo

Guide

Hosting

Plugins

Resources

feat: Comparison table

A comparison table over bot frameworks. Such a typical grid where columns are features and rows are frameworks, and then there are a emoji that display different ranges of support. Has been discussed in the chat, a few good ideas, no ultimate conclusion.

feat: VS Code extension

We may want to have some sort of integration between the docs and the code editor in order to bring even better documentation into the workflow. This is a very hard task (unless someone shows up who has prior experience in creating VSCode extensions) but it may be pretty outstanding in the development experience.

As a starting point, we may want to bundle up the logic of #158 into the extension and display it when the user hovers the cursor over a filter query.

Add guide for hosting on deta.space

hello.
i want to deploy my telegram bot on deta.space hosting env. for this, i used webhooks. but my telegram bot doesnt work at all! can you please publish a guide on your website about deploying grammy.js telegram bot on deta.space? in this page you wrote deta in the list of hosting envs but i couldnt find any guide for deploying on deta.space in your guides.
thank you.

Installing API request transformer prevents bot stop

Problem

Installing an (even empty) API request transformer makes bot stuck on bot.stop() until the next update arrives.

Reproduction

import { Bot } from "grammy"

function log(text: string) {
  console.log(`${new Date().toISOString()}: ${text}`)
}

const bot = new Bot(process.env.BOT_TOKEN)

// This makes the bot stuck on stop()
bot.api.config.use((prev, method, payload) => prev(method, payload))

bot.command("start", async (ctx) => {
  log("/start handler")
  await ctx.reply(`Welcome here.`)
})

setTimeout(async () => {
  log("calling bot.stop()")
  await bot.stop().then(() => log("bot.stop() completed"))
}, 5000) // <--- 3000 or smaller doesn't cause the bug.

log("calling bot.start()")
bot.start().then(() => log("bot.start() completed"))

Result

2022-02-08T05:26:56.329Z: calling bot.start()
2022-02-08T05:27:01.330Z: calling bot.stop()
2022-02-08T05:27:01.614Z: bot.stop() completed
2022-02-08T05:27:13.227Z: /start handler <------ this is when I sent /start to the bot
2022-02-08T05:27:13.613Z: bot.start() completed

This repeats consistently.

Removing the request transformer fixes the problem:

2022-02-08T05:32:05.909Z: calling bot.start()
2022-02-08T05:32:10.909Z: calling bot.stop()
2022-02-08T05:32:10.915Z: bot.start() completed
2022-02-08T05:32:11.297Z: bot.stop() completed

Environment

[email protected]
node 16.13.0

I know this all sounds odd, but I was getting the problem consistently in production, then started to reduce code until I arrived at this minimum reproduction repo.

feat: Live Demo

Here are some cryptic notes to self, maybe they are good enough that you can make sense of them :)

1-click demos. I imagine having a number of short and complete bot codes on one page, and at the very top there's a table with three columns: name (includes link to anchor on the page) a RUN button to start it, and a DEPLOY button that puts the bot on Deno Deploy. Requires a text field, too. Token is obviously never sent, and this must be explained. Cached in localstore of the browser so it persists across visits. It is worth investigating if the token should be shown on other pages, too, in order to improve the copy-pastability of example bot code. Investigate integration between the example bots here, and those in the repo. Should unify the two current sections Live Browser Demo and Example Bots on the page, having two entries here does not make sense and it never did.

Tutorial problem

The code example from here https://grammy.dev/guide/getting-started.html
works for javascript but for typescript doesn't.

 import { Bot } from "grammy";

// Create an instance of the `Bot` class and pass your bot token to it.
const bot = new Bot(""); // <-- put your bot token between the ""

// You can now register listeners on your bot object `bot`.
// grammY will call the listeners when users send messages to your bot.

// Handle the /start command.
bot.command("start", (ctx) => ctx.reply("Welcome! Up and running."));
// Handle other messages.
bot.on("message", (ctx) => ctx.reply("Got another message!"));

// Now that you specified how to handle messages, you can start your bot.
// This will connect to the Telegram servers and wait for messages.

// Start the bot.
bot.start();

It gives the error : TypeError
shim_node_js_1.AbortController is not a constructor
for bot.start(); on https://codesandbox.io/s/inspiring-davinci-h7s2ll and gives a bunch of fs, os, https, path related issues on my local linux machine, even when I define them in the webconfig.

Could you maybe correct it or advise what is causing it?

Chinese translation tracking

This issue is tracking for translating Chinese documentation.

For someone who want to join to translate documentation to Chinese, you can take a look in this issue, find out the untranslated section.

This issue will be closed when the documentation is largely translated.

There are more detail about translation in CONTRIBUTING, please read it first!

Here are some of the formats we are following:

First and the most important:
DO NOT just copy the section to google translator or something like that and paste back the result

Second, obey this copywriting guidelines:
chinese-copywriting-guidelines

Third, some words we are not going to translate:

  • bot
  • update
  • keyboard / inline keyboard
  • webhook
  • payload
  • ...(feel free to add more, but make sense)

这是用来追踪中文文档翻译情况的 issue。

如果你想参与进来翻译中文文档,你可以在这个 issue 里查看我们还未翻译的部分。

这个 issue 将会在文档基本上被翻译完成后关闭。

请先在 CONTRIBUTING 查看更多关于贡献翻译的细节!

以下是我们正在遵守的一些规范:

第一,也是最重要的:
不要直接使用翻译软件翻译文档

第二,遵守下列排版规则:
中文文案排版指北

第三,这里有一些我们不打算翻译并且保留的词组:

  • bot
  • update
  • keyboard / inline keyboard
  • webhook
  • payload
  • ...(你可以添加更多我们不该翻译的词组)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.