Giter Site home page Giter Site logo

icyleaf / app-info Goto Github PK

View Code? Open in Web Editor NEW
51.0 3.0 8.0 48.78 MB

Teardown parser tool for mac, windows and mobile app (ipa, apk and aab file) and dSYM.zip file, analysis metedata like version, name, icon etc.

License: MIT License

Ruby 100.00%
ipa apk mobileprovision android teardown analysis-metedata dsym aab

app-info's Introduction

👋 Hi there, I'm icyleaf

Website Badge Twitter Badge

A passionate learner and developer from Beijing.

  • 🏢 I'm a freelancer
  • 🌱 Currently learning Rust
  • 💻 Connect with me on Telegram
  • 👀 a slash guy on the weedend: console gamer/outdoorer/homebrewer.

adores reinventing the wheel!

app-info's People

Contributors

cschroed avatar dependabot-preview[bot] avatar dependabot[bot] avatar icyleaf avatar juhlila 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

Watchers

 avatar  avatar  avatar

app-info's Issues

/var/lib/gems/2.7.0/gems/app-info-2.5.4/lib/app_info.rb:30:in `parse': app_info.txt (AppInfo::NotFoundError)

sudo gem install app-info

终端执行 ruby app_info.rb

require 'app-info'

Description: 获取APP包信息

puts ARGV.to_s

Automatic detect file extsion and parse

apk = AppInfo.parse(ARGV[1])

属性文档: https://github.com/icyleaf/app_info/tree/master/spec/app_info

app_name = apk.name
app_version = apk.release_version
app_build_version = apk.build_version
app_size = apk.size(true)
app_identifier = apk.bundle_id
app_os = apk.os

app_info = "#{app_name},#{app_version},#{app_size},#{app_build_version},#{app_identifier},#{app_os}"

Fastlane与Jenkins数据通信 使用存到文件再读取文件的方式

File.write(ARGV[2], "#{app_info}")

不支持苹果M1芯片?

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': dlopen(/Library/Ruby/Gems/2.6.0/gems/pngdefry-0.1.3/lib/pngdefry.bundle, 0x0009): missing compatible arch in /Library/Ruby/Gems/2.6.0/gems/pngdefry-0.1.3/lib/pngdefry.bundle - /Library/Ruby/Gems/2.6.0/gems/pngdefry-0.1.3/lib/pngdefry.bundle (LoadError)

Reduce namespace

From 2.0 version, AppInfo will remove Parser module level to reduce namespace.

before:

AppInfo::Parser::IPA.new file
AppInfo::Parser::Platform::Android

after

AppInfo::IPA.new file
AppInfo::Platform::Android

Cannot read mobileprovision on Ubuntu 18.04

The mobileprovision file reading doesn't seem to work on Ubuntu 18.04 servers.

I have tried following commands:

ipa=AppInfo.parse("tmp/storage/ios/app.ipa") # <AppInfo::Parser::IPA:0x005593c7258108 @file="tmp/storage/ios/app.ipa", @contents="/tmp/d20190628-1205-1l8tcbk/AppInfo-ios-571df9d7d57eb92000ae58c3a9659007", @app_path="/tmp/d20190628-1205-1l8tcbk/AppInfo-ios-571df9d7d57eb92000ae58c3a9659007/Payload/AppName.app">
ipa.expired_date # nil
ipa.mobileprovision # <AppInfo::Parser::MobileProvision:0x00558c5c7d4c20 @path=nil>

I also tried to work directly on embedded.mobileprovision file, but it didn't work as well.

p=AppInfo.parse("/tmp/embedded.mobileprovision") # <AppInfo::Parser::MobileProvision:0x005578ab330df0 @path="/tmp/embedded.mobileprovision">
p.expired_date # nil
p.team_name # nil

The same IPA file and same methods gives output for ipa.expired_date on MacOS.

DSYM format support

it allows zip file or dSYM directory, and support single MachO and Fat MachO,each MachO will returns:

  • uuid
  • cpu_name
  • cpu_type
  • type
  • size

and If dSYM include Info.plist it will try to parse the metadata such like release_version, build_version, identifier

App validation using file extension?

Is it necessary to validate a file if its an app or not just by looking at its extension? I can have a temp file to be parsed which is not having a .ipa/.apk extension.
The same case can be a vice-versa; if I have a file with .ipa/.apk extension but actual content is different.

Undefined method `to_sym' for nil:NilClass

A crash may occur when inspecting an aab file.

Under certain circumstances resources defined in the project will have undefined values causing a crash when parsed.

A sample repository can be found here which reproduces the crash.

A patch file is provided which resolves the issue
0001-prevent-calling-to_sym-on-nil-value_from.value.patch

Stack Trace
Traceback (most recent call last):
        75: from /Users/jmorales/.gem/bin/bundle:23:in `<main>'
        74: from /Users/jmorales/.gem/bin/bundle:23:in `load'
        73: from /Users/jmorales/.gem/gems/bundler-2.3.22/exe/bundle:36:in `<top (required)>'
        72: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors'
        71: from /Users/jmorales/.gem/gems/bundler-2.3.22/exe/bundle:48:in `block in <top (required)>'
        70: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/cli.rb:25:in `start'
        69: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        68: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/cli.rb:31:in `dispatch'
        67: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        66: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        65: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        64: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/cli.rb:486:in `exec'
        63: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/cli/exec.rb:23:in `run'
        62: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/cli/exec.rb:58:in `kernel_load'
        61: from /Users/jmorales/.gem/gems/bundler-2.3.22/lib/bundler/cli/exec.rb:58:in `load'
        60: from /Users/jmorales/.gem/bin/fastlane:23:in `<top (required)>'
        59: from /Users/jmorales/.gem/bin/fastlane:23:in `load'
        58: from /Users/jmorales/.gem/gems/fastlane-2.212.1/bin/fastlane:23:in `<top (required)>'
        57: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/cli_tools_distributor.rb:123:in `take_off'
        56: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/commands_generator.rb:43:in `start'
        55: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/commands_generator.rb:354:in `run'
        54: from /Users/jmorales/.gem/gems/commander-4.6.0/lib/commander/delegates.rb:18:in `run!'
        53: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:124:in `run!'
        52: from /Users/jmorales/.gem/gems/commander-4.6.0/lib/commander/runner.rb:444:in `run_active_command'
        51: from /Users/jmorales/.gem/gems/commander-4.6.0/lib/commander/command.rb:157:in `run'
        50: from /Users/jmorales/.gem/gems/commander-4.6.0/lib/commander/command.rb:187:in `call'
        49: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/commands_generator.rb:110:in `block (2 levels) in run'
        48: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/command_line_handler.rb:36:in `handle'
        47: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/lane_manager.rb:47:in `cruise_lane'
        46: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/runner.rb:45:in `execute'
        45: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/runner.rb:45:in `chdir'
        44: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/runner.rb:49:in `block in execute'
        43: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/lane.rb:33:in `call'
        42: from Fastfile:36:in `block (2 levels) in parsing_binding'
        41: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/fast_file.rb:159:in `method_missing'
        40: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name'
        39: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/runner.rb:229:in `execute_action'
        38: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/runner.rb:229:in `chdir'
        37: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/runner.rb:255:in `block in execute_action'
        36: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action'
        35: from /Users/jmorales/.gem/gems/fastlane-2.212.1/fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action'
        34: from /Users/jmorales/.gem/gems/fastlane-plugin-app_info-0.7.0/lib/fastlane/plugin/app_info/actions/app_info_action.rb:16:in `run'
        33: from /Users/jmorales/.gem/gems/fastlane-plugin-app_info-0.7.0/lib/fastlane/plugin/app_info/helper/app_info_helper.rb:18:in `raw_data'
        32: from /Users/jmorales/.gem/gems/fastlane-plugin-app_info-0.7.0/lib/fastlane/plugin/app_info/helper/app_info_helper.rb:53:in `common_columns'
        31: from /Users/jmorales/.gem/gems/fastlane-plugin-app_info-0.7.0/lib/fastlane/plugin/app_info/helper/app_info_helper.rb:53:in `each_with_object'
        30: from /Users/jmorales/.gem/gems/fastlane-plugin-app_info-0.7.0/lib/fastlane/plugin/app_info/helper/app_info_helper.rb:53:in `each'
        29: from /Users/jmorales/.gem/gems/fastlane-plugin-app_info-0.7.0/lib/fastlane/plugin/app_info/helper/app_info_helper.rb:54:in `block in common_columns'
        28: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/aab.rb:57:in `name'
        27: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/aab.rb:182:in `manifest'
        26: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/aab.rb:187:in `resource'
        25: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:12:in `parse'
        24: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:12:in `new'
        23: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:20:in `initialize'
        22: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:41:in `parse'
        21: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:46:in `define_packages'
        20: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:46:in `each_with_object'
        19: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:46:in `each'
        18: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:47:in `block in define_packages'
        17: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:47:in `new'
        16: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:62:in `initialize'
        15: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:103:in `define_types'
        14: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:103:in `each'
        13: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:105:in `block in define_types'
        12: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:117:in `parse_from'
        11: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:117:in `each_with_object'
        10: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:117:in `each'
         9: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:118:in `block in parse_from'
         8: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:118:in `new'
         7: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:129:in `initialize'
         6: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:150:in `parse'
         5: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:150:in `each_with_object'
         4: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:150:in `each'
         3: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:151:in `block in parse'
         2: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:151:in `new'
         1: from /Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:166:in `initialize'
/Users/jmorales/.gem/gems/app-info-2.8.3/lib/app_info/protobuf/resources.rb:191:in `parsed_value': \e[31m[!] undefined method `to_sym' for nil:NilClass\e[0m (NoMethodError)
✅ fastlane environment ✅

Stack

Key Value
OS 13.2
Ruby 2.7.5
Bundler? true
Git git version 2.37.1 (Apple Git-137.1)
Installation Source ~/.rbenv/versions/2.7.5/bin/fastlane
Host macOS 13.2 (22D49)
Ruby Lib Dir ~/.rbenv/versions/2.7.5/lib
OpenSSL Version OpenSSL 1.1.1l 24 Aug 2021
Is contained false
Is homebrew false
Is installed via Fabric.app false
Xcode Path /Applications/Xcode.app/Contents/Developer/
Xcode Version 14.2
Swift Version 5.7.2

System Locale

Variable Value
LANG en_US.UTF-8
LC_ALL
LANGUAGE

fastlane files:

`./fastlane/Fastfile`
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:android)

platform :android do
  desc "Runs all the tests"
  lane :test do
    gradle(task: "test")
  end

  desc "Submit a new Beta Build to Crashlytics Beta"
  lane :beta do
    gradle(task: "clean assembleRelease")
    crashlytics
  
    # sh "your_script.sh"
    # You can also use other beta testing services here
  end

  desc "Deploy a new version to the Google Play"
  lane :deploy do
    gradle(task: "clean bundleDebug")
    app_info(file: lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH])
  end
end
`./fastlane/Appfile`
json_key_file("") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
package_name("com.example.myapplication") # e.g. com.krausefx.app

fastlane gems

Gem Version Update-Status
fastlane 2.212.1 ✅ Up-To-Date

Loaded fastlane plugins:

Plugin Version Update-Status
fastlane-plugin-app_info 0.7.0 ✅ Up-To-Date
Loaded gems
Gem Version
did_you_mean 1.4.0
bundler 2.3.22
uri 0.10.0
rake 13.0.6
rexml 3.2.5
CFPropertyList 3.0.6
public_suffix 5.0.1
addressable 2.8.1
rubyzip 2.3.2
android_parser 2.5.0
google-protobuf 3.21.12
icns 0.2.0
image_size 3.0.2
ruby-macho 3.0.0
uuidtools 2.2.0
app-info 2.8.3
artifactory 3.0.15
atomos 0.1.3
aws-eventstream 1.2.0
aws-partitions 1.721.0
aws-sigv4 1.5.2
jmespath 1.6.2
aws-sdk-core 3.170.0
aws-sdk-kms 1.63.0
aws-sdk-s3 1.119.1
babosa 1.0.4
claide 1.1.0
colored 1.2
colored2 3.1.2
highline 2.0.3
commander 4.6.0
declarative 0.0.20
digest-crc 0.6.4
unf_ext 0.0.8.2
unf 0.1.4
domain_name 0.5.20190701
dotenv 2.8.1
emoji_regex 3.2.3
excon 0.99.0
faraday-em_http 1.0.0
faraday-em_synchrony 1.0.0
faraday-excon 1.1.0
faraday-httpclient 1.0.1
multipart-post 2.0.0
faraday-multipart 1.0.4
faraday-net_http 1.0.1
faraday-net_http_persistent 1.2.0
faraday-patron 1.0.0
faraday-rack 1.0.0
faraday-retry 1.0.3
ruby2_keywords 0.0.5
faraday 1.10.3
http-cookie 1.0.5
faraday-cookie_jar 0.0.7
faraday_middleware 1.2.0
fastimage 2.2.6
gh_inspector 1.1.3
jwt 2.7.0
memoist 0.16.2
multi_json 1.15.0
os 1.1.4
signet 0.17.0
googleauth 1.3.0
httpclient 2.8.3
mini_mime 1.1.2
trailblazer-option 0.1.2
uber 0.1.0
representable 3.2.0
retriable 3.1.2
webrick 1.8.1
google-apis-core 0.11.0
google-apis-androidpublisher_v3 0.35.0
google-apis-playcustomapp_v1 0.13.0
google-apis-iamcredentials_v1 0.17.0
google-apis-storage_v1 0.19.0
google-cloud-env 1.6.0
google-cloud-errors 1.3.1
google-cloud-core 1.6.0
google-cloud-storage 1.44.0
json 2.6.3
mini_magick 4.12.0
naturally 2.2.1
optparse 0.1.1
plist 3.7.0
security 0.1.3
simctl 1.6.10
terminal-notifier 2.0.0
unicode-display_width 1.8.0
terminal-table 1.8.0
tty-screen 0.8.1
tty-cursor 0.7.1
tty-spinner 0.9.3
word_wrap 1.0.0
nanaimo 0.3.0
xcodeproj 1.22.0
rouge 2.0.7
xcpretty 0.3.0
xcpretty-travis-formatter 1.0.1
fastlane-plugin-app_info 0.7.0

generated on: 2023-03-08

CFBundleDisplayName can't handle UTF-8

when CFBundleDisplayName is NOT English, ipa.info[:CFBundleDisplayName] failed:

[!] undefined method []' for #<AppInfo::Parser::InfoPlist:0x00007fcc01131e90> (NoMethodError) from /private/var/root/project/iOS/fastlane-kit/GeneralFastfile.rb:16:in chdir'
from /private/var/root/project/iOS/fastlane-kit/GeneralFastfile.rb:16:in get_ipa_info' from Fastfile:202:in block (2 levels) in parsing_binding'
from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/lane.rb:33:in call' from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/runner.rb:49:in block in execute'
from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/runner.rb:45:in chdir' from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/runner.rb:45:in execute'
from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/lane_manager.rb:56:in cruise_lane' from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/command_line_handler.rb:36:in handle'
from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/commands_generator.rb:108:in block (2 levels) in run' from /Library/Ruby/Gems/2.3.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:178:in call'
from /Library/Ruby/Gems/2.3.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:153:in run' from /Library/Ruby/Gems/2.3.0/gems/commander-fastlane-4.4.6/lib/commander/runner.rb:476:in run_active_command'
from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:76:in run!' from /Library/Ruby/Gems/2.3.0/gems/commander-fastlane-4.4.6/lib/commander/delegates.rb:15:in run!'
from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/commands_generator.rb:349:in run' from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/commands_generator.rb:41:in start'
from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/fastlane/lib/fastlane/cli_tools_distributor.rb:119:in take_off' from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.130.0/bin/fastlane:23:in <top (required)>'
from /usr/local/bin/fastlane:22:in load' from /usr/local/bin/fastlane:22:in

'

ERROR: While executing gem ... (Gem::FilePermissionError)

执行gem install 报错

liming@limingdeMac-mini cocoapods % sudo gem install app-info
Password:
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin21/rbconfig.rb:230: warning: Insecure world writable dir /opt/homebrew in PATH, mode 040777
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory.

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.