# release-data

Common Release Data for various projects in a consumable format. Current format is:

* `filename` matches the corresponding filename in the products/ directory in endoflife.date repository.
* Top-level keys are version strings.
* Non-stable versions are not included (nightly, beta, RC etc)
* Values are release dates in YYYY-MM-DD format
* Wherever possible, dates are as per the release-timezone.

## Guiding Principles

* Scripts that update this information should be stand-alone and simple.
* Code should not rely on existing data, and built it from scratch. (In case upstream information changes, we should reflect this change)
* It should be easy to add a new script in any language.
* Run everything on GitHub Actions.

## Currently Updated

As of 2024-06-19, 244 of the 310 products tracked by endoflife.date have automatically tracked releases:

| Product                                       | Permalink                                                                                | Auto | Method(s)                      |
|:----------------------------------------------|:-------------------------------------------------------------------------------------------------------|:-----|:-------------------------------|
| Akeneo PIM                                    | [`/akeneo-pim`](https://endoflife.date/akeneo-pim)                                                     | ✔   | git, release_table             |
| Alibaba Dragonwell                            | [`/alibaba-dragonwell`](https://endoflife.date/alibaba-dragonwell)                                     | ✔   | git, release_table             |
| AlmaLinux OS                                  | [`/almalinux`](https://endoflife.date/almalinux)                                                       | ✔   | distrowatch                    |
| Alpine Linux                                  | [`/alpine`](https://endoflife.date/alpine)                                                             | ✔   | git, release_table             |
| Amazon CDK                                    | [`/amazon-cdk`](https://endoflife.date/amazon-cdk)                                                     | ✔   | git                            |
| Amazon Corretto                               | [`/amazon-corretto`](https://endoflife.date/amazon-corretto)                                           | ✔   | github_releases, release_table |
| Amazon Glue                                   | [`/amazon-glue`](https://endoflife.date/amazon-glue)                                                   | ❌    |                                |
| Amazon Linux                                  | [`/amazon-linux`](https://endoflife.date/amazon-linux)                                                 | ✔   | docker_hub                     |
| Amazon Neptune                                | [`/amazon-neptune`](https://endoflife.date/amazon-neptune)                                             | ✔   | custom, release_table          |
| Amazon RDS for MySQL                          | [`/amazon-rds-mysql`](https://endoflife.date/amazon-rds-mysql)                                         | ✔   | custom, release_table          |
| Amazon RDS for PostgreSQL                     | [`/amazon-rds-postgresql`](https://endoflife.date/amazon-rds-postgresql)                               | ✔   | custom, release_table          |
| Android OS                                    | [`/android`](https://endoflife.date/android)                                                           | ❌    |                                |
| Angular                                       | [`/angular`](https://endoflife.date/angular)                                                           | ✔   | git                            |
| AngularJS                                     | [`/angularjs`](https://endoflife.date/angularjs)                                                       | ✔   | npm                            |
| Ansible-core                                  | [`/ansible-core`](https://endoflife.date/ansible-core)                                                 | ✔   | git                            |
| Ansible                                       | [`/ansible`](https://endoflife.date/ansible)                                                           | ✔   | pypi                           |
| antiX Linux                                   | [`/antix`](https://endoflife.date/antix)                                                               | ✔   | distrowatch                    |
| Apache ActiveMQ                               | [`/apache-activemq`](https://endoflife.date/apache-activemq)                                           | ✔   | git                            |
| Apache Airflow                                | [`/apache-airflow`](https://endoflife.date/apache-airflow)                                             | ✔   | pypi, release_table            |
| Apache Camel                                  | [`/apache-camel`](https://endoflife.date/apache-camel)                                                 | ✔   | maven                          |
| Apache Cassandra                              | [`/apache-cassandra`](https://endoflife.date/apache-cassandra)                                         | ✔   | git                            |
| Apache Flink                                  | [`/apache-flink`](https://endoflife.date/apache-flink)                                                 | ✔   | git                            |
| Apache Groovy                                 | [`/apache-groovy`](https://endoflife.date/apache-groovy)                                               | ✔   | maven                          |
| Apache Hadoop                                 | [`/apache-hadoop`](https://endoflife.date/apache-hadoop)                                               | ✔   | git                            |
| Apache Hop                                    | [`/apache-hop`](https://endoflife.date/apache-hop)                                                     | ✔   | github_releases                |
| Apache HTTP Server                            | [`/apache`](https://endoflife.date/apache)                                                             | ✔   | custom                         |
| Apache Kafka                                  | [`/apache-kafka`](https://endoflife.date/apache-kafka)                                                 | ✔   | git, release_table             |
| Apache Maven                                  | [`/maven`](https://endoflife.date/maven)                                                               | ✔   | maven                          |
| Apache Spark                                  | [`/apache-spark`](https://endoflife.date/apache-spark)                                                 | ✔   | git                            |
| Apache Struts                                 | [`/apache-struts`](https://endoflife.date/apache-struts)                                               | ✔   | maven                          |
| API Platform                                  | [`/api-platform`](https://endoflife.date/api-platform)                                                 | ✔   | git                            |
| Apple Watch                                   | [`/apple-watch`](https://endoflife.date/apple-watch)                                                   | ❌    |                                |
| ArangoDB                                      | [`/arangodb`](https://endoflife.date/arangodb)                                                         | ✔   | git                            |
| Argo CD                                       | [`/argo-cd`](https://endoflife.date/argo-cd)                                                           | ✔   | git                            |
| Artifactory                                   | [`/artifactory`](https://endoflife.date/artifactory)                                                   | ✔   | custom                         |
| AWS Lambda                                    | [`/aws-lambda`](https://endoflife.date/aws-lambda)                                                     | ✔   | custom                         |
| Azul Zulu                                     | [`/azul-zulu`](https://endoflife.date/azul-zulu)                                                       | ❌    |                                |
| Azure DevOps Server                           | [`/azure-devops-server`](https://endoflife.date/azure-devops-server)                                   | ❌    |                                |
| Azure Kubernetes Service                      | [`/azure-kubernetes-service`](https://endoflife.date/azure-kubernetes-service)                         | ❌    |                                |
| Bazel                                         | [`/bazel`](https://endoflife.date/bazel)                                                               | ✔   | git, release_table             |
| Elastic Beats                                 | [`/beats`](https://endoflife.date/beats)                                                               | ✔   | git                            |
| Bellsoft Liberica JDK                         | [`/bellsoft-liberica`](https://endoflife.date/bellsoft-liberica)                                       | ✔   | github_releases                |
| Blender                                       | [`/blender`](https://endoflife.date/blender)                                                           | ✔   | git                            |
| Bootstrap                                     | [`/bootstrap`](https://endoflife.date/bootstrap)                                                       | ✔   | git                            |
| Bun                                           | [`/bun`](https://endoflife.date/bun)                                                                   | ✔   | git                            |
| CakePHP                                       | [`/cakephp`](https://endoflife.date/cakephp)                                                           | ✔   | git                            |
| CentOS Stream                                 | [`/centos-stream`](https://endoflife.date/centos-stream)                                               | ❌    |                                |
| CentOS                                        | [`/centos`](https://endoflife.date/centos)                                                             | ❌    |                                |
| Centreon                                      | [`/centreon`](https://endoflife.date/centreon)                                                         | ✔   | git, release_table             |
| cert-manager                                  | [`/cert-manager`](https://endoflife.date/cert-manager)                                                 | ✔   | git                            |
| CFEngine                                      | [`/cfengine`](https://endoflife.date/cfengine)                                                         | ✔   | git                            |
| Chef Infra Server                             | [`/chef-infra-server`](https://endoflife.date/chef-infra-server)                                       | ✔   | custom                         |
| Citrix Virtual Apps and Desktops              | [`/citrix-vad`](https://endoflife.date/citrix-vad)                                                     | ❌    |                                |
| CKEditor                                      | [`/ckeditor`](https://endoflife.date/ckeditor)                                                         | ❌    |                                |
| ClamAV                                        | [`/clamav`](https://endoflife.date/clamav)                                                             | ✔   | git                            |
| CockroachDB                                   | [`/cockroachdb`](https://endoflife.date/cockroachdb)                                                   | ✔   | git, release_table             |
| Adobe ColdFusion                              | [`/coldfusion`](https://endoflife.date/coldfusion)                                                     | ✔   | custom                         |
| Composer                                      | [`/composer`](https://endoflife.date/composer)                                                         | ✔   | git                            |
| Confluence                                    | [`/confluence`](https://endoflife.date/confluence)                                                     | ✔   | atlassian_eol, custom          |
| Hashicorp Consul                              | [`/consul`](https://endoflife.date/consul)                                                             | ✔   | git                            |
| containerd                                    | [`/containerd`](https://endoflife.date/containerd)                                                     | ✔   | git, release_table             |
| Contao                                        | [`/contao`](https://endoflife.date/contao)                                                             | ✔   | git                            |
| Google Container-Optimized OS (COS)           | [`/cos`](https://endoflife.date/cos)                                                                   | ✔   | custom                         |
| Couchbase Server                              | [`/couchbase-server`](https://endoflife.date/couchbase-server)                                         | ✔   | custom, release_table          |
| Craft CMS                                     | [`/craft-cms`](https://endoflife.date/craft-cms)                                                       | ✔   | git, release_table             |
| dbt Core                                      | [`/dbt-core`](https://endoflife.date/dbt-core)                                                         | ✔   | git                            |
| Debian                                        | [`/debian`](https://endoflife.date/debian)                                                             | ✔   | custom, release_table          |
| Dependency-Track                              | [`/dependency-track`](https://endoflife.date/dependency-track)                                         | ✔   | git                            |
| Devuan                                        | [`/devuan`](https://endoflife.date/devuan)                                                             | ✔   | distrowatch                    |
| Django                                        | [`/django`](https://endoflife.date/django)                                                             | ✔   | git, release_table             |
| Docker Engine                                 | [`/docker-engine`](https://endoflife.date/docker-engine)                                               | ✔   | git                            |
| Microsoft .NET                                | [`/dotnet`](https://endoflife.date/dotnet)                                                             | ✔   | git, release_table             |
| Microsoft .NET Framework                      | [`/dotnetfx`](https://endoflife.date/dotnetfx)                                                         | ✔   | release_table                  |
| Drupal                                        | [`/drupal`](https://endoflife.date/drupal)                                                             | ✔   | git                            |
| Drush                                         | [`/drush`](https://endoflife.date/drush)                                                               | ✔   | git, release_table             |
| Eclipse Jetty                                 | [`/eclipse-jetty`](https://endoflife.date/eclipse-jetty)                                               | ✔   | maven                          |
| Eclipse Temurin                               | [`/eclipse-temurin`](https://endoflife.date/eclipse-temurin)                                           | ✔   | github_releases, release_table |
| Amazon EKS                                    | [`/amazon-eks`](https://endoflife.date/amazon-eks)                                                     | ✔   | custom, release_table          |
| Elasticsearch                                 | [`/elasticsearch`](https://endoflife.date/elasticsearch)                                               | ✔   | git                            |
| Electron                                      | [`/electron`](https://endoflife.date/electron)                                                         | ✔   | npm, release_table             |
| Elixir                                        | [`/elixir`](https://endoflife.date/elixir)                                                             | ✔   | git                            |
| Ember                                         | [`/emberjs`](https://endoflife.date/emberjs)                                                           | ✔   | npm, release_table             |
| Envoy                                         | [`/envoy`](https://endoflife.date/envoy)                                                               | ✔   | git, release_table             |
| Erlang                                        | [`/erlang`](https://endoflife.date/erlang)                                                             | ✔   | git                            |
| etcd                                          | [`/etcd`](https://endoflife.date/etcd)                                                                 | ✔   | git                            |
| EuroLinux                                     | [`/eurolinux`](https://endoflife.date/eurolinux)                                                       | ✔   | distrowatch                    |
| Exim                                          | [`/exim`](https://endoflife.date/exim)                                                                 | ✔   | git                            |
| Fairphone                                     | [`/fairphone`](https://endoflife.date/fairphone)                                                       | ❌    |                                |
| Fedora Linux                                  | [`/fedora`](https://endoflife.date/fedora)                                                             | ✔   | distrowatch                    |
| FFmpeg                                        | [`/ffmpeg`](https://endoflife.date/ffmpeg)                                                             | ✔   | git                            |
| FileMaker Platform                            | [`/filemaker`](https://endoflife.date/filemaker)                                                       | ❌    |                                |
| Firefox                                       | [`/firefox`](https://endoflife.date/firefox)                                                           | ✔   | custom                         |
| Fluent Bit                                    | [`/fluent-bit`](https://endoflife.date/fluent-bit)                                                     | ✔   | git                            |
| Flux                                          | [`/flux`](https://endoflife.date/flux)                                                                 | ✔   | git                            |
| FortiOS                                       | [`/fortios`](https://endoflife.date/fortios)                                                           | ❌    |                                |
| FreeBSD                                       | [`/freebsd`](https://endoflife.date/freebsd)                                                           | ❌    |                                |
| Gerrit                                        | [`/gerrit`](https://endoflife.date/gerrit)                                                             | ✔   | git                            |
| GitLab                                        | [`/gitlab`](https://endoflife.date/gitlab)                                                             | ✔   | git                            |
| Google Kubernetes Engine                      | [`/google-kubernetes-engine`](https://endoflife.date/google-kubernetes-engine)                         | ✔   | custom                         |
| Go                                            | [`/go`](https://endoflife.date/go)                                                                     | ✔   | git                            |
| GoAccess                                      | [`/goaccess`](https://endoflife.date/goaccess)                                                         | ✔   | git                            |
| Godot                                         | [`/godot`](https://endoflife.date/godot)                                                               | ✔   | git                            |
| Google Nexus                                  | [`/google-nexus`](https://endoflife.date/google-nexus)                                                 | ❌    |                                |
| Gorilla Toolkit                               | [`/gorilla`](https://endoflife.date/gorilla)                                                           | ❌    |                                |
| GraalVM                                       | [`/graalvm`](https://endoflife.date/graalvm)                                                           | ✔   | custom                         |
| Gradle                                        | [`/gradle`](https://endoflife.date/gradle)                                                             | ✔   | git                            |
| Grafana                                       | [`/grafana`](https://endoflife.date/grafana)                                                           | ✔   | git                            |
| Grails Framework                              | [`/grails`](https://endoflife.date/grails)                                                             | ✔   | git                            |
| Graylog                                       | [`/graylog`](https://endoflife.date/graylog)                                                           | ✔   | git                            |
| GStreamer                                     | [`/gstreamer`](https://endoflife.date/gstreamer)                                                       | ✔   | git                            |
| HAProxy                                       | [`/haproxy`](https://endoflife.date/haproxy)                                                           | ✔   | custom                         |
| Hashicorp Vault                               | [`/hashicorp-vault`](https://endoflife.date/hashicorp-vault)                                           | ✔   | git                            |
| Apache HBase                                  | [`/hbase`](https://endoflife.date/hbase)                                                               | ✔   | git                            |
| IBM AIX                                       | [`/ibm-aix`](https://endoflife.date/ibm-aix)                                                           | ✔   | custom, release_table          |
| IBM iSeries                                   | [`/ibm-i`](https://endoflife.date/ibm-i)                                                               | ✔   | release_table                  |
| IBM Semeru Runtime                            | [`/ibm-semeru-runtime`](https://endoflife.date/ibm-semeru-runtime)                                     | ✔   | github_releases, release_table |
| Icinga Web                                    | [`/icinga-web`](https://endoflife.date/icinga-web)                                                     | ✔   | git                            |
| Intel Processors                              | [`/intel-processors`](https://endoflife.date/intel-processors)                                         | ❌    |                                |
| Internet Explorer                             | [`/internet-explorer`](https://endoflife.date/internet-explorer)                                       | ❌    |                                |
| Ionic Framework                               | [`/ionic`](https://endoflife.date/ionic)                                                               | ✔   | git, release_table             |
| Apple iOS                                     | [`/ios`](https://endoflife.date/ios)                                                                   | ✔   | apple                          |
| Apple iPad                                    | [`/ipad`](https://endoflife.date/ipad)                                                                 | ❌    |                                |
| Apple iPadOS                                  | [`/ipados`](https://endoflife.date/ipados)                                                             | ✔   | apple                          |
| Apple iPhone                                  | [`/iphone`](https://endoflife.date/iphone)                                                             | ❌    |                                |
| ISC DHCP                                      | [`/isc-dhcp`](https://endoflife.date/isc-dhcp)                                                         | ❌    |                                |
| Istio                                         | [`/istio`](https://endoflife.date/istio)                                                               | ✔   | git, release_table             |
| Jekyll                                        | [`/jekyll`](https://endoflife.date/jekyll)                                                             | ✔   | git                            |
| Jenkins                                       | [`/jenkins`](https://endoflife.date/jenkins)                                                           | ✔   | git                            |
| JHipster                                      | [`/jhipster`](https://endoflife.date/jhipster)                                                         | ✔   | npm                            |
| Jira Software                                 | [`/jira-software`](https://endoflife.date/jira-software)                                               | ✔   | atlassian_eol, custom          |
| Joomla!                                       | [`/joomla`](https://endoflife.date/joomla)                                                             | ✔   | git                            |
| jQuery                                        | [`/jquery`](https://endoflife.date/jquery)                                                             | ✔   | git                            |
| JReleaser                                     | [`/jreleaser`](https://endoflife.date/jreleaser)                                                       | ✔   | maven                          |
| KDE Plasma                                    | [`/kde-plasma`](https://endoflife.date/kde-plasma)                                                     | ✔   | git                            |
| KEDA                                          | [`/keda`](https://endoflife.date/keda)                                                                 | ✔   | git                            |
| Keycloak                                      | [`/keycloak`](https://endoflife.date/keycloak)                                                         | ✔   | github_releases                |
| Kibana                                        | [`/kibana`](https://endoflife.date/kibana)                                                             | ✔   | git                            |
| Amazon Kindle                                 | [`/kindle`](https://endoflife.date/kindle)                                                             | ❌    |                                |
| Kirby                                         | [`/kirby`](https://endoflife.date/kirby)                                                               | ✔   | git                            |
| Kong Gateway                                  | [`/kong-gateway`](https://endoflife.date/kong-gateway)                                                 | ✔   | git                            |
| Kotlin                                        | [`/kotlin`](https://endoflife.date/kotlin)                                                             | ✔   | npm                            |
| Kubernetes CSI Node Driver Registrar          | [`/kubernetes-csi-node-driver-registrar`](https://endoflife.date/kubernetes-csi-node-driver-registrar) | ✔   | git                            |
| Kubernetes                                    | [`/kubernetes`](https://endoflife.date/kubernetes)                                                     | ✔   | git                            |
| Laravel                                       | [`/laravel`](https://endoflife.date/laravel)                                                           | ✔   | git, release_table             |
| LibreOffice                                   | [`/libreoffice`](https://endoflife.date/libreoffice)                                                   | ❌    |                                |
| LineageOS                                     | [`/lineageos`](https://endoflife.date/lineageos)                                                       | ❌    |                                |
| Linux Kernel                                  | [`/linux`](https://endoflife.date/linux)                                                               | ✔   | cgit                           |
| Linux Mint                                    | [`/linuxmint`](https://endoflife.date/linuxmint)                                                       | ✔   | release_table                  |
| Apache Log4j                                  | [`/log4j`](https://endoflife.date/log4j)                                                               | ✔   | maven                          |
| Logstash                                      | [`/logstash`](https://endoflife.date/logstash)                                                         | ✔   | git                            |
| Looker                                        | [`/looker`](https://endoflife.date/looker)                                                             | ✔   | custom                         |
| Lua                                           | [`/lua`](https://endoflife.date/lua)                                                                   | ❌    |                                |
| Apple macOS                                   | [`/macos`](https://endoflife.date/macos)                                                               | ✔   | apple                          |
| Mageia                                        | [`/mageia`](https://endoflife.date/mageia)                                                             | ✔   | distrowatch                    |
| Magento                                       | [`/magento`](https://endoflife.date/magento)                                                           | ✔   | git                            |
| MariaDB                                       | [`/mariadb`](https://endoflife.date/mariadb)                                                           | ✔   | git                            |
| Mastodon                                      | [`/mastodon`](https://endoflife.date/mastodon)                                                         | ✔   | git                            |
| Matomo                                        | [`/matomo`](https://endoflife.date/matomo)                                                             | ✔   | git                            |
| Mattermost                                    | [`/mattermost`](https://endoflife.date/mattermost)                                                     | ✔   | git, release_table             |
| MediaWiki                                     | [`/mediawiki`](https://endoflife.date/mediawiki)                                                       | ✔   | git, release_table             |
| Meilisearch                                   | [`/meilisearch`](https://endoflife.date/meilisearch)                                                   | ✔   | git                            |
| Memcached                                     | [`/memcached`](https://endoflife.date/memcached)                                                       | ✔   | git                            |
| Micronaut Framework                           | [`/micronaut`](https://endoflife.date/micronaut)                                                       | ✔   | git                            |
| Microsoft Build of OpenJDK                    | [`/microsoft-build-of-openjdk`](https://endoflife.date/microsoft-build-of-openjdk)                     | ✔   | git, release_table             |
| MongoDB Server                                | [`/mongodb`](https://endoflife.date/mongodb)                                                           | ✔   | git, release_table             |
| Moodle                                        | [`/moodle`](https://endoflife.date/moodle)                                                             | ✔   | git, release_table             |
| Motorola Mobility                             | [`/motorola-mobility`](https://endoflife.date/motorola-mobility)                                       | ❌    |                                |
| Microsoft Exchange                            | [`/msexchange`](https://endoflife.date/msexchange)                                                     | ❌    |                                |
| Microsoft SharePoint                          | [`/sharepoint`](https://endoflife.date/sharepoint)                                                     | ❌    |                                |
| Microsoft SQL Server                          | [`/mssqlserver`](https://endoflife.date/mssqlserver)                                                   | ❌    |                                |
| Mule Runtime                                  | [`/mulesoft-runtime`](https://endoflife.date/mulesoft-runtime)                                         | ❌    |                                |
| MX Linux                                      | [`/mxlinux`](https://endoflife.date/mxlinux)                                                           | ✔   | distrowatch                    |
| MySQL                                         | [`/mysql`](https://endoflife.date/mysql)                                                               | ✔   | git                            |
| Neo4j                                         | [`/neo4j`](https://endoflife.date/neo4j)                                                               | ✔   | git                            |
| Neos                                          | [`/neos`](https://endoflife.date/neos)                                                                 | ✔   | git                            |
| NetBSD                                        | [`/netbsd`](https://endoflife.date/netbsd)                                                             | ❌    |                                |
| Nextcloud                                     | [`/nextcloud`](https://endoflife.date/nextcloud)                                                       | ✔   | git, release_table             |
| Next.js                                       | [`/nextjs`](https://endoflife.date/nextjs)                                                             | ✔   | npm                            |
| Nexus Repository OSS                          | [`/nexus`](https://endoflife.date/nexus)                                                               | ✔   | git                            |
| nginx                                         | [`/nginx`](https://endoflife.date/nginx)                                                               | ✔   | git                            |
| nix                                           | [`/nix`](https://endoflife.date/nix)                                                                   | ✔   | git                            |
| NixOS                                         | [`/nixos`](https://endoflife.date/nixos)                                                               | ❌    |                                |
| Kubernetes Node Feature Discovery             | [`/kubernetes-node-feature-discovery`](https://endoflife.date/kubernetes-node-feature-discovery)       | ✔   | git                            |
| Node.js                                       | [`/nodejs`](https://endoflife.date/nodejs)                                                             | ✔   | git                            |
| Nokia Mobile                                  | [`/nokia`](https://endoflife.date/nokia)                                                               | ❌    |                                |
| Nomad                                         | [`/nomad`](https://endoflife.date/nomad)                                                               | ✔   | git                            |
| NumPy                                         | [`/numpy`](https://endoflife.date/numpy)                                                               | ✔   | pypi                           |
| Nutanix AOS                                   | [`/nutanix-aos`](https://endoflife.date/nutanix-aos)                                                   | ✔   | nutanix                        |
| Nutanix Files                                 | [`/nutanix-files`](https://endoflife.date/nutanix-files)                                               | ✔   | nutanix                        |
| Nutanix Prism Central                         | [`/nutanix-prism`](https://endoflife.date/nutanix-prism)                                               | ✔   | nutanix                        |
| Nuxt                                          | [`/nuxt`](https://endoflife.date/nuxt)                                                                 | ✔   | npm, release_table             |
| NVIDIA Driver                                 | [`/nvidia`](https://endoflife.date/nvidia)                                                             | ❌    |                                |
| NVIDIA GPUs                                   | [`/nvidia-gpu`](https://endoflife.date/nvidia-gpu)                                                     | ❌    |                                |
| Microsoft Office                              | [`/office`](https://endoflife.date/office)                                                             | ❌    |                                |
| OpenBSD                                       | [`/openbsd`](https://endoflife.date/openbsd)                                                           | ❌    |                                |
| OpenJDK builds from Oracle                    | [`/openjdk-builds-from-oracle`](https://endoflife.date/openjdk-builds-from-oracle)                     | ❌    |                                |
| OpenSearch                                    | [`/opensearch`](https://endoflife.date/opensearch)                                                     | ✔   | git, release_table             |
| OpenSSL                                       | [`/openssl`](https://endoflife.date/openssl)                                                           | ✔   | git                            |
| openSUSE                                      | [`/opensuse`](https://endoflife.date/opensuse)                                                         | ❌    |                                |
| OpenTofu                                      | [`/opentofu`](https://endoflife.date/opentofu)                                                         | ✔   | git                            |
| OpenWrt                                       | [`/openwrt`](https://endoflife.date/openwrt)                                                           | ✔   | git                            |
| OpenZFS                                       | [`/openzfs`](https://endoflife.date/openzfs)                                                           | ✔   | git                            |
| OPNsense                                      | [`/opnsense`](https://endoflife.date/opnsense)                                                         | ✔   | git                            |
| Oracle APEX                                   | [`/oracle-apex`](https://endoflife.date/oracle-apex)                                                   | ✔   | release_table                  |
| Oracle Database                               | [`/oracle-database`](https://endoflife.date/oracle-database)                                           | ✔   | release_table                  |
| Oracle JDK                                    | [`/oracle-jdk`](https://endoflife.date/oracle-jdk)                                                     | ✔   | custom, release_table          |
| Oracle Linux                                  | [`/oracle-linux`](https://endoflife.date/oracle-linux)                                                 | ✔   | distrowatch                    |
| Oracle Solaris                                | [`/oracle-solaris`](https://endoflife.date/oracle-solaris)                                             | ❌    |                                |
| oVirt                                         | [`/ovirt`](https://endoflife.date/ovirt)                                                               | ✔   | git                            |
| Palo Alto Networks Cortex XDR agent           | [`/cortex-xdr`](https://endoflife.date/cortex-xdr)                                                     | ✔   | release_table                  |
| Palo Alto Networks GlobalProtect App          | [`/pangp`](https://endoflife.date/pangp)                                                               | ✔   | release_table                  |
| Palo Alto Networks PAN-OS                     | [`/panos`](https://endoflife.date/panos)                                                               | ✔   | release_table                  |
| PCI-DSS                                       | [`/pci-dss`](https://endoflife.date/pci-dss)                                                           | ❌    |                                |
| Perl                                          | [`/perl`](https://endoflife.date/perl)                                                                 | ✔   | git                            |
| PHP                                           | [`/php`](https://endoflife.date/php)                                                                   | ✔   | custom                         |
| phpBB                                         | [`/phpbb`](https://endoflife.date/phpbb)                                                               | ✔   | git                            |
| phpMyAdmin                                    | [`/phpmyadmin`](https://endoflife.date/phpmyadmin)                                                     | ✔   | git                            |
| Google Pixel                                  | [`/pixel`](https://endoflife.date/pixel)                                                               | ❌    |                                |
| Plesk                                         | [`/plesk`](https://endoflife.date/plesk)                                                               | ✔   | custom                         |
| Pop!_OS                                       | [`/pop-os`](https://endoflife.date/pop-os)                                                             | ❌    |                                |
| Postfix                                       | [`/postfix`](https://endoflife.date/postfix)                                                           | ✔   | git                            |
| PostgreSQL                                    | [`/postgresql`](https://endoflife.date/postgresql)                                                     | ✔   | git, release_table             |
| postmarketOS                                  | [`/postmarketos`](https://endoflife.date/postmarketos)                                                 | ✔   | distrowatch                    |
| Microsoft PowerShell                          | [`/powershell`](https://endoflife.date/powershell)                                                     | ✔   | git, release_table             |
| Prometheus                                    | [`/prometheus`](https://endoflife.date/prometheus)                                                     | ✔   | git, release_table             |
| Protractor                                    | [`/protractor`](https://endoflife.date/protractor)                                                     | ✔   | npm                            |
| Proxmox VE                                    | [`/proxmox-ve`](https://endoflife.date/proxmox-ve)                                                     | ✔   | distrowatch, release_table     |
| Puppet                                        | [`/puppet`](https://endoflife.date/puppet)                                                             | ✔   | git                            |
| Python                                        | [`/python`](https://endoflife.date/python)                                                             | ✔   | git, release_table             |
| Qt                                            | [`/qt`](https://endoflife.date/qt)                                                                     | ✔   | git                            |
| Quarkus                                       | [`/quarkus-framework`](https://endoflife.date/quarkus-framework)                                       | ✔   | github_releases                |
| Quasar                                        | [`/quasar`](https://endoflife.date/quasar)                                                             | ✔   | npm, release_table             |
| RabbitMQ                                      | [`/rabbitmq`](https://endoflife.date/rabbitmq)                                                         | ✔   | git                            |
| Rancher                                       | [`/rancher`](https://endoflife.date/rancher)                                                           | ✔   | git                            |
| Raspberry Pi                                  | [`/raspberry-pi`](https://endoflife.date/raspberry-pi)                                                 | ❌    |                                |
| React                                         | [`/react`](https://endoflife.date/react)                                                               | ✔   | npm                            |
| Netgear ReadyNAS                              | [`/readynas`](https://endoflife.date/readynas)                                                         | ❌    |                                |
| Red Hat JBoss Enterprise Application Platform | [`/redhat-jboss-eap`](https://endoflife.date/redhat-jboss-eap)                                         | ❌    |                                |
| Red Hat OpenShift                             | [`/red-hat-openshift`](https://endoflife.date/red-hat-openshift)                                       | ✔   | custom                         |
| Red Hat build of OpenJDK                      | [`/redhat-build-of-openjdk`](https://endoflife.date/redhat-build-of-openjdk)                           | ❌    |                                |
| Red Hat Satellite                             | [`/redhat-satellite`](https://endoflife.date/redhat-satellite)                                         | ✔   | custom                         |
| Red Hat Enterprise Linux                      | [`/rhel`](https://endoflife.date/rhel)                                                                 | ❌    |                                |
| Redis                                         | [`/redis`](https://endoflife.date/redis)                                                               | ✔   | git                            |
| Redmine                                       | [`/redmine`](https://endoflife.date/redmine)                                                           | ✔   | git                            |
| Robo                                          | [`/robo`](https://endoflife.date/robo)                                                                 | ✔   | git, release_table             |
| Rocket.Chat                                   | [`/rocket-chat`](https://endoflife.date/rocket-chat)                                                   | ✔   | git, release_table             |
| Rocky Linux                                   | [`/rocky-linux`](https://endoflife.date/rocky-linux)                                                   | ✔   | custom, release_table          |
| ROS 2                                         | [`/ros-2`](https://endoflife.date/ros-2)                                                               | ❌    |                                |
| ROS                                           | [`/ros`](https://endoflife.date/ros)                                                                   | ❌    |                                |
| Roundcube Webmail                             | [`/roundcube`](https://endoflife.date/roundcube)                                                       | ✔   | git                            |
| Ruby on Rails                                 | [`/rails`](https://endoflife.date/rails)                                                               | ✔   | git                            |
| Ruby                                          | [`/ruby`](https://endoflife.date/ruby)                                                                 | ✔   | git                            |
| Rust                                          | [`/rust`](https://endoflife.date/rust)                                                                 | ✔   | git                            |
| Salt                                          | [`/salt`](https://endoflife.date/salt)                                                                 | ✔   | git                            |
| Samsung Mobile                                | [`/samsung-mobile`](https://endoflife.date/samsung-mobile)                                             | ❌    |                                |
| SapMachine                                    | [`/sapmachine`](https://endoflife.date/sapmachine)                                                     | ✔   | github_releases                |
| Scala                                         | [`/scala`](https://endoflife.date/scala)                                                               | ✔   | git                            |
| Shopware                                      | [`/shopware`](https://endoflife.date/shopware)                                                         | ✔   | git                            |
| Silverstripe CMS                              | [`/silverstripe`](https://endoflife.date/silverstripe)                                                 | ✔   | git, release_table             |
| Slackware Linux                               | [`/slackware`](https://endoflife.date/slackware)                                                       | ✔   | distrowatch                    |
| SUSE Linux Enterprise Server                  | [`/sles`](https://endoflife.date/sles)                                                                 | ❌    |                                |
| Apache Solr                                   | [`/solr`](https://endoflife.date/solr)                                                                 | ✔   | git                            |
| SonarQube                                     | [`/sonar`](https://endoflife.date/sonar)                                                               | ✔   | git                            |
| Sourcegraph                                   | [`/sourcegraph`](https://endoflife.date/sourcegraph)                                                   | ✔   | git                            |
| Splunk                                        | [`/splunk`](https://endoflife.date/splunk)                                                             | ✔   | custom                         |
| Spring Boot                                   | [`/spring-boot`](https://endoflife.date/spring-boot)                                                   | ✔   | git, release_table             |
| Spring Framework                              | [`/spring-framework`](https://endoflife.date/spring-framework)                                         | ✔   | git, release_table             |
| SQLite                                        | [`/sqlite`](https://endoflife.date/sqlite)                                                             | ✔   | git                            |
| Squid                                         | [`/squid`](https://endoflife.date/squid)                                                               | ✔   | git                            |
| SteamOS                                       | [`/steamos`](https://endoflife.date/steamos)                                                           | ❌    |                                |
| Microsoft Surface                             | [`/surface`](https://endoflife.date/surface)                                                           | ❌    |                                |
| Symfony                                       | [`/symfony`](https://endoflife.date/symfony)                                                           | ✔   | git                            |
| Tails                                         | [`/tails`](https://endoflife.date/tails)                                                               | ✔   | distrowatch                    |
| Tarantool                                     | [`/tarantool`](https://endoflife.date/tarantool)                                                       | ✔   | git                            |
| Telegraf                                      | [`/telegraf`](https://endoflife.date/telegraf)                                                         | ✔   | git                            |
| Hashicorp Terraform                           | [`/terraform`](https://endoflife.date/terraform)                                                       | ✔   | git                            |
| Apache Tomcat                                 | [`/tomcat`](https://endoflife.date/tomcat)                                                             | ✔   | maven                          |
| Traefik                                       | [`/traefik`](https://endoflife.date/traefik)                                                           | ✔   | git                            |
| Twig                                          | [`/twig`](https://endoflife.date/twig)                                                                 | ✔   | git                            |
| TYPO3                                         | [`/typo3`](https://endoflife.date/typo3)                                                               | ✔   | custom                         |
| Ubuntu                                        | [`/ubuntu`](https://endoflife.date/ubuntu)                                                             | ✔   | distrowatch                    |
| Umbraco CMS                                   | [`/umbraco`](https://endoflife.date/umbraco)                                                           | ✔   | git, release_table             |
| Unity                                         | [`/unity`](https://endoflife.date/unity)                                                               | ✔   | custom                         |
| UnrealIRCd                                    | [`/unrealircd`](https://endoflife.date/unrealircd)                                                     | ✔   | custom, release_table          |
| Varnish                                       | [`/varnish`](https://endoflife.date/varnish)                                                           | ✔   | git, release_table             |
| Veeam Backup & Replication                    | [`/veeam-backup-and-replication`](https://endoflife.date/veeam-backup-and-replication)                 | ✔   | custom                         |
| Visual COBOL                                  | [`/visual-cobol`](https://endoflife.date/visual-cobol)                                                 | ❌    |                                |
| Microsoft Visual Studio                       | [`/visual-studio`](https://endoflife.date/visual-studio)                                               | ✔   | custom                         |
| VMware Cloud Foundation                       | [`/vmware-cloud-foundation`](https://endoflife.date/vmware-cloud-foundation)                           | ❌    |                                |
| VMware ESXi                                   | [`/esxi`](https://endoflife.date/esxi)                                                                 | ❌    |                                |
| VMware Harbor Registry                        | [`/vmware-harbor-registry`](https://endoflife.date/vmware-harbor-registry)                             | ❌    |                                |
| VMware Horizon                                | [`/horizon`](https://endoflife.date/horizon)                                                           | ❌    |                                |
| VMware Photon                                 | [`/photon`](https://endoflife.date/photon)                                                             | ❌    |                                |
| VMware Site Recovery Manager                  | [`/vmware-srm`](https://endoflife.date/vmware-srm)                                                     | ❌    |                                |
| VMware vCenter Server                         | [`/vcenter`](https://endoflife.date/vcenter)                                                           | ❌    |                                |
| Vue                                           | [`/vue`](https://endoflife.date/vue)                                                                   | ✔   | npm                            |
| Vuetify                                       | [`/vuetify`](https://endoflife.date/vuetify)                                                           | ✔   | npm, release_table             |
| Wagtail                                       | [`/wagtail`](https://endoflife.date/wagtail)                                                           | ✔   | pypi, release_table            |
| Apple watchOS                                 | [`/watchos`](https://endoflife.date/watchos)                                                           | ✔   | apple                          |
| WeeChat                                       | [`/weechat`](https://endoflife.date/weechat)                                                           | ✔   | git                            |
| Microsoft Windows                             | [`/windows`](https://endoflife.date/windows)                                                           | ❌    |                                |
| Microsoft Windows Embedded                    | [`/windows-embedded`](https://endoflife.date/windows-embedded)                                         | ❌    |                                |
| Microsoft Windows Server                      | [`/windows-server`](https://endoflife.date/windows-server)                                             | ❌    |                                |
| WordPress                                     | [`/wordpress`](https://endoflife.date/wordpress)                                                       | ✔   | git                            |
| XCP-ng                                        | [`/xcp-ng`](https://endoflife.date/xcp-ng)                                                             | ✔   | git, release_table             |
| Yarn                                          | [`/yarn`](https://endoflife.date/yarn)                                                                 | ✔   | npm                            |
| Yocto Project                                 | [`/yocto`](https://endoflife.date/yocto)                                                               | ✔   | git                            |
| Zabbix                                        | [`/zabbix`](https://endoflife.date/zabbix)                                                             | ✔   | git, release_table             |
| Zerto                                         | [`/zerto`](https://endoflife.date/zerto)                                                               | ❌    |                                |
| Apache ZooKeeper                              | [`/zookeeper`](https://endoflife.date/zookeeper)                                                       | ✔   | maven                          |

This table has been generated by [report.py](/report.py).


# 鳩bot - 愛嬌のあるBot

![badge](https://github.com/dev-hato/hato-bot/workflows/pr-test/badge.svg)

鳩botでは主に次のことができます。

- 雨雲情報 ... `amesh [text]` で指定した地名・住所[text]の雨雲情報を画像で表示します。
- 最新の地震情報 ... `eq` で最新の地震情報を3件表示します。
- パワーワードの登録、表示 ... `text` で登録したパワーワードを表示します。
- 突然の死吹き出しで整形 ... `>< [text]` で文字列[text]を「突然の死」吹き出しで整形します。

![hato](./doc/img/hato-bot-run-1.png)

## 鳩botを動かす

鳩botは自分のPC上で動かすことができます。

### 必要なもの

鳩botを使うには以下が必要です。

- Dockerが動作するPC
- Slack API Token ([Slack API Tokenの取得手順](./doc/01_Get_Slack_API_Token.md)) (Slackで動かす場合のみ)
- Discord Bot Token ([Discord Bot Tokenの取得手順](./doc/03_Get_Discord_Bot_Token.md)) (Discordで動かす場合のみ)
- Misskeyアクセストークン ([Misskeyアクセストークンの取得手順](./doc/04_Get_Misskey_Access_Token.md)) (Misskeyで動かす場合のみ)
- Yahoo API Token ([Yahoo API Tokenの取得手順](./doc/05_Get_Yahoo_API_Token.md))
- OpenAI API Key ([OpenAI API Keyの取得手順](./doc/06_Get_OpenAI_API_Token.md))

### fly.io上で動かす

1. 事前にSlack API TokenとYahoo API Tokenを取得します。
2. [Launch a demo app · Fly Docs](https://fly.io/docs/getting-started/launch-demo/#1-install-flyctl)に記載されている手順で `fly` コマンドをインストールします。
3. [Launch a demo app · Fly Docs](https://fly.io/docs/getting-started/launch-demo/#2-sign-up-or-sign-in)に記載されている手順でfly.ioへの登録・ログインを行います。
4. [Dashboard · Fly](https://fly.io/dashboard/)内の `Billing` からクレジットカードを登録します (無料枠で使用する場合も必須)。
5. [`yq` コマンドのGitHub](https://github.com/mikefarah/yq/?tab=readme-ov-file#install)に記載されている手順で `yq` コマンドをインストールします。
6. このリポジトリをcloneします。

   安定版を使う場合は `-b master` を指定します。最新の開発版を使う場合は指定不要です。

    ```sh
    git clone -b master https://github.com/dev-hato/hato-bot.git
    cd hato-bot
    ```
7. `.env` ファイルを作成し  Slack API Token、PostgreSQLの認証情報、Yahoo API Tokenなどを記述します。

   `.env.example` をコピーして使うとよいでしょう。

   MODEに `discord` を指定すると、DiscordのBotとして動作します。

   MODEに `misskey` を指定すると、自分のいるサーバーからのメンションに限って反応するMisskeyのBotとして動作します。
8. `fly.toml` ファイルを作成します。

   `fly.template.toml` をコピーし、TODOコメントに従って編集すると良いでしょう。
9. 次のコマンドを実行してfly.ioへのデプロイを行います。
    ```sh
    ./flyio_deploy.sh
    ```

### 自分のPC上で動かす

自分のPCで動かすこともできます。

1. 事前にSlack API TokenとYahoo API Tokenを取得します。
2. hadolintをインストールします。

3. このリポジトリをcloneします。

    安定版を使う場合は `-b master` を指定します。最新の開発版を使う場合は指定不要です。

    ```sh
    git clone -b master https://github.com/dev-hato/hato-bot.git
    cd hato-bot
    ```

    または [Release](https://github.com/dev-hato/hato-bot/releases/latest) から最新の安定版をダウンロードして解凍します。

4. 必要に応じてパッケージをインストールします。

    ```sh
    pipenv install
    npm install
    ```

5. `.env` ファイルを作成し  Slack API Token、PostgreSQLの認証情報、Yahoo API Tokenなどを記述します。

    `.env.example` をコピーして使うとよいでしょう

    MODEに `discord` を指定すると、DiscordのBotとして動作します。

    MODEに `misskey` を指定すると、自分のいるサーバーからのメンションに限って反応するMisskeyのBotとして動作します。

6. docker composeで鳩botとPostgreSQLを起動します。

    ```sh
    export TAG_NAME=$(git symbolic-ref --short HEAD | sed -e "s:/:-:g")
    docker compose up -d --wait
    ```

    開発時は代わりに次のコマンドを実行します。

    ```sh
    export TAG_NAME=$(git symbolic-ref --short HEAD | sed -e "s:/:-:g")
    docker compose -f docker-compose.yml -f dev.base.docker-compose.yml -f dev.docker-compose.yml build
    docker compose -f docker-compose.yml -f dev.base.docker-compose.yml -f dev.docker-compose.yml watch
    ```

7. コードの変更はdocker composeの再起動で適用できます。

    ```sh
    export TAG_NAME=$(git symbolic-ref --short HEAD | sed -e "s:/:-:g")
    docker compose restart
    ```

   開発時は自動的にDockerイメージの再ビルドが行われ反映されます。

#### lintをかける方法

```sh
npm run lint
```

#### コマンドの実行方法

- 鳩botに対しコマンドを実行したいときは `post_command.py` を使うと便利です。

    ```sh
    pipenv run python post_command.py --channel {投稿先のチャンネルのchannel id} \
                                      --user {自分のuser_id} \
                                      "{hato-botのコマンド}"
    ```

- または[ngrok](https://ngrok.com/)を使うこともできます。

    ```sh
    ./ngrok http 3000
    ```

#### コミットする前に行うこと

開発に必要なパッケージと `pre-commit` のインストールを行います。

```sh
pipenv install --dev
pipenv run pre-commit install
```

#### 補足

- コードを整形する場合は `pipenv run autopep8 --in-place --recursive .` を実行します。

## 鳩botコマンド一覧

- 鳩botで使用可能なコマンドは次の通りです。

    ```text
    amesh ... 東京のamesh(雨雲情報)を表示する。
    amesh [text] ... 指定した地名・住所・郵便番号[text]のamesh(雨雲情報)を表示する。
    amesh [緯度 (float)] [経度 (float)] ... 指定した座標([緯度 (float)], [経度 (float)])のamesh(雨雲情報)を表示する。
    amedas ... 東京のamedas(気象情報)を表示する。
    amedas [text] ... 指定した地名・住所・郵便番号[text]のamedas(気象情報)を表示する。
    amedas [緯度 (float)] [経度 (float)] ... 指定した座標([緯度 (float)], [経度 (float)])のamedas(気象情報)を表示する。
    電力 ... 東京電力管内の電力使用率を表示する。
    標高 ... 東京の標高を表示する。
    標高 [text] ... 指定した地名・住所・郵便番号[text]の標高を表示する。
    標高 [緯度 (float)] [経度 (float)] ... 指定した座標([緯度 (float)], [経度 (float)])の標高を表示する。
    eq ... 最新の地震情報を3件表示する。
    textlint [text] ... 文字列[text]を校正する。
    text list ... パワーワード一覧を表示する。
    text random ... パワーワードをひとつ、ランダムで表示する。
    text show [int] ... 指定した番号[int]のパワーワードを表示する。
    text add [text] ... パワーワードに[text]を登録する。
    text delete [int] ... 指定した番号[int]のパワーワードを削除する。
    >< [text] ... 文字列[text]を吹き出しで表示する。
    にゃーん ... 「よしよし」と返す。
    おみくじ ... おみくじを引いて返す。
    version ... バージョン情報を表示する。
    chat [text] ... ChatGPTで文章生成する。
    画像生成 [text] ... openAIのImage generationで画像生成する。[text]は英語での入力推奨。
    ping ... 「ping」したら「PONG」と返す。
    ```

## バージョンアップによる変更点

- バージョンアップによる変更点については[CHANGELOG](./CHANGELOG.md) を参照してください。

## バグ報告や機能の要望について

- バグ報告や機能追加の要望がある場合は [Issues](https://github.com/dev-hato/hato-bot/issues) の
     `New Issue` から報告をお願いします。

- プルリクエストも大歓迎です。

## クレジット

Botで利用しているサービスのクレジットを記載します。

- [Web Services by Yahoo! JAPAN](https://developer.yahoo.co.jp/sitemap/)


<picture>
  <source media="(prefers-color-scheme: light)" srcset="/docs/logo_tiny_light.svg">

</picture>

tinygrad: For something between [PyTorch](https://github.com/pytorch/pytorch) and [karpathy/micrograd](https://github.com/karpathy/micrograd). Maintained by [tiny corp](https://tinygrad.org).

[Homepage](https://github.com/tinygrad/tinygrad) | [Documentation](https://docs.tinygrad.org/) | [Discord](https://discord.gg/ZjZadyC7PK)

[![GitHub Repo stars](https://img.shields.io/github/stars/tinygrad/tinygrad)](https://github.com/tinygrad/tinygrad/stargazers)
[![Unit Tests](https://github.com/tinygrad/tinygrad/actions/workflows/test.yml/badge.svg)](https://github.com/tinygrad/tinygrad/actions/workflows/test.yml)
[![Discord](https://img.shields.io/discord/1068976834382925865)](https://discord.gg/ZjZadyC7PK)

---

This may not be the best deep learning framework, but it is a deep learning framework.

Due to its extreme simplicity, it aims to be the easiest framework to add new accelerators to, with support for both inference and training. If XLA is CISC, tinygrad is RISC.

tinygrad is still alpha software, but we [raised some money](https://geohot.github.io/blog/jekyll/update/2023/05/24/the-tiny-corp-raised-5M.html) to make it good. Someday, we will tape out chips.

## Features

### LLaMA and Stable Diffusion

tinygrad can run [LLaMA](/docs/showcase.md#llama) and [Stable Diffusion](/docs/showcase.md#stable-diffusion)!

### Laziness

Try a matmul. See how, despite the style, it is fused into one kernel with the power of laziness.

```sh
DEBUG=3 python3 -c "from tinygrad import Tensor;
N = 1024; a, b = Tensor.rand(N, N), Tensor.rand(N, N);
c = (a.reshape(N, 1, N) * b.T.reshape(1, N, N)).sum(axis=2);
print((c.numpy() - (a.numpy() @ b.numpy())).mean())"
```

And we can change `DEBUG` to `4` to see the generated code.

### Neural networks

As it turns out, 90% of what you need for neural networks are a decent autograd/tensor library.
Throw in an optimizer, a data loader, and some compute, and you have all you need.

```py
from tinygrad import Tensor, nn

class LinearNet:
  def __init__(self):
    self.l1 = Tensor.kaiming_uniform(784, 128)
    self.l2 = Tensor.kaiming_uniform(128, 10)
  def __call__(self, x:Tensor) -> Tensor:
    return x.flatten(1).dot(self.l1).relu().dot(self.l2)

model = LinearNet()
optim = nn.optim.Adam([model.l1, model.l2], lr=0.001)

x, y = Tensor.rand(4, 1, 28, 28), Tensor([2,4,3,7])  # replace with real mnist dataloader

for i in range(10):
  optim.zero_grad()
  loss = model(x).sparse_categorical_crossentropy(y).backward()
  optim.step()
  print(i, loss.item())
```

See [examples/beautiful_mnist.py](examples/beautiful_mnist.py) for the full version that gets 98% in ~5 seconds

## Accelerators

tinygrad already supports numerous accelerators, including:

- [x] [GPU (OpenCL)](tinygrad/runtime/ops_gpu.py)
- [x] [CLANG (C Code)](tinygrad/runtime/ops_clang.py)
- [x] [LLVM](tinygrad/runtime/ops_llvm.py)
- [x] [METAL](tinygrad/runtime/ops_metal.py)
- [x] [CUDA](tinygrad/runtime/ops_cuda.py)
- [x] [AMD](tinygrad/runtime/ops_amd.py)
- [x] [NV](tinygrad/runtime/ops_nv.py)

And it is easy to add more! Your accelerator of choice only needs to support a total of ~25 low level ops.

## Installation

The current recommended way to install tinygrad is from source.

### From source

```sh
git clone https://github.com/tinygrad/tinygrad.git
cd tinygrad
python3 -m pip install -e .
```

### Direct (master)

```sh
python3 -m pip install git+https://github.com/tinygrad/tinygrad.git
```

## Documentation

Documentation along with a quick start guide can be found in the [docs/](/docs) directory.

### Quick example comparing to PyTorch

```py
from tinygrad import Tensor

x = Tensor.eye(3, requires_grad=True)
y = Tensor([[2.0,0,-2.0]], requires_grad=True)
z = y.matmul(x).sum()
z.backward()

print(x.grad.numpy())  # dz/dx
print(y.grad.numpy())  # dz/dy
```

The same thing but in PyTorch:
```py
import torch

x = torch.eye(3, requires_grad=True)
y = torch.tensor([[2.0,0,-2.0]], requires_grad=True)
z = y.matmul(x).sum()
z.backward()

print(x.grad.numpy())  # dz/dx
print(y.grad.numpy())  # dz/dy
```

## Contributing

There has been a lot of interest in tinygrad lately. Following these guidelines will help your PR get accepted.

We'll start with what will get your PR closed with a pointer to this section:

- No code golf! While low line count is a guiding light of this project, anything that remotely looks like code golf will be closed. The true goal is reducing complexity and increasing readability, and deleting `\n`s does nothing to help with that.
- All docs and whitespace changes will be closed unless you are a well-known contributor. The people writing the docs should be those who know the codebase the absolute best. People who have not demonstrated that shouldn't be messing with docs. Whitespace changes are both useless *and* carry a risk of introducing bugs.
- Anything you claim is a "speedup" must be benchmarked. In general, the goal is simplicity, so even if your PR makes things marginally faster, you have to consider the tradeoff with maintainablity and readablity.
- In general, the code outside the core `tinygrad/` folder is not well tested, so unless the current code there is broken, you shouldn't be changing it.
- If your PR looks "complex", is a big diff, or adds lots of lines, it won't be reviewed or merged. Consider breaking it up into smaller PRs that are individually clear wins. A common pattern I see is prerequisite refactors before adding new functionality. If you can (cleanly) refactor to the point that the feature is a 3 line change, this is great, and something easy for us to review.

Now, what we want:

- Bug fixes (with a regression test) are great! This library isn't 1.0 yet, so if you stumble upon a bug, fix it, write a test, and submit a PR, this is valuable work.
- Solving bounties! tinygrad [offers cash bounties](https://docs.google.com/spreadsheets/d/1WKHbT-7KOgjEawq5h5Ic1qUWzpfAzuD_J06N1JwOCGs/edit?usp=sharing) for certain improvements to the library. All new code should be high quality and well tested.
- Features. However, if you are adding a feature, consider the line tradeoff. If it's 3 lines, there's less of a bar of usefulness it has to meet over something that's 30 or 300 lines. All features must have regression tests. In general with no other constraints, your feature's API should match torch or numpy.
- Refactors that are clear wins. In general, if your refactor isn't a clear win it will be closed. But some refactors are amazing! Think about readability in a deep core sense. A whitespace change or moving a few functions around is useless, but if you realize that two 100 line functions can actually use the same 110 line function with arguments while also improving readability, this is a big win. Refactors should pass [process replay](#process-replay-tests).
- Tests/fuzzers. If you can add tests that are non brittle, they are welcome. We have some fuzzers in here too, and there's a plethora of bugs that can be found with them and by improving them. Finding bugs, even writing broken tests (that should pass) with `@unittest.expectedFailure` is great. This is how we make progress.
- Dead code removal from core `tinygrad/` folder. We don't care about the code in extra, but removing dead code from the core library is great. Less for new people to read and be confused by.

### Running tests

You should install the pre-commit hooks with `pre-commit install`. This will run the linter, mypy, and a subset of the tests on every commit.

For more examples on how to run the full test suite please refer to the [CI workflow](.github/workflows/test.yml).

Some examples of running tests locally:
```sh
python3 -m pip install -e '.[testing]'  # install extra deps for testing
python3 test/test_ops.py                # just the ops tests
python3 -m pytest test/                 # whole test suite
```

#### Process replay tests

[Process replay](https://github.com/tinygrad/tinygrad/blob/master/test/external/replay_codegen.py) detects changes in the generated kernels of CI tests by comparing them against tinygrad master. If your PR is a refactor or speedup without any expected behavior change, it should include a green process replay pass to get merged.

You can enable process replay by adding [run_process_replay] to your PR title. [example](https://github.com/tinygrad/tinygrad/pull/4995). Note that you should keep your branch up-to-date with master.


```diff
+ Searching for Pynecone? You are in the right repo. Pynecone has been renamed to Reflex. +
```

### **✨ Performant, customizable web apps in pure Python. Deploy in seconds. ✨**
[![PyPI version](https://badge.fury.io/py/reflex.svg)](https://badge.fury.io/py/reflex)
![tests](https://github.com/pynecone-io/pynecone/actions/workflows/integration.yml/badge.svg)
![versions](https://img.shields.io/pypi/pyversions/reflex.svg)
[![Documentation](https://img.shields.io/badge/Documentation%20-Introduction%20-%20%23007ec6)](https://reflex.dev/docs/getting-started/introduction)
[![Discord](https://img.shields.io/discord/1029853095527727165?color=%237289da&label=Discord)](https://discord.gg/T5WSbC2YtQ)

---

[English](https://github.com/reflex-dev/reflex/blob/main/README.md) | [简体中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_cn/README.md) | [繁體中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_tw/README.md) | [Türkçe](https://github.com/reflex-dev/reflex/blob/main/docs/tr/README.md) | [हिंदी](https://github.com/reflex-dev/reflex/blob/main/docs/in/README.md) | [Português (Brasil)](https://github.com/reflex-dev/reflex/blob/main/docs/pt/pt_br/README.md) | [Italiano](https://github.com/reflex-dev/reflex/blob/main/docs/it/README.md) | [Español](https://github.com/reflex-dev/reflex/blob/main/docs/es/README.md) | [한국어](https://github.com/reflex-dev/reflex/blob/main/docs/kr/README.md) | [日本語](https://github.com/reflex-dev/reflex/blob/main/docs/ja/README.md)

---

# Reflex

Reflex is a library to build full-stack web apps in pure Python.

Key features:
* **Pure Python** - Write your app's frontend and backend all in Python, no need to learn Javascript.
* **Full Flexibility** - Reflex is easy to get started with, but can also scale to complex apps.
* **Deploy Instantly** - After building, deploy your app with a [single command](https://reflex.dev/docs/hosting/deploy-quick-start/) or host it on your own server.

See our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architecture/#the-reflex-architecture) to learn how Reflex works under the hood.

## ⚙ Installation

Open a terminal and run (Requires Python 3.8+):

```bash
pip install reflex
```

## 🥳 Create your first app

Installing `reflex` also installs the `reflex` command line tool.

Test that the install was successful by creating a new project. (Replace `my_app_name` with your project name):

```bash
mkdir my_app_name
cd my_app_name
reflex init
```

This command initializes a template app in your new directory.

You can run this app in development mode:

```bash
reflex run
```

You should see your app running at http://localhost:3000.

Now you can modify the source code in `my_app_name/my_app_name.py`. Reflex has fast refreshes so you can see your changes instantly when you save your code.

## 🫧 Example App

Let's go over an example: creating an image generation UI around [DALL·E](https://platform.openai.com/docs/guides/images/image-generation?context=node). For simplicity, we just call the [OpenAI API](https://platform.openai.com/docs/api-reference/authentication), but you could replace this with an ML model run locally.

Here is the complete code to create this. This is all done in one Python file!

```python
import reflex as rx
import openai

openai_client = openai.OpenAI()

class State(rx.State):
    """The app state."""

    prompt = ""
    image_url = ""
    processing = False
    complete = False

    def get_image(self):
        """Get the image from the prompt."""
        if self.prompt == "":
            return rx.window_alert("Prompt Empty")

        self.processing, self.complete = True, False
        yield
        response = openai_client.images.generate(
            prompt=self.prompt, n=1, size="1024x1024"
        )
        self.image_url = response.data[0].url
        self.processing, self.complete = False, True

def index():
    return rx.center(
        rx.vstack(
            rx.heading("DALL-E", font_size="1.5em"),
            rx.input(
                placeholder="Enter a prompt..",
                on_blur=State.set_prompt,
                width="25em",
            ),
            rx.button(
                "Generate Image",
                on_click=State.get_image,
                width="25em",
                loading=State.processing
            ),
            rx.cond(
                State.complete,
                rx.image(src=State.image_url, width="20em"),
            ),
            align="center",
        ),
        width="100%",
        height="100vh",
    )

# Add state and page to the app.
app = rx.App()
app.add_page(index, title="Reflex:DALL-E")
```

## Let's break this down.

### **Reflex UI**

Let's start with the UI.

```python
def index():
    return rx.center(
        ...
    )
```

This `index` function defines the frontend of the app.

We use different components such as `center`, `vstack`, `input`, and `button` to build the frontend. Components can be nested within each other
to create complex layouts. And you can use keyword args to style them with the full power of CSS.

Reflex comes with [60+ built-in components](https://reflex.dev/docs/library) to help you get started. We are actively adding more components, and it's easy to [create your own components](https://reflex.dev/docs/wrapping-react/overview/).

### **State**

Reflex represents your UI as a function of your state.

```python
class State(rx.State):
    """The app state."""
    prompt = ""
    image_url = ""
    processing = False
    complete = False

```

The state defines all the variables (called vars) in an app that can change and the functions that change them.

Here the state is comprised of a `prompt` and `image_url`. There are also the booleans `processing` and `complete` to indicate when to disable the button (during image generation) and when to show the resulting image.

### **Event Handlers**

```python
def get_image(self):
    """Get the image from the prompt."""
    if self.prompt == "":
        return rx.window_alert("Prompt Empty")

    self.processing, self.complete = True, False
    yield
    response = openai_client.images.generate(
        prompt=self.prompt, n=1, size="1024x1024"
    )
    self.image_url = response.data[0].url
    self.processing, self.complete = False, True
```

Within the state, we define functions called event handlers that change the state vars. Event handlers are the way that we can modify the state in Reflex. They can be called in response to user actions, such as clicking a button or typing in a text box. These actions are called events.

Our DALL·E. app has an event handler, `get_image` to which get this image from the OpenAI API. Using `yield` in the middle of an event handler will cause the UI to update. Otherwise the UI will update at the end of the event handler.

### **Routing**

Finally, we define our app.

```python
app = rx.App()
```

We add a page from the root of the app to the index component. We also add a title that will show up in the page preview/browser tab.

```python
app.add_page(index, title="DALL-E")
```

You can create a multi-page app by adding more pages.

## 📑 Resources

📑 [Docs](https://reflex.dev/docs/getting-started/introduction)   |    🗞 [Blog](https://reflex.dev/blog)   |    📱 [Component Library](https://reflex.dev/docs/library)   |    🖼 [Gallery](https://reflex.dev/docs/gallery)   |    🛸 [Deployment](https://reflex.dev/docs/hosting/deploy-quick-start)

## ✅ Status

Reflex launched in December 2022 with the name Pynecone.

As of February 2024, our hosting service is in alpha! During this time anyone can deploy their apps for free. See our [roadmap](https://github.com/reflex-dev/reflex/issues/2727) to see what's planned.

Reflex has new releases and features coming every week! Make sure to :star: star and :eyes: watch this repository to stay up to date.

## Contributing

We welcome contributions of any size! Below are some good ways to get started in the Reflex community.

-   **Join Our Discord**: Our [Discord](https://discord.gg/T5WSbC2YtQ) is the best place to get help on your Reflex project and to discuss how you can contribute.
-   **GitHub Discussions**: A great way to talk about features you want added or things that are confusing/need clarification.
-   **GitHub Issues**: [Issues](https://github.com/reflex-dev/reflex/issues) are an excellent way to report bugs. Additionally, you can try and solve an existing issue and submit a PR.

We are actively looking for contributors, no matter your skill level or experience. To contribute check out [CONTIBUTING.md](https://github.com/reflex-dev/reflex/blob/main/CONTRIBUTING.md)

## All Thanks To Our Contributors:

## License

Reflex is open-source and licensed under the [Apache License 2.0](LICENSE).


# MetaGPT: The Multi-Agent Framework

Assign different roles to GPTs to form a collaborative entity for complex tasks.

## News
🚀 Mar. 29, 2024: [v0.8.0](https://github.com/geekan/MetaGPT/releases/tag/v0.8.0) released. Now you can use Data Interpreter ([arxiv](https://arxiv.org/abs/2402.18679), [example](https://docs.deepwisdom.ai/main/en/DataInterpreter/), [code](https://github.com/geekan/MetaGPT/tree/main/examples/di)) via pypi package import. Meanwhile, we integrated RAG module and supported multiple new LLMs.

🚀 Feb. 08, 2024: [v0.7.0](https://github.com/geekan/MetaGPT/releases/tag/v0.7.0) released, supporting assigning different LLMs to different Roles. We also introduced [Data Interpreter](https://github.com/geekan/MetaGPT/blob/main/examples/di/README.md), a powerful agent capable of solving a wide range of real-world problems.

🚀 Jan. 16, 2024: Our paper [MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework
](https://arxiv.org/abs/2308.00352) accepted for **oral presentation (top 1.2%)** at ICLR 2024, **ranking #1** in the LLM-based Agent category.

🚀 Jan. 03, 2024: [v0.6.0](https://github.com/geekan/MetaGPT/releases/tag/v0.6.0) released, new features include serialization, upgraded OpenAI package and supported multiple LLM, provided [minimal example for debate](https://github.com/geekan/MetaGPT/blob/main/examples/debate_simple.py) etc.

🚀 Dec. 15, 2023: [v0.5.0](https://github.com/geekan/MetaGPT/releases/tag/v0.5.0) released, introducing some experimental features such as incremental development, multilingual, multiple programming languages, etc.

🔥 Nov. 08, 2023: MetaGPT is selected into [Open100: Top 100 Open Source achievements](https://www.benchcouncil.org/evaluation/opencs/annual.html).

🔥 Sep. 01, 2023: MetaGPT tops GitHub Trending Monthly for the **17th time** in August 2023.

🌟 Jun. 30, 2023: MetaGPT is now open source.

🌟 Apr. 24, 2023: First line of MetaGPT code committed.

## Software Company as Multi-Agent System

1. MetaGPT takes a **one line requirement** as input and outputs **user stories / competitive analysis / requirements / data structures / APIs / documents, etc.**
2. Internally, MetaGPT includes **product managers / architects / project managers / engineers.** It provides the entire process of a **software company along with carefully orchestrated SOPs.**
   1. `Code = SOP(Team)` is the core philosophy. We materialize SOP and apply it to teams composed of LLMs.

![A software company consists of LLM-based roles](docs/resources/software_company_cd.jpeg)

Software Company Multi-Agent Schematic (Gradually Implementing)

## Get Started

### Installation

> Ensure that Python 3.9+ is installed on your system. You can check this by using: `python --version`.
> You can use conda like this: `conda create -n metagpt python=3.9 && conda activate metagpt`

```bash
pip install --upgrade metagpt
# or `pip install --upgrade git+https://github.com/geekan/MetaGPT.git`
# or `git clone https://github.com/geekan/MetaGPT && cd MetaGPT && pip install --upgrade -e .`
```

For detailed installation guidance, please refer to [cli_install](https://docs.deepwisdom.ai/main/en/guide/get_started/installation.html#install-stable-version)
 or [docker_install](https://docs.deepwisdom.ai/main/en/guide/get_started/installation.html#install-with-docker)

### Configuration

You can init the config of MetaGPT by running the following command, or manually create `~/.metagpt/config2.yaml` file:
```bash
# Check https://docs.deepwisdom.ai/main/en/guide/get_started/configuration.html for more details
metagpt --init-config  # it will create ~/.metagpt/config2.yaml, just modify it to your needs
```

You can configure `~/.metagpt/config2.yaml` according to the [example](https://github.com/geekan/MetaGPT/blob/main/config/config2.example.yaml) and [doc](https://docs.deepwisdom.ai/main/en/guide/get_started/configuration.html):

```yaml
llm:
  api_type: "openai"  # or azure / ollama / groq etc. Check LLMType for more options
  model: "gpt-4-turbo"  # or gpt-3.5-turbo
  base_url: "https://api.openai.com/v1"  # or forward url / other llm url
  api_key: "YOUR_API_KEY"
```

### Usage

After installation, you can use MetaGPT at CLI

```bash
metagpt "Create a 2048 game"  # this will create a repo in ./workspace
```

or use it as library

```python
from metagpt.software_company import generate_repo, ProjectRepo
repo: ProjectRepo = generate_repo("Create a 2048 game")  # or ProjectRepo("<path>")
print(repo)  # it will print the repo structure with files
```

You can also use [Data Interpreter](https://github.com/geekan/MetaGPT/tree/main/examples/di) to write code:

```python
import asyncio
from metagpt.roles.di.data_interpreter import DataInterpreter

async def main():
    di = DataInterpreter()
    await di.run("Run data analysis on sklearn Iris dataset, include a plot")

asyncio.run(main())  # or await main() in a jupyter notebook setting
```

### QuickStart & Demo Video
- Try it on [MetaGPT Huggingface Space](https://huggingface.co/spaces/deepwisdom/MetaGPT)
- [Matthew Berman: How To Install MetaGPT - Build A Startup With One Prompt!!](https://youtu.be/uT75J_KG_aY)
- [Official Demo Video](https://github.com/geekan/MetaGPT/assets/2707039/5e8c1062-8c35-440f-bb20-2b0320f8d27d)

https://github.com/geekan/MetaGPT/assets/34952977/34345016-5d13-489d-b9f9-b82ace413419

## Tutorial

- 🗒 [Online Document](https://docs.deepwisdom.ai/main/en/)
- 💻 [Usage](https://docs.deepwisdom.ai/main/en/guide/get_started/quickstart.html)
- 🔎 [What can MetaGPT do?](https://docs.deepwisdom.ai/main/en/guide/get_started/introduction.html)
- 🛠 How to build your own agents?
  - [MetaGPT Usage & Development Guide | Agent 101](https://docs.deepwisdom.ai/main/en/guide/tutorials/agent_101.html)
  - [MetaGPT Usage & Development Guide | MultiAgent 101](https://docs.deepwisdom.ai/main/en/guide/tutorials/multi_agent_101.html)
- 🧑💻 Contribution
  - [Develop Roadmap](docs/ROADMAP.md)
- 🔖 Use Cases
  - [Data Interpreter](https://docs.deepwisdom.ai/main/en/guide/use_cases/agent/interpreter/intro.html)
  - [Debate](https://docs.deepwisdom.ai/main/en/guide/use_cases/multi_agent/debate.html)
  - [Researcher](https://docs.deepwisdom.ai/main/en/guide/use_cases/agent/researcher.html)
  - [Recepit Assistant](https://docs.deepwisdom.ai/main/en/guide/use_cases/agent/receipt_assistant.html)
- ❓ [FAQs](https://docs.deepwisdom.ai/main/en/guide/faq.html)

## Support

### Discord Join US

📢 Join Our [Discord Channel](https://discord.gg/ZRHeExS6xv)! Looking forward to seeing you there! 🎉

### Contributor form

📝 [Fill out the form](https://airtable.com/appInfdG0eJ9J4NNL/pagK3Fh1sGclBvVkV/form) to become a contributor. We are looking forward to your participation!

### Contact Information

If you have any questions or feedback about this project, please feel free to contact us. We highly appreciate your suggestions!

- **Email:** alexanderwu@deepwisdom.ai
- **GitHub Issues:** For more technical inquiries, you can also create a new issue in our [GitHub repository](https://github.com/geekan/metagpt/issues).

We will respond to all questions within 2-3 business days.

## Citation

To stay updated with the latest research and development, follow [@MetaGPT_](https://twitter.com/MetaGPT_) on Twitter.

To cite [MetaGPT](https://arxiv.org/abs/2308.00352) or [Data Interpreter](https://arxiv.org/abs/2402.18679) in publications, please use the following BibTeX entries.

```bibtex
@misc{hong2023metagpt,
      title={MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework},
      author={Sirui Hong and Mingchen Zhuge and Jonathan Chen and Xiawu Zheng and Yuheng Cheng and Ceyao Zhang and Jinlin Wang and Zili Wang and Steven Ka Shing Yau and Zijuan Lin and Liyang Zhou and Chenyu Ran and Lingfeng Xiao and Chenglin Wu and Jürgen Schmidhuber},
      year={2023},
      eprint={2308.00352},
      archivePrefix={arXiv},
      primaryClass={cs.AI}
}
@misc{hong2024data,
      title={Data Interpreter: An LLM Agent For Data Science},
      author={Sirui Hong and Yizhang Lin and Bang Liu and Bangbang Liu and Binhao Wu and Danyang Li and Jiaqi Chen and Jiayi Zhang and Jinlin Wang and Li Zhang and Lingyao Zhang and Min Yang and Mingchen Zhuge and Taicheng Guo and Tuo Zhou and Wei Tao and Wenyi Wang and Xiangru Tang and Xiangtao Lu and Xiawu Zheng and Xinbing Liang and Yaying Fei and Yuheng Cheng and Zongze Xu and Chenglin Wu},
      year={2024},
      eprint={2402.18679},
      archivePrefix={arXiv},
      primaryClass={cs.AI}
}

```