Coder Social home page Coder Social logo

alvr / alpine-android Goto Github PK

View Code? Open in Web Editor NEW
345.0 10.0 55.0 152 KB

πŸ‹ Small docker image for building & testing Android applications.

Home Page: https://alvr.dev

License: Apache License 2.0

Shell 47.60% Dockerfile 52.40%
android docker-android docker-alpine alpine-android docker-alpine-android alpine docker-image android-image

alpine-android's Introduction

Alpine Android Docker Images

Alpine Android

GitHub build status Latest release Notify new versions

Docker Alpine Android Base Pulls Docker Alpine Android Main Pulls

DockerHub Link GitHub Container Registry Link Quay Link

DockerHub Link GitHub Container Registry Link Quay Link


Variants

There are three variants of the image, all based on bellsoft/liberica-openjdk-alpine:

  • JDK8 images are based on Liberica JDK 8u422-6 and uses the tag's suffix -jdk8.
  • JDK11 images are based on Liberica JDK 11.0.24-9 and uses the tag's suffix -jdk11.
  • JDK17 images are based on Liberica JDK 17.0.12-10 and uses the tag's suffix -jdk17.
  • JDK21 images are based on Liberica JDK 21.0.4+9 and uses the tag's suffix -jdk21.

Which one should I use?

JDK version AGP version
8 < 7.0.0
11 >= 7.0.0 && < 8.0.0
17 >= 8.0.0
21 >= 8.2.1

Tagging

API level JDK8 JDK11 JDK17 JDK21
Base Image jdk8 latest-jdk8 jdk11, latest-jdk11 jdk17, latest, latest-jdk17 jdk21, latest-jdk21
Android 9.0 (28) android-28-jdk8 android-28, android-28-jdk11 android-28-jdk17 android-28-jdk21
Android 10 (29) android-29-jdk8 android-29, android-29-jdk11 android-29-jdk17 android-29-jdk21
Android 11 (30) android-30-jdk8 android-30, android-30-jdk11 android-30-jdk17 android-30-jdk21
Android 12 (31) android-31-jdk8 android-31, android-31-jdk11 android-31-jdk17 android-31-jdk21
Android 12L (32) android-32-jdk8 android-32, android-32-jdk11 android-32-jdk17 android-32-jdk21
Android 13 (33) android-33-jdk8 android-33, android-33-jdk11 android-33-jdk17 android-33-jdk21
Android 14 (34) android-34-jdk8, latest-jdk8 android-34, android-34-jdk11, latest-jdk11 android-34-jdk17, latest, latest-jdk17 android-34-jdk21, latest-jdk21
Android 15 (35) android-35-jdk8 android-35, android-35-jdk11 android-35-jdk17 android-35-jdk21

Versioning

Since January 1st 2021, new versions now include the date it was published so is possible to revert to a previous version. The versioning only applies to tags with the JDK version specified. The tag's format is: android-XX-jdkZZ-vYYYY.MM.DD, where:

  • XX is the API level.
  • ZZ is the version of the JDK.
  • YYYY is the year of the release version.
  • MM is the month of the year of the release version with leading zeros.
  • DD is the day of the month of the release version with leading zeros.

A valid example would be android-30-jdk11-v2021.01.01. Here are listed all the versions.

πŸ“ Versioning is not available for alpine-android-base.

Content

See content of Android Base image

Docker Android Base JDK8 Size Docker Android Base JDK11 Size Docker Android Base JDK17 Size Docker Android Base JDK21 Size

Path Version Description Location
extras;google;instantapps 1.9.0 Google Play Instant Development SDK extras/google/instantapps/
patcher;v4 1 SDK Patch Applier v4 patcher/v4/
platform-tools 35.0.1 Android SDK Platform-Tools platform-tools/

Extend from Alpine Android Base

Use the following configuration in your Dockerfile. After that, you can install any Android package available. To install an Android package, include the following line on your Dockerfile:

RUN sdkmanager <list-of-packages>

If you want to install an Alpine package available. To install an Android package, include the following line on your Dockerfile:

RUN apk add --no-cache <list-of-packages>
See content of Android 9 (Pie) image

Docker Android 9 JDK8 Size Docker Android 9 JDK11 Size Docker Android 9 JDK17 Size Docker Android 9 JDK21 Size

Path Version Description Location
build-tools;28.0.3 28.0.3 Android SDK Build-Tools build-tools/28.0.3/
extras;google;instantapps 1.9.0 Google Play Instant Development SDK extras/google/instantapps/
patcher;v4 1 SDK Patch Applier v4 patcher/v4/
platform-tools 35.0.1 Android SDK Platform-Tools platform-tools/
platforms;android-28 6 Android SDK Platform 28 platforms/android-28/
See content of Android 10 (Q) image

Docker Android 10 JDK8 Size Docker Android 10 JDK11 Size Docker Android 10 JDK17 Size Docker Android 10 JDK21 Size

Path Version Description Location
build-tools;29.0.3 29.0.3 Android SDK Build-Tools build-tools/29.0.3/
extras;google;instantapps 1.9.0 Google Play Instant Development SDK extras/google/instantapps/
patcher;v4 1 SDK Patch Applier v4 patcher/v4/
platform-tools 35.0.1 Android SDK Platform-Tools platform-tools/
platforms;android-29 5 Android SDK Platform 29 platforms/android-29/
See content of Android 11 (R) image

Docker Android 11 JDK8 Size Docker Android 11 JDK11 Size Docker Android 11 JDK17 Size Docker Android 11 JDK21 Size

Path Version Description Location
build-tools;30.0.3 30.0.3 Android SDK Build-Tools build-tools/30.0.3/
extras;google;instantapps 1.9.0 Google Play Instant Development SDK extras/google/instantapps/
patcher;v4 1 SDK Patch Applier v4 patcher/v4/
platform-tools 35.0.1 Android SDK Platform-Tools platform-tools/
platforms;android-30 3 Android SDK Platform 30 platforms/android-30/
See content of Android 12 (S) image

Docker Android 12 JDK8 Size Docker Android 12 JDK11 Size Docker Android 12 JDK17 Size Docker Android 12 JDK21 Size

Path Version Description Location
build-tools;31.0.0 31.0.0 Android SDK Build-Tools build-tools/31.0.0/
extras;google;instantapps 1.9.0 Google Play Instant Development SDK extras/google/instantapps/
patcher;v4 1 SDK Patch Applier v4 patcher/v4/
platform-tools 35.0.1 Android SDK Platform-Tools platform-tools/
platforms;android-31 1 Android SDK Platform 31 platforms/android-31/
See content of Android 12L image

Docker Android 12L JDK8 Size Docker Android 12L JDK11 Size Docker Android 12L JDK17 Size Docker Android 12 JDK21 Size

Path Version Description Location
build-tools;32.0.0 32.0.0 Android SDK Build-Tools build-tools/32.0.0/
extras;google;instantapps 1.9.0 Google Play Instant Development SDK extras/google/instantapps/
patcher;v4 1 SDK Patch Applier v4 patcher/v4/
platform-tools 35.0.1 Android SDK Platform-Tools platform-tools/
platforms;android-32 1 Android SDK Platform 32 platforms/android-32/
See content of Android 13 (Tiramisu) image

Docker Android 13 JDK8 Size Docker Android 13 JDK11 Size Docker Android 13 JDK17 Size Docker Android 13 JDK21 Size

Path Version Description Location
build-tools;33.0.2 33.0.2 Android SDK Build-Tools build-tools/33.0.2/
extras;google;instantapps 1.9.0 Google Play Instant Development SDK extras/google/instantapps/
patcher;v4 1 SDK Patch Applier v4 patcher/v4/
platform-tools 35.0.1 Android SDK Platform-Tools platform-tools/
platforms;android-33 2 Android SDK Platform 33 platforms/android-33/
See content of Android 14 (Upside-down Cake) image

Docker Android 14 JDK8 Size Docker Android 14 JDK11 Size Docker Android 14 JDK17 Size Docker Android 14 JDK21 Size

Path Version Description Location
build-tools;34.0.0 34.0.0 Android SDK Build-Tools build-tools/34.0.0/
extras;google;instantapps 1.9.0 Google Play Instant Development SDK extras/google/instantapps/
patcher;v4 1 SDK Patch Applier v4 patcher/v4/
platform-tools 35.0.1 Android SDK Platform-Tools platform-tools/
platforms;android-34 3 Android SDK Platform 34 platforms/android-34/
See content of Android 15 (VanillaIceCream) image

Docker Android 15 JDK8 Size Docker Android 15 JDK11 Size Docker Android 15 JDK17 Size Docker Android 15 JDK21 Size

Path Version Description Location
build-tools;35.0.0 35.0.0 Android SDK Build-Tools build-tools/35.0.0/
extras;google;instantapps 1.9.0 Google Play Instant Development SDK extras/google/instantapps/
patcher;v4 1 SDK Patch Applier v4 patcher/v4/
platform-tools 35.0.1 Android SDK Platform-Tools platform-tools/
platforms;android-35 1 Android SDK Platform VanillaIceCream platforms/android-35/

Containers registries

Because of the DockerHub rate limits, the image is now in three different containers registries:

Pulling from the different registries

Replace <tag> with one of the current available tags.

DockerHub pulling

You can pull a specific Docker image from DockerHub with the following command:

docker pull alvrme/alpine-android-base:<tag>
docker pull alvrme/alpine-android:<tag>

GHCR pulling

You can pull a specific Docker image from GitHub Container Registry with the following command:

docker pull ghcr.io/alvr/alpine-android-base:<tag>
docker pull ghcr.io/alvr/alpine-android:<tag>

Quay pulling

You can pull a specific Docker image from Quay with the following command:

docker pull quay.io/alvr/alpine-android-base:<tag>
docker pull quay.io/alvr/alpine-android:<tag>

Use as Base Image

Replace <tag> with one of the current available tags.

DockerHub base image

You can use the Docker images from DockerHub as a base image for creating a new one:

FROM alvrme/alpine-android-base:<tag>
FROM alvrme/alpine-android:<tag>

GHCR base image

You can use the Docker images from GitHub Container Registry as a base image for creating a new one:

FROM ghcr.io/alvr/alpine-android-base:<tag>
FROM ghcr.io/alvr/alpine-android:<tag>

Quay base image

You can use the Docker images from Quay as a base image for creating a new one:

FROM quay.io/alvr/alpine-android-base:<tag>
FROM quay.io/alvr/alpine-android:<tag>

Run container

Replace <tag> with one of the current available tags.

The command below will create a new container based on the specific image. It will open in the /home/android directory and the various available commands in the PATH will be able to be executed. Once the container is closed, it will be deleted. To keep the container after closing it, you have to remove --rm from the command.

DockerHub run container

Run the container from the DockerHub image:

docker run --rm -it alvrme/alpine-android-base:<tag>
docker run --rm -it alvrme/alpine-android:<tag>

GHCR run container

Run the container from the GitHub Container Registry image:

docker run --rm -it ghcr.io/alvr/alpine-android-base:<tag>
docker run --rm -it ghcr.io/alvr/alpine-android:<tag>

Quay run container

Run the container from the Quay image:

docker run --rm -it quay.io/alvr/alpine-android-base:<tag>
docker run --rm -it quay.io/alvr/alpine-android:<tag>

Extras

The base image also includes the extras command that contains small utilities that are not installed by default, since their use is not widespread.

These extras are executed with the command extras <command> and are the following

Fastlane

fastlane is a tool for iOS and Android developers to automate tedious tasks like generating screenshots, dealing with provisioning profiles, and releasing your application. Visit their documentation for more information.

This command allows you to install fastlane. There are two variants:

extras fastlane

This command allows you to install the latest version of fastlane. If you want to use a specific version, the command is as follows:

extras fastlane <version>

NDK

The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C++. For certain types of apps, this can help you reuse code libraries written in those languages.

This command allows you to install NDK and CMAKE using the latest versions available (NDK: 26.1.10909125; CMAKE: 3.22.1):

extras ndk

Is also possible to specify the version of NDK and CMAKE with:

extras ndk [--ndk | -n <version>] [--cmake | -c <version>]

It is not necessary to enter both versions, is possible to omit one.

Extending from Alpine Android Base

Read more here

Difference between Alpine Android and Alpine Android Base

The main difference between Alpine Android and Alpine Android Base is that the first one includes the corresponding build-tools and platforms;android versions. All Alpine Android versions share 95% of the code. Using a base image with the common part makes it easier to maintain.

alpine-android's People

Contributors

alvr avatar nicolasygrand avatar robertlk avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

alpine-android's Issues

Kotlin 1.6

Hi. Is it possible to upgrade to Kotlin 1.6?

add ssh support please and plz

error: cannot run ssh: No such file or directory
fatal: unable to fork

Failed to clone 'apiplatform' a second time, aborting

[ERROR] error: cannot run ssh: No such file or directory

I use latest alvrme/alpine-android:android-33-jdk11

And some time ago my builds started to fail with the following error.

[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] error: cannot run ssh: No such file or directory

I just use git push using scm:git:ssh:// connection, which is common use case for maven-release-plugin

Inside container:

bash-5.1# ssh -V
bash: ssh: command not found
bash-5.1# find / -name "ssh" -type f
bash-5.1# 

Seems like bellsoft/liberica-openjdk-alpine removed ssh binary from their image

JDK 17

With the release of JDK 17, is it possible to add that as a column to the matrix?

Thanks!

JDK 19?

I was at Droidcon UK, and there was mention that an upgrade to JDK 19 makes a noticeable build improvement.
Do you have any plans for JDK 19?

I'm also kind of person who usually uses the latest JDK possible - Do you have thoughts about pointing the latest image to the latest JDK?

Broken link in README.md

This section of the README.md contains a broken link towards the author's personal website.

The command below will create a new container based on the specific image. It will open in the `/home/android` directory and the various [available commands](https://alvr.dev/en/projects/docker/alpine-android/#tools-included) in the `PATH` will be able to be executed. Once the container is closed, it will be deleted. To keep the container after closing it, you have to remove `--rm` from the command.

Unable to install fastlane

Adding fastlane to android-30-jdk11 seems to fail.

Dockerfile

FROM alvrme/alpine-android:android-30-jdk11
RUN extras fastlane

docker build -t builder .

Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM alvrme/alpine-android:android-30-jdk11
 ---> 6633c34baa73
Step 2/2 : RUN extras fastlane
 ---> Running in d0448a74ac71
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
(1/24) Installing libstdc++ (10.3.1_git20210424-r2)
(2/24) Installing binutils (2.35.2-r2)
(3/24) Installing libgomp (10.3.1_git20210424-r2)
(4/24) Installing libatomic (10.3.1_git20210424-r2)
(5/24) Installing libgphobos (10.3.1_git20210424-r2)
(6/24) Installing gmp (6.2.1-r0)
(7/24) Installing isl22 (0.22-r0)
(8/24) Installing mpfr4 (4.1.0-r0)
(9/24) Installing mpc1 (1.2.1-r0)
(10/24) Installing gcc (10.3.1_git20210424-r2)
(11/24) Installing musl-dev (1.2.2-r3)
(12/24) Installing libc-dev (0.7.2-r3)
(13/24) Installing g++ (10.3.1_git20210424-r2)
(14/24) Installing make (4.3-r0)
(15/24) Installing gdbm (1.19-r0)
(16/24) Installing yaml (0.2.5-r0)
(17/24) Installing ruby-libs (2.7.4-r0)
(18/24) Installing ruby (2.7.4-r0)
(19/24) Installing libgmpxx (6.2.1-r0)
(20/24) Installing pkgconf (1.7.4-r0)
(21/24) Installing gmp-dev (6.2.1-r0)
(22/24) Installing libucontext (1.1-r0)
(23/24) Installing libucontext-dev (1.1-r0)
(24/24) Installing ruby-dev (2.7.4-r0)
Executing busybox-1.33.1-r2.trigger
Executing glibc-bin-2.33-r0.trigger
/usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link

OK: 236 MiB in 57 packages
No version specified, using latest
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/lib/ruby/gems/2.7.0 directory.
The command '/bin/sh -c extras fastlane' returned a non-zero code: 1

Can compile app that targets 33 on alpine-android:android-30-jdk11 image

Hi @alvr,
First of all, thank you for this beautiful image, it immensely helped us with our CD system,

So recently we updated one of our 2 apps to android 12 and to my surprise we didn't have to update our image to the matching version, and everything seems to work fine. To test this further we migrated the other app to android 13 and surprisingly the same image worked for the android 13 targeting app.

Am I missing anything here or is this some magic happening here?

JDK11 - Gradle daemon takes around half an hour to start.

Hello -

Docker tag: android-31-jdk11
distributionUrl=https://services.gradle.org/distributions/gradle-7.4.2-bin.zip

Issues - in our CICD Pipeline, we are using the "alpine-android" docker image. Recently we updated our Docker image to support jdk11 we are seeing this issue. Any help would be really helpful and much appreciated.

Thanks in advance.

Include Gradle

Hello and thank you very much for these great images! We are using them for our CI/CD and it's working fine. However, the steps always download the Gradle wrapper and download various things like the emulator before it starts building. Would it be possible to include them in the image already? This would require different images for different Gradle versions, but it would be very time-saving for us.
Thanks!

javax.xml.bind.JAXBException

Since the update yesterday none of our pipelines run anymore.

Caused by: java.util.ServiceConfigurationError: javax.annotation.processing.Processor: android.databinding.annotationprocessor.ProcessDataBinding Unable to get public no-arg constructor
4649 	at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1200)
4650 	at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1233)
4651 	at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1224)
4652 	at org.jetbrains.kotlin.kapt3.base.ProcessorLoader.doLoadProcessors(ProcessorLoader.kt:80)
4653 	at org.jetbrains.kotlin.kapt3.base.ProcessorLoader.loadProcessors(ProcessorLoader.kt:45)
4654 	at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:42)
4655 	... 29 more
4656 Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
4657 	... 35 more
4658 Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
4659 	... 35 more

I think it's related to the jdk11 update.
How can we fix this or can you provide an image with the old jdk?

Arm64/v8 Images

Hi,

Thanks a lot for creating the slim alpine images for Docker. Would it be possible for you to add support for Arm64/v8 arch? I've an Apple Silicon M1 macbook and other images don't work on it.

I tried forking this repo, but didn't go far as there are a lot of changes required with credentials etc.

We could leverage the platforms argument of the Docker buildx action?

 - name: Build Android Base JDK${{ matrix.jdk }}
   uses: docker/build-push-action@v2
   with:
     context: ./docker
     file: ./docker/base.Dockerfile
     push: true
     tags: ${{ steps.docker_meta.outputs.tags }}
     build-args: |
       JDK_VERSION=${{ matrix.jdk }}
     # Limit to platforms supported by base image
     platforms: |
       linux/arm64/v8

Here is a PR the has the relevant build .yml file that builds for arm64/v8 arch:
docker/setup-buildx-action#54

ERROR: JAVA_HOME is set to an invalid directory: /opt/java/openjdk

The CI I have set up that uses this docker image suddenly stopped working and it appears to be related to the newest release.

This was using alvrme/alpine-android:android-30-jdk11:

Images used:
    build : docker.io/alvrme/alpine-android@sha256:c39202e4da263bb66bfc65a49bdba941f97bebc91c7ca9d48617fccb0b97acc8
+ ./gradlew ktlintCheck --no-parallel

ERROR: JAVA_HOME is set to an invalid directory: /opt/java/openjdk

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

⚠Deprecations and new default versions

2024

Default API version (Done βœ…)

Android 14 will be using latest tag on January 1st, 2024.

Default JDK 17 version

The latest release of Android Studio Flamingo came along with the new Android Gradle Plugin 8.0.0. This version of the plugin requires Java 17 to run. To avoid problems with CI/CD configurations, Java 17 will be the default JDK for versions released on or after July 1st, 2024. In other words, if you are using currently latest tag, from July 1st, 2024, it will use Java 17 instead of Java 11.

2023

Deprecation (Done βœ…)

Since v2018.02.17, this image included all versions from API 21 onwards. Android 5 was released on 2014, thats 7 years ago and Google ended its support long time ago. New versions of Alpine Android published from Novemeber 1st, 2021 will only generate tags for API 28 and newer versions.

Default JDK 11 version (Done βœ…)

The latest release of Android Studio 2020.3.1 came along with the new Android Gradle Plugin 7.0.0. This version of the plugin requires Java 11 to run. To avoid problems with CI/CD configurations, Java 11 will be the default JDK for versions released on or after July 28th, 2022. In other words, if you are using currently latest tag, from July 28th, 2022, it will use Java 11 instead of Java 8.

Alpine Android missing build-tools?

Since the 21st update

Using Docker executor with image alvrme/alpine-android:android-30 ...
Using locally found image version due to if-not-present pull policy
Using docker image sha256:bfdb4e27da52668a0cd1874260fe301338a24f481d1643188b670d9c2e1e57d5 for alvrme/alpine-android:android-30 ...
...
$ ./gradlew -q assembleProdRelease
Checking the license for package Android SDK Build-Tools 30.0.2 in /opt/sdk/licenses
License for package Android SDK Build-Tools 30.0.2 accepted.
Preparing "Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)".
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" ready.
Installing Android SDK Build-Tools 30.0.2 in /opt/sdk/build-tools/30.0.2
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" complete.
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" finished.
Checking the license for package Android SDK Platform 30 in /opt/sdk/licenses
License for package Android SDK Platform 30 accepted.
Preparing "Install Android SDK Platform 30 (revision: 3)".
"Install Android SDK Platform 30 (revision: 3)" ready.
Installing Android SDK Platform 30 in /opt/sdk/platforms/android-30
"Install Android SDK Platform 30 (revision: 3)" complete.
"Install Android SDK Platform 30 (revision: 3)" finished.

while before with

Using Docker executor with image alvrme/alpine-android:android-30 ...
Using locally found image version due to if-not-present pull policy
Using docker image sha256:2386ebeccf176ec891787989713329e3df4b32bc73b82fdb130e79f655e64945 for alvrme/alpine-android:android-30 ...
...
$ ./gradlew -q assembleProdRelease

Did not install anything

PS: build-tools 30.0.3 was just released

Tagging versions?

Hey!

With today's update, one of my pipelines broke because I was using an old Gradle wrapper version not compatible with java 11.

Is there any chance you can start tagging versions so users can go to an old version if necessary?

Thanks!

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.