├── .github ├── CONTRIBUTING.md ├── PULL_REQUEST_TEMPLATE.md ├── deploy.sh ├── inspect.rb ├── osia_category_list.rb ├── osia_convert.rb ├── osia_get_history.rb ├── osia_get_lic.rb ├── osia_get_links.rb ├── osia_helper.rb ├── osia_history_missing.rb ├── osia_tweet_clean.rb ├── osia_update_history.rb ├── osia_update_lic.rb ├── osia_update_stars.rb ├── osia_validate_categories.rb └── schema.json ├── .travis.yml ├── ARCHIVE.md ├── Dangerfile ├── LICENSE ├── README.md ├── circle.yml └── contents.json /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | To contribute to`open-source-react-native-apps`, update the **contents.json** file (this will generate the README). 2 | 3 | A new entry should update **contents.json** with this format: 4 | 5 | ```js 6 | { 7 | "title": "Name of the app", 8 | "category-ids": ["Category id"], 9 | "description": "What this app does", 10 | "source": "Link to source, usually GitHub", 11 | "screenshots": ["http://something.com/image.png"], 12 | "date_added": "Aug 6 2016", 13 | "suggested_by": "@github_username" 14 | } 15 | ``` 16 | 17 | :tada: 18 | 19 | For more information, please read https://github.com/vitorebatista/open-source-react-native-apps/wiki 20 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 1. [ ] Project URL: 10 | 2. [ ] Update contents.json instead of README 11 | 3. [ ] One project per pull request 12 | 4. [ ] Avoid iOS or open-source in description as it is assumed 13 | 5. [ ] Use this commit title format if applicable: Add app-name by @github-username 14 | 6. [ ] Use approved format for your entry 15 | 16 | 31 | -------------------------------------------------------------------------------- /.github/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | git config user.name "READMEbot" 6 | git config user.email "readmebot@users.noreply.github.com" 7 | 8 | status=`git status` 9 | 10 | if [[ $status == *"README.md"* ]] 11 | then 12 | git add README.md 13 | git commit -m "[auto] [ci skip] Generate README" 14 | fi 15 | 16 | if [[ $status == *"ARCHIVE.md"* ]] 17 | then 18 | git add ARCHIVE.md 19 | git commit -m "[auto] [ci skip] Generate ARCHIVE" 20 | fi 21 | 22 | git push --quiet "https://${GH_TOKEN}@github.com/vitorebatista/open-source-react-native-apps" master:master > /dev/null 2>&1 23 | -------------------------------------------------------------------------------- /.github/inspect.rb: -------------------------------------------------------------------------------- 1 | require 'json' 2 | require 'pp' 3 | 4 | if ARGV.count == 0 5 | puts "Usage: ruby inspect.rb " 6 | exit 7 | end 8 | 9 | c = File.read 'contents.json' 10 | j = JSON.parse c 11 | 12 | projects = j['projects'] 13 | 14 | proj = ARGV[0].to_i 15 | pp projects[proj] 16 | -------------------------------------------------------------------------------- /.github/osia_category_list.rb: -------------------------------------------------------------------------------- 1 | require_relative 'osia_helper' 2 | 3 | j = get_json 4 | c = j['categories'] 5 | 6 | osia_allowed_categories(c).each { |cat| puts cat } -------------------------------------------------------------------------------- /.github/osia_convert.rb: -------------------------------------------------------------------------------- 1 | require_relative 'osia_helper' 2 | require 'date' 3 | 4 | README = 'README.md' 5 | 6 | ARCHIVE = 'ARCHIVE.md' 7 | ARCHIVE_TAG = 'archive' 8 | 9 | def apps_archived(apps) 10 | a = apps.select {|a| a['tags'] != nil }.select {|b| b['tags'].include?ARCHIVE_TAG} 11 | a.sort_by { |k, v| k['title'] } 12 | end 13 | 14 | def apps_for_cat(apps, id) 15 | f = apps.select do |a| 16 | 17 | tags = a['tags'] 18 | if tags.nil? 19 | true 20 | else 21 | !(tags.include? ARCHIVE_TAG) 22 | end 23 | end 24 | 25 | s = f.select do |a| 26 | cat = a['category-ids'] 27 | cat.class == Array ? cat.include?(id) : (cat == id) 28 | end 29 | s.sort_by { |k, v| k['title'].downcase } 30 | end 31 | 32 | def output_apps(apps) 33 | o = '' 34 | apps.each do |a| 35 | name = a['title'] 36 | link = a['source'] 37 | itunes = a['itunes'] 38 | googleplay = a['googleplay'] 39 | homepage = a['homepage'] 40 | desc = a['description'] 41 | tags = a['tags'] 42 | stars = a['stars'] 43 | lang = a['lang'] 44 | 45 | date_added = a['date_added'] 46 | screenshots = a['screenshots'] 47 | license = a['license'] 48 | 49 | t = "#{name}" 50 | 51 | if desc.nil? 52 | t << ' ' 53 | else 54 | t << ": #{desc} " if desc.size>0 55 | end 56 | 57 | unless itunes.nil? 58 | t << "[` App Store`](#{itunes}) " 59 | end 60 | unless googleplay.nil? 61 | t << "[`Google Play`](#{googleplay}) " 62 | end 63 | o << "- #{t} \n" 64 | 65 | o << "
" 66 | 67 | details = if tags.nil? 68 | 'RN ' 69 | else 70 | '' 71 | end 72 | 73 | unless tags.nil? 74 | details << 'swift ' if tags.include? 'swift' 75 | 76 | tags.each do |t| 77 | details << "#{t.downcase} " if t.downcase!='swift' 78 | end 79 | end 80 | 81 | unless lang.nil? 82 | details << output_flag(lang) 83 | details << ' ' 84 | end 85 | 86 | unless stars.nil? 87 | details << output_stars(stars) 88 | end 89 | o << details 90 | 91 | o << "" 92 | 93 | details_list = [] 94 | 95 | details_list.push link 96 | 97 | unless homepage.nil? 98 | details_list.push homepage 99 | end 100 | 101 | unless date_added.nil? 102 | date = DateTime.parse(date_added) 103 | formatted_date = date.strftime "%B %e, %Y" 104 | details_list.push "Added #{formatted_date}" 105 | end 106 | 107 | unless license.nil? 108 | license_display = license=='other'? "`#{license}`" : "[`#{license}`](http://choosealicense.com/licenses/#{license}/)" 109 | details_list.push "License: #{license_display}" 110 | end 111 | 112 | details = "\n\n " 113 | details << details_list[0] 114 | details_list[1..-1].each { |x| details << "
#{x}" } 115 | 116 | unless screenshots.nil? 117 | details << "\n
" 118 | screenshots.each_with_index do |s, i| 119 | details << "#{name} image #{i+1} " 120 | end 121 | details << "\n
" 122 | end 123 | 124 | details << "\n
\n\n" 125 | o << details 126 | end 127 | o 128 | end 129 | 130 | def output_badges(count) 131 | date = DateTime.now 132 | date_display = date.strftime "%B %e, %Y" 133 | date_display = date_display.gsub ' ', '%20' 134 | 135 | b = "![](https://img.shields.io/badge/Projects-#{count}-green.svg) [![](https://img.shields.io/badge/Twitter-@vitorebatista-blue.svg)](https://twitter.com/vitorebatista) ![](https://img.shields.io/badge/Updated-#{date_display}-lightgrey.svg)" 136 | b 137 | end 138 | 139 | def output_flag(lang) 140 | case lang 141 | when 'deu' 142 | '🇩🇪' 143 | when 'jpn' 144 | '🇯🇵' 145 | when 'ltz' 146 | '🇱🇺' 147 | when 'nld' 148 | '🇳🇱' 149 | when 'por' 150 | '🇵🇹' 151 | when 'spa' 152 | '🇪🇸' 153 | when 'zho' 154 | '🇨🇳' 155 | else 156 | '' 157 | end 158 | end 159 | 160 | def output_stars(number) 161 | case number 162 | when 100...200 163 | '🔥' 164 | when 200...500 165 | '🔥🔥' 166 | when 500...1000 167 | '🔥🔥🔥' 168 | when 1000...2000 169 | '🔥🔥🔥🔥' 170 | when 2000...100000 171 | '🔥🔥🔥🔥🔥' 172 | else 173 | '' 174 | end 175 | end 176 | 177 | def write_readme(j) 178 | t = j['title'] 179 | subt = j['subtitle'] 180 | desc = j['description'] 181 | h = j['header'] 182 | f = j['footer'] 183 | cats = j['categories'] 184 | apps = j['projects'] 185 | 186 | output = '# ' + t 187 | output << "\n\n" 188 | output << desc 189 | output << "\n\n#{subt}\n\n" 190 | output << output_badges(apps.count) 191 | 192 | output << "\n\nJump to\n\n" 193 | 194 | cats.each do |c| 195 | title = c['title'] 196 | m = title.match /\[.*?\]/ 197 | title = m[0].sub('[', '').sub(']', '') unless m.nil? 198 | temp = "#{' ' unless c['parent']==nil }- [#{title}](\##{c['id']}) \n" 199 | output << temp 200 | end 201 | 202 | output << "- [Thanks](#thanks)\n" 203 | output << "- [Contact](#contact)\n" 204 | 205 | output << "\n" 206 | output << h 207 | output << "\n" 208 | 209 | cats.each do |c| 210 | temp = "\n#\##{'#' unless c['parent']==nil } #{c['title']} \n \n" 211 | 212 | d = c['description'] 213 | temp << "#{d} — " unless d.nil? 214 | 215 | temp << "[back to top](#readme) \n \n" 216 | output << temp 217 | 218 | cat_apps = apps_for_cat(apps, c['id']) 219 | output << output_apps(cat_apps) 220 | end 221 | 222 | output << "\n" 223 | output << f 224 | 225 | File.open(README, 'w') { |f| f.write output } 226 | puts "wrote #{README} ✨" 227 | end 228 | 229 | def write_archive(j) 230 | t = j['title'] 231 | desc = "This is an archive of the [main list](https://github.com/vitorebatista/open-source-react-native-apps) for projects that are no longer maintained / old.\n\n" 232 | f = "## Contact\n\n- [github.com/vitorebatista](https://github.com/vitorebatista)\n" 233 | apps = j['projects'] 234 | archived = apps_archived apps 235 | 236 | output = "\# #{t} Archive\n\n" 237 | output << desc 238 | 239 | archived.each do |a| 240 | t = a['title'] 241 | s = a['source'] 242 | output << "- #{t} #{s}\n" 243 | end 244 | 245 | output << "\n" 246 | output << f 247 | 248 | file = ARCHIVE 249 | File.open(file, 'w') { |f| f.write output } 250 | puts "wrote #{file} ✨" 251 | end 252 | 253 | j = get_json 254 | 255 | write_readme(j) 256 | write_archive(j) 257 | -------------------------------------------------------------------------------- /.github/osia_get_history.rb: -------------------------------------------------------------------------------- 1 | require_relative 'osia_helper' 2 | 3 | HISTORY = 'git_history' 4 | 5 | j = get_json 6 | apps = j['projects'] 7 | 8 | h = {} 9 | apps.each_with_index do |a, i| 10 | t = a['title'] 11 | puts "#{i + 1}/#{apps.count}. checking #{t}" 12 | command = "git log --all --grep='#{t}'" 13 | 14 | begin 15 | r = `#{command}` 16 | rescue e 17 | r = e 18 | end 19 | 20 | h[t] = r 21 | end 22 | 23 | File.open(HISTORY, 'w') { |f| f.write JSON.pretty_generate h } 24 | puts "wrote #{HISTORY} ✨" 25 | -------------------------------------------------------------------------------- /.github/osia_get_lic.rb: -------------------------------------------------------------------------------- 1 | require 'octokit' 2 | require 'awesome_print' 3 | 4 | g = ARGV[0] 5 | 6 | if g.nil? 7 | puts "Usage: get_lic \n i.e. get_lic dkhamsing/BrandColors" 8 | exit 9 | end 10 | 11 | client = Octokit 12 | 13 | begin 14 | r = client.repo g, accept: 'application/vnd.github.drax-preview+json' 15 | ap r 16 | lic = r[:license][:key] 17 | 18 | print "Result: " 19 | ap lic 20 | rescue => e 21 | puts "Error: #{e}" 22 | end 23 | -------------------------------------------------------------------------------- /.github/osia_get_links.rb: -------------------------------------------------------------------------------- 1 | require_relative 'osia_helper' 2 | 3 | UNIQUES = 'check-unique.txt' # should be unique 4 | LINKS = 'check-links.txt' # allow dupes 5 | INFO = 'check-info.txt' # errors are allowed 6 | 7 | def apps_archived(apps) 8 | a = apps.select {|a| a['tags'] != nil }.select {|b| b['tags'].include?'archive'} 9 | a.sort_by { |k, v| k['title'] } 10 | end 11 | 12 | j = get_json 13 | a = j['projects'] 14 | archived = apps_archived a 15 | active = a.reject { |x| archived.include? x } 16 | 17 | uniques = [] 18 | info = [] 19 | active.each do |z| 20 | uniques.push z['source'] 21 | uniques.push z['screenshots'] unless z['screenshots'].nil? 22 | info.push z['itunes'] unless z['itunes'].nil? 23 | info.push z['googleplay'] unless z['googleplay'].nil? 24 | end 25 | 26 | uniques.each_with_index { |z, i| puts "#{i+1} #{z}" } 27 | 28 | puts "Writing #{UNIQUES}" 29 | File.open(UNIQUES, 'w') { |f| f.puts uniques } 30 | 31 | puts "Writing #{INFO}" 32 | File.open(INFO, 'w') { |f| f.puts info } 33 | 34 | links = [] 35 | active.each do |z| 36 | links.push z['homepage'] unless z['homepage'].nil? 37 | links.push z['title'] unless z['title'].nil? 38 | links.push z['description'] unless z['description'].nil? 39 | end 40 | 41 | c = j['categories'] 42 | c.each do |z| 43 | links.push z['title'] 44 | end 45 | 46 | links.each_with_index { |z, i| puts "#{i+1} #{z}" } 47 | 48 | puts "Writing #{LINKS}" 49 | File.open(LINKS, 'w') { |f| f.puts links } 50 | -------------------------------------------------------------------------------- /.github/osia_helper.rb: -------------------------------------------------------------------------------- 1 | require 'json' 2 | 3 | FILE = 'contents.json' 4 | 5 | def get_json 6 | JSON.parse(File.read FILE) 7 | end 8 | 9 | def osia_allowed_categories(c) 10 | c.sort_by { |h| h['title']}.map { |x| x['id']} 11 | end -------------------------------------------------------------------------------- /.github/osia_history_missing.rb: -------------------------------------------------------------------------------- 1 | require_relative 'osia_helper' 2 | 3 | j = get_json 4 | apps = j['projects'] 5 | 6 | i = 0 7 | apps.each do |a| 8 | if a['date_added'].nil? 9 | puts "#{i + 1}. History missing for #{a['title']}" 10 | i = i + 1 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /.github/osia_tweet_clean.rb: -------------------------------------------------------------------------------- 1 | require 'delete_my_tweets' 2 | 3 | c = { 4 | "consumer_key" => "X7TNI7gi1Bo3l3hRwShZr6Q5l", 5 | "consumer_secret" => "clafmSRaf7AnnusNMaZEhMajEESfhw3XTGBfTwlfgBcjwRSHcn", 6 | "access_token" => ENV['TWITTER_ACCESS_TOKEN'], 7 | "access_token_secret" => ENV['TWITTER_ACCESS_TOKEN_SECRET'], 8 | "filter" => { 9 | "exclude" => [ 10 | "Add", 11 | "add" 12 | ] 13 | } 14 | } 15 | 16 | DeleteMyTweets.twitter_delete(c) do |o| 17 | puts o 18 | end 19 | puts 'all done 🐤' 20 | -------------------------------------------------------------------------------- /.github/osia_update_history.rb: -------------------------------------------------------------------------------- 1 | require_relative 'osia_helper' 2 | 3 | require 'awesome_print' 4 | require 'colored' 5 | 6 | HISTORY = 'git_history' 7 | 8 | def get_author(a) 9 | a = a.gsub 'Author:', '' 10 | 11 | u = 12 | if a.include? 'users.noreply.github.com>' 13 | m = /<.*?@/.match a 14 | '@' + m[0].sub('@','') 15 | else 16 | m = /.* true) 7 | 8 | j = get_json 9 | apps = j['projects'] 10 | updated = [] 11 | 12 | apps.each do |a| 13 | s = a['source'] 14 | if s.nil? 15 | updated.push a 16 | elsif !(s.include? 'github') 17 | updated.push a 18 | else 19 | begin 20 | g = s.gsub('https://github.com/', '') 21 | r = client.repo g, accept: 'application/vnd.github.drax-preview+json' 22 | lic = r[:license][:key] 23 | print lic 24 | print ':' 25 | 26 | a['license'] = lic 27 | puts a['license'] 28 | 29 | updated.push a 30 | rescue => e 31 | a['license'] = 'other' 32 | puts a['license'] 33 | 34 | updated.push a 35 | next 36 | end 37 | end 38 | end 39 | 40 | j['projects'] = updated 41 | 42 | File.open(FILE, 'w') { |f| f.write JSON.pretty_generate(j) } 43 | puts "\nUpdated #{FILE} ⭐️" 44 | -------------------------------------------------------------------------------- /.github/osia_update_stars.rb: -------------------------------------------------------------------------------- 1 | require_relative 'osia_helper' 2 | 3 | require 'octokit' 4 | require 'netrc' 5 | 6 | client = Octokit::Client.new(:netrc => true) 7 | 8 | j = get_json 9 | apps = j['projects'] 10 | updated = [] 11 | 12 | apps.each do |a| 13 | s = a['source'] 14 | if s.nil? 15 | updated.push a 16 | elsif !(s.include? 'github') 17 | updated.push a 18 | else 19 | print '.' 20 | begin 21 | g = s.gsub('https://github.com/', '') 22 | r = client.repo g 23 | stars = r['stargazers_count'] 24 | a['stars'] = stars 25 | updated.push a 26 | rescue => e 27 | puts "\nerror for #{s}: #{e}" 28 | updated.push a 29 | next 30 | end 31 | end 32 | end 33 | 34 | j['projects'] = updated 35 | 36 | File.open(FILE, 'w') { |f| f.write JSON.pretty_generate(j) } 37 | puts "\nUpdated #{FILE} ⭐️" 38 | -------------------------------------------------------------------------------- /.github/osia_validate_categories.rb: -------------------------------------------------------------------------------- 1 | require_relative 'osia_helper' 2 | 3 | j = get_json 4 | c = j['categories'] 5 | apps = j['projects'] 6 | 7 | def failed(cat, app) 8 | puts "‼️ #{cat} is not a valid category for #{app}" 9 | exit 1 10 | end 11 | 12 | def verify(cat, allowed, app) 13 | failed(cat, app) unless allowed.include? cat 14 | end 15 | 16 | allowed_categories = osia_allowed_categories(c) 17 | 18 | apps.each do |a| 19 | cat = a['category-ids'] 20 | 21 | if cat.nil? 22 | puts "missing category for #{a}" 23 | exit 1 24 | end 25 | 26 | if cat.class == String 27 | verify(cat, allowed_categories, a) 28 | elsif cat.class == Array 29 | cat.each { |d| verify(d, allowed_categories, a) } 30 | end 31 | end 32 | 33 | puts 'categories validated ✅' 34 | -------------------------------------------------------------------------------- /.github/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "$id": "https://raw.githubusercontent.com/vitorebatista/open-source-react-native-apps/master/.github/schema.json", 4 | "type": "object", 5 | "properties": { 6 | "title": { 7 | "type": "string" 8 | }, 9 | "subtitle": { 10 | "type": "string" 11 | }, 12 | "description": { 13 | "type": "string" 14 | }, 15 | "header": { 16 | "type": "string" 17 | }, 18 | "footer": { 19 | "type": "string" 20 | }, 21 | "categories": { 22 | "type": "array", 23 | "uniqueItems": true, 24 | "items": { 25 | "title": "Category Object", 26 | "description": "A category to group project objects under.", 27 | "properties": { 28 | "title": { 29 | "title": "Category Title", 30 | "description": "A human-readable identifier for the category.", 31 | "type": "string" 32 | }, 33 | "id": { 34 | "title": "Category Identifier", 35 | "description": "A short identifier designed for programs. It should only contain lowercase alphanumeric characters and a - (dash) for replacing spaces.", 36 | "type": "string", 37 | "pattern": "^[^A-Z_ ]+$" 38 | }, 39 | "description": { 40 | "title": "Category Description", 41 | "description": "A description of the category meant to be provided to the user.", 42 | "type": "string", 43 | "default": "" 44 | }, 45 | "parent": { 46 | "title": "Category Parent", 47 | "description": "Makes the current category a subcategory of the category with an id that matches this value.", 48 | "type": ["string", "null"], 49 | "default": null 50 | } 51 | }, 52 | "required": ["title", "id"], 53 | "additionalProperties": false 54 | } 55 | }, 56 | "projects": { 57 | "type": "array", 58 | "uniqueItems": true, 59 | "items": { 60 | "title": "Project Object", 61 | "description": "An object that holds all the information for a specific project.", 62 | "properties": { 63 | "title": { 64 | "title": "Project Title", 65 | "description": "The official title of the project.", 66 | "type": "string" 67 | }, 68 | "category-ids": { 69 | "title": "Project Category", 70 | "description": "The list of categories that the project falls under. If it is a list, the categories should be ordered from most to least relevant/applicable to the project.", 71 | "type": ["array"], 72 | "items": { 73 | "type": "string" 74 | } 75 | }, 76 | "description": { 77 | "title": "Project Description", 78 | "description": "A brief 1 sentence summary of the project.", 79 | "type": "string" 80 | }, 81 | "lang": { 82 | "title": "Project Language", 83 | "description": "A three-character ISO 639-2 code representing the primary language of the project, or a list of such codes, with the primary language first.", 84 | "type": ["string", "array"], 85 | "minLength": 3, 86 | "maxLength": 3, 87 | "minItems": 1, 88 | "items": { 89 | "type": "string", 90 | "minLength": 3, 91 | "maxLength": 3 92 | }, 93 | "default": "eng" 94 | }, 95 | "country": { 96 | "title": "Project Country", 97 | "description": "The country that the project operates out of or the country the project is designed for (if designed for a specific location). Null if country is unclear/unspecified.", 98 | "type": ["string", "null"], 99 | "minLength": 2, 100 | "maxLength": 2, 101 | "default": null 102 | }, 103 | "license": { 104 | "title": "Project License", 105 | "description": "The license that the project's source is under.", 106 | "type": "string", 107 | "enum": ["mit", "mpl-2.0", "gpl-3.0", "lgpl-3.0", "unlicense", "bsd-2-clause", "isc", "lgpl-2.1", "gpl-2.0", "apache-2.0", "cc0-1.0", "artistic-2.0", "bsd-3-clause", "agpl-3.0", "epl-1.0", "other"], 108 | "default": "other" 109 | }, 110 | "source": { 111 | "title": "Project Source", 112 | "description": "A URL where the source code to the project can be found.", 113 | "type": "string", 114 | "pattern": "^https?:\\/\\/.*?\\..*$" 115 | }, 116 | "homepage": { 117 | "title": "Project Homepage", 118 | "description": "The URL for the project's homepage.", 119 | "type": ["string", "null"], 120 | "pattern": "^https?:\\/\\/.*?\\..*$", 121 | "default": null 122 | }, 123 | "itunes": { 124 | "title": "Project iTunes Page", 125 | "description": "The URL for iTunes page for the project's app.", 126 | "type": ["string", "null"], 127 | "pattern": "^https:\\/\\/itunes\\.apple\\.com\\/.*?app\\/([^\\/]+\\/)?id[0-9]+$", 128 | "default": null 129 | }, 130 | "googleplay": { 131 | "title": "Project Google Play Page", 132 | "description": "The URL for Google Play page for the project's app.", 133 | "type": ["string", "null"], 134 | "pattern": "^https:\\/\\/play\\.google\\.com\\/store\\/apps\\/details\\?id[0-9]+$", 135 | "default": null 136 | }, 137 | "stars": { 138 | "title": "Project Stars", 139 | "description": "The number of stars a project has on Github, or null if the project is not a Github project.", 140 | "type": ["null", "number"], 141 | "multipleOf": 1.0, 142 | "minimum": 0, 143 | "default": null 144 | }, 145 | "tags": { 146 | "title": "Project Tags", 147 | "description": "A place to put any metadata for a project. The items can be any type.", 148 | "type": "array", 149 | "default": [] 150 | }, 151 | "suggested_by": { 152 | "title": "Suggested By", 153 | "description": "Name of person who suggested project.", 154 | "type": "string" 155 | }, 156 | "date_added": { 157 | "title": "Date Added", 158 | "description": "Date when project was added.", 159 | "type": "string" 160 | }, 161 | "screenshots": { 162 | "title": "Screenshots", 163 | "description": "Links to screenshot images.", 164 | "type": "array" 165 | } 166 | }, 167 | "required": ["title", "category-ids", "source"], 168 | "additionalProperties": false 169 | } 170 | } 171 | }, 172 | "required": ["title", "categories", "projects"], 173 | "additionalProperties": false 174 | } 175 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 2.2 3 | before_script: 4 | - gem install awesome_bot 5 | - gem install danger 6 | script: 7 | - ruby .github/osia_get_links.rb 8 | - awesome_bot check-unique.txt -a 302 -w xbmc/xbmc 9 | - awesome_bot check-links.txt --allow-dupe -w wheelmap.org,sourceforge,radioparadise,iltofa,douban 10 | after_script: 11 | - awesome_bot check-info.txt -a 403 12 | - danger 13 | -------------------------------------------------------------------------------- /ARCHIVE.md: -------------------------------------------------------------------------------- 1 | # Open-Source React-Native Apps Archive 2 | 3 | This is an archive of the [main list](https://github.com/vitorebatista/open-source-react-native-apps) for projects that are no longer maintained / old. 4 | 5 | 6 | ## Contact 7 | 8 | - [github.com/vitorebatista](https://github.com/vitorebatista) 9 | -------------------------------------------------------------------------------- /Dangerfile: -------------------------------------------------------------------------------- 1 | # Check links 2 | def ab_results(file) 3 | require 'json' 4 | results = File.read file 5 | j = JSON.parse results 6 | if j['error']==true 7 | warn j['title'] 8 | markdown j['message'] 9 | end 10 | end 11 | 12 | ab_results 'ab-results-check-info.txt-markdown-table.json' 13 | ab_results 'ab-results-check-links.txt-markdown-table.json' 14 | ab_results 'ab-results-check-unique.txt-markdown-table.json' 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Open-Source React-Native Apps 2 | 3 | 6 | 7 | 8 | 9 | A collaborative list of open-source React-Native apps, your [contribution](https://github.com/vitorebatista/open-source-react-native-apps/blob/master/.github/CONTRIBUTING.md) is welcome :smile: 10 | 11 | ![](https://img.shields.io/badge/Projects-45-green.svg) [![](https://img.shields.io/badge/Twitter-@vitorebatista-blue.svg)](https://twitter.com/vitorebatista) ![](https://img.shields.io/badge/Updated-July%20%201,%202017-lightgrey.svg) 12 | 13 | Sponsor 14 | 15 | Jump to 16 | 17 | - [Clone](#clone) 18 | - [Communication](#communication) 19 | - [Conference](#conference) 20 | - [Developer](#developer) 21 | - [Game](#game) 22 | - [Media](#media) 23 | - [Audio](#audio) 24 | - [Content](#content) 25 | - [GIF](#gif) 26 | - [Video](#video) 27 | - [News](#news) 28 | - [Official](#official) 29 | - [Sample](#sample) 30 | - [Social](#social) 31 | - [Tasks](#tasks) 32 | - [Bonus](#bonus) 33 | - [Weather](#weather) 34 | - [Thanks](#thanks) 35 | - [Contact](#contact) 36 | 37 | ``` 38 | 100+ Stars: 🔥 39 | 200+ Stars: 🔥🔥 40 | 500+ Stars: 🔥🔥🔥 41 | 1000+ Stars: 🔥🔥🔥🔥 42 | 2000+ Stars: 🔥🔥🔥🔥🔥 43 | 44 | Most projects are in English, exceptions have a flag 45 | 🇨🇳 Project is in Chinese 46 | 🇪🇸 Project is in Spanish, etc 47 | 48 | Click ► to show more details 49 | ``` 50 | 51 | ## Clone 52 | 53 | [back to top](#readme) 54 | 55 | - AirBnb 56 |
RN 🔥🔥 57 | 58 | https://github.com/VctrySam/AirBnb
Added August 14, 2016
License: `other` 59 |
60 | 61 | - Assemblies: Developer-focused Meetup clone 62 |
RN 🔥🔥 63 | 64 | https://github.com/buildreactnative/assemblies
Added May 2, 2016
License: `other` 65 |
Assemblies image 1 Assemblies image 2 Assemblies image 3 66 |
67 |
68 | 69 | - Dribbble: Dribbble app built with React Native 70 |
parallax 🔥🔥🔥🔥 71 | 72 | https://github.com/catalinmiron/react-native-dribbble-app
Added June 13, 2015
License: [`mit`](http://choosealicense.com/licenses/mit/) 73 |
Dribbble image 1 74 |
75 |
76 | 77 | - FC Barcelona 78 |
RN 79 | 80 | https://github.com/VctrySam/FCBarca
Added August 14, 2016
License: `other` 81 |
82 | 83 | - Finance: iOS's Stocks app written in React Native [`Google Play`](https://play.google.com/store/apps/details?id=com.kfpun.finance) 84 |
RN 🔥🔥🔥🔥 85 | 86 | https://github.com/7kfpun/FinanceReactNative
Added July 8, 2015
License: [`mit`](http://choosealicense.com/licenses/mit/) 87 |
Finance image 1 Finance image 2 Finance image 3 Finance image 4 Finance image 5 Finance image 6 88 |
89 |
90 | 91 | - Pokemon 92 |
RN 🔥 93 | 94 | https://github.com/VctrySam/Pokemon
Added August 14, 2016
License: `other` 95 |
96 | 97 | - SnapChat 98 |
RN 🔥🔥 99 | 100 | https://github.com/VctrySam/SnapChat
Added August 14, 2016
License: `other` 101 |
102 | 103 | - Tinder 104 |
RN 🔥🔥 105 | 106 | https://github.com/VctrySam/Tinder
Added August 14, 2016
License: `other` 107 |
108 | 109 | - Twitter 110 |
RN 111 | 112 | https://github.com/VctrySam/Twitter
Added August 14, 2016
License: `other` 113 |
114 | 115 | - Whatsapp 116 |
RN 🔥🔥🔥 117 | 118 | https://github.com/VctrySam/whatsapp
Added August 14, 2016
License: `other` 119 |
120 | 121 | 122 | ## Communication 123 | 124 | [back to top](#readme) 125 | 126 | - Twitter 127 |
RN 128 | 129 | https://github.com/VctrySam/Twitter
Added August 14, 2016
License: `other` 130 |
131 | 132 | - Whatsapp 133 |
RN 🔥🔥🔥 134 | 135 | https://github.com/VctrySam/whatsapp
Added August 14, 2016
License: `other` 136 |
137 | 138 | 139 | ## Conference 140 | 141 | [back to top](#readme) 142 | 143 | - F8 2016: Official F8 app 144 |
RN 🔥🔥🔥🔥🔥 145 | 146 | https://github.com/fbsamples/f8app
Added April 14, 2016
License: `other` 147 |
F8 2016 image 1 148 |
149 |
150 | 151 | - london-react 152 |
RN 153 | 154 | https://github.com/JoeStanton/london-react
Added August 2, 2015
License: `other` 155 |
156 | 157 | - Nortal TechDay 2015 158 |
RN 🔥🔥 159 | 160 | https://github.com/mikkoj/NortalTechDay
Added May 3, 2015
License: [`mit`](http://choosealicense.com/licenses/mit/) 161 |
Nortal TechDay 2015 image 1 Nortal TechDay 2015 image 2 162 |
163 |
164 | 165 | - The official Chain React Conf App [` App Store`](https://itunes.apple.com/us/app/chain-react-conf/id1239112816) [`Google Play`](https://play.google.com/store/apps/details?id=com.chainreactapp) 166 |
RN 167 | 168 | https://github.com/infinitered/ChainReactApp
Added July 1, 2017 169 |
The official Chain React Conf App image 1 170 |
171 |
172 | 173 | 174 | ## Developer 175 | 176 | [back to top](#readme) 177 | 178 | - PocketNode: Lightweight Node REPL 179 |
RN 180 | 181 | https://github.com/mzabriskie/PocketNode
Added February 4, 2016
License: `other` 182 |
PocketNode image 1 183 |
184 |
185 | 186 | - Product Kitty: Product Hunt app 187 |
RN 🔥 188 | 189 | https://github.com/rkho/product-kitty
Added September 2, 2015
License: `other` 190 |
191 | 192 | - Property Finder 193 |
RN 🔥🔥 194 | 195 | https://github.com/ColinEberhardt/ReactNative-PropertyFinder
Added April 10, 2015
License: `other` 196 |
197 | 198 | 199 | ## Game 200 | 201 | [back to top](#readme) 202 | 203 | - 2048: App by Facebook 204 |
RN 205 | 206 | https://github.com/facebook/react-native/tree/master/Examples/2048
Added February 5, 2016
License: `other` 207 |
208 | 209 | - NBA allyoop: NBA game scores 210 |
RN 🔥🔥🔥🔥 211 | 212 | https://github.com/wwayne/react-native-nba-app
Added January 6, 2016
License: [`mit`](http://choosealicense.com/licenses/mit/) 213 |
NBA allyoop image 1 214 |
215 |
216 | 217 | - PocketGear: PocketGear is a clean and simple Pokédex app for Pokémon GO you'll ever need, made by Pokémon enthusiasts to help you trainers get the best out of your Pokémons. 218 |
RN 219 | 220 | https://github.com/satya164/PocketGear
Added September 14, 2016
License: `other` 221 |
222 | 223 | - Pokemon 224 |
RN 🔥 225 | 226 | https://github.com/VctrySam/Pokemon
Added August 14, 2016
License: `other` 227 |
228 | 229 | - PokeVision: React Native app leveraging the GoRadar API in order to display all the Pokémon around you. 230 |
RN 231 | 232 | https://github.com/Morhaus/rn-pokevision/
Added September 14, 2016
License: `other` 233 |
PokeVision image 1 234 |
235 |
236 | 237 | - Sudoku 238 |
RN 239 | 240 | https://github.com/christopherdro/react-native-sudoku
Added March 10, 2016
License: `other` 241 |
Sudoku image 1 242 |
243 |
244 | 245 | - TicTacToe: App by Facebook 246 |
RN 247 | 248 | https://github.com/facebook/react-native/tree/master/Examples/TicTacToe
Added February 5, 2016
License: `other` 249 |
250 | 251 | - Twitch 252 |
RN 253 | 254 | https://github.com/IFours/react-native-twitch
Added February 4, 2016
License: `other` 255 |
Twitch image 1 256 |
257 |
258 | 259 | 260 | ## Media 261 | 262 | Image, video, audio, reading — [back to top](#readme) 263 | 264 | 265 | ### Audio 266 | 267 | [back to top](#readme) 268 | 269 | - iTunes Catalog Search 270 |
RN 271 | 272 | https://github.com/alexissan/ReactNativeWorkshop
Added June 13, 2015
License: `other` 273 |
iTunes Catalog Search image 1 iTunes Catalog Search image 2 iTunes Catalog Search image 3 274 |
275 |
276 | 277 | - Songkick 278 |
RN 279 | 280 | https://github.com/ArnaudRinquin/sk-react-native
Added October 27, 2015
License: `other` 281 |
Songkick image 1 282 |
283 |
284 | 285 | 286 | ### Content 287 | 288 | [back to top](#readme) 289 | 290 | 291 | ### GIF 292 | 293 | Mostly using http://giphy.com/ — [back to top](#readme) 294 | 295 | 296 | ### Video 297 | 298 | [back to top](#readme) 299 | 300 | - Movies: App by Facebook 301 |
RN 302 | 303 | https://github.com/facebook/react-native/tree/master/Examples/Movies
Added February 5, 2016
License: `other` 304 |
305 | 306 | - Twitch 307 |
RN 308 | 309 | https://github.com/IFours/react-native-twitch
Added February 4, 2016
License: `other` 310 |
Twitch image 1 311 |
312 |
313 | 314 | 315 | ## News 316 | 317 | [back to top](#readme) 318 | 319 | - Hacker News app by jsdf 320 |
RN 🔥 321 | 322 | https://github.com/jsdf/ReactNativeHackerNews
Added March 30, 2016
License: `other` 323 |
Hacker News app by jsdf image 1 Hacker News app by jsdf image 2 324 |
325 |
326 | 327 | - HackerNews Reader: Hacker News Reader [` App Store`](https://itunes.apple.com/app/hacker-news-reader-react-native/id1067161633) [`Google Play`](https://play.google.com/store/apps/details?id=com.hackernews) 328 |
RN 🔥🔥🔥🔥🔥 329 | 330 | https://github.com/iSimar/HackerNews-React-Native
Added August 14, 2016
License: `other` 331 |
HackerNews Reader image 1 HackerNews Reader image 2 HackerNews Reader image 3 HackerNews Reader image 4 332 |
333 |
334 | 335 | - newswatch: News app based on YouTube playlists 336 |
RN 337 | 338 | https://github.com/bradoyler/newswatch-react-native
Added May 15, 2015
License: `other` 339 |
newswatch image 1 340 |
341 |
342 | 343 | - RSS Reader 344 |
RN 345 | 346 | https://github.com/christopherdro/react-native-rss-reader
Added June 22, 2015
License: `other` 347 |
RSS Reader image 1 348 |
349 |
350 | 351 | 352 | ## Official 353 | 354 | [back to top](#readme) 355 | 356 | - F8 2016: Official F8 app 357 |
RN 🔥🔥🔥🔥🔥 358 | 359 | https://github.com/fbsamples/f8app
Added April 14, 2016
License: `other` 360 |
F8 2016 image 1 361 |
362 |
363 | 364 | 365 | ## Sample 366 | 367 | [back to top](#readme) 368 | 369 | - Facebook Login 370 |
RN 🔥🔥🔥 371 | 372 | https://github.com/brentvatne/react-native-login
Added April 14, 2015
License: `other` 373 |
Facebook Login image 1 374 |
375 |
376 | 377 | - Iceland Earthquakes 378 |
RN 379 | 380 | https://github.com/paranoida/IcelandEarthquakes
Added May 7, 2015
License: [`mit`](http://choosealicense.com/licenses/mit/) 381 |
Iceland Earthquakes image 1 382 |
383 |
384 | 385 | - Kitten Tricks: A perfect starter kit for your next cross-platform React Native app. [` App Store`](https://itunes.apple.com/us/app/kitten-tricks/id1246143230) [`Google Play`](https://play.google.com/store/apps/details?id=com.akveo.kittenTricks) 386 |
RN 🔥🔥🔥🔥 387 | 388 | https://github.com/akveo/kittenTricks
Added July 1, 2017 389 |
Kitten Tricks image 1 390 |
391 |
392 | 393 | - UIExplorer: The UIExplorer is a sample app that showcases React Native views and modules. 394 |
RN 395 | 396 | https://github.com/facebook/react-native/tree/master/Examples/UIExplorer
Added February 5, 2016
License: `other` 397 |
398 | 399 | 400 | ## Social 401 | 402 | [back to top](#readme) 403 | 404 | - Around Me: Display Instagram photos around your location 405 |
instagram api mapview 🔥 406 | 407 | https://github.com/bgryszko/react-native-example
Added October 13, 2015
License: `other` 408 |
Around Me image 1 409 |
410 |
411 | 412 | - Assemblies: Developer-focused Meetup clone 413 |
RN 🔥🔥 414 | 415 | https://github.com/buildreactnative/assemblies
Added May 2, 2016
License: `other` 416 |
Assemblies image 1 Assemblies image 2 Assemblies image 3 417 |
418 |
419 | 420 | - Den: View houses for sale in the Northwest 421 |
RN 🔥🔥 422 | 423 | https://github.com/asamiller/den
Added May 29, 2015
License: [`mit`](http://choosealicense.com/licenses/mit/) 424 |
Den image 1 425 |
426 |
427 | 428 | - Dribbble: Dribbble app built with React Native 429 |
parallax 🔥🔥🔥🔥 430 | 431 | https://github.com/catalinmiron/react-native-dribbble-app
Added June 13, 2015
License: [`mit`](http://choosealicense.com/licenses/mit/) 432 |
Dribbble image 1 433 |
434 |
435 | 436 | - Facebook Login 437 |
RN 🔥🔥🔥 438 | 439 | https://github.com/brentvatne/react-native-login
Added April 14, 2015
License: `other` 440 |
Facebook Login image 1 441 |
442 |
443 | 444 | - SnapChat 445 |
RN 🔥🔥 446 | 447 | https://github.com/VctrySam/SnapChat
Added August 14, 2016
License: `other` 448 |
449 | 450 | - Tinder 451 |
RN 🔥🔥 452 | 453 | https://github.com/VctrySam/Tinder
Added August 14, 2016
License: `other` 454 |
455 | 456 | - Twitch 457 |
RN 458 | 459 | https://github.com/IFours/react-native-twitch
Added February 4, 2016
License: `other` 460 |
Twitch image 1 461 |
462 |
463 | 464 | - Twitter 465 |
RN 466 | 467 | https://github.com/VctrySam/Twitter
Added August 14, 2016
License: `other` 468 |
469 | 470 | 471 | ## Tasks 472 | 473 | [back to top](#readme) 474 | 475 | - To Do List 476 |
RN 477 | 478 | https://github.com/joemaddalone/react-native-todo
Added June 20, 2016
License: `other` 479 |
480 | 481 | 482 | ## Bonus 483 | 484 | [back to top](#readme) 485 | 486 | - awesome-macOS 487 |
other 🔥🔥🔥🔥🔥 488 | 489 | https://github.com/iCHAIT/awesome-macOS 490 |
491 | 492 | - open-source-android-apps 493 |
other 🔥🔥🔥🔥🔥 494 | 495 | https://github.com/pcqpcq/open-source-android-apps 496 |
497 | 498 | - open-source-ios-apps 499 |
other 🔥🔥🔥🔥🔥 500 | 501 | https://github.com/dkhamsing/open-source-ios-apps 502 |
503 | 504 | 505 | ## Weather 506 | 507 | [back to top](#readme) 508 | 509 | - Weather by JakeLin 510 |
RN 511 | 512 | https://github.com/JakeLin/ReactNativeWeather
Added May 3, 2016
License: [`mit`](http://choosealicense.com/licenses/mit/) 513 |
Weather by JakeLin image 1 514 |
515 |
516 | 517 | 518 | ## Thanks 519 | 520 | This list was inspired by [open-source-ios-apps](https://github.com/dkhamsing/open-source-ios-apps). Thanks to all the [contributors](https://github.com/vitorebatista/open-source-react-native-apps/graphs/contributors) 🎉 521 | 522 | ## Contact 523 | 524 | - [github.com/vitorebatista](https://github.com/vitorebatista) 525 | - [twitter.com/vitorebatista](https://twitter.com/vitorebatista) 526 | -------------------------------------------------------------------------------- /circle.yml: -------------------------------------------------------------------------------- 1 | machine: 2 | ruby: 3 | version: 2.2.0 4 | test: 5 | pre: 6 | - sudo pip install json-spec 7 | override: 8 | - json validate --schema-file=.github/schema.json --document-file=contents.json 9 | - ruby .github/osia_validate_categories.rb 10 | deployment: 11 | master: 12 | branch: master 13 | commands: 14 | - ruby .github/osia_convert.rb 15 | - ./.github/deploy.sh 16 | - gem install delete_my_tweets 17 | - ruby .github/osia_tweet_clean.rb 18 | -------------------------------------------------------------------------------- /contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Open-Source React-Native Apps", 3 | "subtitle": "A collaborative list of open-source React-Native apps, your [contribution](https://github.com/vitorebatista/open-source-react-native-apps/blob/master/.github/CONTRIBUTING.md) is welcome :smile:", 4 | "description": "", 5 | "header": "```\n 100+ Stars: 🔥\n 200+ Stars: 🔥🔥\n 500+ Stars: 🔥🔥🔥\n1000+ Stars: 🔥🔥🔥🔥\n2000+ Stars: 🔥🔥🔥🔥🔥\n\nMost projects are in English, exceptions have a flag\n🇨🇳 Project is in Chinese\n🇪🇸 Project is in Spanish, etc\n\nClick ► to show more details\n```", 6 | "footer": "## Thanks\n\nThis list was inspired by [open-source-ios-apps](https://github.com/dkhamsing/open-source-ios-apps). Thanks to all the [contributors](https://github.com/vitorebatista/open-source-react-native-apps/graphs/contributors) 🎉 \n\n## Contact\n\n- [github.com/vitorebatista](https://github.com/vitorebatista)\n- [twitter.com/vitorebatista](https://twitter.com/vitorebatista)\n", 7 | "categories": [ 8 | { 9 | "title": "Clone", 10 | "id": "clone" 11 | }, 12 | { 13 | "title": "Communication", 14 | "id": "communication" 15 | }, 16 | { 17 | "title": "Conference", 18 | "id": "conference" 19 | }, 20 | { 21 | "title": "Developer", 22 | "id": "developer" 23 | }, 24 | { 25 | "title": "Game", 26 | "id": "game" 27 | }, 28 | { 29 | "title": "Media", 30 | "id": "media", 31 | "description": "Image, video, audio, reading" 32 | }, 33 | { 34 | "title": "Audio", 35 | "id": "audio", 36 | "parent": "media" 37 | }, 38 | { 39 | "title": "Content", 40 | "id": "content", 41 | "parent": "media" 42 | }, 43 | { 44 | "title": "GIF", 45 | "id": "gif", 46 | "description": "Mostly using http://giphy.com/", 47 | "parent": "media" 48 | }, 49 | { 50 | "title": "Video", 51 | "id": "video", 52 | "parent": "media" 53 | }, 54 | { 55 | "title": "News", 56 | "id": "news" 57 | }, 58 | { 59 | "title": "Official", 60 | "id": "official" 61 | }, 62 | { 63 | "title": "Sample", 64 | "id": "sample" 65 | }, 66 | { 67 | "title": "Social", 68 | "id": "social" 69 | }, 70 | { 71 | "title": "Tasks", 72 | "id": "tasks" 73 | }, 74 | { 75 | "title": "Bonus", 76 | "id": "bonus" 77 | }, 78 | { 79 | "title": "Weather", 80 | "id": "weather" 81 | } 82 | ], 83 | "projects": [ 84 | { 85 | "title": "Nortal TechDay 2015", 86 | "category-ids": [ 87 | "conference" 88 | ], 89 | "screenshots": [ 90 | "http://res.cloudinary.com/mikkoj/image/upload/v1467119333/nortal-techday-1.mov_triupn.gif", 91 | "http://res.cloudinary.com/mikkoj/image/upload/v1467119489/nortal-techday-2.mov_lcvqqx.gif" 92 | ], 93 | "source": "https://github.com/mikkoj/NortalTechDay", 94 | "stars": 213, 95 | "license": "mit", 96 | "date_added": "Sun May 3 09:15:53 2015 -0700", 97 | "suggested_by": "@dkhamsing" 98 | }, 99 | { 100 | "title": "NBA allyoop", 101 | "category-ids": [ 102 | "game" 103 | ], 104 | "description": "NBA game scores", 105 | "license": "mit", 106 | "source": "https://github.com/wwayne/react-native-nba-app", 107 | "stars": 1485, 108 | "screenshots": [ 109 | "https://cloud.githubusercontent.com/assets/5305874/12059257/dacf1ad0-af92-11e5-920c-ba4818d8dc1d.png" 110 | ], 111 | "date_added": "Wed, 6 Jan 2016 11:37:19 -0800", 112 | "suggested_by": "@dkhamsing" 113 | }, 114 | { 115 | "title": "2048", 116 | "category-ids": [ 117 | "game" 118 | ], 119 | "description": "App by Facebook", 120 | "source": "https://github.com/facebook/react-native/tree/master/Examples/2048", 121 | "license": "other", 122 | "date_added": "Fri, 5 Feb 2016 07:55:10 -0800", 123 | "suggested_by": "@dkhamsing" 124 | }, 125 | { 126 | "title": "Movies", 127 | "category-ids": [ 128 | "video" 129 | ], 130 | "description": "App by Facebook", 131 | "source": "https://github.com/facebook/react-native/tree/master/Examples/Movies", 132 | "license": "other", 133 | "date_added": "Fri, 5 Feb 2016 07:55:10 -0800", 134 | "suggested_by": "@dkhamsing" 135 | }, 136 | { 137 | "title": "TicTacToe", 138 | "category-ids": [ 139 | "game" 140 | ], 141 | "description": "App by Facebook", 142 | "source": "https://github.com/facebook/react-native/tree/master/Examples/TicTacToe", 143 | "license": "other", 144 | "date_added": "Fri, 5 Feb 2016 07:55:10 -0800", 145 | "suggested_by": "@dkhamsing" 146 | }, 147 | { 148 | "title": "UIExplorer", 149 | "category-ids": [ 150 | "sample" 151 | ], 152 | "description": "The UIExplorer is a sample app that showcases React Native views and modules.", 153 | "source": "https://github.com/facebook/react-native/tree/master/Examples/UIExplorer", 154 | "license": "other", 155 | "date_added": "Fri, 5 Feb 2016 07:55:10 -0800", 156 | "suggested_by": "@dkhamsing" 157 | }, 158 | { 159 | "title": "Around Me", 160 | "category-ids": [ 161 | "social" 162 | ], 163 | "tags": ["Instagram API","MapView"], 164 | "description": "Display Instagram photos around your location", 165 | "source": "https://github.com/bgryszko/react-native-example", 166 | "screenshots": ["https://cdn.rawgit.com/bgryszko/react-native-example/master/preview.gif"], 167 | "stars": 105, 168 | "license": "other", 169 | "date_added": "Tue Oct 13 07:33:44 2015 -0700", 170 | "suggested_by": "@dkhamsing" 171 | }, 172 | { 173 | "title": "Assemblies", 174 | "category-ids": [ 175 | "social", 176 | "clone" 177 | ], 178 | "description": "Developer-focused Meetup clone", 179 | "source": "https://github.com/buildreactnative/assemblies", 180 | "screenshots": [ 181 | "https://github.com/buildreactnative/assemblies/raw/master/screenshots/assemblies-a.png", 182 | "https://github.com/buildreactnative/assemblies/raw/master/screenshots/assemblies-b.png", 183 | "https://github.com/buildreactnative/assemblies/raw/master/screenshots/assemblies-c.png" 184 | ], 185 | "stars": 250, 186 | "license": "other", 187 | "date_added": "Mon May 2 07:40:43 2016 -0700", 188 | "suggested_by": "@dkhamsing" 189 | }, 190 | { 191 | "title": "Calculator", 192 | "category-ids": [ 193 | "calculator" 194 | ], 195 | "description": "React Native calculator", 196 | "license": "mit", 197 | "source": "https://github.com/benoitvallon/react-native-nw-react-calculator", 198 | "screenshots": [ 199 | "https://github.com/benoitvallon/react-native-nw-react-calculator/raw/master/images/mobile-apps.png" 200 | ], 201 | "stars": 3786, 202 | "date_added": "Mon Mar 23 13:37:57 2015 -0700", 203 | "suggested_by": "@dkhamsing" 204 | }, 205 | { 206 | "title": "Den", 207 | "category-ids": [ 208 | "social" 209 | ], 210 | "description": "View houses for sale in the Northwest", 211 | "license": "mit", 212 | "source": "https://github.com/asamiller/den", 213 | "screenshots": [ 214 | "https://cloud.githubusercontent.com/assets/5133623/7338978/01976cce-ec13-11e4-9b79-f2e2e47503b6.jpg" 215 | ], 216 | "stars": 357, 217 | "date_added": "Fri May 29 07:38:01 2015 -0700", 218 | "suggested_by": "@dkhamsing" 219 | }, 220 | { 221 | "title": "Dribbble", 222 | "category-ids": [ 223 | "social", 224 | "clone" 225 | ], 226 | "description":"Dribbble app built with React Native", 227 | "tags": ["Parallax"], 228 | "license": "mit", 229 | "source": "https://github.com/catalinmiron/react-native-dribbble-app", 230 | "screenshots":[ 231 | "https://cloud.githubusercontent.com/assets/2805320/8113463/db61b072-1076-11e5-8aa2-52417f019ea0.jpg" 232 | ], 233 | "stars": 1626, 234 | "date_added": "Sat Jun 13 07:33:39 2015 -0700", 235 | "suggested_by": "@xu6148152" 236 | }, 237 | { 238 | "title": "F8 2016", 239 | "category-ids": [ 240 | "official", 241 | "conference" 242 | ], 243 | "description": "Official F8 app", 244 | "source": "https://github.com/fbsamples/f8app", 245 | "stars": 9994, 246 | "license": "other", 247 | "screenshots": [ 248 | "https://github.com/fbsamples/f8app/raw/master/.github/screenshot-app@2x.png" 249 | ], 250 | "date_added": "Thu Apr 14 07:21:28 2016 -0700", 251 | "suggested_by": "@dkhamsing" 252 | }, 253 | { 254 | "title": "Facebook Login", 255 | "category-ids": [ 256 | "sample", 257 | "social" 258 | ], 259 | "source": "https://github.com/brentvatne/react-native-login", 260 | "screenshots":[ 261 | "https://github.com/brentvatne/react-native-login/raw/master/demo!!!.gif" 262 | ], 263 | "stars": 578, 264 | "license": "other", 265 | "date_added": "Tue Apr 14 07:22:46 2015 -0700", 266 | "suggested_by": "@dkhamsing" 267 | }, 268 | { 269 | "title": "Finance", 270 | "category-ids": [ 271 | "clone" 272 | ], 273 | "googleplay":"https://play.google.com/store/apps/details?id=com.kfpun.finance", 274 | "description": "iOS's Stocks app written in React Native", 275 | "license": "mit", 276 | "source": "https://github.com/7kfpun/FinanceReactNative", 277 | "screenshots":[ 278 | "https://raw.github.com/7kfpun/FinanceReactNative/master/screenshots/screenshot0.png", 279 | "https://raw.github.com/7kfpun/FinanceReactNative/master/screenshots/screenshot1.png", 280 | "https://raw.github.com/7kfpun/FinanceReactNative/master/screenshots/screenshot2.png", 281 | "https://raw.github.com/7kfpun/FinanceReactNative/master/screenshots/screenshot3.png", 282 | "https://raw.github.com/7kfpun/FinanceReactNative/master/screenshots/screenshot4.png", 283 | "https://raw.github.com/7kfpun/FinanceReactNative/master/screenshots/screenshot5.png" 284 | ], 285 | "stars": 1177, 286 | "date_added": "Wed Jul 8 06:45:27 2015 -0700", 287 | "suggested_by": "@dkhamsing" 288 | }, 289 | { 290 | "title": "Foreign Exchange", 291 | "category-ids": [ 292 | "finance" 293 | ], 294 | "source": "https://github.com/peralmq/ForeignExchangeApp", 295 | "screenshots":[ 296 | "https://cloud.githubusercontent.com/assets/238536/7063949/469613cc-deab-11e4-9d67-c727bcc0171b.png", 297 | "https://cloud.githubusercontent.com/assets/238536/7063950/46983512-deab-11e4-8f67-3111e711aa3b.png" 298 | ], 299 | "stars": 13, 300 | "license": "other", 301 | "date_added": "Fri Jul 24 07:24:09 2015 -0700", 302 | "suggested_by": "@dkhamsing" 303 | }, 304 | { 305 | "title": "HackerNews Reader", 306 | "category-ids": [ 307 | "news" 308 | ], 309 | "description": "Hacker News Reader", 310 | "source": "https://github.com/iSimar/HackerNews-React-Native", 311 | "googleplay":"https://play.google.com/store/apps/details?id=com.hackernews", 312 | "itunes": "https://itunes.apple.com/app/hacker-news-reader-react-native/id1067161633", 313 | "stars": 2967, 314 | "screenshots": [ 315 | "http://imgur.com/8OV8MVj.gif","http://imgur.com/9mrmir9.gif", 316 | "http://imgur.com/KuySKlC.gif","http://i.imgur.com/88ZW3Ls.gif" 317 | ], 318 | "license": "other", 319 | "date_added": "Mon Aug 14 08:06:58 2016 -0800", 320 | "suggested_by": "@vitorebatista" 321 | }, 322 | { 323 | "title": "Iceland Earthquakes", 324 | "category-ids": [ 325 | "sample" 326 | ], 327 | "license": "mit", 328 | "source": "https://github.com/paranoida/IcelandEarthquakes", 329 | "screenshots":["https://raw.githubusercontent.com/paranoida/IcelandEarthquakes/master/preview.png"], 330 | "stars": 24, 331 | "date_added": "Thu May 7 07:22:47 2015 -0700", 332 | "suggested_by": "@dkhamsing" 333 | }, 334 | { 335 | "title": "iTunes Catalog Search", 336 | "category-ids": [ 337 | "audio" 338 | ], 339 | "source": "https://github.com/alexissan/ReactNativeWorkshop", 340 | "screenshots":[ 341 | "https://github.com/alexissan/ReactNativeWorkshop/raw/master/Screenshots/scsh1.png", 342 | "https://github.com/alexissan/ReactNativeWorkshop/raw/master/Screenshots/scsh2.png", 343 | "https://github.com/alexissan/ReactNativeWorkshop/raw/master/Screenshots/scsh3.png" 344 | ], 345 | "stars": 42, 346 | "license": "other", 347 | "date_added": "Sat Jun 13 07:33:39 2015 -0700", 348 | "suggested_by": "@dkhamsing" 349 | }, 350 | { 351 | "title": "london-react", 352 | "category-ids": [ 353 | "conference" 354 | ], 355 | "source": "https://github.com/JoeStanton/london-react", 356 | "stars": 40, 357 | "license": "other", 358 | "date_added": "Sun Aug 2 08:14:23 2015 -0700", 359 | "suggested_by": "@dkhamsing" 360 | }, 361 | { 362 | "title": "newswatch", 363 | "category-ids": [ 364 | "news" 365 | ], 366 | "description": "News app based on YouTube playlists", 367 | "source": "https://github.com/bradoyler/newswatch-react-native", 368 | "screenshots":[ 369 | "https://cloud.githubusercontent.com/assets/425966/7039857/2f122810-dd95-11e4-99c4-db636d4c66a9.gif" 370 | ], 371 | "stars": 93, 372 | "license": "other", 373 | "date_added": "Fri May 15 07:34:03 2015 -0700", 374 | "suggested_by": "@dkhamsing" 375 | }, 376 | { 377 | "title": "PocketNode", 378 | "category-ids": [ 379 | "developer" 380 | ], 381 | "description": "Lightweight Node REPL", 382 | "source": "https://github.com/mzabriskie/PocketNode", 383 | "screenshots": [ 384 | "https://cloud.githubusercontent.com/assets/199035/10439739/49d80e60-70f9-11e5-94b1-16e06eeb3a8f.png" 385 | ], 386 | "stars": 47, 387 | "license": "other", 388 | "date_added": "Thu Feb 4 11:49:30 2016 -0800", 389 | "suggested_by": "@dkhamsing" 390 | }, 391 | { 392 | "title": "Product Kitty", 393 | "category-ids": [ 394 | "developer" 395 | ], 396 | "description": "Product Hunt app", 397 | "source": "https://github.com/rkho/product-kitty", 398 | "stars": 111, 399 | "license": "other", 400 | "date_added": "Wed Sep 2 17:34:05 2015 -0700", 401 | "suggested_by": "Richard Kho" 402 | }, 403 | { 404 | "title": "Property Finder", 405 | "category-ids": [ 406 | "developer" 407 | ], 408 | "source": "https://github.com/ColinEberhardt/ReactNative-PropertyFinder", 409 | "stars": 258, 410 | "license": "other", 411 | "date_added": "Fri, 10 Apr 2015 08:27:49 -0700", 412 | "suggested_by": "@dkhamsing" 413 | }, 414 | { 415 | "title": "Hacker News app by jsdf", 416 | "category-ids": [ 417 | "news" 418 | ], 419 | "source": "https://github.com/jsdf/ReactNativeHackerNews", 420 | "screenshots":[ 421 | "http://i.imgur.com/gVmrxDe.png", 422 | "http://i.imgur.com/FYOgBYc.png" 423 | ], 424 | "stars": 198, 425 | "license": "other", 426 | "date_added": "Wed Mar 30 08:38:11 2016 -0700", 427 | "suggested_by": "@dkhamsing" 428 | }, 429 | { 430 | "title": "RSS Reader", 431 | "category-ids": [ 432 | "news" 433 | ], 434 | "source": "https://github.com/christopherdro/react-native-rss-reader", 435 | "screenshots":[ 436 | "https://github.com/christopherdro/react-native-rss-reader/blob/master/RssReaderDemo.gif" 437 | ], 438 | "stars": 84, 439 | "license": "other", 440 | "date_added": "Mon Jun 22 07:28:20 2015 -0700", 441 | "suggested_by": "@dkhamsing" 442 | }, 443 | { 444 | "title": "Songkick", 445 | "category-ids": [ 446 | "audio" 447 | ], 448 | "source": "https://github.com/ArnaudRinquin/sk-react-native", 449 | "screenshots":[ 450 | "https://github.com/ArnaudRinquin/sk-react-native/raw/master/screenshots.png" 451 | ], 452 | "stars": 92, 453 | "license": "other", 454 | "date_added": "Tue Oct 27 14:57:49 2015 -0700", 455 | "suggested_by": "@dkhamsing" 456 | }, 457 | { 458 | "title": "Spacepics", 459 | "category-ids": [ 460 | "images" 461 | ], 462 | "description": "A small app displaying NASA's Picture of the Day", 463 | "source": "https://github.com/campezzi/react-native-spacepics", 464 | "stars": 16, 465 | "license": "other", 466 | "date_added": "Tue May 26 15:07:49 2015 -0700", 467 | "suggested_by": "@dkhamsing" 468 | }, 469 | { 470 | "title": "Sudoku", 471 | "category-ids": [ 472 | "game" 473 | ], 474 | "source": "https://github.com/christopherdro/react-native-sudoku", 475 | "screenshots":[ 476 | "https://github.com/christopherdro/react-native-sudoku/raw/master/demo.gif" 477 | ], 478 | "stars": 41, 479 | "license": "other", 480 | "date_added": "Thu Mar 10 07:41:09 2016 -0800", 481 | "suggested_by": "@dkhamsing" 482 | }, 483 | { 484 | "title": "To Do List", 485 | "category-ids": [ 486 | "tasks" 487 | ], 488 | "source": "https://github.com/joemaddalone/react-native-todo", 489 | "stars": 95, 490 | "license": "other", 491 | "date_added": "Mon Jun 20 07:40:35 2016 -0700", 492 | "suggested_by": "@dkhamsing" 493 | }, 494 | { 495 | "title": "Twitch", 496 | "category-ids": [ 497 | "video", 498 | "social", 499 | "game" 500 | ], 501 | "source": "https://github.com/IFours/react-native-twitch", 502 | "screenshots":[ 503 | "https://github.com/IFours/react-native-twitch/raw/rn0.15/assets/twitch.gif" 504 | ], 505 | "stars": 74, 506 | "license": "other", 507 | "date_added": "Thu Feb 4 11:48:21 2016 -0800", 508 | "suggested_by": "@dkhamsing" 509 | }, 510 | { 511 | "title": "Weather by JakeLin", 512 | "category-ids": [ 513 | "weather" 514 | ], 515 | "license": "mit", 516 | "source": "https://github.com/JakeLin/ReactNativeWeather", 517 | "screenshots":[ 518 | "https://raw.githubusercontent.com/JakeLin/ReactNativeWeather/master/screenshots/screenshot-iOS.png" 519 | ], 520 | "stars": 16, 521 | "date_added": "Tue May 3 08:57:34 2016 -0700", 522 | "suggested_by": "@dkhamsing" 523 | }, 524 | { 525 | "title": "Whatsapp", 526 | "category-ids": [ 527 | "communication", 528 | "clone" 529 | ], 530 | "source": "https://github.com/VctrySam/whatsapp", 531 | "stars": 967, 532 | "license": "other", 533 | "date_added": "Mon Aug 14 08:18:58 2016 -0800", 534 | "suggested_by": "@vitorebatista" 535 | }, 536 | { 537 | "title": "SnapChat", 538 | "category-ids": [ 539 | "social", 540 | "clone" 541 | ], 542 | "source": "https://github.com/VctrySam/SnapChat", 543 | "stars": 431, 544 | "license": "other", 545 | "date_added": "Mon Aug 14 08:19:58 2016 -0800", 546 | "suggested_by": "@vitorebatista" 547 | }, 548 | { 549 | "title": "Pokemon", 550 | "category-ids": [ 551 | "game", 552 | "clone" 553 | ], 554 | "source": "https://github.com/VctrySam/Pokemon", 555 | "stars": 169, 556 | "license": "other", 557 | "date_added": "Mon Aug 14 08:06:58 2016 -0800", 558 | "suggested_by": "@vitorebatista" 559 | }, 560 | { 561 | "title": "Tinder", 562 | "category-ids": [ 563 | "social", 564 | "clone" 565 | ], 566 | "source": "https://github.com/VctrySam/Tinder", 567 | "stars": 367, 568 | "license": "other", 569 | "date_added": "Mon Aug 14 08:06:58 2016 -0800", 570 | "suggested_by": "@vitorebatista" 571 | }, 572 | { 573 | "title": "Twitter", 574 | "category-ids": [ 575 | "social", 576 | "communication", 577 | "clone" 578 | ], 579 | "source": "https://github.com/VctrySam/Twitter", 580 | "stars": 91, 581 | "license": "other", 582 | "date_added": "Mon Aug 14 08:06:58 2016 -0800", 583 | "suggested_by": "@vitorebatista" 584 | }, 585 | { 586 | "title": "AirBnb", 587 | "category-ids": [ 588 | "clone" 589 | ], 590 | "source": "https://github.com/VctrySam/AirBnb", 591 | "stars": 238, 592 | "license": "other", 593 | "date_added": "Mon Aug 14 08:06:58 2016 -0800", 594 | "suggested_by": "@vitorebatista" 595 | }, 596 | { 597 | "title": "FC Barcelona", 598 | "category-ids": [ 599 | "clone" 600 | ], 601 | "source": "https://github.com/VctrySam/FCBarca", 602 | "stars": 32, 603 | "license": "other", 604 | "date_added": "Mon Aug 14 08:06:58 2016 -0800", 605 | "suggested_by": "@vitorebatista" 606 | }, 607 | { 608 | "title": "PocketGear", 609 | "category-ids": [ 610 | "game" 611 | ], 612 | "description":"PocketGear is a clean and simple Pokédex app for Pokémon GO you'll ever need, made by Pokémon enthusiasts to help you trainers get the best out of your Pokémons.", 613 | "source": "https://github.com/satya164/PocketGear", 614 | "stars": 5, 615 | "license": "other", 616 | "date_added": "Mon Sep 14 11:13:58 2016 -0800", 617 | "suggested_by": "@vitorebatista" 618 | }, 619 | { 620 | "title": "PokeVision", 621 | "category-ids": [ 622 | "game" 623 | ], 624 | "description":"React Native app leveraging the GoRadar API in order to display all the Pokémon around you.", 625 | "source": "https://github.com/Morhaus/rn-pokevision/", 626 | "screenshots":[ 627 | "https://github.com/Morhaus/rn-pokevision/blob/master/screenshot.png" 628 | ], 629 | "stars": 37, 630 | "license": "other", 631 | "date_added": "Mon Sep 14 11:13:58 2016 -0800", 632 | "suggested_by": "@vitorebatista" 633 | }, 634 | { 635 | "title": "open-source-ios-apps", 636 | "source": "https://github.com/dkhamsing/open-source-ios-apps", 637 | "category-ids": [ 638 | "bonus" 639 | ], 640 | "tags": ["other"], 641 | "suggested_by": "@vitorebatista", 642 | "stars": 10887 643 | }, 644 | { 645 | "title": "awesome-macOS", 646 | "source": "https://github.com/iCHAIT/awesome-macOS", 647 | "category-ids": [ 648 | "bonus" 649 | ], 650 | "tags": ["other"], 651 | "suggested_by": "@dkhamsing", 652 | "stars": 4860 653 | }, 654 | { 655 | "title": "open-source-android-apps", 656 | "source": "https://github.com/pcqpcq/open-source-android-apps", 657 | "category-ids": [ 658 | "bonus" 659 | ], 660 | "tags": ["other"], 661 | "suggested_by": "@dkhamsing", 662 | "stars": 3635 663 | }, 664 | { 665 | "title": "The official Chain React Conf App", 666 | "source": "https://github.com/infinitered/ChainReactApp", 667 | "screenshots":[ 668 | "https://github.com/infinitered/ChainReactApp/blob/master/_art/marketing.jpg?raw=true" 669 | ], 670 | "category-ids": [ 671 | "conference" 672 | ], 673 | "googleplay":"https://play.google.com/store/apps/details?id=com.chainreactapp", 674 | "itunes": "https://itunes.apple.com/us/app/chain-react-conf/id1239112816", 675 | "suggested_by": "@vitorebatista", 676 | "date_added": "Jul 1 2017", 677 | "stars": 81 678 | }, 679 | { 680 | "title": "Kitten Tricks", 681 | "description": "A perfect starter kit for your next cross-platform React Native app.", 682 | "source": "https://github.com/akveo/kittenTricks", 683 | "screenshots":[ 684 | "https://i.imgur.com/wgod3bf.jpg" 685 | ], 686 | "category-ids": [ 687 | "sample" 688 | ], 689 | "googleplay":"https://play.google.com/store/apps/details?id=com.akveo.kittenTricks", 690 | "itunes": "https://itunes.apple.com/us/app/kitten-tricks/id1246143230", 691 | "suggested_by": "@vitorebatista", 692 | "date_added": "Jul 1 2017", 693 | "stars": 1351 694 | }, 695 | { 696 | "title": "GitPoint", 697 | "category-ids": [ 698 | "developer" 699 | ], 700 | "description": "A beautiful mobile GitHub client written in React Native.", 701 | "license": "mit", 702 | "source": "https://github.com/gitpoint/git-point", 703 | "screenshots":[ 704 | "http://i.imgur.com/P4YoYYu.png" 705 | ], 706 | "stars": 1746, 707 | "itunes": "https://itunes.apple.com/app/gitpoint/id1251245162", 708 | "date_added": "Jul 26 2017", 709 | "suggested_by": "@andrewda" 710 | } 711 | ] 712 | } 713 | --------------------------------------------------------------------------------