mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-21 06:54:08 -07:00
Merge branch 'master' into feat/eleventy-1.x
# Conflicts: # package-lock.json # package.json
This commit is contained in:
commit
87e43b1c52
50 changed files with 15314 additions and 15005 deletions
77
.eleventy.js
77
.eleventy.js
|
|
@ -1,7 +1,35 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Eleventy command line debugging codes
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Eleventy:Config
|
||||||
|
* Eleventy:UserConfig
|
||||||
|
* Eleventy:TemplateConfig
|
||||||
|
*
|
||||||
|
* Eleventy:CommandCheck
|
||||||
|
*
|
||||||
|
* Eleventy:EleventyFiles
|
||||||
|
* Eleventy:TemplateWriter
|
||||||
|
* Eleventy:TemplatePassthroughManager
|
||||||
|
* Eleventy:TemplatePassthrough
|
||||||
|
* Eleventy:TemplateData
|
||||||
|
* Eleventy:Template
|
||||||
|
*
|
||||||
|
* Eleventy:ComputedData
|
||||||
|
*
|
||||||
|
* Eleventy:Benchmark
|
||||||
|
*
|
||||||
|
* EleventyAssets
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import replace_css_url from 'replace-css-url'
|
import replace_css_url from 'replace-css-url'
|
||||||
import dotenv from 'dotenv'
|
import dotenv from 'dotenv'
|
||||||
import { InlineCodeManager } from '@11ty/eleventy-assets'
|
import { InlineCodeManager } from '@11ty/eleventy-assets'
|
||||||
|
import { transformSync } from 'esbuild'
|
||||||
|
|
||||||
|
|
||||||
import nuxtConfig from './nuxt.config'
|
import nuxtConfig from './nuxt.config'
|
||||||
|
|
||||||
|
|
@ -13,6 +41,8 @@ function getAssetFilePath(componentName) {
|
||||||
return `./${componentName}`
|
return `./${componentName}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const inlineAssetCache = new Map()
|
||||||
|
|
||||||
module.exports = function ( eleventyConfig ) {
|
module.exports = function ( eleventyConfig ) {
|
||||||
// console.log('eleventyConfig', eleventyConfig)
|
// console.log('eleventyConfig', eleventyConfig)
|
||||||
|
|
||||||
|
|
@ -25,17 +55,50 @@ module.exports = function ( eleventyConfig ) {
|
||||||
const cssManager = new InlineCodeManager()
|
const cssManager = new InlineCodeManager()
|
||||||
const jsManager = new InlineCodeManager()
|
const jsManager = new InlineCodeManager()
|
||||||
|
|
||||||
eleventyConfig.addJavaScriptFunction('usingComponent', function ( componentName ) {
|
eleventyConfig.addJavaScriptFunction('usingComponent', async function ( componentName ) {
|
||||||
// console.log('Getting component', componentName)
|
// console.log('Getting component', componentName)
|
||||||
|
|
||||||
|
const assetFileName = getAssetFilePath( componentName )
|
||||||
|
|
||||||
|
// console.log('Cache size', inlineAssetCache)
|
||||||
|
|
||||||
if ( componentName.includes('.js') ) {
|
if ( componentName.includes('.js') ) {
|
||||||
|
|
||||||
// If a never before seen component, add the JS code
|
// If a never before seen component, add the JS code
|
||||||
if(!jsManager.hasComponentCode(componentName)) {
|
if( !inlineAssetCache.has( assetFileName ) ) {
|
||||||
const fileContents = fs.readFileSync(getAssetFilePath(componentName), { encoding: "UTF-8" })
|
|
||||||
|
let contents = ''
|
||||||
|
|
||||||
|
// if ( inlineAssetCache.has( assetFileName ) ) {
|
||||||
|
// console.log('Reading component from cache', componentName)
|
||||||
|
// console.log('Cache size', inlineAssetCache.size)
|
||||||
|
|
||||||
|
// contents = inlineAssetCache.get( assetFileName )
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
console.log('Reading component file', componentName)
|
||||||
|
const javascriptCode = fs.readFileSync( assetFileName, { encoding: "UTF-8" })
|
||||||
|
|
||||||
|
console.log('Minifying code', componentName)
|
||||||
|
const minified = await transformSync(javascriptCode, {
|
||||||
|
// loader: 'ts',
|
||||||
|
// bundle: true,
|
||||||
|
minify: true,
|
||||||
|
// format: 'iife',
|
||||||
|
})//minify( javascriptCode )
|
||||||
|
|
||||||
|
// console.log('minified', minified)
|
||||||
|
|
||||||
|
contents = minified.code
|
||||||
|
|
||||||
|
inlineAssetCache.set( assetFileName, contents )
|
||||||
|
|
||||||
// console.log('Got component', componentName, componentCss)
|
// console.log('Got component', componentName, componentCss)
|
||||||
|
|
||||||
jsManager.addComponentCode(componentName, fileContents)
|
jsManager.addComponentCode(componentName, contents)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log usage for this url
|
// Log usage for this url
|
||||||
|
|
@ -44,7 +107,7 @@ module.exports = function ( eleventyConfig ) {
|
||||||
} else if ( componentName.includes('.css') ) {
|
} else if ( componentName.includes('.css') ) {
|
||||||
// If a never before seen component, add the CSS code
|
// If a never before seen component, add the CSS code
|
||||||
if(!cssManager.hasComponentCode(componentName)) {
|
if(!cssManager.hasComponentCode(componentName)) {
|
||||||
const fileContents = fs.readFileSync(getAssetFilePath(componentName), { encoding: "UTF-8" })
|
const fileContents = fs.readFileSync( assetFileName, { encoding: "UTF-8" })
|
||||||
|
|
||||||
// Replace urls in css with relative urls for dist folder
|
// Replace urls in css with relative urls for dist folder
|
||||||
const parsedCss = replace_css_url(
|
const parsedCss = replace_css_url(
|
||||||
|
|
@ -94,6 +157,10 @@ module.exports = function ( eleventyConfig ) {
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
// https://www.11ty.dev/docs/config/#template-formats
|
||||||
|
// Default: html,liquid,ejs,md,hbs,mustache,haml,pug,njk,11ty.js
|
||||||
|
templateFormats: [ '11ty.js' ],
|
||||||
|
|
||||||
dir: {
|
dir: {
|
||||||
input: 'pages-eleventy',
|
input: 'pages-eleventy',
|
||||||
output: 'dist',
|
output: 'dist',
|
||||||
|
|
|
||||||
10
.github/ISSUE_TEMPLATE/app-request-template.md
vendored
10
.github/ISSUE_TEMPLATE/app-request-template.md
vendored
|
|
@ -8,11 +8,19 @@ assignees: ''
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Replace the text inside the {}'s with your own.
|
Replace the {} and the text inside with your own text.
|
||||||
|
|
||||||
|
Final Line Example
|
||||||
|
```
|
||||||
|
**Proposed App Status**
|
||||||
|
✳️ Runs via Rosetta with native support currently in development
|
||||||
|
```
|
||||||
|
|
||||||
For a great example issue check out https://github.com/ThatGuySam/doesitarm/issues/358
|
For a great example issue check out https://github.com/ThatGuySam/doesitarm/issues/358
|
||||||
|
|
||||||
|
|
||||||
|
--------- Delete this line and everything above it before submitting ---------
|
||||||
|
|
||||||
|
|
||||||
**The official name of the app**
|
**The official name of the app**
|
||||||
{What's the full official name of the app}
|
{What's the full official name of the app}
|
||||||
|
|
|
||||||
33
.github/workflows/run-ava-tests.js.yml
vendored
Normal file
33
.github/workflows/run-ava-tests.js.yml
vendored
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
|
||||||
|
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||||
|
|
||||||
|
name: Run Ava Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [14.x, 15.x]
|
||||||
|
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- run: |
|
||||||
|
touch .env
|
||||||
|
echo ${{ secrets.GH_ENV }} >> .env
|
||||||
|
- run: npm ci
|
||||||
|
- run: npm run generate
|
||||||
|
- run: npm test
|
||||||
2
.nvmrc
2
.nvmrc
|
|
@ -1 +1 @@
|
||||||
v15.11.0
|
v16.0.0
|
||||||
|
|
|
||||||
306
README.md
306
README.md
|
|
@ -25,6 +25,7 @@ Any comments, suggestions? [Let us know!](https://github.com/ThatGuySam/doesitar
|
||||||
* [Music and Audio Tools](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#music-and-audio-tools)
|
* [Music and Audio Tools](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#music-and-audio-tools)
|
||||||
* [Photo and Graphic Tools](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#photo-and-graphic-tools)
|
* [Photo and Graphic Tools](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#photo-and-graphic-tools)
|
||||||
* [Video and Motion Tools](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#video-and-motion-tools)
|
* [Video and Motion Tools](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#video-and-motion-tools)
|
||||||
|
* [Live Production and Performance](#live-production-and-performance)
|
||||||
* [3D and Architecture](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#3d-and-architecture)
|
* [3D and Architecture](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#3d-and-architecture)
|
||||||
* [Productivity Tools](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#productivity-tools)
|
* [Productivity Tools](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#productivity-tools)
|
||||||
* [Entertainment and Media Apps](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#entertainment-and-media-apps)
|
* [Entertainment and Media Apps](https://github.com/ThatGuySam/doesitarm/blob/master/README.md#entertainment-and-media-apps)
|
||||||
|
|
@ -39,9 +40,10 @@ Any comments, suggestions? [Let us know!](https://github.com/ThatGuySam/doesitar
|
||||||
|
|
||||||
* [Adobe XD](https://www.adobe.com/products/xd.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [Adobe XD](https://www.adobe.com/products/xd.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Alacritty](https://github.com/alacritty/alacritty/releases) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/600#issue-834311784)
|
* [Alacritty](https://github.com/alacritty/alacritty/releases) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/600#issue-834311784)
|
||||||
* [Anaconda](https://www.anaconda.com/products/individual#Downloads) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/123)
|
* [Anaconda](https://www.anaconda.com/products/individual#Downloads) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/123)
|
||||||
* [Android Studio](https://developer.android.com/studio) - ✳️ Yes, works via Rosetta 2, emulator only available as preview. - [Source](https://github.com/ThatGuySam/doesitarm/issues/48#issuecomment-732143252) [Emulator Issue](https://issuetracker.google.com/issues/173624439) [Emulator Preview Download](https://github.com/741g/android-emulator-m1-preview/releases)
|
* [Android Studio](https://developer.android.com/studio) - ✳️ Yes, works via Rosetta 2 with native support in preview. - [Source](https://github.com/ThatGuySam/doesitarm/issues/48#issuecomment-732143252) [Native Preview](https://androidstudio.googleblog.com/2021/04/android-studio-arctic-fox-canary-15.html)
|
||||||
* [Apache Maven](https://maven.apache.org/download.cgi) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/215#issuecomment-742910724)
|
* [Apache Maven](https://maven.apache.org/download.cgi) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/215#issuecomment-742910724)
|
||||||
|
* [Apple Transporter](https://apps.apple.com/app/transporter/id1450874784?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v1.2.1
|
||||||
* [App Preview Video Converter](https://apps.apple.com/us/app/app-preview-video-converter/id1137451860) - ✅ Yes, full native support as of v1.7.4 - [Release Notes](https://www.bridgetech.io)
|
* [App Preview Video Converter](https://apps.apple.com/us/app/app-preview-video-converter/id1137451860) - ✅ Yes, full native support as of v1.7.4 - [Release Notes](https://www.bridgetech.io)
|
||||||
* [Arduino IDE](https://www.arduino.cc/en/software) - ✳️ Reported working via Rosetta with native support currently in development - [Issue](https://github.com/arduino/Arduino/issues/10836)
|
* [Arduino IDE](https://www.arduino.cc/en/software) - ✳️ Reported working via Rosetta with native support currently in development - [Issue](https://github.com/arduino/Arduino/issues/10836)
|
||||||
* [Asset Catalog Creator](https://apps.apple.com/us/app/asset-catalog-creator-pro/id809625456) - ✅ Yes, full native support as of v3.7.4 - [Release Notes](https://www.bridgetech.io) [View on Setapp](https://setapp.sjv.io/c/2708043/905851/5114)
|
* [Asset Catalog Creator](https://apps.apple.com/us/app/asset-catalog-creator-pro/id809625456) - ✅ Yes, full native support as of v3.7.4 - [Release Notes](https://www.bridgetech.io) [View on Setapp](https://setapp.sjv.io/c/2708043/905851/5114)
|
||||||
|
|
@ -52,37 +54,41 @@ Any comments, suggestions? [Let us know!](https://github.com/ThatGuySam/doesitar
|
||||||
* [Caddy](https://caddyserver.com/download) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/577#issuecomment-783684858)
|
* [Caddy](https://caddyserver.com/download) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/577#issuecomment-783684858)
|
||||||
* [Charles Web Debugging Proxy](https://www.charlesproxy.com/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/122#issuecomment-751907737)
|
* [Charles Web Debugging Proxy](https://www.charlesproxy.com/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/122#issuecomment-751907737)
|
||||||
* [CLion](https://www.jetbrains.com/clion/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
* [CLion](https://www.jetbrains.com/clion/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
||||||
* [CocoaPods](https://cocoapods.org/) - ✳️ Yes, it works via Rosetta 2 - [Issue](https://github.com/CocoaPods/CocoaPods/issues/9907)
|
* [CocoaPods](https://cocoapods.org/) - ✳️ Yes, it works via Rosetta 2 - [Fully Native on Homebrew](https://doesitarm.com/formula/cocoapods/) [Issue](https://github.com/CocoaPods/CocoaPods/issues/9907)
|
||||||
|
* [CodeRunner](https://coderunnerapp.com/) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/486#issuecomment-806065818)
|
||||||
|
* [Core Shell](https://coreshell.app/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/core-shell)
|
||||||
* [CotEditor](https://coteditor.com) - ✅ Yes, full native support as of 4.0.0 - [App Store](https://itunes.apple.com/app/coteditor/id1024640650)
|
* [CotEditor](https://coteditor.com) - ✅ Yes, full native support as of 4.0.0 - [App Store](https://itunes.apple.com/app/coteditor/id1024640650)
|
||||||
* [Cyberduck](https://cyberduck.io/download/) - ✳️ Yes, works via Rosetta 2 with native build in development - [Source](https://github.com/ThatGuySam/doesitarm/issues/333)
|
* [Cyberduck](https://cyberduck.io/download/) - ✳️ Yes, works via Rosetta 2 with native build in development - [Source](https://github.com/ThatGuySam/doesitarm/issues/333)
|
||||||
* [Dash for macOS](https://kapeli.com/dash) - ✅ Yes, Full Native Apple Silicon Support as of v6 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/575#issue-812547431) [Release Notes](https://blog.kapeli.com/dash-6)
|
* [Dash for macOS](https://kapeli.com/dash) - ✅ Yes, Full Native Apple Silicon Support as of v6 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/575#issue-812547431) [Release Notes](https://blog.kapeli.com/dash-6)
|
||||||
* [DataGrip](https://www.jetbrains.com/datagrip/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
* [DataGrip](https://www.jetbrains.com/datagrip/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
||||||
* [DBeaver](https://dbeaver.io/) - ✳️ Yes, works via Rosetta 2 using the pkg installer - [Issue Tracking](https://github.com/dbeaver/dbeaver/issues/10470)
|
* [DBeaver](https://dbeaver.io/) - ✳️ Yes, works via Rosetta 2 using the pkg installer - [Issue Tracking](https://github.com/dbeaver/dbeaver/issues/10470)
|
||||||
* [Deno](https://deno.land/) - ✅ Yes, Full Native Apple Silicon Support - [Issue](https://github.com/denoland/deno/issues/8346)
|
* [Deno](https://deno.land/) - ✅ Yes, Full Native Apple Silicon Support - [Issue](https://github.com/denoland/deno/issues/8346)
|
||||||
|
* [Eclipse IDE](https://www.eclipse.org/downloads/) - ✳️ Yes, runs via Rosetta 2 translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/626#issue-860190467)
|
||||||
* [Gitfox](https://www.gitfox.app/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.com/apps/gitfox)
|
* [Gitfox](https://www.gitfox.app/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.com/apps/gitfox)
|
||||||
* [Docker](https://www.docker.com/products#/mac) - ⏹ Not yet, but M1 builds are now available via the Preview Program - [Official Post](https://www.docker.com/blog/apple-silicon-m1-chips-and-docker/) [Github Issue](https://github.com/docker/for-mac/issues/4733#issuecomment-653444409) [M1 Preview and Download](https://www.docker.com/blog/download-and-try-the-tech-preview-of-docker-desktop-for-m1/)
|
* [Docker](https://hub.docker.com/editions/community/docker-ce-desktop-mac) - ✅ Yes, Full Native Apple Silicon Support as of v3.3.1 - [Release Notes](https://docs.docker.com/docker-for-mac/release-notes/#docker-desktop-331) [Github Issue](https://github.com/docker/for-mac/issues/4733#issuecomment-653444409)
|
||||||
* [Dreamweaver](https://www.adobe.com/products/dreamweaver.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [Dreamweaver](https://www.adobe.com/products/dreamweaver.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [eDEX-UI](https://github.com/GitSquared/edex-ui) - ✅ Yes, Full Native Apple Silicon Support reported as of v2.2.6 - [Release Notes](https://github.com/GitSquared/edex-ui/releases/tag/v2.2.6)
|
* [eDEX-UI](https://github.com/GitSquared/edex-ui) - ✅ Yes, Full Native Apple Silicon Support reported as of v2.2.6 - [Release Notes](https://github.com/GitSquared/edex-ui/releases/tag/v2.2.6)
|
||||||
* [Emacs](https://www.gnu.org/software/emacs/) - ✅ Yes, full native support via Emacs plus - [Verification](https://github.com/ThatGuySam/doesitarm/issues/226) [Install instructions](https://github.com/d12frosted/homebrew-emacs-plus)
|
* [Emacs](https://www.gnu.org/software/emacs/) - ✅ Yes, Full Native Apple Silicon Support reported as of v27.2-1 - [Release Notes](https://emacsformacosx.com/download/emacs-builds/Emacs-27.2-2.changes)
|
||||||
* [Electron](https://www.electronjs.org/releases/stable) - ✅ Yes, full native support as of v11.0 - [Announcement](https://www.electronjs.org/blog/apple-silicon)
|
* [Electron](https://www.electronjs.org/releases/stable) - ✅ Yes, full native support as of v11.0 - [Announcement](https://www.electronjs.org/blog/apple-silicon)
|
||||||
|
* [Espresso for macOS](https://www.espressoapp.com/) - ✳️ Yes, works via Rosetta 2 translation - [Release Notes](https://www.espressoapp.com/updates/) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/espresso)
|
||||||
* [FFmpeg](https://ffmpeg.org/download.html) - ✅ Yes, Full Native Apple Silicon Support via Homebrew - [Homebrew ARM Binary Available](https://formulae.brew.sh/formula/ffmpeg#default)
|
* [FFmpeg](https://ffmpeg.org/download.html) - ✅ Yes, Full Native Apple Silicon Support via Homebrew - [Homebrew ARM Binary Available](https://formulae.brew.sh/formula/ffmpeg#default)
|
||||||
* [Filezilla](https://filezilla-project.org/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/17#issuecomment-729976000)
|
* [Filezilla](https://filezilla-project.org/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/17#issuecomment-729976000)
|
||||||
* [Flutter](https://flutter.dev/docs/get-started/install/macos) - ✳️ Yes, works via Rosetta 2 with native support in development - [Github Issue](https://github.com/flutter/flutter/issues/60118#issuecomment-695341296)
|
* [Flutter](https://flutter.dev/docs/get-started/install/macos) - ✳️ Yes, works via Rosetta 2 with native support in development - [Github Issue](https://github.com/flutter/flutter/issues/60118#issuecomment-695341296)
|
||||||
* [Fork](https://git-fork.com/) - ✅ Yes, full native support as of v2.1.0 - [Release notes](https://git-fork.com/releasenotes)
|
* [Fork](https://git-fork.com/) - ✅ Yes, full native support as of v2.1.0 - [Release notes](https://git-fork.com/releasenotes)
|
||||||
* [ForkLift](https://binarynights.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/455#issuecomment-755042429)
|
* [ForkLift](https://binarynights.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/455#issuecomment-755042429)
|
||||||
* [Flycut](https://apps.apple.com/us/app/flycut-clipboard-manager/id442160987?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://github.com/TermiT/Flycut/releases/tag/1.9.6)
|
* [Flycut](https://apps.apple.com/us/app/flycut-clipboard-manager/id442160987?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://github.com/TermiT/Flycut/releases/tag/1.9.6)
|
||||||
* [GCC ARM Embedded](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) - ✳️ Yes, runs via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/105#issuecomment-750419946)
|
* [GCC ARM Embedded](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/105#issuecomment-841834514)
|
||||||
* [Git Version Control](https://git-scm.com/download/mac) - ✅ Yes, Full Native Apple Silicon Support - [Source](https://github.com/ThatGuySam/doesitarm/issues/54#issuecomment-730568063)
|
* [Git Version Control](https://git-scm.com/download/mac) - ✅ Yes, Full Native Apple Silicon Support - [Source](https://github.com/ThatGuySam/doesitarm/issues/54#issuecomment-730568063)
|
||||||
* [GitHub Desktop](https://desktop.github.com/) - ✳️ Yes, works via Rosetta 2 as of v2.6.0 with native support in development - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/293)
|
* [GitHub Desktop](https://desktop.github.com/) - ✳️ Yes, works via Rosetta 2 as of v2.6.0 with native support in development - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/293)
|
||||||
* [GitKraken](https://www.gitkraken.com/download) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/244#issuecomment-736760318)
|
* [GitKraken](https://www.gitkraken.com/download) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/244#issuecomment-736760318)
|
||||||
* [Go (golang)](https://golang.org/) - ✅ Yes, full native support as of 1.16 - [Golang M1 Benchmark](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=342445681) [Release Notes](https://tip.golang.org/doc/go1.16) [Go 1.16 is released](https://blog.golang.org/go1.16)
|
* [Go (golang)](https://golang.org/) - ✅ Yes, full native support as of 1.16 - [Golang M1 Benchmark](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=342445681) [Release Notes](https://tip.golang.org/doc/go1.16) [Go 1.16 is released](https://blog.golang.org/go1.16)
|
||||||
* [GoLand](https://www.jetbrains.com/go/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
* [GoLand](https://www.jetbrains.com/go/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
||||||
* [Godot Engine](https://godotengine.org/) - ⏹ No official binaries yet, but can be compiled from source - [Master PR](https://github.com/godotengine/godot/pull/39788), [v3.2 PR](https://github.com/godotengine/godot/pull/39943)
|
* [Godot Engine](https://godotengine.org/download/osx) - ✅ Yes, Full Native Apple Silicon Support as of v3.3 - [Release Notes](https://godotengine.org/article/godot-3-3-has-arrived#macos)
|
||||||
* [GNU Compiler Collection](https://gcc.gnu.org/) - ✳️ Yes, runs via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/105#issuecomment-732795155) [Bugzilla Issue](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96168)
|
* [GNU Compiler Collection](https://gcc.gnu.org/) - ✳️ Yes, runs via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/105#issuecomment-732795155) [Bugzilla Issue](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96168)
|
||||||
* [hadolint](https://github.com/hadolint/hadolint) - ✳️ Yes, works via Rosetta 2 - [Report #1](https://github.com/Homebrew/brew/issues/10744#issuecomment-787498421)
|
* [hadolint](https://github.com/hadolint/hadolint) - ✳️ Yes, works via Rosetta 2 - [Report #1](https://github.com/Homebrew/brew/issues/10744#issuecomment-787498421)
|
||||||
* [Haskell](https://www.haskell.org/platform/mac.html) - 🚫 Not yet supported only works on Intel-based Macs - [Gitlab Issue](https://gitlab.haskell.org/ghc/ghc/-/issues/18664)
|
* [Haskell](https://www.haskell.org/platform/mac.html) - ✳️ Yes, runs via Rosetta 2 translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/73#issuecomment-826065143)
|
||||||
* [Hex Fiend](https://github.com/HexFiend/HexFiend/releases) - ✅ Yes, full native support as of v2.14.0 - [Source](https://github.com/ThatGuySam/doesitarm/issues/429)
|
* [Hex Fiend](https://github.com/HexFiend/HexFiend/releases) - ✅ Yes, full native support as of v2.14.0 - [Source](https://github.com/ThatGuySam/doesitarm/issues/429)
|
||||||
* [Homebrew](https://brew.sh/) - ✳️ Yes, fully supported as of v3.0.0 - [Release Notes](https://brew.sh/2021/02/05/homebrew-3.0.0/).
|
* [Homebrew](https://brew.sh/) - ✅ Yes, fully supported as of v3.0.0 - [Release Notes](https://brew.sh/2021/02/05/homebrew-3.0.0/).
|
||||||
* [Hopper Disassembler](https://www.hopperapp.com/download.html) - ✅ Yes, Full Native Apple Silicon Support as of v4.6 - [Release Notes](https://www.hopperapp.com/blog/?p=263)
|
* [Hopper Disassembler](https://www.hopperapp.com/download.html) - ✅ Yes, Full Native Apple Silicon Support as of v4.6 - [Release Notes](https://www.hopperapp.com/blog/?p=263)
|
||||||
* [IDA Pro](https://www.hex-rays.com/products/ida/support/download_freeware/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/405#issue-759952494)
|
* [IDA Pro](https://www.hex-rays.com/products/ida/support/download_freeware/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/405#issue-759952494)
|
||||||
* [Insomnia Designer](https://insomnia.rest/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/456#issuecomment-748260642)
|
* [Insomnia Designer](https://insomnia.rest/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/456#issuecomment-748260642)
|
||||||
|
|
@ -93,6 +99,7 @@ Any comments, suggestions? [Let us know!](https://github.com/ThatGuySam/doesitar
|
||||||
* [Julia Language](https://julialang.org/downloads/) - ✳️ Yes, it works via Rosetta 2 - [Github Issue](https://github.com/JuliaLang/julia/issues/36617)
|
* [Julia Language](https://julialang.org/downloads/) - ✳️ Yes, it works via Rosetta 2 - [Github Issue](https://github.com/JuliaLang/julia/issues/36617)
|
||||||
* [KiCad EDA](https://kicad.org/download/macos/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/199#issuecomment-736253625)
|
* [KiCad EDA](https://kicad.org/download/macos/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/199#issuecomment-736253625)
|
||||||
* [kitty](https://github.com/kovidgoyal/kitty/releases) - ✅ Yes, Full Native Apple Silicon Support - [Github Issue](https://github.com/kovidgoyal/kitty/issues/3238)
|
* [kitty](https://github.com/kovidgoyal/kitty/releases) - ✅ Yes, Full Native Apple Silicon Support - [Github Issue](https://github.com/kovidgoyal/kitty/issues/3238)
|
||||||
|
* [Lens Studio](https://lensstudio.snapchat.com/download/) - ✳️ Yes, works via Rosetta 2 translation - [Supported Hardware](https://lensstudio.snapchat.com/download/)
|
||||||
* [LLVM Clang](https://releases.llvm.org/download.html) - ✳️ Yes, it works via Rosetta 2 - [Apple Forums](https://developer.apple.com/forums/thread/649992)
|
* [LLVM Clang](https://releases.llvm.org/download.html) - ✳️ Yes, it works via Rosetta 2 - [Apple Forums](https://developer.apple.com/forums/thread/649992)
|
||||||
* [LTspice](https://www.analog.com/en/design-center/design-tools-and-calculators/ltspice-simulator.html) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/421#issuecomment-751876882)
|
* [LTspice](https://www.analog.com/en/design-center/design-tools-and-calculators/ltspice-simulator.html) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/421#issuecomment-751876882)
|
||||||
* [MacDown](https://macdown.uranusjr.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/382)
|
* [MacDown](https://macdown.uranusjr.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/382)
|
||||||
|
|
@ -104,22 +111,23 @@ Any comments, suggestions? [Let us know!](https://github.com/ThatGuySam/doesitar
|
||||||
* [MySQL Workbench](https://dev.mysql.com/downloads/) - ✳️ Yes, works via Rosetta 2 for v8.0.21 with issues reported on newer versions - [Source](https://github.com/ThatGuySam/doesitarm/issues/173#issuecomment-730553003) [Issues](https://github.com/ThatGuySam/doesitarm/issues/173#issuecomment-763269306)
|
* [MySQL Workbench](https://dev.mysql.com/downloads/) - ✳️ Yes, works via Rosetta 2 for v8.0.21 with issues reported on newer versions - [Source](https://github.com/ThatGuySam/doesitarm/issues/173#issuecomment-730553003) [Issues](https://github.com/ThatGuySam/doesitarm/issues/173#issuecomment-763269306)
|
||||||
* [Navicat Premium](https://www.navicat.com/en/products/navicat-premium) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/161#issuecomment-759768321)
|
* [Navicat Premium](https://www.navicat.com/en/products/navicat-premium) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/161#issuecomment-759768321)
|
||||||
* [NixOS](https://nixos.org/download.html) - ⏹ Not yet, but it’s in development - [Github Issue](https://github.com/NixOS/nixpkgs/issues/95903)
|
* [NixOS](https://nixos.org/download.html) - ⏹ Not yet, but it’s in development - [Github Issue](https://github.com/NixOS/nixpkgs/issues/95903)
|
||||||
* [NodeJS](https://nodejs.org/en/) - ✅ Yes, Full Native Apple Silicon Support as of v15 - [M1 Benchmark](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=607735373) [Version Support](https://github.com/ThatGuySam/doesitarm/issues/299#issuecomment-733210648) [Github Issue](https://github.com/nodejs/TSC/issues/886)
|
* [NodeJS](https://nodejs.org/en/) - ✅ Yes, Full Native Apple Silicon Support as of v16 - [M1 Benchmark](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=607735373) [Version Support](https://github.com/ThatGuySam/doesitarm/issues/299#issuecomment-733210648) [Github Issue](https://github.com/nodejs/TSC/issues/886)
|
||||||
* [Nova](https://nova.app) - ✅ Yes, Full Native Apple Silicon Support as of v3 - [Official Tweet](https://twitter.com/panic/status/1326977997732134912?s=20)
|
* [Nova](https://nova.app) - ✅ Yes, Full Native Apple Silicon Support as of v3 - [Official Tweet](https://twitter.com/panic/status/1326977997732134912?s=20)
|
||||||
* [OCaml](https://ocaml.org/) - ⏹ Not yet, but it's currently in beta. - [Pull Status](https://github.com/ocaml/ocaml/pull/9699)
|
* [OCaml](https://ocaml.org/) - ⏹ Not yet, but it's currently in beta. - [Pull Status](https://github.com/ocaml/ocaml/pull/9699)
|
||||||
* [Onivim2](https://v2.onivim.io/early-access-portal) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/601#issue-834313049) [Github Issue](https://github.com/onivim/oni2/issues/2708)
|
* [Onivim2](https://v2.onivim.io/early-access-portal) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/601#issue-834313049) [Github Issue](https://github.com/onivim/oni2/issues/2708)
|
||||||
* [OpenJDK](https://openjdk.java.net/install/) - ✅ Yes, Full Native Apple Silicon Support via Azul Zulu
|
* [OpenJDK](https://openjdk.java.net/install/) - ✅ Yes, Full Native Apple Silicon Support via Azul Zulu
|
||||||
Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=1469348209) [Azul Builds](https://www.azul.com/downloads/zulu-community/?os=macos&architecture=arm-64-bit&package=jdk) [Early Access Builds](https://github.com/microsoft/openjdk-aarch64/releases) [JEP Ticket](https://openjdk.java.net/jeps/391) [Discussion](https://bugs.openjdk.java.net/browse/JDK-8251280)
|
Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=1469348209) [Azul Builds](https://www.azul.com/downloads/zulu-community/?os=macos&architecture=arm-64-bit&package=jdk) [Early Access Builds](https://github.com/microsoft/openjdk-aarch64/releases) [JEP Ticket](https://openjdk.java.net/jeps/391) [Discussion](https://bugs.openjdk.java.net/browse/JDK-8251280)
|
||||||
* [Parallels Desktop](https://www.parallels.com/) - ⏹ Not entirely working yet, but running ARM guests (such as Windows 10 on ARM) is possible with the preview version - [Blog Post](https://www.parallels.com/blogs/parallels-desktop-apple-silicon-mac/) [Beta Download](https://my.parallels.com/desktop/beta) [MacRumors Discussion](https://forums.macrumors.com/threads/parallels-tech-preview-for-m1.2275996/unread)
|
* [Parallels Desktop](https://prf.hn/l/6qOdLPB) - ✅ Yes, Full Native Apple Silicon Support as of v16 - [Release Notes](https://prf.hn/l/7QA4VvN) [Blog Post](https://prf.hn/l/Kmo9gqd)
|
||||||
* [Paw](https://paw.cloud/) - ✅ Yes, Full Native Apple Silicon Support as of v3.2.1 - [Release Notes](https://paw.cloud/updates/3.2.1) [View on Setapp](https://setapp.sjv.io/c/2708043/385092/5114)
|
* [Paw](https://paw.cloud/) - ✅ Yes, Full Native Apple Silicon Support as of v3.2.1 - [Release Notes](https://paw.cloud/updates/3.2.1) [View on Setapp](https://setapp.sjv.io/c/2708043/385092/5114)
|
||||||
* [Pelemay](https://github.com/zeam-vm/pelemay/releases) - ✅ Yes, Full Native Apple Silicon Support as of v0.0.14 - [Release Notes](https://github.com/zeam-vm/pelemay/releases/tag/0.0.14)
|
* [Pelemay](https://github.com/zeam-vm/pelemay/releases) - ✅ Yes, Full Native Apple Silicon Support as of v0.0.14 - [Release Notes](https://github.com/zeam-vm/pelemay/releases/tag/0.0.14)
|
||||||
* [PhpStorm](https://www.jetbrains.com/phpstorm/download/#section=mac) - ✅ Yes, full native Apple Silicon support as of v2020.3.1
|
* [PhpStorm](https://www.jetbrains.com/phpstorm/download/#section=mac) - ✅ Yes, full native Apple Silicon support as of v2020.3.1
|
||||||
* [Postman](https://www.postman.com/downloads/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/160#issuecomment-736772593)
|
* [Postman](https://www.postman.com/downloads/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/160#issuecomment-736772593)
|
||||||
* [PowerShell Core](https://github.com/PowerShell/PowerShell) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/125#issuecomment-736775191)
|
* [PowerShell Core](https://github.com/PowerShell/PowerShell) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/125#issuecomment-736775191)
|
||||||
* [Proxyman](https://proxyman.io) - ✅ Yes, fully supported ARM and Intel Chip - [Issue](https://github.com/ProxymanApp/Proxyman/issues/686) [View on Setapp](https://setapp.sjv.io/c/2708043/635279/5114)
|
* [Proxyman](https://proxyman.io) - ✅ Yes, fully supported ARM and Intel Chip - [Issue](https://github.com/ProxymanApp/Proxyman/issues/686) [View on Setapp](https://setapp.sjv.io/c/2708043/635279/5114)
|
||||||
|
* [psycopg2](https://www.psycopg.org/) - ✅ Yes, Native Apple Silicon Support as of v2.8.6 via 1 or more workarounds - [Workaround #1](https://github.com/psycopg/psycopg2/issues/1200#issuecomment-820571339) [Workaround #2](https://github.com/psycopg/psycopg2/issues/1216#issuecomment-767892042) [Workaround #3](https://github.com/ThatGuySam/doesitarm/issues/628#issue-862441710)
|
||||||
* [PyCharm](https://www.jetbrains.com/pycharm/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
* [PyCharm](https://www.jetbrains.com/pycharm/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
||||||
* [Python](https://www.python.org/) - ✅ Yes, reported working for v2.7.16, v3.8.2, and v3.9 - [PyPerformance Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=1795089557) [Python Tracker](https://bugs.python.org/issue41100) [Github Issue](https://github.com/python/cpython/pull/22855) [Github Issue #2](https://github.com/ThatGuySam/doesitarm/issues/111)
|
* [Python](https://www.python.org/) - ✅ Yes, reported working for v2.7.16, v3.8.2, and v3.9 - [PyPerformance Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=1795089557) [Python Tracker](https://bugs.python.org/issue41100) [Github Issue](https://github.com/python/cpython/pull/22855) [Github Issue #2](https://github.com/ThatGuySam/doesitarm/issues/111)
|
||||||
* [PyTorch](https://pytorch.org/) - ✳️ Yes, works via Rosetta 2 - [Report Update](https://github.com/ThatGuySam/doesitarm/issues/432)
|
* [PyTorch](https://pytorch.org/) - ✅ Yes, Initial Native Apple Silicon Support for CPU only - [GPU Acceleration Status](https://github.com/pytorch/pytorch/issues/47702) [Report Update](https://github.com/ThatGuySam/doesitarm/issues/432)
|
||||||
* [RapidWeaver](https://www.realmacsoftware.com/rapidweaver/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [Release Notes](https://www.realmacsoftware.com/rapidweaver/releasenotes/) [View on Setapp](https://setapp.sjv.io/rapidweaver)
|
* [RapidWeaver](https://www.realmacsoftware.com/rapidweaver/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [Release Notes](https://www.realmacsoftware.com/rapidweaver/releasenotes/) [View on Setapp](https://setapp.sjv.io/rapidweaver)
|
||||||
* [React Native](https://reactnative.dev/) - ✳️ Yes, works on supported Node versions - [Check Node Support](https://doesitarm.com/app/nodejs/)
|
* [React Native](https://reactnative.dev/) - ✳️ Yes, works on supported Node versions - [Check Node Support](https://doesitarm.com/app/nodejs/)
|
||||||
* [Redis](https://redis.io/download) - ✅ Yes, full native Apple Silicon support as of v6 - [v6.0.9 Benchmark](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=1002181585) [Verification](https://github.com/ThatGuySam/doesitarm/issues/298)
|
* [Redis](https://redis.io/download) - ✅ Yes, full native Apple Silicon support as of v6 - [v6.0.9 Benchmark](https://docs.google.com/spreadsheets/d/1g4U7LAImfEcXRihJbySZcRr32tn6WSWAtslfXltds58/edit#gid=1002181585) [Verification](https://github.com/ThatGuySam/doesitarm/issues/298)
|
||||||
|
|
@ -127,15 +135,18 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [RubyMine](https://www.jetbrains.com/ruby/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
* [RubyMine](https://www.jetbrains.com/ruby/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1
|
||||||
* [Rust](https://www.rust-lang.org/) - ✅ Yes, full native support (Tier 2) as of v1.49 - [Issue](https://github.com/rust-lang/rust/issues/73908#issue-648613557) [Official Blog Post](https://blog.rust-lang.org/2020/12/31/Rust-1.49.0.html)
|
* [Rust](https://www.rust-lang.org/) - ✅ Yes, full native support (Tier 2) as of v1.49 - [Issue](https://github.com/rust-lang/rust/issues/73908#issue-648613557) [Official Blog Post](https://blog.rust-lang.org/2020/12/31/Rust-1.49.0.html)
|
||||||
* [Sequel Ace](https://github.com/Sequel-Ace/Sequel-Ace/releases) - ✅ Yes, Full Native Apple Silicon Support as of v3.0.1 - [Release Notes](https://github.com/Sequel-Ace/Sequel-Ace/releases/tag/production%2F3.0.1-3008)
|
* [Sequel Ace](https://github.com/Sequel-Ace/Sequel-Ace/releases) - ✅ Yes, Full Native Apple Silicon Support as of v3.0.1 - [Release Notes](https://github.com/Sequel-Ace/Sequel-Ace/releases/tag/production%2F3.0.1-3008)
|
||||||
|
* [Simon for Mac](https://www.dejal.com/simon/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/simon)
|
||||||
* [Sketch](https://www.sketch.com/) - ✅ Yes, Full Native Apple Silicon Support as of v70 - [Release Notes](https://www.sketch.com/updates/#version-70)
|
* [Sketch](https://www.sketch.com/) - ✅ Yes, Full Native Apple Silicon Support as of v70 - [Release Notes](https://www.sketch.com/updates/#version-70)
|
||||||
|
* [SmartGit](https://www.syntevo.com/smartgit/) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/541#issuecomment-806068252)
|
||||||
* [SourceTree](https://www.sourcetreeapp.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/200)
|
* [SourceTree](https://www.sourcetreeapp.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/200)
|
||||||
* [SubEthaEdit](https://subethaedit.net/) - ✅ Yes, full native Apple Silicon Support as of v5.1.5 - [Release Notes](https://github.com/subethaedit/SubEthaEdit/releases/tag/SubEthaEdit-MacFull-5.1.5)
|
* [SubEthaEdit](https://subethaedit.net/) - ✅ Yes, full native Apple Silicon Support as of v5.1.5 - [Release Notes](https://github.com/subethaedit/SubEthaEdit/releases/tag/SubEthaEdit-MacFull-5.1.5)
|
||||||
* [Sublime Text](https://www.sublimetext.com/) - ✳️ Yes, works via Rosetta 2 - [Forum Discussion](https://forum.sublimetext.com/t/arm-build/5882/97)
|
* [Sublime Text](https://www.sublimetext.com/) - ✅ Yes, Full Native Apple Silicon Support as of Build 4100 - [Release Notes](https://gist.github.com/jfcherng/7bf4103ea486d1f67b7970e846b3a619#build-4100)
|
||||||
* [Surge](https://nssurge.com/) - ✅ Yes, full native Apple Silicon Support as of v4.0.0 - [Issue](https://github.com/ThatGuySam/doesitarm/issues/157)
|
* [Surge](https://nssurge.com/) - ✅ Yes, full native Apple Silicon Support as of v4.0.0 - [Issue](https://github.com/ThatGuySam/doesitarm/issues/157)
|
||||||
* [TablePlus](https://tableplus.com/) - ✅ Yes, Full Native Apple Silicon Support as of Build 352 - [Release Notes](https://twitter.com/TablePlus/status/1327650704295489536) [View on Setapp](https://setapp.sjv.io/c/2708043/455094/5114)
|
* [TablePlus](https://tableplus.com/) - ✅ Yes, Full Native Apple Silicon Support as of Build 352 - [Release Notes](https://twitter.com/TablePlus/status/1327650704295489536) [View on Setapp](https://setapp.sjv.io/c/2708043/455094/5114)
|
||||||
|
* [TeaCode](https://www.apptorium.com/teacode) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/teacode)
|
||||||
* [TensorFlow](https://www.tensorflow.org/) - ⏹ Not yet, but a supported pre-release is available - [Pre-Release](https://blog.tensorflow.org/2020/11/accelerating-tensorflow-performance-on-mac.html)
|
* [TensorFlow](https://www.tensorflow.org/) - ⏹ Not yet, but a supported pre-release is available - [Pre-Release](https://blog.tensorflow.org/2020/11/accelerating-tensorflow-performance-on-mac.html)
|
||||||
* [Textmate](https://macromates.com/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/585#issue-817594010)
|
* [Textmate](https://macromates.com/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/585#issue-817594010)
|
||||||
* [Termius](https://termius.com/) - ✅ Yes, Full Native Apple Silicon Support as of v7.4.1 - [Release Notes](https://docs.termius.com/changelog/desktop)
|
* [Termius](https://termius.com/) - ✅ Yes, Full Native Apple Silicon Support as of v7.4.1 - [Release Notes](https://docs.termius.com/changelog/desktop)
|
||||||
* [Tinkerwell](https://tinkerwell.app/) - ✳️ Yes, works via Rosetta 2 translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/592#issue-824958336)
|
* [Tinkerwell](https://tinkerwell.app/) - ✳️ Yes, works via Rosetta 2 translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/592#issue-824958336)
|
||||||
* [Tower](https://www.git-tower.com/mac) - ✅ Yes, Full Native Apple Silicon Support as of v6 - [Release Notes](https://www.git-tower.com/blog/tower-mac-6/)
|
* [Tower](https://www.git-tower.com/mac) - ✅ Yes, Full Native Apple Silicon Support as of v6 - [Release Notes](https://www.git-tower.com/blog/tower-mac-6/)
|
||||||
* [Transmit](https://panic.com/transmit/) - ✅ Yes, Full Native Apple Silicon Support as of v5.7 - [Official Tweet](https://twitter.com/panic/status/1326978002576666624?s=20)
|
* [Transmit](https://panic.com/transmit/) - ✅ Yes, Full Native Apple Silicon Support as of v5.7 - [Official Tweet](https://twitter.com/panic/status/1326978002576666624?s=20)
|
||||||
|
|
@ -149,12 +160,14 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [VS Code](https://code.visualstudio.com/) - ✅ Yes, Full Native Apple Silicon Support as of v1.54 - [Release Notes](https://code.visualstudio.com/updates/v1_54)
|
* [VS Code](https://code.visualstudio.com/) - ✅ Yes, Full Native Apple Silicon Support as of v1.54 - [Release Notes](https://code.visualstudio.com/updates/v1_54)
|
||||||
* [Vysor](https://www.vysor.io/download/) - ✳️ Yes, works via Rosetta 2 - [Tweet](https://twitter.com/vysorapp/status/1329298424278093825) [Source](https://github.com/ThatGuySam/doesitarm/issues/275#issuecomment-747208601)
|
* [Vysor](https://www.vysor.io/download/) - ✳️ Yes, works via Rosetta 2 - [Tweet](https://twitter.com/vysorapp/status/1329298424278093825) [Source](https://github.com/ThatGuySam/doesitarm/issues/275#issuecomment-747208601)
|
||||||
* [WebStorm](https://www.jetbrains.com/webstorm/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1 - [Official Download](https://www.jetbrains.com/webstorm/download/#section=mac)
|
* [WebStorm](https://www.jetbrains.com/webstorm/download/#section=mac) - ✅ Yes, full native support as of v2020.3.1 - [Official Download](https://www.jetbrains.com/webstorm/download/#section=mac)
|
||||||
|
* [Wechat Devtools](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) - 🔶 App has not yet been reported to be native to Apple Silicon - [Release Notes](https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html)
|
||||||
* [Wireshark](https://www.wireshark.org/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/336)
|
* [Wireshark](https://www.wireshark.org/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/336)
|
||||||
* [Xamarin](https://dotnet.microsoft.com/apps/xamarin) - ✳️ Yes, works via Rosetta 2 - [Souorce](https://github.com/xamarin/xamarin-macios/issues/10005#issue-732495019) [Video Demo](https://doesitarm.com/tv/xamarin-and-visual-studio-on-apple-macbook-pro-13-m1-in-4k-i-rwpspmmlos/)
|
* [Xamarin](https://dotnet.microsoft.com/apps/xamarin) - ✳️ Yes, works via Rosetta 2 - [Souorce](https://github.com/xamarin/xamarin-macios/issues/10005#issue-732495019) [Video Demo](https://doesitarm.com/tv/xamarin-and-visual-studio-on-apple-macbook-pro-13-m1-in-4k-i-rwpspmmlos/)
|
||||||
* [XAMPP](https://www.apachefriends.org/download.html) - ✳️ Yes, works via Rosetta 2 - [Video Demonstration](https://doesitarm.com/tv/watch-this-before-buying-apple-m1-macbook-for-xampp-or-apple-silicon-tests-in-4k-i-ebwwewsis8s/)
|
* [XAMPP](https://www.apachefriends.org/download.html) - ✳️ Yes, works via Rosetta 2 - [Video Demonstration](https://doesitarm.com/tv/watch-this-before-buying-apple-m1-macbook-for-xampp-or-apple-silicon-tests-in-4k-i-ebwwewsis8s/)
|
||||||
* [Xcode](https://apps.apple.com/us/app/xcode/id497799835) - ✅ Yes, Full Native Apple Silicon Support as of v12.2 - [Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-12_2-release-notes)
|
* [Xcode](https://apps.apple.com/us/app/xcode/id497799835) - ✅ Yes, Full Native Apple Silicon Support as of v12.2 - [Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-12_2-release-notes)
|
||||||
* [XCOrganizer](https://xcorganizer.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/872077/5114)
|
* [XCOrganizer](https://xcorganizer.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/872077/5114)
|
||||||
* [Xojo](https://www.xojo.com/download/) - ⏹ Not yet, but it’s in development - [Blog Post](https://blog.xojo.com/2020/11/10/apple-silicon-and-big-sur-support-coming-in-xojo-2020r2/)
|
* [Xojo](https://www.xojo.com/download/) - ⏹ Not yet, but it’s in development - [Blog Post](https://blog.xojo.com/2020/11/10/apple-silicon-and-big-sur-support-coming-in-xojo-2020r2/)
|
||||||
|
* [XQuartz](https://www.xquartz.org/index.html) - ✅ Yes, Full Native Apple Silicon Support as of v2.8.0 - [Release Notes](https://www.xquartz.org/releases/index.html)
|
||||||
* [.NET](https://dotnet.microsoft.com/download) - ⏹ .NET Core nightly builds available, ongoing work for other frameworks - [Project Board](https://github.com/orgs/dotnet/projects/18)
|
* [.NET](https://dotnet.microsoft.com/download) - ⏹ .NET Core nightly builds available, ongoing work for other frameworks - [Project Board](https://github.com/orgs/dotnet/projects/18)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -171,6 +184,7 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [MATLAB](https://www.mathworks.com/products/get-matlab.html?s_tid=gn_getml) - ✳️ Yes, works via Rosetta 2 as of v9.9.0.1495850 - [MATLAB Forums](https://www.mathworks.com/matlabcentral/answers/641925-is-matlab-supported-on-apple-silicon-macs)
|
* [MATLAB](https://www.mathworks.com/products/get-matlab.html?s_tid=gn_getml) - ✳️ Yes, works via Rosetta 2 as of v9.9.0.1495850 - [MATLAB Forums](https://www.mathworks.com/matlabcentral/answers/641925-is-matlab-supported-on-apple-silicon-macs)
|
||||||
* [Mendeley](https://www.mendeley.com/download-desktop-new/macOS) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/448#issuecomment-751869800)
|
* [Mendeley](https://www.mendeley.com/download-desktop-new/macOS) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/448#issuecomment-751869800)
|
||||||
* [NVivo](https://www.qsrinternational.com/nvivo-qualitative-data-analysis-software/try-nvivo) - ✳️ Yes, works via Rosetta 2 with compatibility patch as of v12.6.1 - [Official Status](https://www.qsrinternational.com/nvivo-qualitative-data-analysis-software/support-services/support-center/user-issues-trending-now)
|
* [NVivo](https://www.qsrinternational.com/nvivo-qualitative-data-analysis-software/try-nvivo) - ✳️ Yes, works via Rosetta 2 with compatibility patch as of v12.6.1 - [Official Status](https://www.qsrinternational.com/nvivo-qualitative-data-analysis-software/support-services/support-center/user-issues-trending-now)
|
||||||
|
* [ParaView](https://www.paraview.org/download/) - 🚫 No, not yet supported only works on Intel-based Macs - [Issue](https://gitlab.kitware.com/paraview/paraview/-/issues/20466)
|
||||||
* [QGIS](https://qgis.org/en/site/forusers/download.html) - ✳️ Yes, works via Rosetta 2 translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/313#issuecomment-802492146)
|
* [QGIS](https://qgis.org/en/site/forusers/download.html) - ✳️ Yes, works via Rosetta 2 translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/313#issuecomment-802492146)
|
||||||
* [RStudio](https://rstudio.com/products/rstudio/download/) - ✳️ Yes, runs via Rosetta 2 with native support in development - [Source](https://github.com/ThatGuySam/doesitarm/issues/36) [Benchmark Info](https://github.com/ThatGuySam/doesitarm/issues/36#issuecomment-735668887)
|
* [RStudio](https://rstudio.com/products/rstudio/download/) - ✳️ Yes, runs via Rosetta 2 with native support in development - [Source](https://github.com/ThatGuySam/doesitarm/issues/36) [Benchmark Info](https://github.com/ThatGuySam/doesitarm/issues/36#issuecomment-735668887)
|
||||||
* [Stata](https://www.stata.com/) - ✅ Yes, Full Native Apple Silicon Support as of v16, update level 10 Nov 2020 - [Blog Post](https://blog.stata.com/2020/11/10/stata-for-mac-with-apple-silicon/)
|
* [Stata](https://www.stata.com/) - ✅ Yes, Full Native Apple Silicon Support as of v16, update level 10 Nov 2020 - [Blog Post](https://blog.stata.com/2020/11/10/stata-for-mac-with-apple-silicon/)
|
||||||
|
|
@ -182,17 +196,15 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
|
|
||||||
#### Music and Audio Tools
|
#### Music and Audio Tools
|
||||||
|
|
||||||
* [Ableton](https://www.ableton.com/en/live/) - ✳️ Yes, it works via Rosetta 2 - [Reddit Post](https://www.reddit.com/r/ableton/comments/jrtpv6/ableton_live_11_on_apple_silicon_m1_processor/gbvxj9r?context=3)
|
* [Adobe Audition](https://www.adobe.com/products/audition.html) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://helpx.adobe.com/audition/user-guide.html/audition/using/whats-new/2021-1.ug.html) [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Adobe Audition](https://www.adobe.com/products/audition.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
|
||||||
* [Airfoil](https://rogueamoeba.com/airfoil/mac/) - ✅ Yes, Initial Native Apple Silicon Support as of v5.10.0 - [Release Notes](https://rogueamoeba.com/airfoil/mac/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
* [Airfoil](https://rogueamoeba.com/airfoil/mac/) - ✅ Yes, Initial Native Apple Silicon Support as of v5.10.0 - [Release Notes](https://rogueamoeba.com/airfoil/mac/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
||||||
* [Ardour](https://community.ardour.org/download) - ✳️ Yes, it works via Rosetta 2 with native support in progress - [Apple Silicon Pre-release](https://discourse.ardour.org/t/ardour-for-apple-m1-arm-pre-release/105174)
|
* [Ardour](https://community.ardour.org/download) - ✳️ Yes, it works via Rosetta 2 with native support in progress - [Apple Silicon Pre-release](https://discourse.ardour.org/t/ardour-for-apple-m1-arm-pre-release/105174)
|
||||||
* [Audacity](https://www.audacityteam.org/download/) - ✳️ Yes, it works via Rosetta 2 with no reported issues - [Github Issue Comment](https://github.com/audacity/audacity/issues/684#issuecomment-710726323)
|
* [Audacity](https://www.audacityteam.org/download/) - ✳️ Yes, it works via Rosetta 2 with no reported issues - [Github Issue Comment](https://github.com/audacity/audacity/issues/684#issuecomment-710726323)
|
||||||
* [Audio Hijack](https://rogueamoeba.com/audiohijack/) - ✅ Yes, Initial Native Apple Silicon Support as of v3.8.0 - [Release Notes](https://rogueamoeba.com/audiohijack/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
* [Audio Hijack](https://rogueamoeba.com/audiohijack/) - ✅ Yes, Initial Native Apple Silicon Support as of v3.8.0 - [Release Notes](https://rogueamoeba.com/audiohijack/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
||||||
* [Avid Pro Tools](https://www.avid.com/pro-tools) - 🚫 No official word yet.
|
* [Avid Pro Tools](https://www.avid.com/pro-tools) - 🚫 Not yet supported only works on Intel-based Macs - [Official Article](https://avid.secure.force.com/pkb/articles/en_US/Compatibility/macOS-Big-Sur-Support)
|
||||||
|
* [Avid Sibelius](https://www.avid.com/sibelius) - 🚫 Not yet supported only works on Intel-based Macs - [Official Article](https://avid.secure.force.com/pkb/articles/en_US/Compatibility/macOS-Big-Sur-Support)
|
||||||
* [Capo](http://supermegaultragroovy.com/products/capo/mac/) - ✅ Yes, Full Native Apple Silicon Support as of v4 - [Official Post](https://supermegaultragroovy.com/products/capo/press/pr/2020-11-17/)
|
* [Capo](http://supermegaultragroovy.com/products/capo/mac/) - ✅ Yes, Full Native Apple Silicon Support as of v4 - [Official Post](https://supermegaultragroovy.com/products/capo/press/pr/2020-11-17/)
|
||||||
* [djay](https://www.algoriddim.com/) - ✅ Yes, Full Native Apple Silicon Support as of v3.0 - [Release Notes](https://www.algoriddim.com/djay-pro-mac/releasenotes)
|
|
||||||
* [eqMac](https://eqmac.app) - ✅ Yes, Native Apple Silicon binary, works well as of v0.3.7, Rosetta 2 lacks performance - [Tracked Issue](https://github.com/bitgapp/eqMac/issues/413)
|
* [eqMac](https://eqmac.app) - ✅ Yes, Native Apple Silicon binary, works well as of v0.3.7, Rosetta 2 lacks performance - [Tracked Issue](https://github.com/bitgapp/eqMac/issues/413)
|
||||||
* [Farrago](https://rogueamoeba.com/farrago/) - ✅ Yes, Initial Native Apple Silicon Support as of v1.6.0 - [Release Notes](https://rogueamoeba.com/farrago/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
|
||||||
* [Fission](https://rogueamoeba.com/fission/) - ✅ Yes, Initial Native Apple Silicon Support as of v2.7.0 - [Release Notes](https://rogueamoeba.com/fission/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
* [Fission](https://rogueamoeba.com/fission/) - ✅ Yes, Initial Native Apple Silicon Support as of v2.7.0 - [Release Notes](https://rogueamoeba.com/fission/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
||||||
* [FL Studio](https://www.image-line.com/fl-studio-download/) - ✳️ Yes, works via Rosetta 2 but may have performance issues - [Image Line Article](https://support.image-line.com/action/knowledgebase/?ans=668)
|
* [FL Studio](https://www.image-line.com/fl-studio-download/) - ✳️ Yes, works via Rosetta 2 but may have performance issues - [Image Line Article](https://support.image-line.com/action/knowledgebase/?ans=668)
|
||||||
* [foobar2000](https://www.foobar2000.org/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/586#issue-817790955) [Changelog](https://www.foobar2000.org/changelog-mac)
|
* [foobar2000](https://www.foobar2000.org/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/586#issue-817790955) [Changelog](https://www.foobar2000.org/changelog-mac)
|
||||||
|
|
@ -200,18 +212,13 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [Fretello](https://apps.apple.com/us/app/fretello-guitar-lessons/id1107957482) - ✅ Yes, Full Native Apple Silicon Support as of v2.3.3 - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
* [Fretello](https://apps.apple.com/us/app/fretello-guitar-lessons/id1107957482) - ✅ Yes, Full Native Apple Silicon Support as of v2.3.3 - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
||||||
* [Garageband](https://www.apple.com/mac/garageband/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1033)
|
* [Garageband](https://www.apple.com/mac/garageband/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1033)
|
||||||
* [Logic Pro](https://www.apple.com/logic-pro/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1037)
|
* [Logic Pro](https://www.apple.com/logic-pro/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1037)
|
||||||
* [Loopback](https://rogueamoeba.com/loopback/) - ✅ Yes, Initial Native Apple Silicon Support as of v2.2.0 - [Release Notes](https://rogueamoeba.com/loopback/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
* [Native Access](https://www.native-instruments.com/en/specials/native-access/) - ✳️ Yes, works via Rosetta 2 translation with the exception of MASSIVE X - [Official Status](https://support.native-instruments.com/hc/en-us/articles/360013515618-macOS-11-Big-Sur-Compatibility-News) [Official Post](https://support.native-instruments.com/hc/en-us/articles/360014683497)
|
||||||
* [Native Access](https://www.native-instruments.com/en/specials/native-access/) - ⏹ No, not working at all but support is in development - [Official Status](https://support.native-instruments.com/hc/en-us/articles/360013515618-macOS-11-Big-Sur-Compatibility-News) [Official Post](https://support.native-instruments.com/hc/en-us/articles/360014683497)
|
|
||||||
* [n-Track Studio](https://ntrack.com/download.php) - 🚫 Not yet supported only works on Intel-based Macs - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/354737/5114)
|
* [n-Track Studio](https://ntrack.com/download.php) - 🚫 Not yet supported only works on Intel-based Macs - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/354737/5114)
|
||||||
* [Piezo](https://rogueamoeba.com/piezo/) - ✅ Yes, Initial Native Apple Silicon Support as of v1.7.0 - [Release Notes](https://rogueamoeba.com/piezo/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
* [Piezo](https://rogueamoeba.com/piezo/) - ✅ Yes, Initial Native Apple Silicon Support as of v1.7.0 - [Release Notes](https://rogueamoeba.com/piezo/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
||||||
* [Plogue Bidule](https://plogue.com/downloads.html) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/480#issue-776226694)
|
* [Plogue Bidule](https://plogue.com/downloads.html) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/480#issue-776226694)
|
||||||
* [REAPER](https://www.reaper.fm/download.php) - ✳️ Yes, works via Rosetta 2 with native support in beta - [Apple Silicon Discussion](https://forum.cockos.com/showthread.php?t=245263)
|
* [REAPER](https://www.reaper.fm/download.php) - ✳️ Yes, works via Rosetta 2 with native support in beta - [Apple Silicon Discussion](https://forum.cockos.com/showthread.php?t=245263)
|
||||||
* [rekordbox](https://rekordbox.com/en/download/) - ✳️ Yes, works via Rosetta 2 with native support currently in development - [Official Support List](https://www.pioneerdj.com/en-us/landing/support-for-macos-big-sur/) [Verification](https://github.com/ThatGuySam/doesitarm/issues/560#issue-805540415)
|
* [SoundSource](https://rogueamoeba.com/soundsource/) - ✅ Yes, Initial Native Apple Silicon Support as of v5.2.0 - [Release Notes](https://rogueamoeba.com/soundsource/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
||||||
* [SoundSource](https://rogueamoeba.com/soundsource/) - ✅ Yes, Initial Native Apple Silicon Support as of v5.2.0 - [Release Notes](https://rogueamoeba.com/soundsource/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
|
||||||
* [Super 8 R2](https://www.native-instruments.com/en/products/komplete/synths/super-8/) - ⏹ No, not working at all but support is in development - [Official Status](https://support.native-instruments.com/hc/en-us/articles/360013515618-macOS-11-Big-Sur-Compatibility-News) [Official Post](https://support.native-instruments.com/hc/en-us/articles/360014683497)
|
|
||||||
* [TwistedWave](https://twistedwave.com/mac) - ✳️ Yes, works via Rosetta 2 with native support in beta - [Verification](https://github.com/ThatGuySam/doesitarm/issues/508#issue-781561446)
|
* [TwistedWave](https://twistedwave.com/mac) - ✳️ Yes, works via Rosetta 2 with native support in beta - [Verification](https://github.com/ThatGuySam/doesitarm/issues/508#issue-781561446)
|
||||||
* [Traktor DJ 2](https://www.native-instruments.com/en/products/traktor/dj-software/traktor-dj-2/) - ✳️ Yes, works via Rosetta 2 - [Official Apple Silicon Status](https://support.native-instruments.com/hc/en-us/articles/360014683497-) [Official Big Sur Status](https://support.native-instruments.com/hc/en-us/articles/360013515618-macOS-11-Big-Sur-Compatibility-News) [Official Post](https://support.native-instruments.com/hc/en-us/articles/360014683497)
|
|
||||||
* [Traktor Pro 3](https://www.native-instruments.com/en/products/traktor/dj-software/traktor-pro-3/) - ✳️ Yes, works via Rosetta 2 - [Official Apple Silicon Status](https://support.native-instruments.com/hc/en-us/articles/360014683497-) [Official Big Sur Status](https://support.native-instruments.com/hc/en-us/articles/360013515618-macOS-11-Big-Sur-Compatibility-News) [Official Post](https://support.native-instruments.com/hc/en-us/articles/360014683497)
|
|
||||||
* [TunesArt](https://www.jibapps.com/apps/tunesart/) - ✅ Yes, Full Native Apple Silicon Support as of v1.9.6 - [Source](https://twitter.com/jibapps/status/1334055652055003137)
|
* [TunesArt](https://www.jibapps.com/apps/tunesart/) - ✅ Yes, Full Native Apple Silicon Support as of v1.9.6 - [Source](https://twitter.com/jibapps/status/1334055652055003137)
|
||||||
* [X Lossless Decoder (XLD)](https://sourceforge.net/projects/xld/) - ✅ Yes, Full Native Apple Silicon Support as of 2021/1/1 - [Scroll to version history here](https://tmkk.undo.jp/xld/index_e.html)
|
* [X Lossless Decoder (XLD)](https://sourceforge.net/projects/xld/) - ✅ Yes, Full Native Apple Silicon Support as of 2021/1/1 - [Scroll to version history here](https://tmkk.undo.jp/xld/index_e.html)
|
||||||
|
|
||||||
|
|
@ -224,16 +231,16 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [Affinity Publisher](https://affinity.serif.com/en-us/publisher/) - ✅ Yes, fully supported as of v1.8.6 - [Press Release](https://affinity.serif.com/en-us/press/newsroom/affinity-apps-accelerate-with-macos-big-sur-and-native-m1-support/) [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1286)
|
* [Affinity Publisher](https://affinity.serif.com/en-us/publisher/) - ✅ Yes, fully supported as of v1.8.6 - [Press Release](https://affinity.serif.com/en-us/press/newsroom/affinity-apps-accelerate-with-macos-big-sur-and-native-m1-support/) [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1286)
|
||||||
* [ArmorPaint](https://armorpaint.org/) - 🚫 No, not yet supported only works on Intel-based Macs
|
* [ArmorPaint](https://armorpaint.org/) - 🚫 No, not yet supported only works on Intel-based Macs
|
||||||
* [BiggerPicture](https://apps.apple.com/app/bigger-picture/id1406088493?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v1.3.0 - [Release Notes](https://basilsalad.com/kitchen/bigger-picture-big-sur/)
|
* [BiggerPicture](https://apps.apple.com/app/bigger-picture/id1406088493?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v1.3.0 - [Release Notes](https://basilsalad.com/kitchen/bigger-picture-big-sur/)
|
||||||
* [Blocs](https://blocsapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [Blocs](https://blocsapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [BrandBook](https://lighthouse16.com/brandbook/) - ✅ Yes, fully supported as of v1.1.2 - [Source](https://lighthouse16.com/journal/apple-silicon-support/)
|
|
||||||
* [Capture One](https://www.captureone.com/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/pull/130#issuecomment-736183868) [Capture One Twitter](https://twitter.com/captureonepro/status/1326570278462349312)
|
* [Capture One](https://www.captureone.com/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/pull/130#issuecomment-736183868) [Capture One Twitter](https://twitter.com/captureonepro/status/1326570278462349312)
|
||||||
|
* [CorelDRAW](https://www.coreldraw.com/en/product/coreldraw/) - ✅ Yes, Full Native Apple Silicon Support - [Press Release](https://www.globenewswire.com/news-release/2021/03/09/2189653/0/en/CorelDRAW-Graphics-Suite-2021-Powers-Collaboration-and-Productivity-in-Graphic-Design.html)
|
||||||
* [Darkroom](https://darkroom.co/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1307)
|
* [Darkroom](https://darkroom.co/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1307)
|
||||||
* [Darktable](https://www.darktable.org/install/#macos) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/328#issuecomment-736769770) [Discussion](https://discuss.pixls.us/t/the-future-of-darktable-on-the-mac-with-arm/21290)
|
* [Darktable](https://www.darktable.org/install/#macos) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/328#issuecomment-736769770) [Discussion](https://discuss.pixls.us/t/the-future-of-darktable-on-the-mac-with-arm/21290)
|
||||||
* [EXIF Sync](https://www.lemkesoft.de/en/products/exif-sync/download/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [EXIF Sync](https://www.lemkesoft.de/en/products/exif-sync/download/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [Figma](https://www.figma.com/downloads/) - ✳️ Yes, works via Rosetta 2 - [Report #1](https://www.reddit.com/r/FigmaDesign/comments/k58d5h/figma_client_for_apple_silicon/gje6y83/?utm_source=reddit&utm_medium=web2x&context=3) [Report #2](https://twitter.com/joeyabanks/status/1330929000701710345)
|
* [Figma](https://www.figma.com/downloads/) - ✳️ Yes, works via Rosetta 2 - [Report #1](https://www.reddit.com/r/FigmaDesign/comments/k58d5h/figma_client_for_apple_silicon/gje6y83/?utm_source=reddit&utm_medium=web2x&context=3) [Report #2](https://twitter.com/joeyabanks/status/1330929000701710345)
|
||||||
* [FontBook](https://www.lemkesoft.de/en/products/fontbook/download/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [FontBook](https://www.lemkesoft.de/en/products/fontbook/download/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [Gimp](https://www.gimp.org/downloads/) - ✳️ Yes, works via Rosetta 2 but with noticeable performance dip - [Verification](https://github.com/ThatGuySam/doesitarm/issues/304#issuecomment-748297707)
|
* [Gimp](https://www.gimp.org/downloads/) - ✳️ Yes, works via Rosetta 2 but with noticeable performance dip - [Verification](https://github.com/ThatGuySam/doesitarm/issues/304#issuecomment-748297707)
|
||||||
* [Goldie](https://goldieapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/618462/5114)
|
* [Goldie](https://goldieapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/618462/5114)
|
||||||
* [GraphicConverter](https://www.lemkesoft.de/en/products/graphicconverter/download/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/483#issuecomment-752342847)
|
* [GraphicConverter](https://www.lemkesoft.de/en/products/graphicconverter/download/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/483#issuecomment-752342847)
|
||||||
* [Graphite Sketchbook](https://www.digitalmasterpieces.com/graphite/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1303)
|
* [Graphite Sketchbook](https://www.digitalmasterpieces.com/graphite/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1303)
|
||||||
* [iCalamus](https://www.lemkesoft.de/en/products/icalamus/download/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [iCalamus](https://www.lemkesoft.de/en/products/icalamus/download/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
|
|
@ -241,24 +248,27 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [InCopy](https://www.adobe.com/products/incopy.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [InCopy](https://www.adobe.com/products/incopy.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [InDesign](https://www.adobe.com/products/indesign.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [InDesign](https://www.adobe.com/products/indesign.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Inkscape](https://inkscape.org/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/11#issuecomment-731507162)
|
* [Inkscape](https://inkscape.org/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/11#issuecomment-731507162)
|
||||||
|
* [Krita](https://krita.org/en/download/krita-desktop/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/610#issuecomment-812640871)
|
||||||
* [Lightroom](https://www.adobe.com/products/photoshop-lightroom.html) - ✅ Yes, Full Native Apple Silicon Support - [Official Post](https://blog.adobe.com/en/2020/12/08/december-photography-updates.html) [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1092) [WWDC Preview](https://youtu.be/GEZhD3J89ZE?t=5783)
|
* [Lightroom](https://www.adobe.com/products/photoshop-lightroom.html) - ✅ Yes, Full Native Apple Silicon Support - [Official Post](https://blog.adobe.com/en/2020/12/08/december-photography-updates.html) [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1092) [WWDC Preview](https://youtu.be/GEZhD3J89ZE?t=5783)
|
||||||
* [Lightroom Classic](https://www.adobe.com/products/photoshop-lightroom-classic.html) - ✳️ Yes, works via Rosetta 2 with some known issues - [Known Issues](https://helpx.adobe.com/lightroom-classic/kb/macos-big-sur-compatibility.html#AppleSiliconcompatibility) [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [Lightroom Classic](https://www.adobe.com/products/photoshop-lightroom-classic.html) - ✳️ Yes, works via Rosetta 2 with some known issues - [Known Issues](https://helpx.adobe.com/lightroom-classic/kb/macos-big-sur-compatibility.html#AppleSiliconcompatibility) [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Logoist 4](https://www.syniumsoftware.com/logoist) - ✅ Yes, Full Native Apple Silicon Support as of v4.1 - [Official News](https://www.syniumsoftware.com/synium-blog/apple-silicon-is-here-and-we-are-ready)
|
* [Logoist 4](https://www.syniumsoftware.com/logoist) - ✅ Yes, Full Native Apple Silicon Support as of v4.1 - [Official News](https://www.syniumsoftware.com/synium-blog/apple-silicon-is-here-and-we-are-ready)
|
||||||
* [Luminar](https://skylum.com/luminar) - ✳️ Yes, works via Rosetta 2 - [Source](https://youtu.be/CKA1YW9l8j0?t=43)
|
* [Luminar](https://skylum.com/luminar) - ✳️ Yes, works via Rosetta 2 - [Source](https://youtu.be/CKA1YW9l8j0?t=43)
|
||||||
* [MacTeX](https://www.tug.org/mactex/mactex-download.html) - ✳️ Runs via Rosetta with native support currently in development - [Article](https://www.tug.org/mactex/aboutarm.html)
|
* [MacTeX](https://www.tug.org/mactex/mactex-download.html) - ✅ Yes, Full Native Apple Silicon Support as of MacTeX-2021 - [Official FAQ](https://www.tug.org/mactex/faq/index.html#qm08)
|
||||||
* [Mail Designer 365](https://maildesigner365.com) - ✅ Yes, fully native support as of v2.0 - [Official page](https://www.maildesigner365.com/new-mail-designer-365-2-0-with-big-sur-optimization/)
|
* [Mail Designer 365](https://maildesigner365.com) - ✅ Yes, fully native support as of v2.0 - [Official page](https://www.maildesigner365.com/new-mail-designer-365-2-0-with-big-sur-optimization/)
|
||||||
* [Optimage](https://optimage.app/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [Optimage](https://optimage.app/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [Pika](https://superhighfives.com/pika) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [Pika](https://superhighfives.com/pika) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [Pixelmator Classic](https://apps.apple.com/cn/app/pixelmator-classic/id407963104?l=en&mt=12) - ✳️ Yes, works via Rosetta 2, no native upgrade planned - [Verification](https://github.com/ThatGuySam/doesitarm/issues/367)
|
* [Pixelmator Classic](https://apps.apple.com/cn/app/pixelmator-classic/id407963104?l=en&mt=12) - ✳️ Yes, works via Rosetta 2, no native upgrade planned - [Verification](https://github.com/ThatGuySam/doesitarm/issues/367)
|
||||||
* [Pixelmator Pro](https://pixelmator.com/pro) - ✅ Yes, full native support as of v2.0
|
* [Pixelmator Pro](https://pixelmator.com/pro) - ✅ Yes, full native support as of v2.0
|
||||||
* [Photoshop](https://www.adobe.com/products/photoshop.html) - ✅ Yes, Initial Native Apple Silicon Support with some limitations - [Known Issues](https://helpx.adobe.com/photoshop/kb/photoshop-for-apple-silicon.html) [Official Adobe Status](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [Photoshop](https://www.adobe.com/products/photoshop.html) - ✅ Yes, Initial Native Apple Silicon Support with some limitations - [Known Issues](https://helpx.adobe.com/photoshop/kb/photoshop-for-apple-silicon.html) [Official Adobe Status](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Seashore](https://apps.apple.com/us/app/seashore/id1448648921?mt=12&app=apps&ign-mpt=uo%3D4) - ✳️ Yes, works via Rosetta 2, an experimental Apple Silicon build is available - [Verification](https://github.com/ThatGuySam/doesitarm/issues/544#issue-799623568) [Apple Silicon Build](https://github.com/leoplan2/seashore/releases/tag/v2.5.10)
|
* [Seashore](https://apps.apple.com/us/app/seashore/id1448648921?mt=12&app=apps&ign-mpt=uo%3D4) - ✳️ Yes, works via Rosetta 2, an experimental Apple Silicon build is available - [Verification](https://github.com/ThatGuySam/doesitarm/issues/544#issue-799623568) [Apple Silicon Build](https://github.com/leoplan2/seashore/releases/tag/v2.5.10)
|
||||||
* [Simple Comic](http://dancingtortoise.com/simplecomic/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/407)
|
* [Simple Comic](http://dancingtortoise.com/simplecomic/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/407)
|
||||||
* [Simple Comic (Community Fork)](https://github.com/MaddTheSane/Simple-Comic) - ✅ Yes, full native Apple Silicon support as of v1.9.1 - [App Store](https://apps.apple.com/us/app/simple-comic/id1497435571?l=en&mt=12) [Github Repo](https://github.com/MaddTheSane/Simple-Comic) [Verification](https://github.com/ThatGuySam/doesitarm/issues/407)
|
* [Simple Comic (Community Fork)](https://github.com/MaddTheSane/Simple-Comic) - ✅ Yes, full native Apple Silicon support as of v1.9.1 - [App Store](https://apps.apple.com/us/app/simple-comic/id1497435571?l=en&mt=12) [Github Repo](https://github.com/MaddTheSane/Simple-Comic) [Verification](https://github.com/ThatGuySam/doesitarm/issues/407)
|
||||||
* [Sip for Mac](https://sipapp.io/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344463/5114)
|
* [Sip for Mac](https://sipapp.io/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344463/5114)
|
||||||
* [Textify](https://apps.apple.com/app/id1522041836) - ✅ Yes, full native support as of v2.0.1 - [Macrumors Thread](https://forums.macrumors.com/threads/textify-text-recognition-ocr-made-easy-and-accurate-1-product-of-the-day-ph.2245225/page-2?post=29016938#post-29016938)
|
* [Textify](https://apps.apple.com/app/id1522041836) - ✅ Yes, full native support as of v2.0.1 - [Macrumors Thread](https://forums.macrumors.com/threads/textify-text-recognition-ocr-made-easy-and-accurate-1-product-of-the-day-ph.2245225/page-2?post=29016938#post-29016938)
|
||||||
|
* [Typeface for Mac](https://typefaceapp.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/507348/5114)
|
||||||
* [Vectornator](https://www.vectornator.io/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1300)
|
* [Vectornator](https://www.vectornator.io/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1300)
|
||||||
* [waifu2x](https://github.com/nihui/waifu2x-ncnn-vulkan/releases) - ✅ Yes, Full Native Apple Silicon Support as of v20210102 - [Release Notes](https://github.com/nihui/waifu2x-ncnn-vulkan/releases/tag/20210102)
|
* [waifu2x](https://github.com/nihui/waifu2x-ncnn-vulkan/releases) - ✅ Yes, Full Native Apple Silicon Support as of v20210102 - [Release Notes](https://github.com/nihui/waifu2x-ncnn-vulkan/releases/tag/20210102)
|
||||||
|
* [Wonderdraft](https://www.wonderdraft.net/) - ✳️ Yes, works via Rosetta 2 translation - [Report #1](https://community.folivora.ai/t/m1-mac-trackpad-disappearing-laggy-pointer/21069/9)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -269,39 +279,81 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [After Effects](https://www.adobe.com/products/aftereffects.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [After Effects](https://www.adobe.com/products/aftereffects.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Autodesk Fusion 360](https://www.autodesk.com/products/fusion-360/overview) - ✳️ Yes, it was shown at the November 10th event running via Rosetta 2 - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1114)
|
* [Autodesk Fusion 360](https://www.autodesk.com/products/fusion-360/overview) - ✳️ Yes, it was shown at the November 10th event running via Rosetta 2 - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1114)
|
||||||
* [Autodesk Maya](https://www.autodesk.com/products/maya/overview) - ✳️ Yes, it was shown at WWDC running via Rosetta 2 - [WWDC Preview](https://youtu.be/GEZhD3J89ZE?t=6036)
|
* [Autodesk Maya](https://www.autodesk.com/products/maya/overview) - ✳️ Yes, it was shown at WWDC running via Rosetta 2 - [WWDC Preview](https://youtu.be/GEZhD3J89ZE?t=6036)
|
||||||
* [Blender](https://www.blender.org/download/) - ✳️ Runs via Rosetta, however, Cycles rendering using GPU not supported - [Issue Tracker](https://developer.blender.org/T78710) [Platforms State of the Union Clip](https://twitter.com/blendertoday/status/1275417203303727104?lang=en)
|
* [Avid Media Composer](https://www.avid.com/media-composer) - 🚫 Not yet supported only works on Intel-based Macs - [Official Article](https://avid.secure.force.com/pkb/articles/en_US/Compatibility/macOS-Big-Sur-Support)
|
||||||
|
* [Blender](https://www.blender.org/download/) - ✳️ Runs via Rosetta, however, Cycles rendering using GPU not supported - [Apple Silicon Alpha Download](https://builder.blender.org/download/) [Issue Tracker](https://developer.blender.org/T78710) [Platforms State of the Union Clip](https://twitter.com/blendertoday/status/1275417203303727104?lang=en)
|
||||||
* [Character Animator](https://www.adobe.com/products/character-animator.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [Character Animator](https://www.adobe.com/products/character-animator.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Cinebench](https://apps.apple.com/app/cinebench/id1438772273?l=en&mt=12) - ✅ Yes, full native support as of v23.200 - [Source](https://github.com/ThatGuySam/doesitarm/issues/39#issuecomment-729965712)
|
* [Cinebench](https://apps.apple.com/app/cinebench/id1438772273?l=en&mt=12) - ✅ Yes, full native support as of v23.200 - [Source](https://github.com/ThatGuySam/doesitarm/issues/39#issuecomment-729965712)
|
||||||
* [Cinema 4D](https://www.maxon.net/en/downloads) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://www.maxon.net/en/article/cinema-4d-r23-sp1-now-available) [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=924)
|
* [Cinema 4D](https://www.maxon.net/en/downloads) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://www.maxon.net/en/article/cinema-4d-r23-sp1-now-available) [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=924)
|
||||||
* [Claquette](https://www.peakstep.com/claquette/) - ✅ Yes, Full Native Apple Silicon Support as of v2.1 - [Release Notes](https://www.peakstep.com/claquette/releasenotes.html)
|
* [Claquette](https://www.peakstep.com/claquette/) - ✅ Yes, Full Native Apple Silicon Support as of v2.1 - [Release Notes](https://www.peakstep.com/claquette/releasenotes.html)
|
||||||
* [DaVinci Resolve](https://www.blackmagicdesign.com/products/davinciresolve) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=950)
|
* [DaVinci Resolve](https://www.blackmagicdesign.com/products/davinciresolve) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=950)
|
||||||
* [Ecamm Live](https://www.ecamm.com/mac/ecammlive/?fp_ref=lsp) - ✳️ Yes, works via Rosetta 2 - [Official Article](https://support.ecamm.com/en/articles/4616420-ecamm-live-on-macos-11-big-sur-and-apple-silicon-m1-macs)
|
|
||||||
* [ffWorks](https://www.ffworks.net/download.html) - ✅ Yes, full native support as of v2.2.3
|
* [ffWorks](https://www.ffworks.net/download.html) - ✅ Yes, full native support as of v2.2.3
|
||||||
* [Filma](https://apps.apple.com/app/filma-best-video-editor/id1456095438) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [Filma](https://apps.apple.com/app/filma-best-video-editor/id1456095438) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [Final Cut Pro](https://www.apple.com/final-cut-pro/) - ✅ Yes, it will available on Apple Silicon launch - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1173) [WWDC Preview](https://youtu.be/GEZhD3J89ZE?t=5844)
|
* [Final Cut Pro](https://www.apple.com/final-cut-pro/) - ✅ Yes, it will available on Apple Silicon launch - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=1173) [WWDC Preview](https://youtu.be/GEZhD3J89ZE?t=5844)
|
||||||
* [Handbrake](https://handbrake.fr/) - ✅ Yes, natively supported as of v1.4.0 - [Github Issue](https://github.com/HandBrake/HandBrake/issues/2951)
|
* [Final Cut Library Manager](https://www.arcticwhiteness.com/finalcutlibrarymanager/download/) - ✅ Yes, Full Native Apple Silicon Support as of v3.9 - [Release Notes](https://www.arcticwhiteness.com/blog/fclm390-fcpx1052/)
|
||||||
|
* [Handbrake](https://handbrake.fr/) - ✅ Yes, natively supported as of v1.4.0 - [Github Issue](https://github.com/HandBrake/HandBrake/issues/2951)
|
||||||
* [Houdini](https://www.sidefx.com/products/houdini/) - ✳️ Yes, works via Rosetta 2 - [Source](https://www.reddit.com/r/Houdini/comments/jzg1wj/houdini_running_on_apple_silicon_m1_macs_demo/)
|
* [Houdini](https://www.sidefx.com/products/houdini/) - ✳️ Yes, works via Rosetta 2 - [Source](https://www.reddit.com/r/Houdini/comments/jzg1wj/houdini_running_on_apple_silicon_m1_macs_demo/)
|
||||||
* [MKVToolNix](https://mkvtoolnix.download/downloads.html#macosx) - ✳️ Yes, works via Rosetta 2 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/344)
|
* [MKVToolNix](https://mkvtoolnix.download/downloads.html#macosx) - ✳️ Yes, works via Rosetta 2 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/344)
|
||||||
* [OBS](https://obsproject.com/) - ✳️ Yes, works via Rosetta 2 - [MacRumors Discussion](https://forums.macrumors.com/threads/so-hows-m1-for-streamers-obs-streamlabs-obs-etc.2269239/) [Mention in Issue](https://github.com/obsproject/obs-studio/pull/3444#issuecomment-690216403)
|
|
||||||
* [OpenISS](https://github.com/OpenISS/OpenISS) - 🔶 Unknown, more info needed - [GitHub Issue](https://github.com/OpenISS/OpenISS/issues/72) [Contribute](https://github.com/ThatGuySam/doesitarm/issues/475)
|
* [OpenISS](https://github.com/OpenISS/OpenISS) - 🔶 Unknown, more info needed - [GitHub Issue](https://github.com/OpenISS/OpenISS/issues/72) [Contribute](https://github.com/ThatGuySam/doesitarm/issues/475)
|
||||||
* [Premiere Pro](https://www.adobe.com/products/premiere.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [Premiere Pro](https://www.adobe.com/products/premiere.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Premiere Rush](https://www.adobe.com/products/premiere-rush.html) - ✳️ Yes, works via Rosetta 2 - [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [Premiere Rush](https://www.adobe.com/products/premiere-rush.html) - ✅ Yes, Full Native Apple Silicon Support as of v1.5.58 - [Release Notes](https://helpx.adobe.com/premiere-rush/user-guide.html/premiere-rush/help/whats-new/2021-3.ug.html) [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Permute](https://software.charliemonroe.net/permute/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344448/5114)
|
* [Permute](https://software.charliemonroe.net/permute/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344448/5114)
|
||||||
|
* [Shutter Encoder](https://www.shutterencoder.com/en/#downloads) - ✅ Yes, Full Native Apple Silicon Support as of v15.0 - [Changelog](https://www.shutterencoder.com/changelog.html)
|
||||||
* [Subler](https://subler.org/) - ✅ Yes, Full Native Apple Silicon Support as of v1.6.6 - [Release Notes](https://bitbucket.org/galad87/subler/wiki/Release%20Notes)
|
* [Subler](https://subler.org/) - ✅ Yes, Full Native Apple Silicon Support as of v1.6.6 - [Release Notes](https://bitbucket.org/galad87/subler/wiki/Release%20Notes)
|
||||||
* [Tumult Hype](https://tumult.com/hype/) - ✅ Yes, Full Native Apple Silicon Support as of v4.1 - [Blog Post](https://blog.tumult.com/2020/11/23/introducing-tumult-hype-v4-1-with-apple-silicon-and-big-sur-compatibility/) [View on Setapp](https://setapp.sjv.io/c/2708043/344385/5114)
|
* [Tumult Hype](https://tumult.com/hype/) - ✅ Yes, Full Native Apple Silicon Support as of v4.1 - [Blog Post](https://blog.tumult.com/2020/11/23/introducing-tumult-hype-v4-1-with-apple-silicon-and-big-sur-compatibility/) [View on Setapp](https://setapp.sjv.io/c/2708043/344385/5114)
|
||||||
* [Vuo](https://vuo.org/download) - ✳️ Runs via Rosetta with native support currently in development - [Source 1](https://vuo.org/comment/7265#comment-7265) [Source 2](https://vuo.org/comment/7781#comment-7781)
|
* [Vuo](https://vuo.org/download) - ✅ Yes, Full Native Apple Silicon Support as of v2.3.0 - [Release Notes](https://vuo.org/release/2.3.0)
|
||||||
* [WebTorrent](https://webtorrent.io/desktop/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/494#issuecomment-759525123)
|
* [WebTorrent](https://webtorrent.io/desktop/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/494#issuecomment-759525123)
|
||||||
* [Wirecast](https://www.telestream.net/wirecast/) - ⏹ No, not working at all but support is in development - [Official Status](http://www.telestream.net/telestream-support/wire-cast/support.htm?accordion=faqBigSur#faqs)
|
|
||||||
* [Wondershare Filmora](https://apps.apple.com/us/app/filmora-video-editor/id1516822341?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [Official Post](https://filmora.wondershare.com/filmora-supports-apple-arm.html)
|
* [Wondershare Filmora](https://apps.apple.com/us/app/filmora-video-editor/id1516822341?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [Official Post](https://filmora.wondershare.com/filmora-supports-apple-arm.html)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Live Production and Performance
|
||||||
|
* [Ableton](https://www.ableton.com/en/live/) - ✳️ Yes, it works via Rosetta 2 - [Reddit Post](https://www.reddit.com/r/ableton/comments/jrtpv6/ableton_live_11_on_apple_silicon_m1_processor/gbvxj9r?context=3)
|
||||||
|
* [Dante Controller](https://my.audinate.com/support/downloads/download-latest-dante-software) - 🚫 No, not yet supported only recommended for Intel-based Macs - [Official Article](https://www.audinate.com/learning/faqs/dante-software-on-macos-big-sur-and-apple-m1-based-computers)
|
||||||
|
* [Dante Via](https://my.audinate.com/support/downloads/download-latest-dante-software) - ✳️ Yes, works via Rosetta 2 translation but not yet recommended - [Official Article](https://www.audinate.com/learning/faqs/dante-software-on-macos-big-sur-and-apple-m1-based-computers)
|
||||||
|
* [Dante Virtual Soundcard](https://my.audinate.com/support/downloads/download-latest-dante-software) - 🚫 No, not yet supported only works on Intel-based Macs - [Official Article](https://www.audinate.com/learning/faqs/dante-software-on-macos-big-sur-and-apple-m1-based-computers)
|
||||||
|
* [djay](https://www.algoriddim.com/) - ✅ Yes, Full Native Apple Silicon Support as of v3.0 - [Release Notes](https://www.algoriddim.com/djay-pro-mac/releasenotes)
|
||||||
|
* [Ecamm Live](https://www.ecamm.com/mac/ecammlive/?fp_ref=lsp) - ✳️ Yes, works via Rosetta 2 - [Official Article](https://support.ecamm.com/en/articles/4616420-ecamm-live-on-macos-11-big-sur-and-apple-silicon-m1-macs)
|
||||||
|
* [Elgato Control Center](https://help.elgato.com/hc/en-us/articles/360028242091-Elgato-Control-Center-Release-Notes-macOS-) - 🚫 No, not yet supported, only works on Intel-based Macs - [Official Article](https://help.elgato.com/hc/en-us/articles/360052527791-Apple-Silicon-Compatibility-M1-Chip-)
|
||||||
|
* [Elgato EpocCam Driver](https://help.elgato.com/hc/en-us/articles/360052826852-EpocCam-Release-Notes-macOS) - ✅ Yes, Native Apple Silicon Support - [Official Article](https://help.elgato.com/hc/en-us/articles/360052527791-Apple-Silicon-Compatibility-M1-Chip-)
|
||||||
|
* [Elgato Game Capture](https://help.elgato.com/hc/en-us/articles/360027963512-Elgato-Game-Capture-HD-Software-Release-Notes-macOS-) - 🚫 No, not yet working, only works on Intel-based Macs - [Official Article](https://help.elgato.com/hc/en-us/articles/360052527791-Apple-Silicon-Compatibility-M1-Chip-)
|
||||||
|
* [Elgato OBS Link](https://help.elgato.com/hc/en-us/articles/360031314272-Elgato-OBS-Link-Software-Release-Notes) - 🚫 No, not yet supported only works on Intel-based Macs - [Official Article](https://help.elgato.com/hc/en-us/articles/360052527791-Apple-Silicon-Compatibility-M1-Chip-)
|
||||||
|
* [Elgato Stream Deck](https://help.elgato.com/hc/en-us/articles/360028242631-Elgato-Stream-Deck-Software-Release-Notes) - ✳️ Yes, works via Rosetta 2 translation - [Official Article](https://help.elgato.com/hc/en-us/articles/360052527791-Apple-Silicon-Compatibility-M1-Chip-)
|
||||||
|
* [Elgato Thunderbolt Dock](https://help.elgato.com/hc/en-us/articles/360035293992-Elgato-Thunderbolt-Dock-Utility-Software-Release-Notes) - 🚫 No, not yet supported only works on Intel-based Macs - [Official Article](https://help.elgato.com/hc/en-us/articles/360052527791-Apple-Silicon-Compatibility-M1-Chip-)
|
||||||
|
* [Elgato Video Capture](https://help.elgato.com/hc/en-us/articles/360028243991-Elgato-Video-Capture-Software-Release-Notes) - ✳️ Yes, works via Rosetta 2 translation - [Official Article](https://help.elgato.com/hc/en-us/articles/360052527791-Apple-Silicon-Compatibility-M1-Chip-)
|
||||||
|
* [Elgato Wave Link](https://help.elgato.com/hc/en-us/articles/360043289491-Elgato-Wave-Link-Release-Notes) - ✳️ Yes, works via Rosetta 2 translation - [Official Article](https://help.elgato.com/hc/en-us/articles/360052527791-Apple-Silicon-Compatibility-M1-Chip-)
|
||||||
|
* [Farrago](https://rogueamoeba.com/farrago/) - ✅ Yes, Initial Native Apple Silicon Support as of v1.6.0 - [Release Notes](https://rogueamoeba.com/farrago/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
||||||
|
* [grandMA3 onPC](https://www.malighting.com/downloads/products/grandma3/) - 🚫 No, not yet supported only works on Intel-based Macs - [Report #1](https://forum.malighting.com/thread/4671-works-with-new-apple-m1/?postID=12236#post12236)
|
||||||
|
* [Loopback](https://rogueamoeba.com/loopback/) - ✅ Yes, Initial Native Apple Silicon Support as of v2.2.0 - [Release Notes](https://rogueamoeba.com/loopback/releasenotes.php) [Official Post](https://weblog.rogueamoeba.com/2020/11/16/rogue-amoeba-software-updates-for-macos-11-big-sur-and-m1-chip-based-macs/)
|
||||||
|
* [NewTek NDI Connect](https://www.newtek.com/ndi/applications/connect/) - 🚫 No, not yet supported only works on Intel-based Macs - [Discussion #1](https://forums.newtek.com/threads/mac-m1-chipset-ndi-tools-support.163871/) [OBS Issue](https://github.com/Palakis/obs-ndi/issues/590)
|
||||||
|
* [OBS](https://obsproject.com/) - ✳️ Yes, works via Rosetta 2 - [MacRumors Discussion](https://forums.macrumors.com/threads/so-hows-m1-for-streamers-obs-streamlabs-obs-etc.2269239/) [Mention in Issue](https://github.com/obsproject/obs-studio/pull/3444#issuecomment-690216403)
|
||||||
|
* [Pioneer CDJ/XDJ Aggregator tool](https://support.pioneerdj.com/hc/en-us/articles/900002589966-CDJ-XDJ-Aggregator-Tool-for-Mac) - ✳️ Yes, works via Rosetta 2 - [Report](https://forums.pioneerdj.com/hc/en-us/community/posts/900003069263-How-to-tell-which-software-and-products-are-Apple-Silicon-Native-vs-translated-with-Rosetta-2?page=1#community_comment_900001461686)
|
||||||
|
* [Pioneer DJS-1000 DJS-TSP Project Creator](https://support.pioneerdj.com/hc/en-us/articles/360038536691-DJS-1000-DJS-TSP-Project-Creator-For-MAC) - ✳️ Yes, works via Rosetta 2 - [Report](https://forums.pioneerdj.com/hc/en-us/community/posts/900003069263-How-to-tell-which-software-and-products-are-Apple-Silicon-Native-vs-translated-with-Rosetta-2?page=1#community_comment_900001461686)
|
||||||
|
* [Pioneer INTERFACE 2](https://support.pioneerdj.com/hc/en-us/sections/360007668331-INTERFACE-2) - ✳️ Yes, works via Rosetta 2 - [Report](https://forums.pioneerdj.com/hc/en-us/community/posts/900003069263-How-to-tell-which-software-and-products-are-Apple-Silicon-Native-vs-translated-with-Rosetta-2?page=1#community_comment_900001461686)
|
||||||
|
* [Pioneer PRO DJ LINK BRIDGE](https://www.pioneerdj.com/en-us/product/software/pro-dj-link-bridge/software/overview/) - ✳️ Yes, works via Rosetta 2 - [Report](https://forums.pioneerdj.com/hc/en-us/community/posts/900003069263-How-to-tell-which-software-and-products-are-Apple-Silicon-Native-vs-translated-with-Rosetta-2?page=1#community_comment_900001461686)
|
||||||
|
* [Pioneer RB-DMX1](https://www.pioneerdj.com/en-us/product/software/rb-dmx1/dmx-interface/overview/) - ✳️ Yes, works via Rosetta 2 - [Report](https://forums.pioneerdj.com/hc/en-us/community/posts/900003069263-How-to-tell-which-software-and-products-are-Apple-Silicon-Native-vs-translated-with-Rosetta-2?page=1#community_comment_900001461686)
|
||||||
|
* [Pioneer RMX-1000 REMIXBOX](https://www.pioneerdj.com/en/support/software/effector/rmx-1000/) - ✳️ Yes, works via Rosetta 2 - [Report](https://forums.pioneerdj.com/hc/en-us/community/posts/900003069263-How-to-tell-which-software-and-products-are-Apple-Silicon-Native-vs-translated-with-Rosetta-2?page=1#community_comment_900001461686)
|
||||||
|
* [Pioneer TORAIZ SP-16 DJS-TSP Project Creator](https://support.pioneerdj.com/hc/en-us/articles/360038537531-TORAIZ-SP-16-DJS-TSP-Project-Creator-For-MAC) - ✳️ Yes, works via Rosetta 2 - [Report](https://forums.pioneerdj.com/hc/en-us/community/posts/900003069263-How-to-tell-which-software-and-products-are-Apple-Silicon-Native-vs-translated-with-Rosetta-2?page=1#community_comment_900001461686)
|
||||||
|
* [Pioneer TORAIZ SQUID Manager](https://support.pioneerdj.com/hc/en-us/articles/360038537451-TORAIZ-SQUID-Manager-for-Mac) - ✳️ Yes, works via Rosetta 2 - [Report](https://forums.pioneerdj.com/hc/en-us/community/posts/900003069263-How-to-tell-which-software-and-products-are-Apple-Silicon-Native-vs-translated-with-Rosetta-2?page=1#community_comment_900001461686)
|
||||||
|
* [Pioneer USB Connection Driver](https://support.pioneerdj.com/hc/en-us/articles/360038536051-USB-Connection-Link-Export-driver-for-Mac) - ✳️ Yes, works via Rosetta 2 - [Report](https://forums.pioneerdj.com/hc/en-us/community/posts/900003069263-How-to-tell-which-software-and-products-are-Apple-Silicon-Native-vs-translated-with-Rosetta-2?page=1#community_comment_900001461686)
|
||||||
|
* [ProPresenter](https://renewedvision.com/propresenter/#download) - ✅ Yes, Full Native Apple Silicon Support as of v7.4 - [Official Compatibilty Notes](https://support.renewedvision.com/hc/en-us/articles/360057548273-Big-Sur-Apple-Silicon-Compatibility) [NDI Compatibility](https://support.renewedvision.com/hc/en-us/articles/1500000361482-NDI-Compatibility-for-Apple-Silicon-Processors)
|
||||||
|
* [rekordbox](https://rekordbox.com/en/download/) - ✳️ Yes, works via Rosetta 2 with native support currently in development - [Official Support List](https://www.pioneerdj.com/en-us/landing/support-for-macos-big-sur/) [Verification](https://github.com/ThatGuySam/doesitarm/issues/560#issue-805540415)
|
||||||
|
* [Serato DJ Pro](https://serato.com/dj/pro/downloads/mac) - ✳️ Yes, works via Rosetta 2 translation - [Beta Download](https://serato.com/forum/area/740)
|
||||||
|
* [Super 8 R2](https://www.native-instruments.com/en/products/komplete/synths/super-8/) - ⏹ No, not working at all but support is in development - [Official Status](https://support.native-instruments.com/hc/en-us/articles/360013515618-macOS-11-Big-Sur-Compatibility-News) [Official Post](https://support.native-instruments.com/hc/en-us/articles/360014683497)
|
||||||
|
* [Traktor DJ 2](https://www.native-instruments.com/en/products/traktor/dj-software/traktor-dj-2/) - ✳️ Yes, works via Rosetta 2 - [Official Apple Silicon Status](https://support.native-instruments.com/hc/en-us/articles/360014683497-) [Official Big Sur Status](https://support.native-instruments.com/hc/en-us/articles/360013515618-macOS-11-Big-Sur-Compatibility-News) [Official Post](https://support.native-instruments.com/hc/en-us/articles/360014683497)
|
||||||
|
* [Traktor Pro 3](https://www.native-instruments.com/en/products/traktor/dj-software/traktor-pro-3/) - ✳️ Yes, works via Rosetta 2 - [Official Apple Silicon Status](https://support.native-instruments.com/hc/en-us/articles/360014683497-) [Official Big Sur Status](https://support.native-instruments.com/hc/en-us/articles/360013515618-macOS-11-Big-Sur-Compatibility-News) [Official Post](https://support.native-instruments.com/hc/en-us/articles/360014683497)
|
||||||
|
* [Wirecast](https://www.telestream.net/wirecast/) - ⏹ No, not working at all but support is in development - [Official Status](http://www.telestream.net/telestream-support/wire-cast/support.htm?accordion=faqBigSur#faqs)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 3D and Architecture
|
#### 3D and Architecture
|
||||||
|
|
||||||
* [Archicad](https://graphisoft.com/solutions/products/archicad) - ✳️ Yes, works via Rosetta 2 - [Graphisoft support update](https://helpcenter.graphisoft.com/knowledgebase/130674/) [Graphisoft Thread](https://archicad-talk.graphisoft.com/viewtopic.php?p=312614) [Reddit thread](https://www.reddit.com/r/ArchiCAD/comments/hsjs6l/archicad_and_macos_armtransition/) [Tudy's feedback](https://github.com/ThatGuySam/doesitarm/pull/189#issuecomment-742729489)
|
* [Archicad](https://graphisoft.com/solutions/products/archicad) - ✳️ Yes, works via Rosetta 2 - [Graphisoft support update](https://helpcenter.graphisoft.com/knowledgebase/130674/) [Graphisoft Thread](https://archicad-talk.graphisoft.com/viewtopic.php?p=312614) [Reddit thread](https://www.reddit.com/r/ArchiCAD/comments/hsjs6l/archicad_and_macos_armtransition/) [Tudy's feedback](https://github.com/ThatGuySam/doesitarm/pull/189#issuecomment-742729489)
|
||||||
* [AutoCAD](https://www.autodesk.com/products/autocad/overview?plc=ACDIST&term=1-YEAR&support=ADVANCED&quantity=1) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/499#issuecomment-754202196) [AutoDesk Forums](https://forums.autodesk.com/t5/autocad-for-mac-forum/apple-silicon/m-p/9652836)
|
* [AutoCAD](https://www.autodesk.com/products/autocad/overview?plc=ACDIST&term=1-YEAR&support=ADVANCED&quantity=1) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/499#issuecomment-754202196) [AutoDesk Forums](https://forums.autodesk.com/t5/autocad-for-mac-forum/apple-silicon/m-p/9652836)
|
||||||
* [CADintosh](https://www.lemkesoft.de/en/products/cadintosh/download/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [CADintosh](https://www.lemkesoft.de/en/products/cadintosh/download/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [PrusaSlicer](https://www.prusa3d.com/prusaslicer/) - ✳️ Yes, works via Rosetta 2 with native support in development - [Verification](https://github.com/ThatGuySam/doesitarm/issues/379#issue-755576203)
|
* [PrusaSlicer](https://www.prusa3d.com/prusaslicer/) - ✅ Yes, Full Native Apple Silicon Support as of v2.3.1 - [Release Notes](https://github.com/prusa3d/PrusaSlicer/releases/tag/version_2.3.1)
|
||||||
|
* [Redshift](https://www.redshift3d.com/demo) - ✅ Yes, Full Native Apple Silicon Support - [Press Release](https://www.businesswire.com/news/home/20210413005903/en/Maxon-Announces-Redshift-for-macOS-Including-Native-Support-for-M1-Powered-Macs)
|
||||||
|
* [Rhinoceros 3D](https://www.rhino3d.com/download/) - ✳️ Yes, works via Rosetta 2 translation - [Developer Article](https://discourse.mcneel.com/t/apple-silicon-and-rhino-for-mac-the-work-continues/113164) [Known Bugs](https://mcneel.myjetbrains.com/youtrack/issues?q=project:%20RH%20tag:%20%7BApple%20Silicon%7D%20%23unresolved)
|
||||||
* [Shaper3D](https://www.shapr3d.com/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=2211)
|
* [Shaper3D](https://www.shapr3d.com/) - ✅ Yes, it was shown at the November 10th event - [Apple Nov 10 Event](https://youtu.be/5AwdkGKmZ0I?t=2211)
|
||||||
* [SketchUp](https://www.sketchup.com/) - ✳️ Yes, works via Rosetta 2 - [Discussion](https://forums.sketchup.com/t/the-new-m1-processor/141946)
|
* [SketchUp](https://www.sketchup.com/) - ✳️ Yes, works via Rosetta 2 - [Discussion](https://forums.sketchup.com/t/the-new-m1-processor/141946)
|
||||||
* [SOLIDWORKS](https://www.solidworks.com/sw/support/downloads.htm) - ✳️ Yes, works via Parallels Virtualization - [Working on Parallels](https://www.parallels.com/blogs/solidworks-for-mac/)
|
* [SOLIDWORKS](https://www.solidworks.com/sw/support/downloads.htm) - ✳️ Yes, works via Parallels Virtualization - [Working on Parallels](https://www.parallels.com/blogs/solidworks-for-mac/)
|
||||||
|
|
@ -318,9 +370,11 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [Adobe Bridge](https://www.adobe.com/products/bridge.html) - ✳️ Yes, works via Rosetta 2 with known issues - [Known Issues](https://helpx.adobe.com/bridge/kb/bridge-and-macos-big-sur.html#apple-silicon-compatibility) [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
* [Adobe Bridge](https://www.adobe.com/products/bridge.html) - ✳️ Yes, works via Rosetta 2 with known issues - [Known Issues](https://helpx.adobe.com/bridge/kb/bridge-and-macos-big-sur.html#apple-silicon-compatibility) [Official Adobe Status Page](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html)
|
||||||
* [Agenda](https://agenda.com/) - ✅ Yes, Full Native Apple Silicon Support - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
* [Agenda](https://agenda.com/) - ✅ Yes, Full Native Apple Silicon Support - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
||||||
* [Airmail](https://airmailapp.com/) - ✅ Yes, Full Native Apple Silicon Support as of v4.5.1 - [Release History](https://apps.apple.com/app/apple-store/id918858936)
|
* [Airmail](https://airmailapp.com/) - ✅ Yes, Full Native Apple Silicon Support as of v4.5.1 - [Release History](https://apps.apple.com/app/apple-store/id918858936)
|
||||||
* [Alfred](https://www.alfredapp.com/universal/) - ✅ Yes, fully supported - [Official Announcement](https://www.alfredapp.com/blog/announcements/alfred-ready-for-apple-m1-chip/)
|
* [Alfred](https://www.alfredapp.com/universal/) - ✅ Yes, fully supported - [Official Announcement](https://www.alfredapp.com/blog/announcements/alfred-ready-for-apple-m1-chip/)
|
||||||
* [Anki](https://apps.ankiweb.net/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/495)
|
* [Anki](https://apps.ankiweb.net/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/495)
|
||||||
* [AnyDesk](https://anydesk.com/en/downloads/mac-os) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [AnyDesk](https://anydesk.com/en/downloads/mac-os) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
|
* [Avid Link](https://www.avid.com/products/avid-link#Downloads) - 🚫 Not yet supported only works on Intel-based Macs - [Official Article](https://avid.secure.force.com/pkb/articles/en_US/Compatibility/macOS-Big-Sur-Support)
|
||||||
|
* [Avid MediaCentral](https://www.avid.com/products/mediacentral) - 🚫 Not yet supported only works on Intel-based Macs - [Official Article](https://avid.secure.force.com/pkb/articles/en_US/Compatibility/macOS-Big-Sur-Support)
|
||||||
* [Axure RP 9](https://www.axure.com/download) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/38)
|
* [Axure RP 9](https://www.axure.com/download) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/38)
|
||||||
* [Bandizip](https://en.bandisoft.com/bandizip.mac/) - ✅ Yes, Full Native Apple Silicon Support as of v7.03 - [Release Notes](https://en.bandisoft.com/bandizip.mac/history/)
|
* [Bandizip](https://en.bandisoft.com/bandizip.mac/) - ✅ Yes, Full Native Apple Silicon Support as of v7.03 - [Release Notes](https://en.bandisoft.com/bandizip.mac/history/)
|
||||||
* [Bear](https://bear.app/) - ✅ Yes, fully supported as v1.8.2 - [Bear Blog Post](https://blog.bear.app/2020/11/bear-gets-new-widgets-and-ready-for-big-sur/)
|
* [Bear](https://bear.app/) - ✅ Yes, fully supported as v1.8.2 - [Bear Blog Post](https://blog.bear.app/2020/11/bear-gets-new-widgets-and-ready-for-big-sur/)
|
||||||
|
|
@ -328,22 +382,25 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [Blackmagic Disk Speed Test](https://apps.apple.com/app/id425264550) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/359#issuecomment-736255914)
|
* [Blackmagic Disk Speed Test](https://apps.apple.com/app/id425264550) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/359#issuecomment-736255914)
|
||||||
* [Box Drive](https://www.box.com/resources/downloads) - ⏹ Not yet, but it's currently in development. - [Official Post](https://support.box.com/hc/en-us/community/posts/360051323454-Box-Drive-s-system-extension-failed-to-load?page=1#community_comment_1500000009302)
|
* [Box Drive](https://www.box.com/resources/downloads) - ⏹ Not yet, but it's currently in development. - [Official Post](https://support.box.com/hc/en-us/community/posts/360051323454-Box-Drive-s-system-extension-failed-to-load?page=1#community_comment_1500000009302)
|
||||||
* [Brave Browser](https://brave.com/#mac-options) - ✅ Yes, Full Native Apple Silicon Support
|
* [Brave Browser](https://brave.com/#mac-options) - ✅ Yes, Full Native Apple Silicon Support
|
||||||
* [BusyCal](https://www.busymac.com/busycal/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/471907/5114)
|
* [BusyCal](https://www.busymac.com/busycal/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/471907/5114)
|
||||||
|
* [BusyContacts](https://www.busymac.com/busycontacts/) - ✅ Yes, Full Native Apple Silicon Support as of v1.5.0 - [Release Notes](https://www.busymac.com/busycontacts/releasenotes.html) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/679262/5114)
|
||||||
* [Calibre](https://calibre-ebook.com/download_osx) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/26#issuecomment-736778254)
|
* [Calibre](https://calibre-ebook.com/download_osx) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/26#issuecomment-736778254)
|
||||||
* [Call Recorder for Skype](https://www.ecamm.com/mac/callrecorder/) - 🚫 No, not supported and no plans for support - [Official Post](https://ecamm.com/blog/call-recorder-for-skype-update/)
|
* [Call Recorder for Skype](https://www.ecamm.com/mac/callrecorder/) - 🚫 No, not supported and no plans for support - [Official Post](https://ecamm.com/blog/call-recorder-for-skype-update/)
|
||||||
* [Chrome](https://www.google.com/chrome/) - ✅ Yes, fully supported as of v87 - [Article](https://9to5google.com/2020/11/17/chrome-mac-apple-silicon/)
|
* [Chrome](https://www.google.com/chrome/) - ✅ Yes, fully supported as of v87 - [Article](https://9to5google.com/2020/11/17/chrome-mac-apple-silicon/)
|
||||||
|
* [ChronoSync Express](https://www.econtechnologies.com/chronosync-express/overview.html) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344307/5114)
|
||||||
* [Citrix Workspace](https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html) - ✳️ Yes, works via Rosetta 2 - [Discussion](https://discussions.citrix.com/topic/411196-will-citrix-viewer-run-on-new-apple-hardware-with-apple-silicon-m1/)
|
* [Citrix Workspace](https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html) - ✳️ Yes, works via Rosetta 2 - [Discussion](https://discussions.citrix.com/topic/411196-will-citrix-viewer-run-on-new-apple-hardware-with-apple-silicon-m1/)
|
||||||
* [ClickUp Desktop](https://clickup.com/apps) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [ClickUp Desktop](https://clickup.com/apps) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [Coherence X](https://www.bzgapps.com/coherence) - 🚫 Not yet supported only works on Intel-based Macs - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/704581/5114)
|
* [Coherence X](https://www.bzgapps.com/coherence) - 🚫 Not yet supported only works on Intel-based Macs - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/704581/5114)
|
||||||
* [Coloban](https://www.coloban.com) - ⏹ Not yet, but it's currently in development. - [Coloban Forum Issue](https://forum.coloban.com/index.php?u=/topic/21/new-arm-based-apple-computers)
|
* [Coloban](https://www.coloban.com) - ⏹ Not yet, but it's currently in development. - [Coloban Forum Issue](https://forum.coloban.com/index.php?u=/topic/21/new-arm-based-apple-computers)
|
||||||
* [CrossOver](https://www.codeweavers.com/) - ✳️ Runs via Rosetta 2 - [Official Blog](https://www.codeweavers.com/blog/jwhite/2020/11/10/its-great-to-live-in-interesting-times)
|
* [CrossOver](https://www.codeweavers.com/) - ✳️ Runs via Rosetta 2 - [Official Blog](https://www.codeweavers.com/blog/jwhite/2020/11/10/its-great-to-live-in-interesting-times)
|
||||||
* [Day One Journal](https://apps.apple.com/app/id1055511498) - ✅ Yes, Full Native Apple Silicon Support as of v5.8 - [Release Notes](https://help.dayoneapp.com/en/articles/469749-mac-release-notes)
|
* [Day One Journal](https://apps.apple.com/app/id1055511498) - ✅ Yes, Full Native Apple Silicon Support as of v5.8 - [Release Notes](https://help.dayoneapp.com/en/articles/469749-mac-release-notes)
|
||||||
* [DEVONthink](https://www.devontechnologies.com/download/) - ✅ Yes, Full Native Apple Silicon Support as of v3.5.2 - [Release Notes](https://www.devontechnologies.com/blog/20200814-devonthink-352)
|
* [DEVONthink](https://www.devontechnologies.com/download/) - ✅ Yes, Full Native Apple Silicon Support as of v3.5.2 - [Release Notes](https://www.devontechnologies.com/blog/20200814-devonthink-352)
|
||||||
* [Diagrams for Mac](https://diagrams.app/) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://diagrams.app/releases#2.0) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/diagrams)
|
* [Diagrams for Mac](https://diagrams.app/) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://diagrams.app/releases#2.0) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/diagrams)
|
||||||
|
* [Diarly](https://apps.apple.com/app/id13s87167765) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/diarly)
|
||||||
* [Drafts](https://itunes.apple.com/app/id1236254471?ls=1&mt=8&at=11l4Cf&ct=site) - ✅ Yes, Full Native Apple Silicon Support - [Official Tweet](https://twitter.com/draftsapp/status/1326263191601618945)
|
* [Drafts](https://itunes.apple.com/app/id1236254471?ls=1&mt=8&at=11l4Cf&ct=site) - ✅ Yes, Full Native Apple Silicon Support - [Official Tweet](https://twitter.com/draftsapp/status/1326263191601618945)
|
||||||
* [Dropbox](https://www.dropbox.com) - ✳️ Yes, works via Rosetta 2 as of v110.4.458 - [Forum Post](https://www.dropboxforum.com/t5/Dropbox-desktop-client-builds/Stable-Build-110-4-458/m-p/470973/highlight/true#M6110)
|
* [Dropbox](https://www.dropbox.com) - ✳️ Yes, works via Rosetta 2 as of v110.4.458 - [Forum Post](https://www.dropboxforum.com/t5/Dropbox-desktop-client-builds/Stable-Build-110-4-458/m-p/470973/highlight/true#M6110)
|
||||||
* [Dropzone](https://aptonic.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/515891/5114)
|
* [Dropzone](https://aptonic.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/515891/5114)
|
||||||
* [Downie](https://software.charliemonroe.net/downie/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344361/5114)
|
* [Downie](https://software.charliemonroe.net/downie/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344361/5114)
|
||||||
* [Due for Mac](https://www.dueapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/due)
|
* [Due for Mac](https://www.dueapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/due)
|
||||||
* [EasyConnect](https://lstratman.github.io/EasyConnect/) - 🔶 Unknown, more info needed - [Contribute](https://github.com/ThatGuySam/doesitarm/issues/219)
|
* [EasyConnect](https://lstratman.github.io/EasyConnect/) - 🔶 Unknown, more info needed - [Contribute](https://github.com/ThatGuySam/doesitarm/issues/219)
|
||||||
* [Eon Timer](https://software.charliemonroe.net/eon/) - ✅ Yes, Full Native Apple Silicon Support - [Developer Article](http://blog.charliemonroe.net/big-sur-and-apple-silicon/)
|
* [Eon Timer](https://software.charliemonroe.net/eon/) - ✅ Yes, Full Native Apple Silicon Support - [Developer Article](http://blog.charliemonroe.net/big-sur-and-apple-silicon/)
|
||||||
|
|
@ -353,44 +410,51 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [Firefox](https://www.mozilla.org/en-US/firefox/new/) - ✅ Yes, Full Native Apple Silicon Support as of v84 - [Release Notes](https://www.mozilla.org/en-US/firefox/84.0/releasenotes/)
|
* [Firefox](https://www.mozilla.org/en-US/firefox/new/) - ✅ Yes, Full Native Apple Silicon Support as of v84 - [Release Notes](https://www.mozilla.org/en-US/firefox/84.0/releasenotes/)
|
||||||
* [flickery](https://eternalstorms.at/flickery) - ✅ Yes, Full Native Apple Silicon Support as of v1.9.48 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
* [flickery](https://eternalstorms.at/flickery) - ✅ Yes, Full Native Apple Silicon Support as of v1.9.48 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
||||||
* [Focus for Mac](https://heyfocus.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/focus)
|
* [Focus for Mac](https://heyfocus.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/focus)
|
||||||
|
* [FSNotes](https://github.com/glushchenko/fsnotes/releases) - ✅ Yes, Full Native Apple Silicon Support as of v4.9.3 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/612#issue-840175974)
|
||||||
* [Geekbench](https://www.geekbench.com/download/mac/) - ✅ Yes, full native support as of v5.3 - [Release Notes](https://www.geekbench.com/blog/2020/11/geekbench-53/)
|
* [Geekbench](https://www.geekbench.com/download/mac/) - ✅ Yes, full native support as of v5.3 - [Release Notes](https://www.geekbench.com/blog/2020/11/geekbench-53/)
|
||||||
* [GitHub Classroom Assistant](https://classroom.github.com/assistant) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/419#issue-760871225)
|
* [GitHub Classroom Assistant](https://classroom.github.com/assistant) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/419#issue-760871225)
|
||||||
* [Glimpses](https://eternalstorms.at/glimpses) - ✅ Yes, Full Native Apple Silicon Support as of v2.2.3 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
* [Glimpses](https://eternalstorms.at/glimpses) - ✅ Yes, Full Native Apple Silicon Support as of v2.2.3 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
||||||
* [GoodTask](https://goodtaskapp.com/mac/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344377/5114)
|
* [GoodTask](https://goodtaskapp.com/mac/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344377/5114)
|
||||||
* [Google Backup and Sync](https://www.google.com/drive/download/) - ✳️ Yes, works via Rosetta 2 as of v3.54 - [Release Notes](https://support.google.com/a/answer/7573023?hl=en) [Verification](https://github.com/ThatGuySam/doesitarm/issues/564#issue-807949490)
|
* [Google Backup and Sync](https://www.google.com/drive/download/) - ✳️ Yes, works via Rosetta 2 as of v3.54 - [Release Notes](https://support.google.com/a/answer/7573023?hl=en) [Verification](https://github.com/ThatGuySam/doesitarm/issues/564#issue-807949490)
|
||||||
* [Google Drive for desktop](https://support.google.com/drive/answer/7329379#zippy=%2Cdownload-install-drive-file-stream) - 🚫 No, not yet but native support is in beta - [Official Status](https://support.google.com/a/answer/7491144?utm_medium=et&utm_source=aboutdrive&utm_content=getstarted&utm_campaign=en_us&hl=en#:~:text=Drive%20File%20Stream%20does%20not%20yet%20support%20Apple%20M1%20devices) [Apple Silicon Beta Info](https://support.google.com/a/answer/7577057?hl=en)
|
* [Google Drive for desktop](https://support.google.com/drive/answer/7329379#zippy=%2Cdownload-install-drive-file-stream) - 🚫 No, not yet but native support is in beta - [Official Status](https://support.google.com/a/answer/7491144?utm_medium=et&utm_source=aboutdrive&utm_content=getstarted&utm_campaign=en_us&hl=en#:~:text=Drive%20File%20Stream%20does%20not%20yet%20support%20Apple%20M1%20devices) [Apple Silicon Beta Info](https://support.google.com/a/answer/7577057?hl=en)
|
||||||
|
* [Grapefruit for Mac](https://haveagrapefruit.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/grapefruit)
|
||||||
* [Harvest for Mac](https://www.getharvest.com/apps/mac) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/604#issue-835321721)
|
* [Harvest for Mac](https://www.getharvest.com/apps/mac) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/604#issue-835321721)
|
||||||
|
* [HCL Notes](https://www.hcltechsw.com/products/nd) - 🔶 Unknown, more info needed - [Discussion](https://domino-ideas.hcltechsw.com/ideas/NTS-I-1496)
|
||||||
* [Highland 2](https://quoteunquoteapps.com/highland-2/) - ✅ Yes, Full Native Apple Silicon Support as of v2.9 - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
* [Highland 2](https://quoteunquoteapps.com/highland-2/) - ✅ Yes, Full Native Apple Silicon Support as of v2.9 - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
||||||
* [Highlights for Mac](https://highlightsapp.net/) - ✅ Yes, Full Native Apple Silicon Support as of v2020.3 - [Official Blog](https://highlightsapp.net/blog/2020/11/12/Time-for-change/)
|
* [Highlights for Mac](https://highlightsapp.net/) - ✅ Yes, Full Native Apple Silicon Support as of v2020.3 - [Official Blog](https://highlightsapp.net/blog/2020/11/12/Time-for-change/)
|
||||||
* [IA Writer](https://apps.apple.com/us/app/ia-writer/id775737172) - ✅ Yes, Full Native Apple Silicon Support - [Official Twitter](https://twitter.com/iawriter/status/1326284671005696009?s=21)
|
* [IA Writer](https://apps.apple.com/us/app/ia-writer/id775737172) - ✅ Yes, Full Native Apple Silicon Support - [Official Twitter](https://twitter.com/iawriter/status/1326284671005696009?s=21)
|
||||||
* [IDrive](https://www.idrive.com/online-backup-download) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/542#issue-797628007)
|
* [IDrive](https://www.idrive.com/online-backup-download) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/542#issue-797628007)
|
||||||
* [iMazing 2](https://imazing.com/download) - ✳️ Yes, works via Rosetta 2 with native support in development - [Release notes](https://downloads.imazing.com/mac/iMazing/2.13.1.14452/release-notes.html)
|
* [iMazing 2](https://imazing.com/download) - ✳️ Yes, works via Rosetta 2 with native support in development - [Release notes](https://downloads.imazing.com/mac/iMazing/2.13.1.14452/release-notes.html)
|
||||||
|
* [InstaCal](https://apps.apple.com/us/app/instacal-menu-bar-calendar/id1247292524) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/instacal)
|
||||||
* [Internal Phone Numbers](https://lighthouse16.com/internal-phone-numbers/) - ✅ Yes, fully supported as of v1.2.2 - [Source](https://lighthouse16.com/journal/apple-silicon-support/)
|
* [Internal Phone Numbers](https://lighthouse16.com/internal-phone-numbers/) - ✅ Yes, fully supported as of v1.2.2 - [Source](https://lighthouse16.com/journal/apple-silicon-support/)
|
||||||
|
* [Jump Desktop](https://jumpdesktop.com/) - ✅ Yes, Full Native Apple Silicon Support as of v8.7.15 - [Changelog](https://changelog.jumpdesktop.com/jump-desktop-8.7.15-for-mac-3cSLeM)
|
||||||
* [Keep It](http://reinventedsoftware.com/keepit/) - ✅ Yes, Full Native Apple Silicon Support as of v1.9 - [Official News](http://reinventedsoftware.com/news/)
|
* [Keep It](http://reinventedsoftware.com/keepit/) - ✅ Yes, Full Native Apple Silicon Support as of v1.9 - [Official News](http://reinventedsoftware.com/news/)
|
||||||
* [Key Codes](https://manytricks.com/keycodes/) - ✅ Yes, Full Native Apple Silicon Support as of v2.2 - [Official Tweet](https://twitter.com/manytricks/status/1333456606449774595)
|
* [Key Codes](https://manytricks.com/keycodes/) - ✅ Yes, Full Native Apple Silicon Support as of v2.2 - [Official Tweet](https://twitter.com/manytricks/status/1333456606449774595)
|
||||||
* [Lacona](https://lacona.app/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344402/5114)
|
* [Lacona](https://lacona.app/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344402/5114)
|
||||||
* [LaunchBar](https://www.obdev.at/products/launchbar/download.html) - ✅ Yes, Full Native Apple Silicon Support - [Source](https://github.com/ThatGuySam/doesitarm/issues/320)
|
* [LaunchBar](https://www.obdev.at/products/launchbar/download.html) - ✅ Yes, Full Native Apple Silicon Support - [Source](https://github.com/ThatGuySam/doesitarm/issues/320)
|
||||||
* [Ledger Live](https://www.ledger.com/ledger-live/download) - ✳️ Yes, works via Rosetta 2 with native support in development - [Source](https://github.com/ThatGuySam/doesitarm/pull/396)
|
* [Ledger Live](https://www.ledger.com/ledger-live/download) - ✳️ Yes, works via Rosetta 2 with native support in development - [Source](https://github.com/ThatGuySam/doesitarm/pull/396)
|
||||||
* [LibreOffice](https://www.libreoffice.org/download/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/371#issue-755004669) [Official Post](https://www.collaboraoffice.com/desktop/update-on-libreoffice-support-for-arm-based-macs/)
|
* [LibreOffice](https://www.libreoffice.org/download/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/371#issue-755004669) [Official Post](https://www.collaboraoffice.com/desktop/update-on-libreoffice-support-for-arm-based-macs/)
|
||||||
* [MarsEdit](https://redsweater.com/marsedit/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/613035/5114)
|
* [MarsEdit](https://redsweater.com/marsedit/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/613035/5114)
|
||||||
|
* [Merlin Project Express](https://www.projectwizards.net/en/merlin-project-express) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/368245/5114)
|
||||||
* [Microsoft Edge](https://www.microsoft.com/en-us/edge) - ✅ Yes, Full Native Apple Silicon Support as of v88.0.705.50 - [Release Notes](https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel)
|
* [Microsoft Edge](https://www.microsoft.com/en-us/edge) - ✅ Yes, Full Native Apple Silicon Support as of v88.0.705.50 - [Release Notes](https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel)
|
||||||
* [Microsoft Excel](https://apps.apple.com/cn/app/microsoft-excel/id462058435?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
* [Microsoft Excel](https://apps.apple.com/cn/app/microsoft-excel/id462058435?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
||||||
* [Microsoft Office 365](https://www.microsoft.com/en-us/microsoft-365/office-365) - ✅ Yes, Full Native Apple Silicon Support as of v16.44 - [Official Post](https://www.microsoft.com/en-us/microsoft-365/blog/2020/12/15/4-ways-microsoft-365-is-improving-the-experience-for-mac-users/) [WWDC Preview](https://youtu.be/GEZhD3J89ZE?t=5681)
|
* [Microsoft Office 365](https://www.microsoft.com/en-us/microsoft-365/office-365) - ✅ Yes, Full Native Apple Silicon Support as of v16.44 - [Official Post](https://www.microsoft.com/en-us/microsoft-365/blog/2020/12/15/4-ways-microsoft-365-is-improving-the-experience-for-mac-users/) [WWDC Preview](https://youtu.be/GEZhD3J89ZE?t=5681)
|
||||||
* [Microsoft OneNote](https://apps.apple.com/cn/app/microsoft-onenote/id784801555?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
* [Microsoft OneNote](https://apps.apple.com/cn/app/microsoft-onenote/id784801555?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
||||||
* [Microsoft Outlook](https://apps.apple.com/app/microsoft-outlook/id985367838?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
* [Microsoft Outlook](https://apps.apple.com/app/microsoft-outlook/id985367838?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
||||||
* [Microsoft PowerPoint](https://apps.apple.com/cn/app/microsoft-powerpoint/id462062816?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
* [Microsoft PowerPoint](https://apps.apple.com/cn/app/microsoft-powerpoint/id462062816?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
||||||
* [Microsoft Remote Desktop](https://apps.apple.com/au/app/microsoft-remote-desktop/id1295203466?mt=12) - ✳️ Yes, works via Rosetta 2 with native support in beta - [Apple Silicon Beta](https://install.appcenter.ms/orgs/rdmacios-k2vy/apps/microsoft-remote-desktop-for-mac/distribution_groups/all-users-of-microsoft-remote-desktop-for-mac)
|
* [Microsoft Remote Desktop](https://apps.apple.com/au/app/microsoft-remote-desktop/id1295203466?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v10.6.0 - [App Store Version History](https://apps.apple.com/gb/app/microsoft-remote-desktop/id1295203466?mt=12)
|
||||||
* [Microsoft Word](https://apps.apple.com/cn/app/microsoft-word/id462054704?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
* [Microsoft Word](https://apps.apple.com/cn/app/microsoft-word/id462054704?l=en&mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v16.44
|
||||||
* [MindNode](https://mindnode.com/) - ✅ Yes, Full Native Apple Silicon Support - [App Store Story](https://apps.apple.com/us/story/id1540024103) [View on Setapp](https://setapp.sjv.io/c/2708043/557413/5114)
|
* [MindNode](https://mindnode.com/) - ✅ Yes, Full Native Apple Silicon Support - [App Store Story](https://apps.apple.com/us/story/id1540024103) [View on Setapp](https://setapp.sjv.io/c/2708043/557413/5114)
|
||||||
* [Moment for macOS](https://fireball.studio/moment) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/896739/5114)
|
* [Moment for macOS](https://fireball.studio/moment) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/896739/5114)
|
||||||
* [Monero GUI Wallet](https://www.getmonero.org/downloads/) - ✳️ Yes, works via Rosetta 2 with a few minor bugs - [Source](https://github.com/ThatGuySam/doesitarm/issues/435)
|
* [Monero GUI Wallet](https://www.getmonero.org/downloads/) - ✳️ Yes, works via Rosetta 2 with a few minor bugs - [Source](https://github.com/ThatGuySam/doesitarm/issues/435)
|
||||||
* [MoneyWiz](https://apps.apple.com/us/app/moneywiz-3-personal-finance/id1004710719) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/) [View on Setapp](https://setapp.sjv.io/c/2708043/344415/5114)
|
* [MoneyWiz](https://apps.apple.com/us/app/moneywiz-3-personal-finance/id1004710719) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/) [View on Setapp](https://setapp.sjv.io/c/2708043/344415/5114)
|
||||||
* [Moon FM](https://apps.apple.com/us/app/moon-fm-premium-podcast-app/id1465712037?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v2.0.3
|
* [Moon FM](https://apps.apple.com/us/app/moon-fm-premium-podcast-app/id1465712037?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v2.0.3
|
||||||
* [Newton Mail](https://newtonhq.com/#app) - ✅ Yes, Full Native Apple Silicon Support
|
* [Newton Mail](https://newtonhq.com/#app) - ✅ Yes, Full Native Apple Silicon Support
|
||||||
* [Nisus Writer Pro](https://nisus.com/pro/) - ✅ Yes, Full Native Apple Silicon Support as of v3.2 (some file conversion helpers run in Rosetta) - [Release notes](https://www.nisus.com/pro//whatsnew.php)
|
* [Nisus Writer Pro](https://nisus.com/pro/) - ✅ Yes, Full Native Apple Silicon Support as of v3.2 (some file conversion helpers run in Rosetta) - [Release notes](https://www.nisus.com/pro//whatsnew.php)
|
||||||
* [Nisus Writer Express](https://nisus.com/Express/) - ✅ Yes, Full Native Apple Silicon Support as of v3.2 (some file conversion helpers run in Rosetta) - [Release notes](https://www.nisus.com/pro//whatsnew.php)
|
* [Nisus Writer Express](https://nisus.com/Express/) - ✅ Yes, Full Native Apple Silicon Support as of v3.2 (some file conversion helpers run in Rosetta) - [Release notes](https://www.nisus.com/pro//whatsnew.php)
|
||||||
* [Notability](https://www.gingerlabs.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/417#issue-760864996)
|
* [Notability](https://www.gingerlabs.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/417#issue-760864996)
|
||||||
* [Noted for macOS](https://apps.apple.com/us/app/noted/id1541403993) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [Noted for macOS](https://apps.apple.com/us/app/noted/id1541403993) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
|
* [NotePlan](https://noteplan.co/) - ✅ Yes, Full Native Apple Silicon Support as of v3.0.16 - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/noteplan)
|
||||||
* [Notion Desktop](https://www.notion.so) - ✅ Yes, Full Native Apple Silicon Support - [Official Tweet](https://twitter.com/NotionHQ/status/1333867094463582208?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Etweet) [Verification](https://github.com/ThatGuySam/doesitarm/issues/378#issue-755529762)
|
* [Notion Desktop](https://www.notion.so) - ✅ Yes, Full Native Apple Silicon Support - [Official Tweet](https://twitter.com/NotionHQ/status/1333867094463582208?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Etweet) [Verification](https://github.com/ThatGuySam/doesitarm/issues/378#issue-755529762)
|
||||||
* [Noto](http://noto.ink/) - ✅ Yes, Full Native Apple Silicon Support - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
* [Noto](http://noto.ink/) - ✅ Yes, Full Native Apple Silicon Support - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
||||||
* [Obsidian](https://obsidian.md/download) - ✅ Yes, full native support as of v0.10.1
|
* [Obsidian](https://obsidian.md/download) - ✅ Yes, full native support as of v0.10.1
|
||||||
|
|
@ -399,50 +463,56 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [OmniOutliner](https://www.omnigroup.com/omnioutliner) - ✅ Yes, Full Native Apple Silicon Support as of v5.8 - [Release Notes](https://www.omnigroup.com/releasenotes/omnioutliner)
|
* [OmniOutliner](https://www.omnigroup.com/omnioutliner) - ✅ Yes, Full Native Apple Silicon Support as of v5.8 - [Release Notes](https://www.omnigroup.com/releasenotes/omnioutliner)
|
||||||
* [OmniPlan](https://www.omnigroup.com/omniplan) - ✅ Yes, Full Native Apple Silicon Support as of v4.2 - [Release Notes](https://www.omnigroup.com/releasenotes/omniplan)
|
* [OmniPlan](https://www.omnigroup.com/omniplan) - ✅ Yes, Full Native Apple Silicon Support as of v4.2 - [Release Notes](https://www.omnigroup.com/releasenotes/omniplan)
|
||||||
* [ONLYOFFICE](https://www.onlyoffice.com/download-desktop.aspx?from=desktop) - ✳️ Yes, works via Rosetta 2 - [Official Post](https://www.onlyoffice.com/blog/2020/12/onlyoffice-desktop-editors-6-1-goes-to-arm-based-apple-silicon-macs/?utm_source=twi&utm_medium=social&utm_campaign=desktop_6_1)
|
* [ONLYOFFICE](https://www.onlyoffice.com/download-desktop.aspx?from=desktop) - ✳️ Yes, works via Rosetta 2 - [Official Post](https://www.onlyoffice.com/blog/2020/12/onlyoffice-desktop-editors-6-1-goes-to-arm-based-apple-silicon-macs/?utm_source=twi&utm_medium=social&utm_campaign=desktop_6_1)
|
||||||
|
* [Opera Web Browser](https://www.opera.com/) - ✅ Yes, Full Native Apple Silicon Support as of v75.0.3969.149 - [Blog Post](https://blogs.opera.com/desktop/2021/04/opera-just-got-even-faster-with-m1-support-for-mac-fans-and-custom-shortcuts/)
|
||||||
* [Parcel](https://parcelapp.net/) - ✅ Yes, Full Native Apple Silicon Support as of 6.6 - [Tweet](https://twitter.com/parcel_app/status/1325751301322362880)
|
* [Parcel](https://parcelapp.net/) - ✅ Yes, Full Native Apple Silicon Support as of 6.6 - [Tweet](https://twitter.com/parcel_app/status/1325751301322362880)
|
||||||
* [PDF Viewer](https://pdfviewer.io/) - ✅ Yes, Full Native Apple Silicon Support as of v5.1 - [Blog Post](https://pdfviewer.io/blog/2020/pdf-viewer-5-1-for-ipad-iphone-mac/)
|
* [PDF Viewer](https://pdfviewer.io/) - ✅ Yes, Full Native Apple Silicon Support as of v5.1 - [Blog Post](https://pdfviewer.io/blog/2020/pdf-viewer-5-1-for-ipad-iphone-mac/)
|
||||||
* [PDFelement](https://pdf.wondershare.com/pdf-editor-mac/) - ✅ Yes, fully supported ARM and Intel Chip - [Official Post](https://pdf.wondershare.com/macos/pdfelement-ready-for-apple-m1-chip.html)
|
* [PDFelement](https://pdf.wondershare.com/pdf-editor-mac/) - ✅ Yes, fully supported ARM and Intel Chip - [Official Post](https://pdf.wondershare.com/macos/pdfelement-ready-for-apple-m1-chip.html)
|
||||||
* [PDFZone](https://apps.apple.com/app/pdfzone/id1215383084) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/471#issue-774767869)
|
* [PDFZone](https://apps.apple.com/app/pdfzone/id1215383084) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/471#issue-774767869)
|
||||||
* [Planny 4](https://www.kevinreutter.de/planny-4/) - ✅ Yes, Full Native Apple Silicon Support - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
* [Planny 4](https://www.kevinreutter.de/planny-4/) - ✅ Yes, Full Native Apple Silicon Support - [App Store Story](https://apps.apple.com/us/story/id1540024103)
|
||||||
* [Post-it®](https://apps.apple.com/app/post-it/id1475777828) - ✳️ Yes, runs via Rosetta 2, with native support coming soon - [Source](https://github.com/ThatGuySam/doesitarm/issues/197#issuecomment-732100064)
|
* [Post-it®](https://apps.apple.com/app/post-it/id1475777828) - ✳️ Yes, runs via Rosetta 2, with native support coming soon - [Source](https://github.com/ThatGuySam/doesitarm/issues/197#issuecomment-732100064)
|
||||||
* [Presentify](https://presentify.compzets.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/849350/5114)
|
* [Presentify](https://presentify.compzets.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/849350/5114)
|
||||||
* [Prizmo](https://creaceed.com/prizmo) - ✅ Yes, Full Native Apple Silicon Support as of v4.1 - [Release Notes](https://creaceed.com/prizmo/history) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/473005/5114)
|
* [Prizmo](https://creaceed.com/prizmo) - ✅ Yes, Full Native Apple Silicon Support as of v4.1 - [Release Notes](https://creaceed.com/prizmo/history) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/473005/5114)
|
||||||
* [qBittorrent](https://www.qbittorrent.org/) - ✳️ Yes, runs via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/595#issue-830367382) [Native Issue](https://github.com/qbittorrent/qBittorrent/issues/14379)
|
* [qBittorrent](https://www.qbittorrent.org/) - ✳️ Yes, runs via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/595#issue-830367382) [Native Issue](https://github.com/qbittorrent/qBittorrent/issues/14379)
|
||||||
* [Quiet](https://lighthouse16.com/quiet/) - ✅ Yes, fully supported as of v2.6.7 - [Source](https://lighthouse16.com/journal/apple-silicon-support/)
|
* [Quiet](https://lighthouse16.com/quiet/) - ✅ Yes, fully supported as of v2.6.7 - [Source](https://lighthouse16.com/journal/apple-silicon-support/)
|
||||||
* [Receipts for Mac](https://www.receipts-app.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/635278/5114)
|
* [Receipts for Mac](https://www.receipts-app.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/635278/5114)
|
||||||
* [Remotix](https://remotix.com/downloads-mac/) - ✅ Yes, fully supported as of v6.3 - [Release Notes](https://downloads.remotix.com/remotix-mac/release-notes.html?v=6.3)
|
* [Remotix](https://remotix.com/downloads-mac/) - ✅ Yes, fully supported as of v6.3 - [Release Notes](https://downloads.remotix.com/remotix-mac/release-notes.html?v=6.3)
|
||||||
* [RingCentral](https://apps.apple.com/us/app/id715886894) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/251#issuecomment-736105390)
|
* [RingCentral](https://apps.apple.com/us/app/id715886894) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/251#issuecomment-736105390)
|
||||||
* [Safari Web Browser](https://www.apple.com/safari/) - ✅ Yes, fully supported
|
* [Safari Web Browser](https://www.apple.com/safari/) - ✅ Yes, fully supported
|
||||||
* [ScreenFloat](https://eternalstorms.at/ScreenFloat/) - ✅ Yes, Full Native Apple Silicon Support as of v1.5.18 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
* [ScreenFloat](https://eternalstorms.at/ScreenFloat/) - ✅ Yes, Full Native Apple Silicon Support as of v1.5.18 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
||||||
* [Screens for macOS](https://edovia.com/en/screens-mac/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344456/5114)
|
* [Screens for macOS](https://edovia.com/en/screens-mac/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344456/5114)
|
||||||
* [SeaDrive](https://www.seafile.com/en/download/) - ✳️ Yes, works via Rosetta 2 as of v2.0.10 - [Source](https://forum.seafile.com/t/seadrive-2-0-8-is-released-support-for-macos-11/13199/25)
|
* [SeaDrive](https://www.seafile.com/en/download/) - ✳️ Yes, works via Rosetta 2 as of v2.0.10 - [Source](https://forum.seafile.com/t/seadrive-2-0-8-is-released-support-for-macos-11/13199/25)
|
||||||
* [SeaFile](https://www.seafile.com/en/download/) - ✳️ Yes, works via Rosetta 2 as of v7.0.10 - [Source](https://forum.seafile.com/t/native-support-for-apple-silicon/13390)
|
* [SeaFile](https://www.seafile.com/en/download/) - ✳️ Yes, works via Rosetta 2 as of v7.0.10 - [Source](https://forum.seafile.com/t/native-support-for-apple-silicon/13390)
|
||||||
* [Session for Mac](https://www.stayinsession.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/933407/5114)
|
* [Session for Mac](https://www.stayinsession.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/933407/5114)
|
||||||
* [Shadow for macOS](https://shadow.tech/shadow-apps/) - ✳️ Yes, works via Rosetta 2 with native support in Alpha - [Verification](https://github.com/ThatGuySam/doesitarm/issues/584#issue-816781078) [Shadow Discord #alpha-channel](https://help.shadow.tech/hc/en-gb/articles/360015374914-Join-the-Shadow-Discord-community)
|
* [Shadow for macOS](https://shadow.tech/shadow-apps/) - ✳️ Yes, works via Rosetta 2 with native support in Alpha - [Verification](https://github.com/ThatGuySam/doesitarm/issues/584#issue-816781078) [Shadow Discord #alpha-channel](https://help.shadow.tech/hc/en-gb/articles/360015374914-Join-the-Shadow-Discord-community)
|
||||||
* [SideNotes](https://www.apptorium.com/sidenotes) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/668340/5114)
|
* [SideNotes](https://www.apptorium.com/sidenotes) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/668340/5114)
|
||||||
* [Skim PDF Reader](https://skim-app.sourceforge.io/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/468#issuecomment-751807890)
|
* [Skim PDF Reader](https://skim-app.sourceforge.io/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/468#issuecomment-751807890)
|
||||||
* [Slidepad](https://slidepad.app/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/slidepad)
|
* [Slidepad](https://slidepad.app/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/slidepad)
|
||||||
* [SnagIt](https://www.techsmith.com/download/snagit/) - ✳️ Yes, works via Rosetta 2 but without video capture - [Source](https://github.com/ThatGuySam/doesitarm/issues/413) [Official documentation](https://support.techsmith.com/hc/en-us/articles/360052555611-Snagit-and-Apple-Silicon-Compatibility-Info)
|
* [SnagIt](https://www.techsmith.com/download/snagit/) - ✳️ Yes, works via Rosetta 2 but without video capture - [Source](https://github.com/ThatGuySam/doesitarm/issues/413) [Official documentation](https://support.techsmith.com/hc/en-us/articles/360052555611-Snagit-and-Apple-Silicon-Compatibility-Info)
|
||||||
|
* [Studies for Mac](https://www.studiesapp.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344468/5114)
|
||||||
* [Synology Drive Client](https://www.synology.com/en-us/support/download/DDSM#utilities) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/399#issuecomment-742175817)
|
* [Synology Drive Client](https://www.synology.com/en-us/support/download/DDSM#utilities) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/399#issuecomment-742175817)
|
||||||
* [Tablecruncher](https://tablecruncher.com/download/) - ✅ Yes, Full Native Apple Silicon Support - [Official Post](https://tablecruncher.com/blog/2020/version-1.5.1-apple-silicon-ready/)
|
* [Tablecruncher](https://tablecruncher.com/download/) - ✅ Yes, Full Native Apple Silicon Support - [Official Post](https://tablecruncher.com/blog/2020/version-1.5.1-apple-silicon-ready/)
|
||||||
* [Taskheat](https://www.eyen.fr/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/taskheat)
|
* [Taskheat](https://www.eyen.fr/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/taskheat)
|
||||||
|
* [TaskPaper](https://www.taskpaper.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344469/5114)
|
||||||
* [TeamViewer](https://www.teamviewer.com/en-us/) - ✅ Yes, Full Native Apple Silicon Support as of v15.12.4 - [Release Notes](https://community.teamviewer.com/t5/Change-Logs-EN/macOS-v15-12-4-Full-Change-Log/m-p/107706)
|
* [TeamViewer](https://www.teamviewer.com/en-us/) - ✅ Yes, Full Native Apple Silicon Support as of v15.12.4 - [Release Notes](https://community.teamviewer.com/t5/Change-Logs-EN/macOS-v15-12-4-Full-Change-Log/m-p/107706)
|
||||||
* [TextSniper](https://textsniper.app/) - ✅ Yes, Full Native Apple Silicon Support as of v1.3.1 - [Release Notes](https://textsniper.app/release-notes) [Verification](https://github.com/ThatGuySam/doesitarm/issues/571#issue-811238095)
|
* [TextSniper](https://textsniper.app/) - ✅ Yes, Full Native Apple Silicon Support as of v1.3.1 - [Release Notes](https://textsniper.app/release-notes) [Verification](https://github.com/ThatGuySam/doesitarm/issues/571#issue-811238095)
|
||||||
* [Thunderbird](https://www.thunderbird.net/en-US/) - ✅ Yes, Full Native Apple Silicon Support as of v87 - [Bugzilla Tracker](https://bugzilla.mozilla.org/show_bug.cgi?id=1678775) [Verification](https://github.com/ThatGuySam/doesitarm/issues/591#issue-824609519)
|
* [Thunderbird](https://www.thunderbird.net/en-US/) - ✅ Yes, Full Native Apple Silicon Support as of v87 - [Bugzilla Tracker](https://bugzilla.mozilla.org/show_bug.cgi?id=1678775) [Verification](https://github.com/ThatGuySam/doesitarm/issues/591#issue-824609519)
|
||||||
* [Transmission](https://transmissionbt.com/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/326)
|
* [Transmission](https://transmissionbt.com/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/326)
|
||||||
* [Trello](https://apps.apple.com/de/app/trello/id1278508951?mt=12) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/581#issue-816735691)
|
* [Trello](https://apps.apple.com/de/app/trello/id1278508951?mt=12) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/581#issue-816735691)
|
||||||
* [Things](https://culturedcode.com/things/mac/appstore/) - ✅ Yes, fully supported as of 3.13.2 - [Official Announcement](https://culturedcode.com/things/blog/2020/11/new-things-for-macos-big-sur/)
|
* [Things](https://culturedcode.com/things/mac/appstore/) - ✅ Yes, fully supported as of 3.13.2 - [Official Announcement](https://culturedcode.com/things/blog/2020/11/new-things-for-macos-big-sur/)
|
||||||
* [Time Out for Mac](https://www.dejal.com/timeout/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/689682/5114)
|
* [Time Out for Mac](https://www.dejal.com/timeout/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/689682/5114)
|
||||||
* [Timing for Mac](https://timingapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344474/5114)
|
* [Timing for Mac](https://timingapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344474/5114)
|
||||||
* [Tuple](https://tuple.app/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/514#issuecomment-761276719)
|
* [Tuple](https://tuple.app/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/514#issuecomment-761276719)
|
||||||
|
* [TurboTax](https://turbotax.intuit.com/personal-taxes/cd-download/) - ✳️ Runs via Rosetta with no immediate plans for native support - [Discussion](https://ttlc.intuit.com/community/taxes/discussion/re-turbotax-deluxe-under-macos-bigsur-on-macbook-air-apple-m1-chip-turbotax-app-doesn-t-open/01/2273549#M815580)
|
||||||
* [UctoX](https://software.charliemonroe.net/uctox/) - ✅ Yes, Full Native Apple Silicon Support - [Developer Article](http://blog.charliemonroe.net/big-sur-and-apple-silicon/) [View on Setapp](https://setapp.sjv.io/uctox)
|
* [UctoX](https://software.charliemonroe.net/uctox/) - ✅ Yes, Full Native Apple Silicon Support - [Developer Article](http://blog.charliemonroe.net/big-sur-and-apple-silicon/) [View on Setapp](https://setapp.sjv.io/uctox)
|
||||||
* [Ulysses](https://ulysses.app/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/120#issuecomment-750041670) [MacRumors Article](https://www.macrumors.com/2020/11/13/apple-silicon-macs-universal-apps/) [View on Setapp](https://setapp.sjv.io/c/2708043/344477/5114)
|
* [Ulysses](https://ulysses.app/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/120#issuecomment-750041670) [MacRumors Article](https://www.macrumors.com/2020/11/13/apple-silicon-macs-universal-apps/) [View on Setapp](https://setapp.sjv.io/c/2708043/344477/5114)
|
||||||
|
* [Unibox](https://www.uniboxapp.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/368242/5114)
|
||||||
* [Usher](https://manytricks.com/usher/) - ✅ Yes, Full Native Apple Silicon Support as of v2.0 - [Official Tweet](https://twitter.com/manytricks/status/1333456606449774595)
|
* [Usher](https://manytricks.com/usher/) - ✅ Yes, Full Native Apple Silicon Support as of v2.0 - [Official Tweet](https://twitter.com/manytricks/status/1333456606449774595)
|
||||||
* [Vidrio](https://vidr.io/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/833645/5114)
|
* [Vidrio](https://vidr.io/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/833645/5114)
|
||||||
* [VisualGrep](https://apps.apple.com/us/app/visualgrep/id597887722?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v1.3.30 - [GitHub issue](https://github.com/visualgrep/app/issues/46)
|
* [VisualGrep](https://apps.apple.com/us/app/visualgrep/id597887722?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v1.3.30 - [GitHub issue](https://github.com/visualgrep/app/issues/46)
|
||||||
* [VMware Fusion](https://www.vmware.com/products/fusion.html) - ⏹ No, not working at all but support is in development - [Official Tweet](https://twitter.com/VMwareFusion/status/1326229094648832000)
|
* [VMware Fusion](https://www.vmware.com/products/fusion.html) - ⏹ No, not working at all but support is in development - [Official Tweet](https://twitter.com/VMwareFusion/status/1326229094648832000)
|
||||||
* [VMWare Horizon Client](https://my.vmware.com/en/web/vmware/downloads/info/slug/desktop_end_user_computing/vmware_horizon_clients/horizon_8) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/297)
|
* [VMWare Horizon Client](https://my.vmware.com/en/web/vmware/downloads/info/slug/desktop_end_user_computing/vmware_horizon_clients/horizon_8) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/297)
|
||||||
* [VMWare Remote Console](https://apps.apple.com/app/vmware-remote-console/id1230249825) - ✅ Yes, Full Native Apple Silicon Support as of v12.0.0 - [Release Notes](https://docs.vmware.com/en/VMware-Remote-Console/12.0/rn/VMware-Remote-Console-120-Release-Notes.html)
|
* [VMWare Remote Console](https://apps.apple.com/app/vmware-remote-console/id1230249825) - ✅ Yes, Full Native Apple Silicon Support as of v12.0.0 - [Release Notes](https://docs.vmware.com/en/VMware-Remote-Console/12.0/rn/VMware-Remote-Console-120-Release-Notes.html)
|
||||||
|
* [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/macos/) - ✳️ Yes, works via Rosetta 2 translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/643#issue-880713134)
|
||||||
* [Workspaces](https://www.apptorium.com/workspaces) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/389439/5114)
|
* [Workspaces](https://www.apptorium.com/workspaces) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/389439/5114)
|
||||||
* [WPS Office](https://apps.apple.com/cn/app/wps-office/id1443749478?l=en&mt=12) - ✅ Yes, full native support as of v3.0.1 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/149)
|
* [WPS Office](https://apps.apple.com/cn/app/wps-office/id1443749478?l=en&mt=12) - ✅ Yes, full native support as of v3.0.1 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/149)
|
||||||
* [Yoink](https://eternalstorms.at/yoink/mac/) - ✅ Yes, Full Native Apple Silicon Support as of v3.5.11 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
* [Yoink](https://eternalstorms.at/yoink/mac/) - ✅ Yes, Full Native Apple Silicon Support as of v3.5.11 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
||||||
|
|
@ -452,15 +522,22 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
|
|
||||||
#### Entertainment and Media Apps
|
#### Entertainment and Media Apps
|
||||||
|
|
||||||
* [2048 Game](https://apps.apple.com/us/app/2048-game/id871033113?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [2048 Game](https://apps.apple.com/us/app/2048-game/id871033113?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
|
* [Amazon Music](https://music.amazon.com/NA/help/apps) - ✳️ Yes, works via Rosetta 2 translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/634#issue-870540625)
|
||||||
|
* [BlueStacks](https://www.bluestacks.com/) - 🚫 No, not yet supported only works on Intel-based Macs - [Report #1](https://www.reddit.com/r/BlueStacks/comments/n9f9wn/apple_silicon/gxowg9g?utm_source=share&utm_medium=web2x&context=3) [Report #2](https://www.reddit.com/r/BlueStacks/comments/kea3uw/macos_bigsur_111_with_m1_issue/gg3xi2r?utm_source=share&utm_medium=web2x&context=3)
|
||||||
* [Celeste](http://www.celestegame.com/) - ⏹ No, not yet but can be made to run with a work around - [Apple Silicon Work Around](https://github.com/AbeJellinek/celeste-on-m1) [View on Itch.io](https://mattmakesgames.itch.io/celeste?ac=QWRPsg4sVvG)
|
* [Celeste](http://www.celestegame.com/) - ⏹ No, not yet but can be made to run with a work around - [Apple Silicon Work Around](https://github.com/AbeJellinek/celeste-on-m1) [View on Itch.io](https://mattmakesgames.itch.io/celeste?ac=QWRPsg4sVvG)
|
||||||
|
* [Cog Player](https://cog.losno.co/download) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
|
* [DeSmuME](https://desmume.org/download/) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/611#issue-840038939)
|
||||||
* [Dolphin](https://dolphin-emu.org/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/452)
|
* [Dolphin](https://dolphin-emu.org/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/452)
|
||||||
* [DOSBox](https://sourceforge.net/projects/dosbox/) - ✳️ Yes, it works via Rosetta 2 - [Project Ticket 149](https://sourceforge.net/p/dosbox/feature-requests/149/)
|
* [DOSBox](https://sourceforge.net/projects/dosbox/) - ✳️ Yes, it works via Rosetta 2 - [Project Ticket 149](https://sourceforge.net/p/dosbox/feature-requests/149/)
|
||||||
* [DOSBox-X](https://dosbox-x.com) - ✅ Yes, Full Native Apple Silicon Support as of 0.83.8 - [Github Release](https://github.com/joncampbell123/dosbox-x/releases/tag/dosbox-x-v0.83.8)
|
* [DOSBox-X](https://dosbox-x.com) - ✅ Yes, Full Native Apple Silicon Support as of 0.83.8 - [Github Release](https://github.com/joncampbell123/dosbox-x/releases/tag/dosbox-x-v0.83.8)
|
||||||
* [NVIDIA GeForce NOW](https://www.nvidia.com/en-us/geforce-now/download/) - ✅ Yes, Full Native Apple Silicon Support as of v2.0.27 - [Release Notes](https://www.nvidia.com/pt-br/geforce/release-notes/GFN/2_0_27/Rich/gfn-v2_0_27-rich-release-highlights/)
|
* [NVIDIA GeForce NOW](https://www.nvidia.com/en-us/geforce-now/download/) - ✅ Yes, Full Native Apple Silicon Support as of v2.0.27 - [Release Notes](https://www.nvidia.com/pt-br/geforce/release-notes/GFN/2_0_27/Rich/gfn-v2_0_27-rich-release-highlights/)
|
||||||
* [IINA](https://iina.io/download/) - ✅ Yes, Full Native Apple Silicon Support as of 1.2.0 - [Github Release](https://github.com/iina/iina/releases/tag/v1.2.0)
|
* [IINA](https://iina.io/download/) - ✅ Yes, Full Native Apple Silicon Support as of 1.2.0 - [Github Release](https://github.com/iina/iina/releases/tag/v1.2.0)
|
||||||
* [Infuse](https://apps.apple.com/cn/app/infuse-6/id1136220934) - ⏹ Not released yet, macOS support is currently in alpha test and it runs via Rosetta 2 - [Discussion](https://github.com/ThatGuySam/doesitarm/issues/458) [Sign up for Alpha](http://firecore.com/macos)
|
* [Infuse](https://apps.apple.com/cn/app/infuse-6/id1136220934) - ⏹ Not released yet, macOS support is currently in alpha test and it runs via Rosetta 2 - [Discussion](https://github.com/ThatGuySam/doesitarm/issues/458) [Sign up for Alpha](http://firecore.com/macos)
|
||||||
* [Meta for Mac](https://www.nightbirdsevolve.com/meta/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/840201/5114)
|
* [JustStream](https://www.electronic.us/products/just-stream/) - ✅ Yes, Full Native Apple Silicon Support as of v2.0 - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/juststream)
|
||||||
|
* [Meta for Mac](https://www.nightbirdsevolve.com/meta/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/840201/5114)
|
||||||
|
* [Minecraft](https://www.minecraft.net/en-us/about-minecraft) - ✳️ Yes, works via Rosetta 2 - [Native Apple Silicon Workaround](https://github.com/yusefnapora/m1-multimc-hack)
|
||||||
|
* [Moonlight](https://github.com/moonlight-stream/moonlight-qt/releases) - ✅ Yes, Full Native Apple Silicon Support as of v3.1.0 - [Release Notes](https://github.com/moonlight-stream/moonlight-qt/releases/tag/v3.1.0)
|
||||||
* [Movist](https://movistprime.com/) - ✅ Yes, Full Native Apple Silicon Support as of v2.6 - [Changelog](https://movistprime.com/changelog.html) [View on Setapp](https://setapp.sjv.io/c/2708043/628489/5114)
|
* [Movist](https://movistprime.com/) - ✅ Yes, Full Native Apple Silicon Support as of v2.6 - [Changelog](https://movistprime.com/changelog.html) [View on Setapp](https://setapp.sjv.io/c/2708043/628489/5114)
|
||||||
* [NetEase Music](https://music.163.com/#/download) - ✅ Yes, Full Native Apple Silicon Support as of v2.3.4 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/528#issue-789094015)
|
* [NetEase Music](https://music.163.com/#/download) - ✅ Yes, Full Native Apple Silicon Support as of v2.3.4 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/528#issue-789094015)
|
||||||
* [News Explorer](https://betamagic.nl/products/newsexplorer.html) - ✅ Yes, Full Native Apple Silicon Support as of v1.9.11 - [Blog Post](https://betamagic.nl/news/2020/2020_09.html) [View on Setapp](https://setapp.sjv.io/c/2708043/368247/5114)
|
* [News Explorer](https://betamagic.nl/products/newsexplorer.html) - ✅ Yes, Full Native Apple Silicon Support as of v1.9.11 - [Blog Post](https://betamagic.nl/news/2020/2020_09.html) [View on Setapp](https://setapp.sjv.io/c/2708043/368247/5114)
|
||||||
|
|
@ -472,6 +549,7 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [RetroArch](https://www.retroarch.com/?page=platforms) - ✳️ Yes, works via Rosetta 2 with native support in development - [Verification](https://github.com/ThatGuySam/doesitarm/issues/348)
|
* [RetroArch](https://www.retroarch.com/?page=platforms) - ✳️ Yes, works via Rosetta 2 with native support in development - [Verification](https://github.com/ThatGuySam/doesitarm/issues/348)
|
||||||
* [Rottenwood](https://software.charliemonroe.net/rottenwood/) - ✅ Yes, Full Native Apple Silicon Support - [Developer Article](http://blog.charliemonroe.net/big-sur-and-apple-silicon/)
|
* [Rottenwood](https://software.charliemonroe.net/rottenwood/) - ✅ Yes, Full Native Apple Silicon Support - [Developer Article](http://blog.charliemonroe.net/big-sur-and-apple-silicon/)
|
||||||
* [Shazam](https://apps.apple.com/app/shazam/id897118787?mt=12) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/582#issue-816739441)
|
* [Shazam](https://apps.apple.com/app/shazam/id897118787?mt=12) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/582#issue-816739441)
|
||||||
|
* [Snap Camera](https://snapcamera.snapchat.com/download/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/627#issue-860435755) [Supported Hardware](https://snapcamera.snapchat.com/download/)
|
||||||
* [Spotify](https://www.spotify.com/us/download/mac/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/172)
|
* [Spotify](https://www.spotify.com/us/download/mac/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/172)
|
||||||
* [Steam](https://store.steampowered.com/about/) - ✳️ Yes, reported working via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/153)
|
* [Steam](https://store.steampowered.com/about/) - ✳️ Yes, reported working via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/153)
|
||||||
* [Tidal](https://tidal.com/download) - ✳️ Yes, working via Rosetta 2 but with occasional force quits as of 2.23.0.488 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/314)
|
* [Tidal](https://tidal.com/download) - ✳️ Yes, working via Rosetta 2 but with occasional force quits as of 2.23.0.488 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/314)
|
||||||
|
|
@ -479,14 +557,15 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [UU Booster](https://uu.163.com/down/mac/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/464#issue-771607189)
|
* [UU Booster](https://uu.163.com/down/mac/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/464#issue-771607189)
|
||||||
* [Vienna](https://github.com/ViennaRSS/vienna-rss/releases/latest) - ✅ Yes, Full Native Apple Silicon Support as of v3.6 - [Release Notes](https://github.com/ViennaRSS/vienna-rss/releases/tag/v/3.6.0)
|
* [Vienna](https://github.com/ViennaRSS/vienna-rss/releases/latest) - ✅ Yes, Full Native Apple Silicon Support as of v3.6 - [Release Notes](https://github.com/ViennaRSS/vienna-rss/releases/tag/v/3.6.0)
|
||||||
* [VLC](https://www.videolan.org/vlc/download-macosx.html) - ✅ Yes, Full Native Apple Silicon Support as of v3.0.12 - [Release Notes](https://www.videolan.org/news.html#news-2021-01-12)
|
* [VLC](https://www.videolan.org/vlc/download-macosx.html) - ✅ Yes, Full Native Apple Silicon Support as of v3.0.12 - [Release Notes](https://www.videolan.org/news.html#news-2021-01-12)
|
||||||
|
* [Xbox Game Pass for PC](https://www.xbox.com/en-US/xbox-game-pass/pc-games) - ✳️ Yes, works via Parallels virtualization - [Download Parallels](https://prf.hn/l/6qOdLPB)
|
||||||
* [Zwift](https://www.zwift.com/eu-de/download) - ✳️ Yes, works via Rosetta 2 as of v1.0 (25) - [Source](https://forums.zwift.com/t/m1-apple-silicon-compatibility/514491/81) [Verification](https://raw.githubusercontent.com/steve1878/images_does_it_arm/main/zwift_1.0_25.png)
|
* [Zwift](https://www.zwift.com/eu-de/download) - ✳️ Yes, works via Rosetta 2 as of v1.0 (25) - [Source](https://forums.zwift.com/t/m1-apple-silicon-compatibility/514491/81) [Verification](https://raw.githubusercontent.com/steve1878/images_does_it_arm/main/zwift_1.0_25.png)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### Social and Communication
|
#### Social and Communication
|
||||||
|
|
||||||
* [Aviary Twitter Client](https://apps.apple.com/us/app/aviary/id1522043420) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [Aviary Twitter Client](https://apps.apple.com/us/app/aviary/id1522043420) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [Canary Mail](https://canarymail.io/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/482429/5114)
|
* [Canary Mail](https://canarymail.io/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/482429/5114)
|
||||||
* [Cisco Webex Meetings](https://www.webex.com/downloads.html) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/530#issue-790322821)
|
* [Cisco Webex Meetings](https://www.webex.com/downloads.html) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/530#issue-790322821)
|
||||||
* [Discord](https://discord.com/download) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/192#issuecomment-734753133)
|
* [Discord](https://discord.com/download) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/192#issuecomment-734753133)
|
||||||
* [Mattermost](https://mattermost.com/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/245#issuecomment-735282100)
|
* [Mattermost](https://mattermost.com/download/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/245#issuecomment-735282100)
|
||||||
|
|
@ -495,18 +574,20 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [Microsoft Teams](https://www.microsoft.com/en-us/microsoft-365/microsoft-teams/group-chat-software) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/191#issuecomment-730561942)
|
* [Microsoft Teams](https://www.microsoft.com/en-us/microsoft-365/microsoft-teams/group-chat-software) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/191#issuecomment-730561942)
|
||||||
* [Postbox](https://www.postbox-inc.com) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/35)
|
* [Postbox](https://www.postbox-inc.com) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/35)
|
||||||
* [QQ](https://im.qq.com/macqq/) - ✅ Yes, Full Native Apple Silicon Support as of v6.7.0.20110 - [Release Notes](https://im.qq.com/macqq/support.html)
|
* [QQ](https://im.qq.com/macqq/) - ✅ Yes, Full Native Apple Silicon Support as of v6.7.0.20110 - [Release Notes](https://im.qq.com/macqq/support.html)
|
||||||
* [QQ 体验版(MacCatalyst)](https://im.qq.com/macqq/) - ✳️ Runs via Rosetta 2
|
* [QQ 体验版(MacCatalyst)](https://im.qq.com/macqq/) - ✳️ Runs via Rosetta 2
|
||||||
* [Signal](https://www.signal.org/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/337)
|
* [Signal](https://www.signal.org/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/337)
|
||||||
* [Skype](https://www.skype.com/en/get-skype/) - ✳️ Yes, works via Rosetta 2 - [Video](https://doesitarm.com/tv/the-new-m1-macbook-running-microsoft-office-business-apps-teams-skype-excel-cpu-and-ram-usage-i-ibseaue3se8/)
|
* [Skype](https://www.skype.com/en/get-skype/) - ✳️ Yes, works via Rosetta 2 - [Video](https://doesitarm.com/tv/the-new-m1-macbook-running-microsoft-office-business-apps-teams-skype-excel-cpu-and-ram-usage-i-ibseaue3se8/)
|
||||||
* [Skype for Business](https://www.microsoft.com/en-us/microsoft-365/skype-for-business/download-app) - ✳️ Yes, works via Rosetta 2 - [Video](https://doesitarm.com/tv/the-new-m1-macbook-running-microsoft-office-business-apps-teams-skype-excel-cpu-and-ram-usage-i-ibseaue3se8/)
|
* [Skype for Business](https://www.microsoft.com/en-us/microsoft-365/skype-for-business/download-app) - ✳️ Yes, works via Rosetta 2 - [Video](https://doesitarm.com/tv/the-new-m1-macbook-running-microsoft-office-business-apps-teams-skype-excel-cpu-and-ram-usage-i-ibseaue3se8/)
|
||||||
* [Slack](https://slack.com/) - ✅ Yes, Full Native Apple Silicon Support as of 4.13.0 - [Release Notes](https://slack.com/intl/en-au/release-notes/mac)
|
* [Slack](https://slack.com/) - ✅ Yes, Full Native Apple Silicon Support as of 4.13.0 - [Release Notes](https://slack.com/intl/en-au/release-notes/mac)
|
||||||
|
* [Spark Mail](https://apps.apple.com/app/apple-store/id1176895641) - ✳️ Yes, works via Rosetta 2 translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/636#issue-874037794)
|
||||||
* [Telegram](https://macos.telegram.org/) - ✅ Yes, Full Native Apple Silicon Support as of 7.2.4 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/52) [Changelog](https://macos.telegram.org/#v7-2-4-2020-11-29)
|
* [Telegram](https://macos.telegram.org/) - ✅ Yes, Full Native Apple Silicon Support as of 7.2.4 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/52) [Changelog](https://macos.telegram.org/#v7-2-4-2020-11-29)
|
||||||
* [Twitter](https://apps.apple.com/app/twitter/id1482454543?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/580#issue-816729668)
|
* [Twitter](https://apps.apple.com/app/twitter/id1482454543?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/580#issue-816729668)
|
||||||
* [Unite for Mac](https://www.bzgapps.com/unite) - ✳️ Runs via Rosetta with native support currently in development - [Verification](https://github.com/ThatGuySam/doesitarm/issues/606#issuecomment-803009445) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/unite)
|
* [Unite for Mac](https://www.bzgapps.com/unite) - ✳️ Runs via Rosetta with native support currently in development - [Verification](https://github.com/ThatGuySam/doesitarm/issues/606#issuecomment-803009445) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/unite)
|
||||||
|
* [Uplet](https://getuplet.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/uplet)
|
||||||
* [WeChat](https://apps.apple.com/cn/app/wechat/id836500024?l=en&mt=12) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/369)
|
* [WeChat](https://apps.apple.com/cn/app/wechat/id836500024?l=en&mt=12) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/369)
|
||||||
* [Welly BBS](https://wellybbs.com/) - ✅ Yes, Full Native Apple Silicon Support as of Version 2020.9 - [App Store](https://apps.apple.com/us/app/id1521402269)
|
* [Welly BBS](https://wellybbs.com/) - ✅ Yes, Full Native Apple Silicon Support as of Version 2020.9 - [App Store](https://apps.apple.com/us/app/id1521402269)
|
||||||
* [WhatsApp](https://www.whatsapp.com/download/) - ✳️ Yes, works via Rosetta 2 as of v2.2049.10 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/479)
|
* [WhatsApp](https://www.whatsapp.com/download/) - ✳️ Yes, works via Rosetta 2 as of v2.2049.10 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/479)
|
||||||
* [Zoom](https://zoom.us/download) - ✅ Yes, full native Apple Silicon support as of 5.4.7 (59780.1220) - [Discussion](https://github.com/ThatGuySam/doesitarm/issues/134)
|
* [Zoom](https://zoom.us/download) - ✅ Yes, full native Apple Silicon support as of 5.4.7 (59780.1220) - [Discussion](https://github.com/ThatGuySam/doesitarm/issues/134)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -517,6 +598,7 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [Bitwarden](https://bitwarden.com/) - ✳️ Yes, works via Rosetta 2 with a patch in development - [Issue Tracker](https://github.com/bitwarden/desktop/issues/567)
|
* [Bitwarden](https://bitwarden.com/) - ✳️ Yes, works via Rosetta 2 with a patch in development - [Issue Tracker](https://github.com/bitwarden/desktop/issues/567)
|
||||||
* [Cisco AnyConnect Secure Mobility Client](https://www.cisco.com/c/en/us/products/security/anyconnect-secure-mobility-client/index.html) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/416#issue-760860704)
|
* [Cisco AnyConnect Secure Mobility Client](https://www.cisco.com/c/en/us/products/security/anyconnect-secure-mobility-client/index.html) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/416#issue-760860704)
|
||||||
* [ClashX](https://github.com/yichengchen/clashX#install) - ✅ Yes, Full Native Apple Silicon Support as of v1.31.1.1 - [Release Notes](https://github.com/yichengchen/clashX/releases/tag/1.31.1)
|
* [ClashX](https://github.com/yichengchen/clashX#install) - ✅ Yes, Full Native Apple Silicon Support as of v1.31.1.1 - [Release Notes](https://github.com/yichengchen/clashX/releases/tag/1.31.1)
|
||||||
|
* [ClearVPN](https://macpaw.com/clearvpn) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/clearvpn)
|
||||||
* [Cryptomator](https://cryptomator.org/) - 🚫 No, crashes under Rosetta 2 only recommended on Intel-based Macs - [Crashing Issue](https://github.com/cryptomator/cryptomator/issues/1419)
|
* [Cryptomator](https://cryptomator.org/) - 🚫 No, crashes under Rosetta 2 only recommended on Intel-based Macs - [Crashing Issue](https://github.com/cryptomator/cryptomator/issues/1419)
|
||||||
* [Elpass](https://elpass.app/) - ✅ Yes, full native Apple Silicon Support as of v1.1.10 - [Issue](https://github.com/ThatGuySam/doesitarm/issues/176)
|
* [Elpass](https://elpass.app/) - ✅ Yes, full native Apple Silicon Support as of v1.1.10 - [Issue](https://github.com/ThatGuySam/doesitarm/issues/176)
|
||||||
* [Enpass](https://www.enpass.io/) - ✳️ Runs via Rosetta 2 - [Forum Discussion](https://discussion.enpass.io/index.php?/topic/24222-enpass-on-m1-mac-arm-silicon/&tab=comments#comment-56371)
|
* [Enpass](https://www.enpass.io/) - ✳️ Runs via Rosetta 2 - [Forum Discussion](https://discussion.enpass.io/index.php?/topic/24222-enpass-on-m1-mac-arm-silicon/&tab=comments#comment-56371)
|
||||||
|
|
@ -525,13 +607,17 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [Jamf Protect](https://www.jamf.com/products/jamf-protect/) - ✅ Yes, Full Native Apple Silicon Support as of v1.2.0.217 - [Release Notes](https://docs.jamf.com/jamf-protect/administrator-guide/Release_History.html)
|
* [Jamf Protect](https://www.jamf.com/products/jamf-protect/) - ✅ Yes, Full Native Apple Silicon Support as of v1.2.0.217 - [Release Notes](https://docs.jamf.com/jamf-protect/administrator-guide/Release_History.html)
|
||||||
* [KeePassXC](https://keepassxc.org/download/#mac) - ✅ Yes, Full Native Apple Silicon Support as of v2.6.4 - [Release Notes](https://keepassxc.org/blog/2021-01-31-2.6.4-released/)
|
* [KeePassXC](https://keepassxc.org/download/#mac) - ✅ Yes, Full Native Apple Silicon Support as of v2.6.4 - [Release Notes](https://keepassxc.org/blog/2021-01-31-2.6.4-released/)
|
||||||
* [KeeWeb](https://keeweb.info/) - ✅ Yes, Full Native Apple Silicon Support - [Official Tweet](https://twitter.com/kee_web/status/1334885117584609295)
|
* [KeeWeb](https://keeweb.info/) - ✅ Yes, Full Native Apple Silicon Support - [Official Tweet](https://twitter.com/kee_web/status/1334885117584609295)
|
||||||
* [LastPass](https://www.lastpass.com/) - ✳️ Yes, works via Rosetta 2, but the Safari extension has issues - [Verification](https://github.com/ThatGuySam/doesitarm/issues/233#issuecomment-731506984) [Release Notes](https://lastpass.com/upgrade.php?fromwebsite=1&releasenotes=1) [Safari Issue](https://community.logmein.com/t5/Support-Discussions/macOS-Big-Sur-Safari-14-0-1-Official-Support/m-p/256549)
|
* [LastPass](https://www.lastpass.com/) - ✳️ Yes, works via Rosetta 2, but the Safari extension has issues - [Verification](https://github.com/ThatGuySam/doesitarm/issues/233#issuecomment-731506984) [Release Notes](https://lastpass.com/upgrade.php?fromwebsite=1&releasenotes=1) [Safari Issue](https://community.logmein.com/t5/Support-Discussions/macOS-Big-Sur-Safari-14-0-1-Official-Support/m-p/256549)
|
||||||
* [Little Snitch](https://www.obdev.at/products/littlesnitch/index.html) - ✅ Yes, Full Native Apple Silicon Support from 5.0 - [Release notes](https://www.obdev.at/products/littlesnitch/releasenotes.html)
|
* [Little Snitch](https://www.obdev.at/products/littlesnitch/index.html) - ✅ Yes, Full Native Apple Silicon Support from 5.0 - [Release notes](https://www.obdev.at/products/littlesnitch/releasenotes.html)
|
||||||
* [Mullvad VPN](https://mullvad.net/en/download/macos/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/566#issue-808856204)
|
* [Mullvad VPN](https://mullvad.net/en/download/macos/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/566#issue-808856204)
|
||||||
* [NordVPN](https://nordvpn.com/download/nordvpn-site/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/317#issuecomment-736876490)
|
* [NordVPN](https://nordvpn.com/download/nordvpn-site/) - ✳️ Yes, works via Rosetta 2 - [Source](https://github.com/ThatGuySam/doesitarm/issues/317#issuecomment-736876490) [Release Notes](https://nordvpn.com/blog/nordvpn-mac-release-notes/)
|
||||||
|
* [ProtonVPN](https://protonvpn.com/download-macos) - ✳️ Yes, works via Rosetta 2 translation - [Report #1](https://forums.macrumors.com/threads/vpn-software.2270086/post-29435392) [Report #2](https://forums.macrumors.com/threads/vpn-software.2270086/post-29294735)
|
||||||
* [SecKey](https://lighthouse16.com/seckey/) - ✅ Yes, fully supported as of v1.3.3 - [Source](https://lighthouse16.com/journal/apple-silicon-support/)
|
* [SecKey](https://lighthouse16.com/seckey/) - ✅ Yes, fully supported as of v1.3.3 - [Source](https://lighthouse16.com/journal/apple-silicon-support/)
|
||||||
* [Secrets for Mac](https://apps.apple.com/app/secrets/id973049011?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v3.4.0 - [Official Post](https://outercorner.com/blog/2020/11/password-autofill-now-on-macos-big-sur/) [View on Setapp](https://setapp.sjv.io/c/2708043/442278/5114)
|
* [Secrets for Mac](https://apps.apple.com/app/secrets/id973049011?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of v3.4.0 - [Official Post](https://outercorner.com/blog/2020/11/password-autofill-now-on-macos-big-sur/) [View on Setapp](https://setapp.sjv.io/c/2708043/442278/5114)
|
||||||
* [Tor Browser](https://www.torproject.org/download/) - ✳️ Yes, works via Rosetta 2 but with a few page crashes - [Source](https://github.com/ThatGuySam/doesitarm/issues/436) [Issue tracker for tab crashes](https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/40262)
|
* [Shimo](https://www.shimovpn.com/en/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/shimo)
|
||||||
|
* [Step Two for Mac](https://steptwo.app/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/619#issue-849584485) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/766955/5114)
|
||||||
|
* [Surfshark](https://surfshark.com/download/macos) - ✅ Yes, Native Apple Silicon Support as of v3.4.0 - [Press Release](https://surfshark.com/blog/m1-chip-compatibility)
|
||||||
|
* [Tor Browser](https://www.torproject.org/download/) - ✳️ Yes, works via Rosetta 2 translation - [Release Notes](https://blog.torproject.org/new-release-tor-browser-1008) [Source](https://github.com/ThatGuySam/doesitarm/issues/436) [Issue tracker for tab crashes](https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/40262)
|
||||||
* [VeraCrypt](https://www.veracrypt.fr/en/Downloads.html) - ✳️ Yes, works via Rosetta 2 as of 1.24-Update8 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/355)
|
* [VeraCrypt](https://www.veracrypt.fr/en/Downloads.html) - ✳️ Yes, works via Rosetta 2 as of 1.24-Update8 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/355)
|
||||||
* [Vivaldi](https://vivaldi.com/download/) - ✅ Yes, native support as of v3.7 - [Source](https://vivaldi.com/blog/vivaldi-fires-up-performance-2/)
|
* [Vivaldi](https://vivaldi.com/download/) - ✅ Yes, native support as of v3.7 - [Source](https://vivaldi.com/blog/vivaldi-fires-up-performance-2/)
|
||||||
* [VPN Tracker 365](https://www.vpntracker.com) - ✅ Yes, fully native IPsec, L2TP, OpenVPN, SonicWALL SSL VPN support as of v 21.0 - [Official page](https://www.vpntracker.com/us/VPN-Client-for-macOS-Big-Sur.html)
|
* [VPN Tracker 365](https://www.vpntracker.com) - ✅ Yes, fully native IPsec, L2TP, OpenVPN, SonicWALL SSL VPN support as of v 21.0 - [Official page](https://www.vpntracker.com/us/VPN-Client-for-macOS-Big-Sur.html)
|
||||||
|
|
@ -542,62 +628,80 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
|
|
||||||
#### System Tools
|
#### System Tools
|
||||||
|
|
||||||
|
* [Access Menu for macOS](https://titanium-software.fr/en/accessmenu.html) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://titanium-software.fr/en/release_accessmenu.html)
|
||||||
* [AlDente](https://github.com/davidwernhart/AlDente/releases) - ✅ Yes, Full Native Apple Silicon Support as of v2.0 - [Release Notes](https://github.com/davidwernhart/AlDente/releases)
|
* [AlDente](https://github.com/davidwernhart/AlDente/releases) - ✅ Yes, Full Native Apple Silicon Support as of v2.0 - [Release Notes](https://github.com/davidwernhart/AlDente/releases)
|
||||||
* [AmorphousDiskMark](https://apps.apple.com/us/app/amorphousdiskmark/id1168254295) - ✅ Yes, full native Apple Silicon support as of v3.1
|
* [AmorphousDiskMark](https://apps.apple.com/us/app/amorphousdiskmark/id1168254295) - ✅ Yes, full native Apple Silicon support as of v3.1
|
||||||
* [Amphetamine](https://apps.apple.com/app/amphetamine/id937984704) - ✅ Yes, full native Apple Silicon support from 5.1 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/295)
|
* [Amphetamine](https://apps.apple.com/app/amphetamine/id937984704) - ✅ Yes, full native Apple Silicon support from 5.1 - [GitHub issue](https://github.com/ThatGuySam/doesitarm/issues/295)
|
||||||
|
* [AnyTrans](https://www.imobie.com/anytrans/download.htm) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/anytrans)
|
||||||
* [AppCleaner](https://freemacsoft.net/appcleaner/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/559#issue-803995485)
|
* [AppCleaner](https://freemacsoft.net/appcleaner/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/559#issue-803995485)
|
||||||
* [Archiver App](https://archiverapp.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/archiver)
|
* [Archiver App](https://archiverapp.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/archiver)
|
||||||
* [Backblaze](https://www.backblaze.com/) - ✳️ Yes, works via Rosetta 2 - [Verification #1](https://github.com/ThatGuySam/doesitarm/issues/409#issuecomment-744336558) [Verification #2](https://github.com/ThatGuySam/doesitarm/issues/409#issuecomment-777878266)
|
* [AVTouchBar](https://www.avtouchbar.com/) - ✅ Yes, Full Native Apple Silicon Support as of v3.0.6 - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
|
* [Backblaze](https://www.backblaze.com/) - ✅ Yes, Full Native Apple Silicon Support as of v7.0.2.494 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/409#issuecomment-821298155)
|
||||||
* [balenaEtcher](https://github.com/balena-io/etcher/releases) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/294#issuecomment-737011519)
|
* [balenaEtcher](https://github.com/balena-io/etcher/releases) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/294#issuecomment-737011519)
|
||||||
* [Bartender](https://www.macbartender.com/) - ✅ Yes, fully supported as of v4.0.20 - [Blog](https://www.macbartender.com/b4blog/Apple-Silicon-Support/) [View on Setapp](https://setapp.sjv.io/c/2708043/443665/5114)
|
* [Bartender](https://www.macbartender.com/) - ✅ Yes, fully supported as of v4.0.20 - [Blog](https://www.macbartender.com/b4blog/Apple-Silicon-Support/) [View on Setapp](https://setapp.sjv.io/c/2708043/443665/5114)
|
||||||
* [Beamer](https://beamer-app.com/) - 🚫 Not yet supported only works on Intel-based Macs - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/815231/5114)
|
* [Beamer](https://beamer-app.com/) - ✳️ Yes, works via Rosetta 2 Translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/815231/5114)
|
||||||
|
* [BetterZip](https://macitbetter.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/354709/5114)
|
||||||
* [Burn for Mac](https://burn-osx.sourceforge.io/Pages/English/home.html) - ✅ Yes, Full Native Apple Silicon Support as of v3.0.0 - [Release Notes](https://burn-osx.sourceforge.io/Pages/English/news.html)
|
* [Burn for Mac](https://burn-osx.sourceforge.io/Pages/English/home.html) - ✅ Yes, Full Native Apple Silicon Support as of v3.0.0 - [Release Notes](https://burn-osx.sourceforge.io/Pages/English/news.html)
|
||||||
|
* [CalHash](https://titanium-software.fr/en/calhash.html) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://titanium-software.fr/en/release_calhash.html)
|
||||||
* [Camo Studio](https://reincubate.com/camo/) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://reincubate.com/support/camo/release-notes/#1.1.3.122)
|
* [Camo Studio](https://reincubate.com/camo/) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://reincubate.com/support/camo/release-notes/#1.1.3.122)
|
||||||
|
* [Chia Blockchain](https://www.chia.net/) - ✳️ Yes, works via Rosetta 2 translation - [Issue](https://github.com/Chia-Network/chia-blockchain/issues/2313) [Changelog](https://github.com/Chia-Network/chia-blockchain/blob/main/CHANGELOG.md)
|
||||||
* [coconutBattery](https://www.coconut-flavour.com/coconutbattery/) - ✅ Yes, full native support as of v3.9.2
|
* [coconutBattery](https://www.coconut-flavour.com/coconutbattery/) - ✅ Yes, full native support as of v3.9.2
|
||||||
* [CleanMyMac](https://cleanmymac.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344326/5114)
|
* [CleanMyMac](https://cleanmymac.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344326/5114)
|
||||||
* [CleanShot X](https://cleanshot.com) - ✅ Yes, fully supported as of v3.4.4 - [Changelog](https://cleanshot.com/changelog/) [View on Setapp](https://setapp.sjv.io/c/2708043/569389/5114)
|
* [CleanShot X](https://cleanshot.com) - ✅ Yes, fully supported as of v3.4.4 - [Changelog](https://cleanshot.com/changelog/) [View on Setapp](https://setapp.sjv.io/c/2708043/569389/5114)
|
||||||
* [Default Folder X](https://www.stclairsoft.com/DefaultFolderX/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/840195/5114)
|
* [Deeper for macOS](https://titanium-software.fr/en/deeper.html) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://titanium-software.fr/en/release_deeper.html)
|
||||||
* [Disk Drill](https://www.cleverfiles.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344358/5114)
|
* [Default Folder X](https://www.stclairsoft.com/DefaultFolderX/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/840195/5114)
|
||||||
|
* [Disk Drill](https://www.cleverfiles.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344358/5114)
|
||||||
* [DisplayLink Manager](https://www.displaylink.com/downloads/macos) - ✅ Yes, Full Native Apple Silicon Support as of v1.3 - [Release Notes](https://gist.github.com/ThatGuySam/30e5f1d2ee4edacab6323acaa55791fc)
|
* [DisplayLink Manager](https://www.displaylink.com/downloads/macos) - ✅ Yes, Full Native Apple Silicon Support as of v1.3 - [Release Notes](https://gist.github.com/ThatGuySam/30e5f1d2ee4edacab6323acaa55791fc)
|
||||||
* [Displays for Mac](https://www.jibapps.com/apps/displays/) - ✅ Yes, Full Native Apple Silicon Support as of v1.9.7 - [Source](https://twitter.com/jibapps/status/1338478515453386755)
|
* [Displays for Mac](https://www.jibapps.com/apps/displays/) - ✅ Yes, Full Native Apple Silicon Support as of v1.9.7 - [Source](https://twitter.com/jibapps/status/1338478515453386755)
|
||||||
* [Gemini 2](https://macpaw.com/gemini) - ✳️ Yes, works via Rosetta 2 - [Official Tweet](https://twitter.com/MacPaw/status/1361651643591364613) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344369/5114)
|
* [Gemini 2](https://macpaw.com/gemini) - ✳️ Yes, works via Rosetta 2 - [Official Tweet](https://twitter.com/MacPaw/status/1361651643591364613) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344369/5114)
|
||||||
* [GrandPerspective](https://apps.apple.com/app/grandperspective/id1111570163?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of 2.5.3 - [Release Notes](http://grandperspectiv.sourceforge.net/)
|
* [GrandPerspective](https://apps.apple.com/app/grandperspective/id1111570163?mt=12) - ✅ Yes, Full Native Apple Silicon Support as of 2.5.3 - [Release Notes](http://grandperspectiv.sourceforge.net/)
|
||||||
|
* [Gifox](https://gifox.io/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344376/5114)
|
||||||
* [HazeOver](https://hazeover.com/) - ✅ Yes, Full Native Apple Silicon Support as of 1.8.8 - [Official News](https://hazeover.com/news.html) [View on Setapp](https://setapp.sjv.io/c/2708043/344378/5114)
|
* [HazeOver](https://hazeover.com/) - ✅ Yes, Full Native Apple Silicon Support as of 1.8.8 - [Official News](https://hazeover.com/news.html) [View on Setapp](https://setapp.sjv.io/c/2708043/344378/5114)
|
||||||
* [HoudahSpot](https://www.houdah.com/houdahSpot/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/houdahspot)
|
* [HoudahSpot](https://www.houdah.com/houdahSpot/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/houdahspot)
|
||||||
* [HyperSwitch](https://bahoom.com/hyperswitch) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/603#issue-835195886)
|
* [HyperSwitch](https://bahoom.com/hyperswitch) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/603#issue-835195886)
|
||||||
* [iBoysoft NTFS for Mac](https://iboysoft.com/ntfs-for-mac/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/iboysoft-ntfs)
|
* [iBoysoft NTFS for Mac](https://iboysoft.com/ntfs-for-mac/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/iboysoft-ntfs)
|
||||||
* [Iriun Webcam](https://iriun.com/) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/607#issue-835423511)
|
* [Iriun Webcam](https://iriun.com/) - ✳️ Yes, works via Rosetta 2 Translation - [Verification](https://github.com/ThatGuySam/doesitarm/issues/607#issue-835423511)
|
||||||
* [iStat Menus](https://bjango.com/mac/istatmenus/) - ✅ Yes, Full Native Apple Silicon Support as of v6.51 - [Official Twitter](https://twitter.com/bjango/status/1328863648270356482) [View on Setapp](https://setapp.sjv.io/c/2708043/344394/5114)
|
* [iStat Menus](https://bjango.com/mac/istatmenus/) - ✅ Yes, Full Native Apple Silicon Support as of v6.51 - [Official Twitter](https://twitter.com/bjango/status/1328863648270356482) [View on Setapp](https://setapp.sjv.io/c/2708043/344394/5114)
|
||||||
* [Jamf Self Service](https://docs.jamf.com/10.26.0/jamf-pro/administrator-guide/About_Jamf_Self_Service_for_macOS.html) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [Jamf Self Service](https://docs.jamf.com/10.26.0/jamf-pro/administrator-guide/About_Jamf_Self_Service_for_macOS.html) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [Karabiner-Elements](https://karabiner-elements.pqrs.org/) - ✅ Yes, Full Native Apple Silicon Support as of v13.0.0 - [Release Notes](https://karabiner-elements.pqrs.org/docs/releasenotes/#karabiner-elements-1300)
|
* [Karabiner-Elements](https://karabiner-elements.pqrs.org/) - ✅ Yes, Full Native Apple Silicon Support as of v13.0.0 - [Release Notes](https://karabiner-elements.pqrs.org/docs/releasenotes/#karabiner-elements-1300)
|
||||||
* [Keka](https://mas.keka.io/) - ✅ Yes, Full Native Apple Silicon Support as of v1.2.2 - [App Store Link](https://mas.keka.io/)
|
* [Keka](https://mas.keka.io/) - ✅ Yes, Full Native Apple Silicon Support as of v1.2.2 - [App Store Link](https://mas.keka.io/)
|
||||||
* [Logitech Options](https://www.logitech.com/en-us/product/options) - ✳️ Yes, works via Rosetta 2. Some users report issues with the Flow feature. - [MacRumors Discussion](https://forums.macrumors.com/threads/does-logitech-options-works.2270516)
|
* [Logitech Options](https://www.logitech.com/en-us/product/options) - ✳️ Yes, works via Rosetta 2. Some users report issues with the Flow feature. - [MacRumors Discussion](https://forums.macrumors.com/threads/does-logitech-options-works.2270516)
|
||||||
* [Lunar for Mac](https://lunar.fyi/) - 🚫 No, not yet supported only works on Intel-based Macs - [Issue #1](https://github.com/alin23/Lunar/issues/210) [Issue #2](https://github.com/alin23/Lunar/issues/215)
|
* [Lunar for Mac](https://lunar.fyi/) - 🚫 No, not yet supported only works on Intel-based Macs - [Issue #1](https://github.com/alin23/Lunar/issues/210) [Issue #2](https://github.com/alin23/Lunar/issues/215)
|
||||||
* [Lungo](https://sindresorhus.com/lungo) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/400141/5114)
|
* [Lungo](https://sindresorhus.com/lungo) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/400141/5114)
|
||||||
* [Maccy](https://maccy.app/) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://github.com/p0deje/Maccy/releases/tag/0.19.0) [Mac App Store](https://apps.apple.com/us/app/maccy/id1527619437)
|
* [Maccy](https://maccy.app/) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://github.com/p0deje/Maccy/releases/tag/0.19.0) [Mac App Store](https://apps.apple.com/us/app/maccy/id1527619437)
|
||||||
* [MacPilot](https://www.koingosw.com/products/macpilot/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/550030/5114)
|
* [MacPilot](https://www.koingosw.com/products/macpilot/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/550030/5114)
|
||||||
* [MacZip](https://ezip.awehunt.com/) - ✅ Yes, Full Native Apple Silicon Support as of v2.0 - [Release Notes](https://ezip.awehunt.com/)
|
* [MacZip](https://ezip.awehunt.com/) - ✅ Yes, Full Native Apple Silicon Support as of v2.0 - [Release Notes](https://ezip.awehunt.com/)
|
||||||
* [Magic Window Air](https://apps.apple.com/us/app/magic-window-air/id1481258399) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/933402/5114)
|
* [Maintenance for macOS](https://titanium-software.fr/en/maintenance.html) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://titanium-software.fr/en/release_maintenance.html)
|
||||||
|
* [Magic Window Air](https://apps.apple.com/us/app/magic-window-air/id1481258399) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/933402/5114)
|
||||||
* [Moom](https://manytricks.com/moom/) - ✅ Yes, Full Native Apple Silicon Support as of v3.2.20 - [Official Tweet](https://twitter.com/manytricks/status/1333456606449774595)
|
* [Moom](https://manytricks.com/moom/) - ✅ Yes, Full Native Apple Silicon Support as of v3.2.20 - [Official Tweet](https://twitter.com/manytricks/status/1333456606449774595)
|
||||||
* [Mosaic for Mac](https://www.lightpillar.com/mosaic.html) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [Release Notes](https://lightpillar.com/appdata/mosaic/features/version-history.html) [View on Setapp](https://setapp.sjv.io/mosaic)
|
* [Mosaic for Mac](https://www.lightpillar.com/mosaic.html) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [Release Notes](https://lightpillar.com/appdata/mosaic/features/version-history.html) [View on Setapp](https://setapp.sjv.io/mosaic)
|
||||||
* [One Switch](https://fireball.studio/oneswitch/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/635280/5114)
|
* [NoNotify](https://nonotify.com/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/nonotify)
|
||||||
|
* [One Switch](https://fireball.studio/oneswitch/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/635280/5114)
|
||||||
|
* [OnyX for macOS](https://titanium-software.fr/en/onyx.html) - ✅ Yes, Full Native Apple Silicon Support reported as of v3.9.2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/622#issue-849839262) [Release Notes](https://titanium-software.fr/en/release_onyx.html)
|
||||||
* [Pacifist](https://www.charlessoft.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/573#issue-812045761)
|
* [Pacifist](https://www.charlessoft.com/) - ✳️ Yes, works via Rosetta 2 - [Verification](https://github.com/ThatGuySam/doesitarm/issues/573#issue-812045761)
|
||||||
* [Paragon NTFS](https://www.paragon-software.com/home/ntfs-mac/) - ✅ Yes, Full Native Apple Silicon Support
|
* [Paragon NTFS](https://www.paragon-software.com/home/ntfs-mac/) - ✅ Yes, Full Native Apple Silicon Support
|
||||||
* [Paste for Mac](https://pasteapp.io/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/paste)
|
* [Paste for Mac](https://pasteapp.io/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/paste)
|
||||||
* [Path Finder](https://cocoatech.com/#/) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://cocoatech.com/#/post/introducing-path-finder-10) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/path-finder)
|
* [Path Finder](https://cocoatech.com/#/) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://cocoatech.com/#/post/introducing-path-finder-10) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/path-finder)
|
||||||
|
* [Parallels Toolbox](https://prf.hn/l/7QA4VqE) - ✅ Yes, Full Native Apple Silicon Support as of v4.1.1 - [Release Notes](https://prf.hn/l/7Av4eqn)
|
||||||
|
* [PliimPRO](https://pliim.app/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/860831/5114)
|
||||||
* [Razer macOS](https://github.com/1kc/razer-macos/releases) - ✳️ Yes, runs via Rosetta 2
|
* [Razer macOS](https://github.com/1kc/razer-macos/releases) - ✳️ Yes, runs via Rosetta 2
|
||||||
* [Razer Synapse](https://www.razer.com/synapse-2) - 🚫 No, not yet supported only works on Intel-based Macs - [Working Alternative](https://github.com/1kc/razer-macos)
|
* [Razer Synapse](https://www.razer.com/synapse-2) - 🚫 No, not yet supported only works on Intel-based Macs - [Working Alternative](https://github.com/1kc/razer-macos)
|
||||||
* [Rectangle for Mac](https://rectangleapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
* [Rectangle for Mac](https://rectangleapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [restic](https://restic.net/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/492#issuecomment-754580871)
|
* [restic](https://restic.net/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/492#issuecomment-754580871)
|
||||||
* [Rocket for Mac](https://matthewpalmer.net/rocket/) - ✅ Yes, Full Native Apple Silicon Support - [Verifcation](https://github.com/ThatGuySam/doesitarm/issues/605#issue-835338120)
|
* [Rocket for Mac](https://matthewpalmer.net/rocket/) - ✅ Yes, Full Native Apple Silicon Support - [Verifcation](https://github.com/ThatGuySam/doesitarm/issues/605#issue-835338120)
|
||||||
* [Silenz](https://silenzapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/653749/5114)
|
* [SheepShaver](https://www.emaculation.com/forum/viewtopic.php?f=20&t=7360) - ✅ Yes, Full Native Apple Silicon Support - [Release Notes](https://www.emaculation.com/sheepshaver/build-history.txt) [🧪 Apple Silicon App Tested](https://doesitarm.com/apple-silicon-app-test/)
|
||||||
* [start for Mac](https://apps.apple.com/us/app/start/id1329701389?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/752736/5114)
|
* [Silenz](https://silenzapp.com/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/653749/5114)
|
||||||
|
* [sndcpy](https://github.com/rom1v/sndcpy) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/645#issuecomment-839911450)
|
||||||
|
* [start for Mac](https://apps.apple.com/us/app/start/id1329701389?mt=12) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/752736/5114)
|
||||||
|
* [Swish for macOS](https://highlyopinionated.co/swish/) - ✅ Yes, Full Native Apple Silicon Support as of v1.7.1 - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/swish)
|
||||||
* [TG Pro](https://www.tunabellysoftware.com/tgpro/) - ✅ Yes, Full Native Apple Silicon Support as of v2.53 - [Release Notes](https://www.tunabellysoftware.com/tgpro/releasenotes/)
|
* [TG Pro](https://www.tunabellysoftware.com/tgpro/) - ✅ Yes, Full Native Apple Silicon Support as of v2.53 - [Release Notes](https://www.tunabellysoftware.com/tgpro/releasenotes/)
|
||||||
|
* [Timeless for Mac](https://www.dangercove.com/timeless/) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/timeless)
|
||||||
* [ToothFairy](https://c-command.com/toothfairy/) - ✅ Yes, Full Native Apple Silicon Support as of v2.7.1 - [Release Notes](https://c-command.com/blog/2021/01/14/toothfairy-2-7-1/) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/560495/5114)
|
* [ToothFairy](https://c-command.com/toothfairy/) - ✅ Yes, Full Native Apple Silicon Support as of v2.7.1 - [Release Notes](https://c-command.com/blog/2021/01/14/toothfairy-2-7-1/) [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/560495/5114)
|
||||||
* [TouchSwitcher](https://hazeover.com/touchswitcher.html) - ✅ Yes, Full Native Apple Silicon Support as of 1.4 - [Official News](https://hazeover.com/news.html)
|
* [TouchSwitcher](https://hazeover.com/touchswitcher.html) - ✅ Yes, Full Native Apple Silicon Support as of 1.4 - [Official News](https://hazeover.com/news.html)
|
||||||
* [Transloader](https://eternalstorms.at/transloader/) - ✅ Yes, Full Native Apple Silicon Support as of v2.1.1 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
* [Transloader](https://eternalstorms.at/transloader/) - ✅ Yes, Full Native Apple Silicon Support as of v2.1.1 - [Blog Post](https://blog.eternalstorms.at/2020/11/09/app-update-galore/)
|
||||||
* [Trickster](https://www.apparentsoft.com/trickster) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/668337/5114)
|
* [Trickster](https://www.apparentsoft.com/trickster) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/668337/5114)
|
||||||
* [Wifi Explorer](https://www.intuitibits.com/products/wifi-explorer/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344478/5114)
|
* [uBar](https://brawersoftware.com/products/ubar) - ✳️ Yes, works via Rosetta 2 translation - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/489433/5114)
|
||||||
|
* [Wifi Explorer](https://www.intuitibits.com/products/wifi-explorer/) - ✅ Yes, Full Native Apple Silicon Support - [Article](https://setapp.sjv.io/apple-silicon-supported-apps) [View on Setapp](https://setapp.sjv.io/c/2708043/344478/5114)
|
||||||
* [Witch for Mac](https://manytricks.com/witch/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/602#issue-834336906) [Release Notes](https://manytricks.com/witch/releasenotes/)
|
* [Witch for Mac](https://manytricks.com/witch/) - ✅ Yes, Full Native Apple Silicon Support - [Verification](https://github.com/ThatGuySam/doesitarm/issues/602#issue-834336906) [Release Notes](https://manytricks.com/witch/releasenotes/)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -607,10 +711,13 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## More Apple Silicon Lists
|
## More Apple Silicon and ARM Lists
|
||||||
* [Is Apple silicon ready?](https://isapplesiliconready.com/) - Great list with detailed app status
|
* [Is Apple silicon ready?](https://isapplesiliconready.com/) - Great list with detailed app status
|
||||||
* [Apple Silicon Games](https://applesilicongames.com/) - List of reported Games support including performance info.
|
* [Apple Silicon Games](https://applesilicongames.com/) - List of reported Games support including performance info.
|
||||||
|
* [Apple Gaming Wiki](https://www.applegamingwiki.com/wiki/Home) - Aggregates reports on Apple Silicon compatibility under different environments
|
||||||
* [SweetWater Compatibility Guide](https://www.sweetwater.com/sweetcare/articles/macos-11-big-sur-compatibility-guide/) - Big Sur and Apple Silicon reports for producstion and live performance software
|
* [SweetWater Compatibility Guide](https://www.sweetwater.com/sweetcare/articles/macos-11-big-sur-compatibility-guide/) - Big Sur and Apple Silicon reports for producstion and live performance software
|
||||||
|
* [Toolfarm Apple Silicon Compatibility](https://www.toolfarm.com/news/apple-silicon-compatibility/) - Product Compatibility for Apple M1 Silicon Macs
|
||||||
|
* [Toolfarm Big Sur Compatibility](https://www.toolfarm.com/news/apple-silicon-compatibility/) - Product Compatibility for macOS Big Sur
|
||||||
* [Ported2M1](https://ported2m1.com/) - Beautiful list with app support discussion
|
* [Ported2M1](https://ported2m1.com/) - Beautiful list with app support discussion
|
||||||
* [MacRumors List](https://forums.macrumors.com/threads/universal-and-native-apple-silicon-apps.2267176/) - List of Universal and Native Apple Silicon Apps
|
* [MacRumors List](https://forums.macrumors.com/threads/universal-and-native-apple-silicon-apps.2267176/) - List of Universal and Native Apple Silicon Apps
|
||||||
* [RoaringApps](https://roaringapps.com/collections/list-of-apple-silicon-native-apps) - List of apps ready for Apple Silicon M1 chip Macs
|
* [RoaringApps](https://roaringapps.com/collections/list-of-apple-silicon-native-apps) - List of apps ready for Apple Silicon M1 chip Macs
|
||||||
|
|
@ -620,6 +727,15 @@ Builds - [Java on M1 Benchmarks](https://docs.google.com/spreadsheets/d/1g4U7LAI
|
||||||
* [Does It ARM Twitter Thread](https://twitter.com/DoesItARM/status/1330027384041508865) - Does It ARM's own twitter thread for reporting and suggecting apps
|
* [Does It ARM Twitter Thread](https://twitter.com/DoesItARM/status/1330027384041508865) - Does It ARM's own twitter thread for reporting and suggecting apps
|
||||||
* [Official Adobe M1 List](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html) - Adobe's official list of app support for M1
|
* [Official Adobe M1 List](https://helpx.adobe.com/download-install/kb/apple-silicon-m1-chip.html) - Adobe's official list of app support for M1
|
||||||
* [Official Apple List](https://apps.apple.com/us/story/id1540024103) - Apple is a small tech company in Cupertino, CA
|
* [Official Apple List](https://apps.apple.com/us/story/id1540024103) - Apple is a small tech company in Cupertino, CA
|
||||||
|
* [Is Windows on ARM Ready](https://iswindowsonarmready.netlify.app/) - List of apps
|
||||||
|
|
||||||
|
|
||||||
|
## Apple Silicon Testing Tools
|
||||||
|
* [Uni Detetector](https://apps.apple.com/app/id1531249804) - Check all your Mac's apps and display Binary Architecture and more.
|
||||||
|
* [Silicon by DigiDNA](https://github.com/DigiDNA/Silicon) - Identify Intel-Only Apps on your Mac with ease
|
||||||
|
* [ascheck](https://github.com/harryzcy/ascheck) - A command-line app that bulk-checks your apps for the Apple Silicon support.
|
||||||
|
* [Silicon Info](https://github.com/billycastelli/Silicon-Info) - Mac menu bar tool to view the architecture of the running application
|
||||||
|
* [Does It ARM App Test](https://doesitarm.com/apple-silicon-app-test/) - Test any app for Native Apple Silicon support or check for reported native versions all in the browser
|
||||||
|
|
||||||
|
|
||||||
## Youtube Apple Silicon Playlists
|
## Youtube Apple Silicon Playlists
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,6 @@ html {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Here you would add any custom utilities you need that don't come out of the
|
* Here you would add any custom utilities you need that don't come out of the
|
||||||
* box with Tailwind.
|
* box with Tailwind.
|
||||||
|
|
@ -160,3 +159,19 @@ html {
|
||||||
background-position: -100% 0;
|
background-position: -100% 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
button:focus .parent-focus\:visible,
|
||||||
|
button:active .parent-focus\:visible {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus .parent-focus\:hidden,
|
||||||
|
button:active .parent-focus\:hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.target\:visible:target {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import buildAppList from './helpers/build-app-list.js'
|
||||||
import buildGamesList from './helpers/build-game-list.js'
|
import buildGamesList from './helpers/build-game-list.js'
|
||||||
import buildHomebrewList from './helpers/build-homebrew-list.js'
|
import buildHomebrewList from './helpers/build-homebrew-list.js'
|
||||||
import buildVideoList from './helpers/build-video-list.js'
|
import buildVideoList from './helpers/build-video-list.js'
|
||||||
|
import buildDeviceList from './helpers/build-device-list.js'
|
||||||
|
|
||||||
import { videosRelatedToApp } from './helpers/related.js'
|
import { videosRelatedToApp } from './helpers/related.js'
|
||||||
import { buildVideoPayload, buildAppBenchmarkPayload } from './helpers/build-payload.js'
|
import { buildVideoPayload, buildAppBenchmarkPayload } from './helpers/build-payload.js'
|
||||||
|
|
@ -14,6 +15,7 @@ import {
|
||||||
getAppType,
|
getAppType,
|
||||||
getAppEndpoint,
|
getAppEndpoint,
|
||||||
getVideoEndpoint,
|
getVideoEndpoint,
|
||||||
|
isVideo
|
||||||
} from './helpers/app-derived.js'
|
} from './helpers/app-derived.js'
|
||||||
import { makeSearchableList } from './helpers/searchable-list.js'
|
import { makeSearchableList } from './helpers/searchable-list.js'
|
||||||
|
|
||||||
|
|
@ -61,6 +63,11 @@ class BuildLists {
|
||||||
path: '/static/homebrew-list.json',
|
path: '/static/homebrew-list.json',
|
||||||
buildMethod: buildHomebrewList,
|
buildMethod: buildHomebrewList,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'device',
|
||||||
|
path: '/static/device-list.json',
|
||||||
|
buildMethod: buildDeviceList,
|
||||||
|
},
|
||||||
|
|
||||||
// Secondary Derivative built lists
|
// Secondary Derivative built lists
|
||||||
// Always goes after initial lists
|
// Always goes after initial lists
|
||||||
|
|
@ -225,16 +232,16 @@ class BuildLists {
|
||||||
|
|
||||||
this.lists[listKey].forEach( app => {
|
this.lists[listKey].forEach( app => {
|
||||||
|
|
||||||
const isVideo = (app.category === undefined)
|
// const isVideo = (app.category === undefined)
|
||||||
const appType = getAppType( app )
|
const appType = getAppType( app )
|
||||||
|
|
||||||
if ( isVideo ) {
|
if ( isVideo( app ) ) {
|
||||||
// this.endpointMaps.eleventy.add({
|
this.endpointMaps.eleventy.set(
|
||||||
// route: getVideoEndpoint(app),
|
getVideoEndpoint(app),
|
||||||
// payload: buildVideoPayload( app, this.allVideoAppsList, this.lists.video )
|
buildVideoPayload( app, this.allVideoAppsList, this.lists.video )
|
||||||
// })
|
)
|
||||||
|
|
||||||
this.endpointMaps.nuxt.set( getVideoEndpoint(app), buildVideoPayload( app, this.allVideoAppsList, this.lists.video ) )
|
// this.endpointMaps.nuxt.set( getVideoEndpoint(app), buildVideoPayload( app, this.allVideoAppsList, this.lists.video ) )
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -273,9 +280,14 @@ class BuildLists {
|
||||||
relatedVideos
|
relatedVideos
|
||||||
} )
|
} )
|
||||||
|
|
||||||
|
} else if ( appType === 'device' ) {
|
||||||
|
// Add device endpoint
|
||||||
|
// console.log('Added to nuxt endpoints', app.endpoint )
|
||||||
|
this.endpointMaps.nuxt.set( app.endpoint , { listing: app } )
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Add game or other endpoint
|
// Add game or other endpoint
|
||||||
// console.log('Added to nuxt endpoints', getAppEndpoint(app))
|
// console.log('Added to nuxt endpoints', app.endpoint )
|
||||||
this.endpointMaps.nuxt.set( getAppEndpoint(app), { app } )
|
this.endpointMaps.nuxt.set( getAppEndpoint(app), { app } )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import renderPoster from './poster.js'
|
||||||
|
|
||||||
function pill ( text ) {
|
function pill ( text ) {
|
||||||
return /* html */`
|
return /* html */`
|
||||||
|
|
@ -9,17 +10,19 @@ function pill ( text ) {
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ( video, options = {} ) {
|
export default async function ( video, options = {} ) {
|
||||||
const {
|
const {
|
||||||
width = '325px',
|
width = '325px',
|
||||||
classes = 'w-full flex-shrink-0 flex-grow-0 border-2 border-transparent rounded-2xl overflow-hidden'
|
classes = 'w-full flex-shrink-0 flex-grow-0 border-2 border-transparent rounded-2xl overflow-hidden'
|
||||||
} = options
|
} = options
|
||||||
|
|
||||||
// Setup inline lazysizes
|
// Setup inline lazysizes
|
||||||
this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' )
|
// await this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' )
|
||||||
|
|
||||||
// console.log('video', video)
|
// console.log('video', video)
|
||||||
|
|
||||||
|
const posterHtml = renderPoster( video )
|
||||||
|
|
||||||
return /* html */`
|
return /* html */`
|
||||||
<div class="video-card ${ classes }" style="max-width: ${ width }; flex-basis: ${ width }; scroll-snap-align: start;">
|
<div class="video-card ${ classes }" style="max-width: ${ width }; flex-basis: ${ width }; scroll-snap-align: start;">
|
||||||
<a
|
<a
|
||||||
|
|
@ -29,18 +32,7 @@ export default function ( video, options = {} ) {
|
||||||
<div class="video-card-container relative overflow-hidden bg-black">
|
<div class="video-card-container relative overflow-hidden bg-black">
|
||||||
<div class="video-card-image ratio-wrapper">
|
<div class="video-card-image ratio-wrapper">
|
||||||
<div class="relative overflow-hidden w-full pb-16/9">
|
<div class="relative overflow-hidden w-full pb-16/9">
|
||||||
<picture>
|
${ posterHtml }
|
||||||
<source
|
|
||||||
sizes="${video.thumbnail.sizes}"
|
|
||||||
data-srcset="${video.thumbnail.srcset}"
|
|
||||||
type="image/jpg"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
data-src="${video.thumbnail.src}"
|
|
||||||
alt="${video.name}"
|
|
||||||
class="lazyload absolute h-full w-full object-cover"
|
|
||||||
>
|
|
||||||
</picture>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|
|
||||||
85
components-eleventy/video/player.js
Normal file
85
components-eleventy/video/player.js
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
import renderPoster from './poster.js'
|
||||||
|
|
||||||
|
function renderTimestamps ( video ) {
|
||||||
|
|
||||||
|
if ( video.timestamps.length === 0 ) return ''
|
||||||
|
|
||||||
|
const timestampsForRender = video.timestamps.map( timestamp => {
|
||||||
|
const [ minutes, seconds ] = timestamp.time.split(':')
|
||||||
|
|
||||||
|
return {
|
||||||
|
...timestamp,
|
||||||
|
inSeconds: (minutes * 60) + Number(seconds)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const timestampButtonsHtml = timestampsForRender.map( timestamp => (/* html */`
|
||||||
|
<button
|
||||||
|
time="${timestamp.time}"
|
||||||
|
class="inline-block text-xs rounded-lg py-1 px-2 border-2 border-white focus:outline-none border-opacity-0 neumorphic-shadow-inner">
|
||||||
|
${ timestamp.fullText }
|
||||||
|
</button>
|
||||||
|
`) ).join('')
|
||||||
|
|
||||||
|
return /* html */`
|
||||||
|
<div class="player-timestamps w-full max-w-4xl">
|
||||||
|
<div class="player-timestamps-wrapper overflow-x-auto overflow-y-visible whitespace-no-wrap py-2 space-x-2">
|
||||||
|
${ timestampButtonsHtml }
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
export default async function ( video, options = {} ) {
|
||||||
|
const {
|
||||||
|
coverBottomHtml = ''
|
||||||
|
// classes = 'w-full flex-shrink-0 flex-grow-0 border-2 border-transparent rounded-2xl overflow-hidden'
|
||||||
|
} = options
|
||||||
|
|
||||||
|
// Setup inline player script
|
||||||
|
await this.usingComponent( 'node_modules/can-autoplay/build/can-autoplay.min.js' )
|
||||||
|
|
||||||
|
await this.usingComponent( 'helpers/lite-youtube.js' )
|
||||||
|
|
||||||
|
// Setup inline lazysizes
|
||||||
|
await this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' )
|
||||||
|
|
||||||
|
// console.log('video', video)
|
||||||
|
|
||||||
|
const posterHtml = renderPoster( video )
|
||||||
|
|
||||||
|
const timestampsHtml = renderTimestamps( video )
|
||||||
|
|
||||||
|
return /* html */`
|
||||||
|
<lite-youtube
|
||||||
|
class="video-canvas w-screen flex flex-col justify-center items-center bg-black pt-16"
|
||||||
|
style="left:50%;right:50%;margin-left:-50vw;margin-right:-50vw;"
|
||||||
|
>
|
||||||
|
<script class="video-data" type="application/json">
|
||||||
|
${ JSON.stringify( video ) }
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="ratio-wrapper w-full max-w-4xl">
|
||||||
|
<div class="player-container relative overflow-hidden w-full pb-16/9">
|
||||||
|
<div class="player-poster cursor-pointer">
|
||||||
|
|
||||||
|
${ posterHtml }
|
||||||
|
|
||||||
|
<div class="video-card-overlay absolute inset-0 flex flex-col justify-center items-center bg-gradient-to-tr from-black to-transparent p-4" style="--gradient-from-color:rgba(0, 0, 0, 1); --gradient-to-color:rgba(0, 0, 0, 0.7);">
|
||||||
|
<div class="cover-top h-full"></div>
|
||||||
|
<div class="play-circle bg-white-2 bg-blur flex justify-center items-center outline-0 rounded-full ease p-4">
|
||||||
|
<svg viewBox="0 0 18 18" style="width:18px;height:18px;margin-left:3px">
|
||||||
|
<path fill="currentColor" d="M15.562 8.1L3.87.225c-.818-.562-1.87 0-1.87.9v15.75c0 .9 1.052 1.462 1.87.9L15.563 9.9c.584-.45.584-1.35 0-1.8z"></path>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="cover-bottom h-full">${ coverBottomHtml }</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
${ timestampsHtml }
|
||||||
|
|
||||||
|
</lite-youtube>
|
||||||
|
`
|
||||||
|
}
|
||||||
32
components-eleventy/video/poster.js
Normal file
32
components-eleventy/video/poster.js
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
|
||||||
|
export default function ( video ) {
|
||||||
|
const webpSource = {
|
||||||
|
...video.thumbnail,
|
||||||
|
srcset: video.thumbnail.srcset.replaceAll('ytimg.com/vi/', 'ytimg.com/vi_webp/').replace(/.png|.jpg|.jpeg/g, '.webp')
|
||||||
|
}
|
||||||
|
|
||||||
|
const mergedSources = {
|
||||||
|
webp: webpSource,
|
||||||
|
jpeg: video.thumbnail
|
||||||
|
}
|
||||||
|
|
||||||
|
return /* html */`
|
||||||
|
<picture>
|
||||||
|
|
||||||
|
${ Object.entries( mergedSources ).map( ([ key, source ]) => (/* html */`
|
||||||
|
<source
|
||||||
|
sizes="${ source.sizes }"
|
||||||
|
data-srcset="${ source.srcset }"
|
||||||
|
type="image/${ key }"
|
||||||
|
>
|
||||||
|
`) ).join('') }
|
||||||
|
|
||||||
|
<img
|
||||||
|
:data-src="${ video.thumbnail.src }"
|
||||||
|
alt="${ video.name }"
|
||||||
|
class="absolute inset-0 h-full w-full object-cover lazyload"
|
||||||
|
>
|
||||||
|
</picture>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
@ -10,7 +10,7 @@ function getCardType ( video ) {
|
||||||
return VideoCard
|
return VideoCard
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ( videos, options = {} ) {
|
export default async function ( videos, options = {} ) {
|
||||||
|
|
||||||
const {
|
const {
|
||||||
cardWidth = '325',
|
cardWidth = '325',
|
||||||
|
|
@ -23,18 +23,23 @@ export default function ( videos, options = {} ) {
|
||||||
const uid = Math.random().toString(36).substr(2, 9)
|
const uid = Math.random().toString(36).substr(2, 9)
|
||||||
const rowId = `row-${ uid }`
|
const rowId = `row-${ uid }`
|
||||||
|
|
||||||
|
// Setup inline scroll script
|
||||||
|
await this.usingComponent( 'helpers/scroll.js' )
|
||||||
|
|
||||||
// Setup inline lazysizes
|
// Setup inline lazysizes
|
||||||
this.usingComponent( 'helpers/scroll.js' )
|
await this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' )
|
||||||
|
|
||||||
// console.log('video', video)
|
// console.log('video', video)
|
||||||
|
|
||||||
const cardsHtml = videos.map( video => {
|
const renderedCards = await Promise.all(videos.map( async video => {
|
||||||
const Card = getCardType( video )
|
const Card = getCardType( video )
|
||||||
|
|
||||||
// console.log('Card', this.boundComponent(Card)( video ) )
|
// console.log('Card', this.boundComponent(Card)( video ) )
|
||||||
|
|
||||||
return this.boundComponent(Card)( video )
|
return await this.boundComponent(Card)( video )
|
||||||
} ).join('')
|
} ))
|
||||||
|
|
||||||
|
const cardsHtml = renderedCards.join('')
|
||||||
|
|
||||||
// console.log( 'cardsHtml', cardsHtml )
|
// console.log( 'cardsHtml', cardsHtml )
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,49 +2,103 @@
|
||||||
|
|
||||||
<nav
|
<nav
|
||||||
:class="[
|
:class="[
|
||||||
'fixed top-0 left-0 right-0 z-navbar',
|
'fixed top-0 left-0 right-0 flex z-navbar',
|
||||||
isOpen ? 'bg-blur' : ''
|
'bg-gradient-to-bl from-dark to-darker bg-fixed'
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<div class="max-w-7xl mx-auto px-4 lg:px-6">
|
<div class="mobile-menu-container flex items-center lg:hidden p-2">
|
||||||
|
|
||||||
|
<!-- Mobile menu button -->
|
||||||
|
<a
|
||||||
|
:class="[
|
||||||
|
'mobile-menu-toggle rounded-md p-2',
|
||||||
|
'inline-flex items-center justify-center',
|
||||||
|
'text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:bg-gray-700 focus:text-white',
|
||||||
|
'transition duration-150 ease-in-out'
|
||||||
|
]"
|
||||||
|
href="#mobile-menu"
|
||||||
|
aria-label="Main menu"
|
||||||
|
>
|
||||||
|
<!-- Icon when menu is closed. -->
|
||||||
|
<svg
|
||||||
|
class="parent-focus:hidden h-6 w-6"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor">
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-width="2"
|
||||||
|
d="M4 6h16M4 12h16M4 18h16" />
|
||||||
|
</svg>
|
||||||
|
<!-- Icon when menu is open. -->
|
||||||
|
<svg
|
||||||
|
class="hidden parent-focus:visible h-6 w-6"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor">
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-width="2"
|
||||||
|
d="M6 18L18 6M6 6l12 12" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div
|
||||||
|
id="mobile-menu"
|
||||||
|
:class="[
|
||||||
|
'mobile-menu hidden target:visible lg:hidden absolute bg-blur top-0 left-0 right-0 w-full py-3 px-2',
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
<!-- Mobile menu button -->
|
||||||
|
<a
|
||||||
|
:class="[
|
||||||
|
'mobile-menu-close rounded-md p-2',
|
||||||
|
'inline-flex items-center justify-center',
|
||||||
|
'text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:bg-gray-700 focus:text-white',
|
||||||
|
'transition duration-150 ease-in-out'
|
||||||
|
]"
|
||||||
|
href="#"
|
||||||
|
aria-label="Main menu"
|
||||||
|
>
|
||||||
|
<!-- Icon when menu is open. -->
|
||||||
|
<svg
|
||||||
|
class="h-6 w-6"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor">
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-width="2"
|
||||||
|
d="M6 18L18 6M6 6l12 12" />
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="px-2 pt-2 pb-3 lg:px-3">
|
||||||
|
<a
|
||||||
|
v-for="(item, index) in items"
|
||||||
|
:key="index"
|
||||||
|
:href="item.url"
|
||||||
|
:class="[
|
||||||
|
'mt-1 block px-3 py-2 rounded-md text-base font-medium text-gray-300 hover:text-white hover:bg-gray-700 focus:outline-none focus:text-white focus:bg-gray-700 transition duration-150 ease-in-out',
|
||||||
|
($nuxt.$route.path === item.url) ? 'text-white bg-gray-900 hover:text-white' : 'text-gray-300 hover:bg-gray-700'
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
{{ item.label }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="reponsive-menu-container relative w-full max-w-7xl mx-auto lg:px-6">
|
||||||
<div class="flex justify-between h-16">
|
<div class="flex justify-between h-16">
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<div class="-ml-2 mr-2 flex items-center lg:hidden">
|
|
||||||
<!-- Mobile menu button -->
|
|
||||||
<button
|
|
||||||
:aria-expanded="isOpen ? 'true' : 'false'"
|
|
||||||
class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:bg-gray-700 focus:text-white transition duration-150 ease-in-out"
|
|
||||||
aria-label="Main menu"
|
|
||||||
@click="isOpen = !isOpen"
|
|
||||||
>
|
|
||||||
<!-- Icon when menu is closed. -->
|
|
||||||
<svg
|
|
||||||
v-if="!isOpen"
|
|
||||||
class="h-6 w-6"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor">
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
d="M4 6h16M4 12h16M4 18h16" />
|
|
||||||
</svg>
|
|
||||||
<!-- Icon when menu is open. -->
|
|
||||||
<svg
|
|
||||||
v-if="isOpen"
|
|
||||||
class="h-6 w-6"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor">
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
d="M6 18L18 6M6 6l12 12" />
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="flex-shrink-0 flex items-center text-4xl lg:text-5xl py-3">
|
<div class="flex-shrink-0 flex items-center text-4xl lg:text-5xl py-3">
|
||||||
<div>🦾</div>
|
<div>🦾</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -67,7 +121,7 @@
|
||||||
<div class="flex-shrink-0">
|
<div class="flex-shrink-0">
|
||||||
<!-- <span class="rounded-md shadow-sm">
|
<!-- <span class="rounded-md shadow-sm">
|
||||||
<LinkButton
|
<LinkButton
|
||||||
href="https://github.com/ThatGuySam/doesitarm/issues"
|
href="https://prf.hn/l/7JG0bEj"
|
||||||
class="relative inline-flex items-center border-indigo-500"
|
class="relative inline-flex items-center border-indigo-500"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
|
|
@ -79,23 +133,19 @@
|
||||||
d="M10 3a1 1 0 011 1v5h5a1 1 0 110 2h-5v5a1 1 0 11-2 0v-5H4a1 1 0 110-2h5V4a1 1 0 011-1z"
|
d="M10 3a1 1 0 011 1v5h5a1 1 0 110 2h-5v5a1 1 0 11-2 0v-5H4a1 1 0 110-2h5V4a1 1 0 011-1z"
|
||||||
clip-rule="evenodd" />
|
clip-rule="evenodd" />
|
||||||
</svg>
|
</svg>
|
||||||
<span>Submit App</span>
|
<span>Parallels is now Apple Silicon native!</span>
|
||||||
</LinkButton>
|
</LinkButton>
|
||||||
|
|
||||||
</span> -->
|
</span> -->
|
||||||
|
|
||||||
<a
|
<a
|
||||||
href="https://www.producthunt.com/posts/apple-silicon-app-test?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-apple-silicon-app-test"
|
:class="[
|
||||||
rel="noopener"
|
'underline px-3 py-2 rounded-md text-xs font-medium leading-5 focus:outline-none focus:text-white focus:bg-gray-700 transition duration-150 ease-in-out',
|
||||||
target="_blank"
|
//($nuxt.$route.path === item.url) ? 'text-white bg-darker hover:text-white neumorphic-shadow' : 'text-gray-300 hover:bg-darker hover:neumorphic-shadow'
|
||||||
|
]"
|
||||||
|
href="https://track.adtraction.com/t/t?a=1404987138&as=1609291769&t=2&tk=1&url=https://surfshark.com/blog/m1-chip-compatibility"
|
||||||
>
|
>
|
||||||
<img
|
✅ Surfshark VPN is now Apple Silicon native!
|
||||||
src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=285320&theme=light"
|
|
||||||
alt="Apple Silicon App Test - Test your apps for compatibility before you buy an M1 Mac | Product Hunt"
|
|
||||||
style="width: 200px; height: 43px;"
|
|
||||||
width="200"
|
|
||||||
height="43"
|
|
||||||
>
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -107,27 +157,6 @@
|
||||||
|
|
||||||
Menu open: "block", Menu closed: "hidden"
|
Menu open: "block", Menu closed: "hidden"
|
||||||
-->
|
-->
|
||||||
<div
|
|
||||||
:class="[
|
|
||||||
'lg:hidden',
|
|
||||||
isOpen ? 'block' : 'hidden'
|
|
||||||
]"
|
|
||||||
>
|
|
||||||
<div class="px-2 pt-2 pb-3 lg:px-3">
|
|
||||||
<a
|
|
||||||
v-for="(item, index) in items"
|
|
||||||
:key="index"
|
|
||||||
:href="item.url"
|
|
||||||
:class="[
|
|
||||||
'mt-1 block px-3 py-2 rounded-md text-base font-medium text-gray-300 hover:text-white hover:bg-gray-700 focus:outline-none focus:text-white focus:bg-gray-700 transition duration-150 ease-in-out',
|
|
||||||
($nuxt.$route.path === item.url) ? 'text-white bg-gray-900 hover:text-white' : 'text-gray-300 hover:bg-gray-700'
|
|
||||||
]"
|
|
||||||
>
|
|
||||||
{{ item.label }}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
</div>
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -151,6 +180,10 @@ export default {
|
||||||
label: 'Categories',
|
label: 'Categories',
|
||||||
url: '/categories',
|
url: '/categories',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: 'Devices',
|
||||||
|
url: '/devices',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: 'Benchmarks',
|
label: 'Benchmarks',
|
||||||
url: '/benchmarks',
|
url: '/benchmarks',
|
||||||
|
|
@ -170,10 +203,10 @@ export default {
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: function () {
|
// data: function () {
|
||||||
return {
|
// return {
|
||||||
isOpen: false
|
// // isOpen: false
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,12 @@
|
||||||
<input
|
<input
|
||||||
id="search"
|
id="search"
|
||||||
ref="search"
|
ref="search"
|
||||||
|
:autofocus="autofocus"
|
||||||
v-model="query"
|
v-model="query"
|
||||||
aria-label="Type here to Search"
|
aria-label="Type here to Search"
|
||||||
class="appearance-none w-full text-white font-hairline sm:text-5xl outline-none bg-transparent p-3"
|
class="appearance-none w-full text-white font-hairline sm:text-5xl outline-none bg-transparent p-3"
|
||||||
type="search"
|
type="search"
|
||||||
placeholder="Type to Search"
|
placeholder="Type to Search"
|
||||||
autofocus
|
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
@keyup="queryResults(query); scrollInputToTop()"
|
@keyup="queryResults(query); scrollInputToTop()"
|
||||||
>
|
>
|
||||||
|
|
@ -222,6 +222,10 @@ export default {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: null
|
default: null
|
||||||
},
|
},
|
||||||
|
autofocus: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
quickButtons: {
|
quickButtons: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [
|
default: () => [
|
||||||
|
|
|
||||||
|
|
@ -9,21 +9,91 @@
|
||||||
class="video-canvas w-screen flex flex-col justify-center items-center bg-black"
|
class="video-canvas w-screen flex flex-col justify-center items-center bg-black"
|
||||||
>
|
>
|
||||||
<div class="ratio-wrapper w-full max-w-4xl">
|
<div class="ratio-wrapper w-full max-w-4xl">
|
||||||
<div class="relative overflow-hidden w-full pb-16/9">
|
<div
|
||||||
|
class="relative overflow-hidden w-full pb-16/9"
|
||||||
|
@pointerover.once="warmConnections()"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-if="playerLoaded === false"
|
||||||
|
class="player-poster cursor-pointer"
|
||||||
|
@click="startPlayerLoad()"
|
||||||
|
>
|
||||||
|
<picture
|
||||||
|
class=""
|
||||||
|
>
|
||||||
|
<source
|
||||||
|
v-for="(source, key) in posterSources"
|
||||||
|
:key="key"
|
||||||
|
:sizes="source.sizes"
|
||||||
|
:data-srcset="source.srcset"
|
||||||
|
:type="`image/${ key }`"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
:data-src="video.thumbnail.src"
|
||||||
|
:alt="video.name"
|
||||||
|
class="absolute inset-0 h-full w-full object-cover lazyload"
|
||||||
|
>
|
||||||
|
</picture>
|
||||||
|
<div
|
||||||
|
class="video-card-overlay absolute inset-0 flex flex-col justify-center items-center bg-gradient-to-tr from-black to-transparent p-4"
|
||||||
|
style="--gradient-from-color:rgba(0, 0, 0, 1); --gradient-to-color:rgba(0, 0, 0, 0.7);"
|
||||||
|
>
|
||||||
|
<div class="cover-top h-full">
|
||||||
|
<slot name="cover-top">
|
||||||
|
<!-- Top -->
|
||||||
|
</slot>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="play-circle bg-white-2 bg-blur flex justify-center items-center outline-0 rounded-full ease p-4">
|
||||||
|
<svg
|
||||||
|
viewBox="0 0 18 18"
|
||||||
|
style="width:18px;height:18px;margin-left:3px"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
fill="currentColor"
|
||||||
|
d="M15.562 8.1L3.87.225c-.818-.562-1.87 0-1.87.9v15.75c0 .9 1.052 1.462 1.87.9L15.563 9.9c.584-.45.584-1.35 0-1.8z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cover-bottom h-full">
|
||||||
|
|
||||||
|
<slot name="cover-bottom">
|
||||||
|
<!-- Bottom -->
|
||||||
|
</slot>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<iframe
|
<iframe
|
||||||
|
v-else
|
||||||
ref="frame"
|
ref="frame"
|
||||||
:id="frameId"
|
:id="frameId"
|
||||||
:src="`https://www.youtube-nocookie.com/embed/${video.id}?enablejsapi=1&autoplay=1&modestbranding=1&playsinline=1`"
|
:src="`https://www.youtube-nocookie.com/embed/${video.id}?enablejsapi=1&autoplay=1&modestbranding=1&playsinline=1`"
|
||||||
class="absolute h-full w-full"
|
class="absolute inset-0 h-full w-full object-cover"
|
||||||
frameborder="0"
|
frameborder="0"
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||||
allowfullscreen
|
allowfullscreen
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- <pre>
|
||||||
|
hasPlayer: {{ hasPlayer }}
|
||||||
|
</pre> -->
|
||||||
|
|
||||||
|
<!-- <pre>
|
||||||
|
player: {{ player }}
|
||||||
|
</pre> -->
|
||||||
|
|
||||||
|
<!-- <pre>
|
||||||
|
timstamps: {{ video.timestamps }}
|
||||||
|
</pre> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="hasTimestamps && hasPlayer"
|
v-if="hasTimestamps"
|
||||||
class="video-timestamps w-full max-w-4xl"
|
class="video-timestamps w-full max-w-4xl"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
|
@ -43,7 +113,7 @@
|
||||||
:class-groups="{
|
:class-groups="{
|
||||||
shadow: 'neumorphic-shadow-inner'
|
shadow: 'neumorphic-shadow-inner'
|
||||||
}"
|
}"
|
||||||
@click.stop="seekTo(timestamp.inSeconds); player.playVideo()"
|
@click.stop="seekTo(timestamp.inSeconds)"
|
||||||
>{{ timestamp.fullText }}</button>
|
>{{ timestamp.fullText }}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -54,6 +124,8 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import 'lazysizes'
|
||||||
|
|
||||||
import LinkButton from '~/components/link-button.vue'
|
import LinkButton from '~/components/link-button.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
@ -68,13 +140,27 @@ export default {
|
||||||
},
|
},
|
||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
|
playerLoaded: false,
|
||||||
player: null,
|
player: null,
|
||||||
playing: false,
|
playing: false,
|
||||||
progressInterval: null,
|
progressInterval: null,
|
||||||
playerTime: 0
|
playerTime: 0,
|
||||||
|
preconnected: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
posterSources () {
|
||||||
|
const webpSource = {
|
||||||
|
...this.video.thumbnail,
|
||||||
|
srcset: this.video.thumbnail.srcset.replaceAll('ytimg.com/vi/', 'ytimg.com/vi_webp/').replace(/.png|.jpg|.jpeg/g, '.webp')
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
webp: webpSource,
|
||||||
|
jpeg: this.video.thumbnail
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
frameId () {
|
frameId () {
|
||||||
return `youtube-player-${this.video.id}-${this._uid}`
|
return `youtube-player-${this.video.id}-${this._uid}`
|
||||||
},
|
},
|
||||||
|
|
@ -149,7 +235,14 @@ export default {
|
||||||
// Set frame ID here so that it's the same when Youtube API looks for it
|
// Set frame ID here so that it's the same when Youtube API looks for it
|
||||||
// this.frameId = `youtube-bg-${this._uid}`
|
// this.frameId = `youtube-bg-${this._uid}`
|
||||||
|
|
||||||
this.initializePlayer()
|
this.detectAutoplay()
|
||||||
|
.then( ({ willAutoplay }) => {
|
||||||
|
// If we're allowed to autoplay
|
||||||
|
// then start loading the player
|
||||||
|
if ( willAutoplay === true ) {
|
||||||
|
this.startPlayerLoad()
|
||||||
|
}
|
||||||
|
})
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
scrollRow ( timestamp ) {
|
scrollRow ( timestamp ) {
|
||||||
|
|
@ -166,21 +259,97 @@ export default {
|
||||||
|
|
||||||
timestampsScroller.scroll({ left: newScrollPosition, behavior: 'smooth' })
|
timestampsScroller.scroll({ left: newScrollPosition, behavior: 'smooth' })
|
||||||
},
|
},
|
||||||
seekTo (timestampInSeconds) {
|
|
||||||
|
async detectAutoplay () {
|
||||||
|
|
||||||
|
if ( !process.client ) return { willAutoplay: false }
|
||||||
|
|
||||||
|
const { default: canAutoPlay } = await import('can-autoplay')
|
||||||
|
|
||||||
|
const willAutoplay = await canAutoPlay.video()
|
||||||
|
// const willAutoplayMuted = await canAutoPlay.video({ muted: true, inline: true })
|
||||||
|
|
||||||
|
return {
|
||||||
|
willAutoplay: willAutoplay.result
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async seekTo (timestampInSeconds) {
|
||||||
|
|
||||||
|
if (this.playerLoaded === false) {
|
||||||
|
await this.startPlayerLoad()
|
||||||
|
}
|
||||||
|
|
||||||
this.player.seekTo(timestampInSeconds)
|
this.player.seekTo(timestampInSeconds)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// async playVideo() {
|
||||||
|
|
||||||
|
// if (this.playerLoaded === false) {
|
||||||
|
// await this.startPlayerLoad()
|
||||||
|
// }
|
||||||
|
|
||||||
|
// this.$nextTick(() => {
|
||||||
|
// // console.log('this.player', JSON.stringify(this.player))
|
||||||
|
// this.player.playVideo()
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
|
||||||
|
addPrefetch(kind, url, as) {
|
||||||
|
// console.log('prefetching', url)
|
||||||
|
|
||||||
|
const linkEl = document.createElement('link')
|
||||||
|
|
||||||
|
linkEl.rel = kind
|
||||||
|
linkEl.href = url
|
||||||
|
|
||||||
|
if (as) {
|
||||||
|
linkEl.as = as;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.head.append(linkEl)
|
||||||
|
},
|
||||||
|
|
||||||
|
warmConnections() {
|
||||||
|
if (this.preconnected) return
|
||||||
|
|
||||||
|
// The iframe document and most of its subresources come right off youtube.com
|
||||||
|
this.addPrefetch('preconnect', 'https://www.youtube-nocookie.com')
|
||||||
|
// The botguard script is fetched off from google.com
|
||||||
|
this.addPrefetch('preconnect', 'https://www.google.com')
|
||||||
|
|
||||||
|
// Not certain if these ad related domains are in the critical path. Could verify with domain-specific throttling.
|
||||||
|
this.addPrefetch('preconnect', 'https://googleads.g.doubleclick.net')
|
||||||
|
this.addPrefetch('preconnect', 'https://static.doubleclick.net')
|
||||||
|
|
||||||
|
this.preconnected = true
|
||||||
|
},
|
||||||
|
|
||||||
|
async startPlayerLoad () {
|
||||||
|
this.playerLoaded = true
|
||||||
|
|
||||||
|
await this.initializePlayer()
|
||||||
|
|
||||||
|
// this.$nextTick(() => {
|
||||||
|
// this.initializePlayer()
|
||||||
|
// })
|
||||||
|
},
|
||||||
|
|
||||||
async initializePlayer () {
|
async initializePlayer () {
|
||||||
// console.log('Youtube Embed API Ready')
|
// console.log('Youtube Embed API Ready')
|
||||||
|
|
||||||
// Clear player
|
// Clear player
|
||||||
this.player = null
|
this.player = null
|
||||||
|
|
||||||
// Clear tprogession interval
|
// Clear progession interval
|
||||||
clearInterval(this.progressInterval)
|
clearInterval(this.progressInterval)
|
||||||
|
|
||||||
// If there are no timestamps
|
// If there are no timestamps
|
||||||
// then stop
|
// then stop
|
||||||
if (!this.hasTimestamps) return
|
if (!this.hasTimestamps) {
|
||||||
|
this.playerLoaded = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (typeof YT === 'undefined') {
|
if (typeof YT === 'undefined') {
|
||||||
await this.initializeApi()
|
await this.initializeApi()
|
||||||
|
|
@ -204,18 +373,30 @@ export default {
|
||||||
// console.log('frame', this.$refs['frame'])
|
// console.log('frame', this.$refs['frame'])
|
||||||
// console.log('frame id', this.$refs['frame'].id)
|
// console.log('frame id', this.$refs['frame'].id)
|
||||||
|
|
||||||
this.player = new YT.Player(this.$refs['frame'].id, {
|
const onReady = () => new Promise( resolve => {
|
||||||
events: {
|
|
||||||
'onReady': this.onPlayerReady,
|
|
||||||
'onStateChange': event => {
|
|
||||||
// console.log('state changed', event)
|
|
||||||
|
|
||||||
const stateHandler = stateHandlers[String(event.data)]
|
this.player = new YT.Player(this.$refs['frame'].id, {
|
||||||
// console.log('stateHandler', stateHandler)
|
events: {
|
||||||
stateHandler(event)
|
'onReady': readyEvent => {
|
||||||
|
this.onPlayerReady( readyEvent )
|
||||||
|
|
||||||
|
resolve( readyEvent )
|
||||||
|
},
|
||||||
|
'onStateChange': event => {
|
||||||
|
// console.log('state changed', event)
|
||||||
|
|
||||||
|
const stateHandler = stateHandlers[String(event.data)]
|
||||||
|
// console.log('stateHandler', stateHandler)
|
||||||
|
stateHandler(event)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
await onReady()
|
||||||
|
|
||||||
|
// console.log('Youtube Player API ready', JSON.stringify(this.player))
|
||||||
},
|
},
|
||||||
initializeApi () {
|
initializeApi () {
|
||||||
return new Promise( resolve => {
|
return new Promise( resolve => {
|
||||||
|
|
@ -257,7 +438,7 @@ export default {
|
||||||
clearInterval(this.progressInterval)
|
clearInterval(this.progressInterval)
|
||||||
},
|
},
|
||||||
onPlayerReady (event) {
|
onPlayerReady (event) {
|
||||||
console.log('Player is ready', this.player)
|
console.log('Player is ready', event, this.player )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
60
functions/story-image-axis-svg.js
Normal file
60
functions/story-image-axis-svg.js
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
exports.handler = async function(event, context) {
|
||||||
|
const {
|
||||||
|
//path, // Path parameter
|
||||||
|
//httpMethod, // Incoming request’s method name
|
||||||
|
// headers, // {Incoming request headers}
|
||||||
|
queryStringParameters, // {query string parameters }
|
||||||
|
// body, // A JSON string of the request payload
|
||||||
|
// isBase64Encoded, // A boolean flag to indicate if the applicable request payload is Base64-encode
|
||||||
|
} = event
|
||||||
|
|
||||||
|
// console.log('queryStringParameters', queryStringParameters)
|
||||||
|
|
||||||
|
const {
|
||||||
|
width = 200,
|
||||||
|
height = 100,
|
||||||
|
heading = 'Does It ARM'
|
||||||
|
} = queryStringParameters
|
||||||
|
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'image/svg+xml',
|
||||||
|
},
|
||||||
|
body: /* html */`
|
||||||
|
<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='100%' viewBox='0 0 ${ width } ${ height }'>
|
||||||
|
<rect fill='#191a1d' width='${ width }' height='${ height }'/>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id='a' gradientUnits='userSpaceOnUse' x1='0' x2='0' y1='0' y2='${ height }'>
|
||||||
|
<stop offset='0' stop-color='#191a1d'/>
|
||||||
|
<stop offset='${ height }' stop-color='#292d31'/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id='b' gradientUnits='userSpaceOnUse' x1='0' y1='0' x2='0' y2='${ height }'>
|
||||||
|
<stop offset='0' stop-color='#34393f' stop-opacity='0'/>
|
||||||
|
<stop offset='${ height }' stop-color='#34393f' stop-opacity='${ height }'/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id='c' gradientUnits='userSpaceOnUse' x1='0' y1='0' x2='${ width }' y2='${ width }'>
|
||||||
|
<stop offset='0' stop-color='#34393f' stop-opacity='0'/>
|
||||||
|
<stop offset='${ height }' stop-color='#34393f' stop-opacity='${ height }'/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x='0' y='0' fill='url(#a)' width='${ width }' height='${ height }'/>
|
||||||
|
<g fill-opacity='0.5'>
|
||||||
|
<polygon fill='url(#b)' points='0 ${ height } 0 0 0 ${ width } 0'/>
|
||||||
|
<polygon fill='url(#c)' points='${ width } ${ height } ${ width } 0 0 0'/>
|
||||||
|
</g>
|
||||||
|
<foreignObject x="${ width * 0.1 }" y="${ height * 0.1 }" width="${ width * 0.8 }" height="${ height * 0.8 }">
|
||||||
|
<div
|
||||||
|
xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
style="
|
||||||
|
font-size: 1px;
|
||||||
|
color: white;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu, roboto, noto, arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
"
|
||||||
|
>${ heading }</div>
|
||||||
|
</foreignObject>
|
||||||
|
</svg>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,10 @@
|
||||||
// App Data that is derived from other app data
|
// App Data that is derived from other app data
|
||||||
|
|
||||||
|
export function isDevice ( listing ) {
|
||||||
|
if ( !listing.hasOwnProperty('endpoint') ) return false
|
||||||
|
|
||||||
|
return listing.endpoint.startsWith('/device/')
|
||||||
|
}
|
||||||
|
|
||||||
export function isVideo ( app ) {
|
export function isVideo ( app ) {
|
||||||
return app.hasOwnProperty('thumbnail') && app.hasOwnProperty('timestamps')
|
return app.hasOwnProperty('thumbnail') && app.hasOwnProperty('timestamps')
|
||||||
|
|
@ -13,6 +18,10 @@ export function getAppType ( app ) {
|
||||||
return 'video'
|
return 'video'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( isDevice( app ) ) {
|
||||||
|
return 'device'
|
||||||
|
}
|
||||||
|
|
||||||
if(app.category !== Object(app.category)) {
|
if(app.category !== Object(app.category)) {
|
||||||
console.warn('app has no categories', app)
|
console.warn('app has no categories', app)
|
||||||
|
|
||||||
|
|
@ -47,4 +56,10 @@ export function getVideoEndpoint ( video ) {
|
||||||
return `/tv/${video.slug}`
|
return `/tv/${video.slug}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getRouteType ( routeString ) {
|
||||||
|
// Remove first slash and split by remaining
|
||||||
|
// slashes to get first part of route
|
||||||
|
const [ routeType ] = routeString.substring(1).split('/')
|
||||||
|
|
||||||
|
return routeType
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -581,7 +581,7 @@ export default class AppFilesScanner {
|
||||||
} )
|
} )
|
||||||
})
|
})
|
||||||
|
|
||||||
const scanTimeoutSeconds = 30
|
const scanTimeoutSeconds = 60
|
||||||
|
|
||||||
// Scan for archives
|
// Scan for archives
|
||||||
await Promise.all( this.files.map( ( file, scanIndex ) => {
|
await Promise.all( this.files.map( ( file, scanIndex ) => {
|
||||||
|
|
|
||||||
77
helpers/app-store/genres.js
Normal file
77
helpers/app-store/genres.js
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
// Source 1: https://42matters.com/docs/app-market-data/ios/apps/appstore-genres
|
||||||
|
export default {
|
||||||
|
'0': ['Mobile Software Application'],
|
||||||
|
'6018': ['Book'],
|
||||||
|
'6000': ['Business'],
|
||||||
|
'6022': ['Catalogs'],
|
||||||
|
'6017': ['Education'],
|
||||||
|
'6016': ['Entertainment'],
|
||||||
|
'6015': ['Finance'],
|
||||||
|
'6023': ['Food & Drink'],
|
||||||
|
'6014': ['Games'],
|
||||||
|
'7001': ['Games', 'Action'],
|
||||||
|
'7002': ['Games', 'Adventure'],
|
||||||
|
'7003': ['Games', 'Arcade'],
|
||||||
|
'7004': ['Games', 'Board'],
|
||||||
|
'7005': ['Games', 'Card'],
|
||||||
|
'7006': ['Games', 'Casino'],
|
||||||
|
'7007': ['Games', 'Dice'],
|
||||||
|
'7008': ['Games', 'Educational'],
|
||||||
|
'7009': ['Games', 'Family'],
|
||||||
|
'7011': ['Games', 'Music'],
|
||||||
|
'7012': ['Games', 'Puzzle'],
|
||||||
|
'7013': ['Games', 'Racing'],
|
||||||
|
'7014': ['Games', 'Role Playing'],
|
||||||
|
'7015': ['Games', 'Simulation'],
|
||||||
|
'7016': ['Games', 'Sports'],
|
||||||
|
'7017': ['Games', 'Strategy'],
|
||||||
|
'7018': ['Games', 'Trivia'],
|
||||||
|
'7019': ['Games', 'Word'],
|
||||||
|
'6013': ['Health & Fitness'],
|
||||||
|
'6012': ['Lifestyle'],
|
||||||
|
'6020': ['Medical'],
|
||||||
|
'6011': ['Music'],
|
||||||
|
'6010': ['Navigation'],
|
||||||
|
'6009': ['News'],
|
||||||
|
'6021': ['Newsstand'],
|
||||||
|
'6008': ['Photo & Video'],
|
||||||
|
'6007': ['Productivity'],
|
||||||
|
'6006': ['Reference'],
|
||||||
|
'6024': ['Shopping'],
|
||||||
|
'6005': ['Social Networking'],
|
||||||
|
'6004': ['Sports'],
|
||||||
|
'6025': ['Stickers'],
|
||||||
|
'6003': ['Travel'],
|
||||||
|
'6002': ['Utilities'],
|
||||||
|
'6001': ['Weather'],
|
||||||
|
'6026': ['Developer Tools'],
|
||||||
|
'6027': ['Graphics & Design'],
|
||||||
|
'13001': ['Newsstand', 'News & Politics'],
|
||||||
|
'13002': ['Newsstand', 'Fashion & Style'],
|
||||||
|
'13003': ['Newsstand', 'Home & Garden'],
|
||||||
|
'13004': ['Newsstand', 'Outdoors & Nature'],
|
||||||
|
'13005': ['Newsstand', 'Sports & Leisure'],
|
||||||
|
'13006': ['Newsstand', 'Automotive'],
|
||||||
|
'13007': ['Newsstand', 'Arts & Photography'],
|
||||||
|
'13008': ['Newsstand', 'Brides & Weddings'],
|
||||||
|
'13009': ['Newsstand', 'Business & Investing'],
|
||||||
|
'13010': ['Newsstand', 'Children\'s Magazines'],
|
||||||
|
'13011': ['Newsstand', 'Computers & Internet'],
|
||||||
|
'13012': ['Newsstand', 'Cooking, Food & Drink'],
|
||||||
|
'13013': ['Newsstand', 'Crafts & Hobbies'],
|
||||||
|
'13014': ['Newsstand', 'Electronics & Audio'],
|
||||||
|
'13015': ['Newsstand', 'Entertainment'],
|
||||||
|
'13017': ['Newsstand', 'Health, Mind & Body'],
|
||||||
|
'13018': ['Newsstand', 'History'],
|
||||||
|
'13019': ['Newsstand', 'Literary Magazines & Journals'],
|
||||||
|
'13020': ['Newsstand', 'Men\'s Interest'],
|
||||||
|
'13021': ['Newsstand', 'Movies & Music'],
|
||||||
|
'13023': ['Newsstand', 'Parenting & Family'],
|
||||||
|
'13024': ['Newsstand', 'Pets'],
|
||||||
|
'13025': ['Newsstand', 'Professional & Trade'],
|
||||||
|
'13026': ['Newsstand', 'Regional News'],
|
||||||
|
'13027': ['Newsstand', 'Science'],
|
||||||
|
'13028': ['Newsstand', 'Teens'],
|
||||||
|
'13029': ['Newsstand', 'Travel & Regional'],
|
||||||
|
'13030': ['Newsstand', 'Women\'s Interest'],
|
||||||
|
}
|
||||||
|
|
@ -1,24 +1,19 @@
|
||||||
|
|
||||||
import { promises as fs } from 'fs'
|
import { promises as fs } from 'fs'
|
||||||
import MarkdownIt from 'markdown-it'
|
import MarkdownIt from 'markdown-it'
|
||||||
import slugify from 'slugify'
|
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
import statuses, { getStatusName } from './statuses'
|
import statuses, { getStatusName } from './statuses'
|
||||||
|
import appStoreGenres from './app-store/genres.js'
|
||||||
|
import { findCategoryForTagsSet } from './categories.js'
|
||||||
import parseDate from './parse-date'
|
import parseDate from './parse-date'
|
||||||
import { eitherMatches } from './matching.js'
|
import { eitherMatches } from './matching.js'
|
||||||
import { getAppEndpoint } from './app-derived'
|
import { getAppEndpoint } from './app-derived'
|
||||||
|
import { makeSlug } from './slug.js'
|
||||||
|
|
||||||
|
|
||||||
const md = new MarkdownIt()
|
const md = new MarkdownIt()
|
||||||
|
|
||||||
|
|
||||||
const makeSlug = name => slugify(name, {
|
|
||||||
lower: true,
|
|
||||||
strict: true
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
const getTokenLinks = function ( childTokens ) {
|
const getTokenLinks = function ( childTokens ) {
|
||||||
|
|
||||||
const tokenList = []
|
const tokenList = []
|
||||||
|
|
@ -98,6 +93,41 @@ const lookForLastUpdated = function (app, commits) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fetch list of genres for each bundle
|
||||||
|
async function fetchBundleGenres () {
|
||||||
|
const genresJsonUrl = `${process.env.VFUNCTIONS_URL}/app-store/listings-sheet?fields=bundleId,genreIds`
|
||||||
|
|
||||||
|
return await axios.get( genresJsonUrl )
|
||||||
|
.then( response => {
|
||||||
|
return new Map( response.data.apps )
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
// handle error
|
||||||
|
console.warn('Error fetching bundle genres', error)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function generateTagsSetFromGenres( bundleId, bundleGenres ) {
|
||||||
|
// If we don't have this bundleID
|
||||||
|
// then return empty
|
||||||
|
if ( !bundleGenres.has( bundleId ) ) return new Set()
|
||||||
|
|
||||||
|
const genres = new Set()
|
||||||
|
|
||||||
|
bundleGenres.get( bundleId ).split(',').forEach( genreId => {
|
||||||
|
if ( !appStoreGenres.hasOwnProperty(genreId) ) {
|
||||||
|
console.warn('Not known genre ID', genreId)
|
||||||
|
}
|
||||||
|
|
||||||
|
appStoreGenres[genreId].forEach( genreName => {
|
||||||
|
genres.add(genreName)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
return genres
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export default async function () {
|
export default async function () {
|
||||||
|
|
||||||
|
|
@ -113,6 +143,7 @@ export default async function () {
|
||||||
// Save commits to file just in case
|
// Save commits to file just in case
|
||||||
// await fs.writeFile('./commits-data.json', JSON.stringify(commits))
|
// await fs.writeFile('./commits-data.json', JSON.stringify(commits))
|
||||||
|
|
||||||
|
const bundleGenres = await fetchBundleGenres()
|
||||||
|
|
||||||
const scanListMap = new Map()
|
const scanListMap = new Map()
|
||||||
|
|
||||||
|
|
@ -154,10 +185,28 @@ export default async function () {
|
||||||
href: 'https://doesitarm.com/apple-silicon-app-test/',
|
href: 'https://doesitarm.com/apple-silicon-app-test/',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// console.log('appScan', appScan)
|
||||||
|
|
||||||
|
const tags = generateTagsSetFromGenres( appScan.bundleIdentifier, bundleGenres )
|
||||||
|
|
||||||
|
// Move productivity tag to the end since it's a more generic tag
|
||||||
|
if ( tags.has('Productivity') ) {
|
||||||
|
tags.delete('Productivity')
|
||||||
|
tags.add('Productivity')
|
||||||
|
}
|
||||||
|
|
||||||
|
const foundCategory = findCategoryForTagsSet( tags )
|
||||||
|
|
||||||
|
const category = {
|
||||||
|
label: foundCategory ? foundCategory.label : undefined,
|
||||||
|
slug: foundCategory ? foundCategory.slug : 'uncategorized'
|
||||||
|
}
|
||||||
|
|
||||||
// Add to scanned app list
|
// Add to scanned app list
|
||||||
scanListMap.set( appSlug, {
|
scanListMap.set( appSlug, {
|
||||||
name: appName,
|
name: appName,
|
||||||
aliases: appScan['aliases'],
|
aliases: appScan['aliases'],
|
||||||
|
bundleId: appScan.bundleIdentifier,
|
||||||
status: statusName,
|
status: statusName,
|
||||||
lastUpdated: parseDate( appScan['Date'] ),
|
lastUpdated: parseDate( appScan['Date'] ),
|
||||||
// url,
|
// url,
|
||||||
|
|
@ -169,9 +218,8 @@ export default async function () {
|
||||||
},
|
},
|
||||||
slug: appSlug
|
slug: appSlug
|
||||||
}),
|
}),
|
||||||
category: {
|
category,
|
||||||
slug: 'uncategorized'
|
tags: Array.from(tags),
|
||||||
},
|
|
||||||
relatedLinks
|
relatedLinks
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -221,10 +269,7 @@ export default async function () {
|
||||||
|
|
||||||
if (isHeading && token.type === 'inline') {
|
if (isHeading && token.type === 'inline') {
|
||||||
categoryTitle = token.content
|
categoryTitle = token.content
|
||||||
categorySlug = slugify(token.content, {
|
categorySlug = makeSlug( token.content )
|
||||||
lower: true,
|
|
||||||
strict: true
|
|
||||||
})
|
|
||||||
|
|
||||||
// appList[categorySlug] = []
|
// appList[categorySlug] = []
|
||||||
}
|
}
|
||||||
|
|
@ -236,14 +281,27 @@ export default async function () {
|
||||||
|
|
||||||
const [ name, url ] = link.substring(1, link.length-1).split('](')
|
const [ name, url ] = link.substring(1, link.length-1).split('](')
|
||||||
|
|
||||||
|
let bundleId = null
|
||||||
|
let tags = []
|
||||||
|
|
||||||
// Search for this app in the scanList and remove duplicates
|
// Search for this app in the scanList and remove duplicates
|
||||||
scanListMap.forEach( ( scannedApp, key ) => {
|
scanListMap.forEach( ( scannedApp, key ) => {
|
||||||
|
|
||||||
for ( const alias of scannedApp.aliases) {
|
for ( const alias of scannedApp.aliases ) {
|
||||||
// console.log( key, alias, name, eitherMatches(alias, name) )
|
// console.log( key, alias, name, eitherMatches(alias, name) )
|
||||||
|
|
||||||
if ( eitherMatches(alias, name) ) {
|
if ( eitherMatches(alias, name) ) {
|
||||||
console.log(`Removing ${alias} from scanned apps`)
|
// If we don't have a bundleId yet
|
||||||
|
// Set this app's bundleId
|
||||||
|
if ( bundleId === null ) { bundleId = scannedApp.bundleId }
|
||||||
|
|
||||||
|
// Merge this scanned app's tags into the matching app
|
||||||
|
tags = Array.from(new Set([
|
||||||
|
...tags,
|
||||||
|
...scannedApp.tags
|
||||||
|
]))
|
||||||
|
|
||||||
|
console.log(`Merged ${alias} (${scannedApp.bundleId}) from scanned apps into ${name} from README`)
|
||||||
scanListMap.delete( key )
|
scanListMap.delete( key )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -285,15 +343,22 @@ export default async function () {
|
||||||
appList.push({
|
appList.push({
|
||||||
name,
|
name,
|
||||||
status,
|
status,
|
||||||
|
bundleId,
|
||||||
lastUpdated,
|
lastUpdated,
|
||||||
// url,
|
// url,
|
||||||
text,
|
text,
|
||||||
slug: appSlug,
|
slug: appSlug,
|
||||||
endpoint,
|
endpoint,
|
||||||
category,
|
category,
|
||||||
|
tags,
|
||||||
// content: token.content,
|
// content: token.content,
|
||||||
relatedLinks
|
relatedLinks,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// if ( tags.length > 1 ) {
|
||||||
|
// console.log('tags', name, bundleId, tags)
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// appList[categorySlug]
|
// appList[categorySlug]
|
||||||
|
|
|
||||||
33
helpers/build-device-list.js
Normal file
33
helpers/build-device-list.js
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
import axios from 'axios'
|
||||||
|
|
||||||
|
import { makeSlug } from './slug.js'
|
||||||
|
|
||||||
|
export function getDeviceEndpoint ( slug ) {
|
||||||
|
return `/device/${ slug }`
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export default async function () {
|
||||||
|
|
||||||
|
const devicesJsonUrl = `${process.env.VFUNCTIONS_URL}/api/devices`
|
||||||
|
|
||||||
|
const rawDeviceList = await axios.get(devicesJsonUrl)
|
||||||
|
.then( response => {
|
||||||
|
return response.data
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
// handle error
|
||||||
|
console.warn('Error fetching device list', error)
|
||||||
|
})
|
||||||
|
|
||||||
|
return rawDeviceList.filter( device => ( device.enabled !== 'no' ) ).map( device => {
|
||||||
|
const slug = makeSlug( device.name )
|
||||||
|
|
||||||
|
return {
|
||||||
|
...device,
|
||||||
|
slug,
|
||||||
|
endpoint: getDeviceEndpoint( slug ),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -1,10 +1,8 @@
|
||||||
|
|
||||||
import { promises as fs } from 'fs'
|
|
||||||
import slugify from 'slugify'
|
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
// import { statuses } from './build-app-list'
|
// import { statuses } from './build-app-list'
|
||||||
import { getAppEndpoint } from './app-derived'
|
import { getAppEndpoint } from './app-derived'
|
||||||
|
import { makeSlug } from './slug.js'
|
||||||
|
|
||||||
|
|
||||||
// console.log('process.env.GAMES_SOURCE', process.env.GAMES_SOURCE)
|
// console.log('process.env.GAMES_SOURCE', process.env.GAMES_SOURCE)
|
||||||
|
|
@ -101,10 +99,7 @@ export default async function () {
|
||||||
if (isPlayable(game) && statusesTranslations.hasOwnProperty(environmentName(game)) === false) continue
|
if (isPlayable(game) && statusesTranslations.hasOwnProperty(environmentName(game)) === false) continue
|
||||||
|
|
||||||
// Generate slug
|
// Generate slug
|
||||||
const slug = slugify(game.Games, {
|
const slug = makeSlug( game.Games )
|
||||||
lower: true,
|
|
||||||
strict: true
|
|
||||||
})
|
|
||||||
|
|
||||||
// Find index of game is list so far
|
// Find index of game is list so far
|
||||||
const gameIndex = gameList.findIndex(game => {
|
const gameIndex = gameList.findIndex(game => {
|
||||||
|
|
|
||||||
|
|
@ -184,14 +184,15 @@ class MakeHomebrewList {
|
||||||
|
|
||||||
formulaeRow.name = formulaeRow.fullName.split(' ')[0]
|
formulaeRow.name = formulaeRow.fullName.split(' ')[0]
|
||||||
|
|
||||||
formulaeRow.links = tr.querySelectorAll('a').map( a => {
|
formulaeRow.links = []
|
||||||
const href = a.getAttribute('href')
|
// formulaeRow.links = tr.querySelectorAll('a').map( a => {
|
||||||
return {
|
// const href = a.getAttribute('href')
|
||||||
href,
|
// return {
|
||||||
label: a.rawText,
|
// href,
|
||||||
// a
|
// label: a.rawText,
|
||||||
}
|
// // a
|
||||||
})
|
// }
|
||||||
|
// })
|
||||||
|
|
||||||
// if (formulaeRow.links.length !== 0) console.log('formulaeRow', formulaeRow.links)
|
// if (formulaeRow.links.length !== 0) console.log('formulaeRow', formulaeRow.links)
|
||||||
|
|
||||||
|
|
@ -280,7 +281,7 @@ class MakeHomebrewList {
|
||||||
category
|
category
|
||||||
}),//`/formula/${slug}`,
|
}),//`/formula/${slug}`,
|
||||||
category,
|
category,
|
||||||
content: formulae.comments,
|
content: '',//formulae.comments,
|
||||||
relatedLinks: [
|
relatedLinks: [
|
||||||
{
|
{
|
||||||
href: `https://formulae.brew.sh/formula/${formulae.name}`,
|
href: `https://formulae.brew.sh/formula/${formulae.name}`,
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,33 @@
|
||||||
|
|
||||||
import slugify from 'slugify'
|
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
import { matchesWholeWord } from './matching.js'
|
import { fuzzyMatchesWholeWord } from './matching.js'
|
||||||
import { byTimeThenNull } from './sort-list.js'
|
import { byTimeThenNull } from './sort-list.js'
|
||||||
import { getVideoEndpoint } from './app-derived.js'
|
import { getVideoEndpoint } from './app-derived.js'
|
||||||
import parseDate from './parse-date'
|
import parseDate from './parse-date'
|
||||||
|
import { makeSlug } from './slug.js'
|
||||||
|
|
||||||
|
|
||||||
|
const inTimestamps = ( name, video ) => {
|
||||||
|
// If this is empty
|
||||||
|
// then reutrn false
|
||||||
|
if ( video.timestamps.length === 0 ) return false
|
||||||
|
|
||||||
|
for ( const timestamp of video.timestamps ) {
|
||||||
|
if ( fuzzyMatchesWholeWord(name, timestamp.fullText ) ) return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
const videoFeaturesApp = function (app, video) {
|
const videoFeaturesApp = function (app, video) {
|
||||||
const appFuzzyName = app.name.toLowerCase()
|
const appFuzzyName = app.name.toLowerCase()
|
||||||
if (video.title.toLowerCase().includes(appFuzzyName)) return true
|
|
||||||
|
|
||||||
const appIsInTimestamps = video.timestamps.map( timestamp => timestamp.fullText.toLowerCase()).includes(appFuzzyName)
|
if ( fuzzyMatchesWholeWord(appFuzzyName, video.title ) ) return true
|
||||||
|
|
||||||
if (appIsInTimestamps) return true
|
if ( inTimestamps(appFuzzyName, video) ) return true
|
||||||
|
|
||||||
if (matchesWholeWord(appFuzzyName, video.description.toLowerCase())) return true
|
if ( fuzzyMatchesWholeWord(appFuzzyName, video.description ) ) return true
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
@ -63,7 +75,7 @@ const generateVideoTags = function ( video ) {
|
||||||
if (videoTags.has(tagKey)) break
|
if (videoTags.has(tagKey)) break
|
||||||
|
|
||||||
// Check title
|
// Check title
|
||||||
if (matchesWholeWord(tagWord.toLowerCase(), video.title.toLowerCase())) {
|
if (fuzzyMatchesWholeWord( tagWord, video.title )) {
|
||||||
videoTags.add(tagKey)
|
videoTags.add(tagKey)
|
||||||
|
|
||||||
// console.log(video.title, 'has', tagKey, 'tag')
|
// console.log(video.title, 'has', tagKey, 'tag')
|
||||||
|
|
@ -73,7 +85,7 @@ const generateVideoTags = function ( video ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check description
|
// Check description
|
||||||
if (matchesWholeWord(tagWord.toLowerCase(), video.description.toLowerCase())) {
|
if (fuzzyMatchesWholeWord( tagWord, video.description )) {
|
||||||
videoTags.add(tagKey)
|
videoTags.add(tagKey)
|
||||||
|
|
||||||
// console.log(video.title, 'has', tagKey, 'tag')
|
// console.log(video.title, 'has', tagKey, 'tag')
|
||||||
|
|
@ -84,23 +96,31 @@ const generateVideoTags = function ( video ) {
|
||||||
return videoTags
|
return videoTags
|
||||||
}
|
}
|
||||||
|
|
||||||
const makeThumbnailData = function ( thumbnails ) {
|
const makeThumbnailData = function ( thumbnails, widthLimit = null ) {
|
||||||
|
|
||||||
|
const thumbnailEntries = Object.entries( thumbnails )
|
||||||
|
const srcsetArray = []
|
||||||
|
|
||||||
let maxWidth = 0
|
let maxWidth = 0
|
||||||
Object.entries( thumbnails ).forEach(([thumbnailKey, thumbnail]) => {
|
|
||||||
|
thumbnailEntries.forEach(([thumbnailKey, thumbnail]) => {
|
||||||
|
if ( widthLimit !== null && widthLimit < thumbnail.width) return
|
||||||
|
|
||||||
|
// If this width is more than known maxWidth
|
||||||
|
// then set maxWidth
|
||||||
if (thumbnail.width > maxWidth) maxWidth = thumbnail.width
|
if (thumbnail.width > maxWidth) maxWidth = thumbnail.width
|
||||||
|
|
||||||
|
// Add this width to our srcset
|
||||||
|
srcsetArray.push(`${thumbnail.url} ${thumbnail.width}w`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const sizes = `(max-width: ${maxWidth}px) 100vw, ${maxWidth}px`
|
const sizes = `(max-width: ${maxWidth}px) 100vw, ${maxWidth}px`
|
||||||
|
const srcset = srcsetArray.join(', ')
|
||||||
const srcset = Object.entries( thumbnails ).map(([thumbnailKey, thumbnail]) => {
|
|
||||||
// console.log('thumbnail', thumbnail)
|
|
||||||
return `${thumbnail.url} ${thumbnail.width}w`
|
|
||||||
}).join(', ')
|
|
||||||
|
|
||||||
|
|
||||||
const src = thumbnails.default.url
|
const src = thumbnails.default.url
|
||||||
|
|
||||||
|
// console.log('srcsetArray', srcsetArray)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
sizes,
|
sizes,
|
||||||
srcset,
|
srcset,
|
||||||
|
|
@ -110,8 +130,10 @@ const makeThumbnailData = function ( thumbnails ) {
|
||||||
|
|
||||||
export default async function ( applist ) {
|
export default async function ( applist ) {
|
||||||
|
|
||||||
|
const videosJsonUrl = `${process.env.VFUNCTIONS_URL}/videos.json`
|
||||||
|
|
||||||
// Fetch Commits
|
// Fetch Commits
|
||||||
const response = await axios.get(process.env.VIDEO_SOURCE)
|
const response = await axios.get( videosJsonUrl )
|
||||||
// Extract commit from response data
|
// Extract commit from response data
|
||||||
const fetchedVideos = response.data
|
const fetchedVideos = response.data
|
||||||
|
|
||||||
|
|
@ -128,10 +150,7 @@ export default async function ( applist ) {
|
||||||
if (fetchedVideos[videoId].title === 'Deleted video') continue
|
if (fetchedVideos[videoId].title === 'Deleted video') continue
|
||||||
|
|
||||||
// Build video slug
|
// Build video slug
|
||||||
const slug = slugify(`${fetchedVideos[videoId].title}-i-${videoId}`, {
|
const slug = makeSlug( `${fetchedVideos[videoId].title}-i-${videoId}` )
|
||||||
lower: true,
|
|
||||||
strict: true
|
|
||||||
})
|
|
||||||
|
|
||||||
const apps = []
|
const apps = []
|
||||||
// Generate new tag set based on api data
|
// Generate new tag set based on api data
|
||||||
|
|
@ -168,7 +187,7 @@ export default async function ( applist ) {
|
||||||
tags: Array.from(tags),
|
tags: Array.from(tags),
|
||||||
timestamps: fetchedVideos[videoId].timestamps,
|
timestamps: fetchedVideos[videoId].timestamps,
|
||||||
// thumbnails: fetchedVideos[videoId].rawData.snippet.thumbnails,
|
// thumbnails: fetchedVideos[videoId].rawData.snippet.thumbnails,
|
||||||
thumbnail: makeThumbnailData( fetchedVideos[videoId].rawData.snippet.thumbnails ),
|
thumbnail: makeThumbnailData( fetchedVideos[videoId].rawData.snippet.thumbnails, 700 ),
|
||||||
endpoint: getVideoEndpoint({
|
endpoint: getVideoEndpoint({
|
||||||
slug
|
slug
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,40 @@
|
||||||
// Universal JS imports only
|
// Universal JS imports only
|
||||||
import slugify from 'slugify'
|
import { makeSlug } from './slug.js'
|
||||||
|
|
||||||
|
|
||||||
export function makeCategorySlug ( categoryName ) {
|
export function makeCategorySlug ( categoryName ) {
|
||||||
return slugify(categoryName, {
|
return makeSlug( categoryName )
|
||||||
lower: true,
|
|
||||||
strict: true
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const categoryMap = new Map([
|
||||||
|
[ 'Business', 2 ],
|
||||||
|
[ 'Entertainment', 5 ],
|
||||||
|
[ 'Finance', 2 ],
|
||||||
|
[ 'Music', 6 ],
|
||||||
|
[ 'Photo & Video', 7 ],
|
||||||
|
[ 'Productivity', 2 ],
|
||||||
|
[ 'Utilities', 12 ],
|
||||||
|
[ 'Graphics & Design', 7 ],
|
||||||
|
[ 'Developer Tools', 1 ],
|
||||||
|
// [ 'Name', 1 ],
|
||||||
|
|
||||||
|
// Needs work before apps can be assigned games category
|
||||||
|
// so for now 'Games' genre is Entertainment
|
||||||
|
// [ 'Games', 100 ],
|
||||||
|
[ 'Games', 5 ],
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Maps App Store Genre to categort IDS
|
||||||
|
export function getCategoryIdForGenre ( genreName ) {
|
||||||
|
|
||||||
|
// If we don't have this genre mapped
|
||||||
|
// then return nothing
|
||||||
|
if ( !categoryMap.has(genreName) ) return null
|
||||||
|
|
||||||
|
// return this category id mapped to this genre
|
||||||
|
return categoryMap.get( genreName )
|
||||||
|
}
|
||||||
|
|
||||||
// Contains all types of properies to keep data consistent
|
// Contains all types of properies to keep data consistent
|
||||||
export const categoryTemplate = {
|
export const categoryTemplate = {
|
||||||
|
|
@ -107,6 +133,22 @@ export const categories = {
|
||||||
slug: 'vpns-security-and-privacy',
|
slug: 'vpns-security-and-privacy',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
'live-production-and-performance': {
|
||||||
|
id: 11,
|
||||||
|
...categoryTemplate,
|
||||||
|
label: 'Live Production and Performance',
|
||||||
|
pluralLabel: 'Live Production and Performance Software',
|
||||||
|
slug: 'live-production-and-performance',
|
||||||
|
},
|
||||||
|
|
||||||
|
'system-tools': {
|
||||||
|
id: 12,
|
||||||
|
...categoryTemplate,
|
||||||
|
label: 'System Tools',
|
||||||
|
pluralLabel: 'System Tools',
|
||||||
|
slug: 'system-tools',
|
||||||
|
},
|
||||||
|
|
||||||
// Special Lists
|
// Special Lists
|
||||||
'games': {
|
'games': {
|
||||||
id: 100,
|
id: 100,
|
||||||
|
|
@ -144,6 +186,8 @@ export const categories = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const categoriesById = Object.fromEntries( Object.entries( categories ).map( ([ key, category ]) => [category.id, { ...category, key } ] ) )
|
||||||
|
|
||||||
export function getAppCategory (app) {
|
export function getAppCategory (app) {
|
||||||
if (typeof app.category === 'undefined') {
|
if (typeof app.category === 'undefined') {
|
||||||
console.log('app', app)
|
console.log('app', app)
|
||||||
|
|
@ -166,3 +210,23 @@ export function getAppCategory (app) {
|
||||||
|
|
||||||
return categories[app.category.slug]
|
return categories[app.category.slug]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function findCategoryForTagsSet ( tags ) {
|
||||||
|
|
||||||
|
for ( const tag of tags ) {
|
||||||
|
const categoryIdForGenre = getCategoryIdForGenre( tag )
|
||||||
|
|
||||||
|
// Skip non-mapped genres
|
||||||
|
if ( categoryIdForGenre === null ) continue
|
||||||
|
|
||||||
|
// const foundCategory = categoriesById[ categoryIdForGenre ]
|
||||||
|
|
||||||
|
// category.label = foundCategory.label
|
||||||
|
// category.slug = foundCategory.slug
|
||||||
|
|
||||||
|
return categoriesById[ categoryIdForGenre ]
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
|
||||||
37
helpers/devices.js
Normal file
37
helpers/devices.js
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
|
||||||
|
import { getStatusName } from './statuses.js'
|
||||||
|
|
||||||
|
|
||||||
|
export const macAppleSiliconStatuses = new Set([
|
||||||
|
'native',
|
||||||
|
'rosetta'
|
||||||
|
])
|
||||||
|
|
||||||
|
export function deviceSupportsApp ( device, app ) {
|
||||||
|
|
||||||
|
// const statuses = {
|
||||||
|
// '✅': 'native',
|
||||||
|
// '✳️': 'rosetta',
|
||||||
|
// '⏹': 'no-in-progress',
|
||||||
|
// '🚫': 'no',
|
||||||
|
// '🔶': 'unreported',
|
||||||
|
// }
|
||||||
|
const appStatus = getStatusName( app.text )
|
||||||
|
|
||||||
|
if ( device.type === 'intel') {
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( device.type === 'mac-apple-silicon') {
|
||||||
|
|
||||||
|
return macAppleSiliconStatuses.has( appStatus )
|
||||||
|
}
|
||||||
|
|
||||||
|
// if ( device.type === 'ios') {
|
||||||
|
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
485
helpers/lite-youtube.js
Normal file
485
helpers/lite-youtube.js
Normal file
|
|
@ -0,0 +1,485 @@
|
||||||
|
// https://github.com/paulirish/lite-youtube-embed/blob/master/src/lite-yt-embed.js
|
||||||
|
|
||||||
|
// import canAutoPlay from 'can-autoplay'
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A lightweight youtube embed. Still should feel the same to the user, just MUCH faster to initialize and paint.
|
||||||
|
*
|
||||||
|
* Thx to these as the inspiration
|
||||||
|
* https://storage.googleapis.com/amp-vs-non-amp/youtube-lazy.html
|
||||||
|
* https://autoplay-youtube-player.glitch.me/
|
||||||
|
*
|
||||||
|
* Once built it, I also found these:
|
||||||
|
* https://github.com/ampproject/amphtml/blob/master/extensions/amp-youtube (👍👍)
|
||||||
|
* https://github.com/Daugilas/lazyYT
|
||||||
|
* https://github.com/vb/lazyframe
|
||||||
|
*/
|
||||||
|
|
||||||
|
function isObject( maybeObject ) {
|
||||||
|
return maybeObject === Object( maybeObject )
|
||||||
|
}
|
||||||
|
class LiteYTEmbed extends HTMLElement {
|
||||||
|
constructor() {
|
||||||
|
// Always call super first in constructor
|
||||||
|
super()
|
||||||
|
|
||||||
|
this._uid = Date.now()
|
||||||
|
this.$refs = {}
|
||||||
|
|
||||||
|
this.$refs['timestamps-scroll-container'] = this.querySelector('.player-timestamps-wrapper')
|
||||||
|
|
||||||
|
this.playerLoaded = false
|
||||||
|
this.player = null
|
||||||
|
this.playing = false
|
||||||
|
this.progressInterval = null
|
||||||
|
this.playerTime = 0
|
||||||
|
this.preconnected = false
|
||||||
|
|
||||||
|
this.highlightedTimestampElement = null
|
||||||
|
}
|
||||||
|
|
||||||
|
connectedCallback() {
|
||||||
|
this.videoId = this.getAttribute('videoid')
|
||||||
|
this.videoDataScript = this.querySelector('.video-data')
|
||||||
|
this.video = JSON.parse( this.videoDataScript.innerHTML )
|
||||||
|
|
||||||
|
this.playerContainer = this.querySelector('.player-container')
|
||||||
|
this.playerPoster = this.querySelector('.player-poster')
|
||||||
|
|
||||||
|
// console.log('canAutoplay from connectedCallback', canAutoplay)
|
||||||
|
|
||||||
|
console.log('video', this.video)
|
||||||
|
console.log('this.playerContainer', this.playerContainer)
|
||||||
|
|
||||||
|
|
||||||
|
// Start watchers here
|
||||||
|
|
||||||
|
|
||||||
|
// On hover (or tap), warm up the TCP connections we're (likely) about to use.
|
||||||
|
this.playerContainer.addEventListener('pointerover', this.warmConnections, {once: true})
|
||||||
|
|
||||||
|
if ( this.hasTimestamps() ) {
|
||||||
|
// Array.from( this.querySelectorAll(`.player-timestamps [time]`) )
|
||||||
|
|
||||||
|
this.timestamps().map( timestamp => {
|
||||||
|
const timestampButton = this.querySelector(`.player-timestamps [time="${timestamp.time}"]`)
|
||||||
|
|
||||||
|
timestampButton.addEventListener('click', e => {
|
||||||
|
this.seekTo(timestamp.inSeconds)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Once the user clicks, add the real iframe and drop our play button
|
||||||
|
// TODO: In the future we could be like amp-youtube and silently swap in the iframe during idle time
|
||||||
|
// We'd want to only do this for in-viewport or near-viewport ones: https://github.com/ampproject/amphtml/pull/5003
|
||||||
|
this.playerPoster.addEventListener('click', e => {
|
||||||
|
this.startPlayerLoad()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// Mounted
|
||||||
|
|
||||||
|
this.detectAutoplay()
|
||||||
|
.then( ({ willAutoplay }) => {
|
||||||
|
console.log('willAutoplay', willAutoplay)
|
||||||
|
|
||||||
|
// If we're allowed to autoplay
|
||||||
|
// then start loading the player
|
||||||
|
if ( willAutoplay === true ) {
|
||||||
|
this.startPlayerLoad()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// // TODO: Support the the user changing the [videoid] attribute
|
||||||
|
// attributeChangedCallback() {
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a <link rel={preload | preconnect} ...> to the head
|
||||||
|
*/
|
||||||
|
// static c(kind, url, as) {
|
||||||
|
// const linkEl = document.createElement('link')
|
||||||
|
// linkEl.rel = kind
|
||||||
|
// linkEl.href = url
|
||||||
|
// if (as) {
|
||||||
|
// linkEl.as = as
|
||||||
|
// }
|
||||||
|
// document.head.append(linkEl)
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Begin pre-connecting to warm up the iframe load
|
||||||
|
* Since the embed's network requests load within its iframe,
|
||||||
|
* preload/prefetch'ing them outside the iframe will only cause double-downloads.
|
||||||
|
* So, the best we can do is warm up a few connections to origins that are in the critical path.
|
||||||
|
*
|
||||||
|
* Maybe `<link rel=preload as=document>` would work, but it's unsupported: http://crbug.com/593267
|
||||||
|
* But TBH, I don't think it'll happen soon with Site Isolation and split caches adding serious complexity.
|
||||||
|
*/
|
||||||
|
// static warmConnections() {
|
||||||
|
// if (LiteYTEmbed.preconnected) return
|
||||||
|
|
||||||
|
// // The iframe document and most of its subresources come right off youtube.com
|
||||||
|
// LiteYTEmbed.addPrefetch('preconnect', 'https://www.youtube-nocookie.com')
|
||||||
|
// // The botguard script is fetched off from google.com
|
||||||
|
// LiteYTEmbed.addPrefetch('preconnect', 'https://www.google.com')
|
||||||
|
|
||||||
|
// // Not certain if these ad related domains are in the critical path. Could verify with domain-specific throttling.
|
||||||
|
// LiteYTEmbed.addPrefetch('preconnect', 'https://googleads.g.doubleclick.net')
|
||||||
|
// LiteYTEmbed.addPrefetch('preconnect', 'https://static.doubleclick.net')
|
||||||
|
|
||||||
|
// LiteYTEmbed.preconnected = true
|
||||||
|
// }
|
||||||
|
|
||||||
|
addIframe() {
|
||||||
|
const classNames = 'absolute inset-0 h-full w-full object-cover'
|
||||||
|
|
||||||
|
// https://www.youtube-nocookie.com/embed/${video.id}?enablejsapi=1&autoplay=1&modestbranding=1&playsinline=1
|
||||||
|
|
||||||
|
// const params = new URLSearchParams(this.getAttribute('params') || [])
|
||||||
|
// params.append('autoplay', '1')
|
||||||
|
|
||||||
|
const iframeEl = document.createElement('iframe')
|
||||||
|
|
||||||
|
this.$refs['frame'] = iframeEl
|
||||||
|
|
||||||
|
iframeEl.width = '100%'
|
||||||
|
iframeEl.height = '100%'
|
||||||
|
// No encoding necessary as [title] is safe. https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html#:~:text=Safe%20HTML%20Attributes%20include
|
||||||
|
// iframeEl.title = this.playLabel
|
||||||
|
iframeEl.id = this.frameId()
|
||||||
|
iframeEl.classList.add(...classNames.split(' '))
|
||||||
|
iframeEl.frameborder = '0'
|
||||||
|
iframeEl.allow = 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture'
|
||||||
|
iframeEl.allowFullscreen = true
|
||||||
|
// AFAIK, the encoding here isn't necessary for XSS, but we'll do it only because this is a URL
|
||||||
|
// https://stackoverflow.com/q/64959723/89484
|
||||||
|
iframeEl.src = `https://www.youtube-nocookie.com/embed/${encodeURIComponent(this.video.id)}?enablejsapi=1&autoplay=1&modestbranding=1&playsinline=1`
|
||||||
|
|
||||||
|
// this.append(iframeEl)
|
||||||
|
this.playerContainer.innerHTML = ''
|
||||||
|
this.playerContainer.append( iframeEl )
|
||||||
|
|
||||||
|
this.classList.add('lyt-activated')
|
||||||
|
|
||||||
|
// Set focus for a11y
|
||||||
|
this.querySelector('iframe').focus()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Computed methods
|
||||||
|
|
||||||
|
frameId = () => {
|
||||||
|
return `youtube-player-${this.video.id}-${this._uid}`
|
||||||
|
}
|
||||||
|
|
||||||
|
timestamps = () => {
|
||||||
|
return this.video.timestamps.map( timestamp => {
|
||||||
|
const [ minutes, seconds ] = timestamp.time.split(':')
|
||||||
|
|
||||||
|
return {
|
||||||
|
...timestamp,
|
||||||
|
inSeconds: (minutes * 60) + Number(seconds)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
hasTimestamps = () => {
|
||||||
|
return this.timestamps().length > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
hasPlayer = () => {
|
||||||
|
return this.player !== null
|
||||||
|
}
|
||||||
|
|
||||||
|
activeTimestamp = () => {
|
||||||
|
const currentTime = this.playerTime// / 100
|
||||||
|
|
||||||
|
const reversesTimestamps = [
|
||||||
|
...this.timestamps()
|
||||||
|
]
|
||||||
|
|
||||||
|
// reversesTimestamps.reverse()
|
||||||
|
|
||||||
|
let foundTimestamp = null
|
||||||
|
|
||||||
|
for (const timestamp of reversesTimestamps) {
|
||||||
|
const hasStarted = currentTime > 1
|
||||||
|
const currentTimeisAfterPreviousTimestamp = (foundTimestamp !== null) ? currentTime > foundTimestamp.inSeconds : true
|
||||||
|
// const isPastCurrentTime = currentTime > timestamp.inSeconds
|
||||||
|
// const isBeforeCurrentTime = currentTime > timestamp.inSeconds
|
||||||
|
const currentTimeIsBeforeThisTimestamp = currentTime < timestamp.inSeconds
|
||||||
|
|
||||||
|
if (currentTimeisAfterPreviousTimestamp && currentTimeIsBeforeThisTimestamp) {
|
||||||
|
return foundTimestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
foundTimestamp = timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
// No active timestamp
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
highlightActiveTimestamp = () => {
|
||||||
|
const activeClassList = 'border-opacity-100 bg-darkest'
|
||||||
|
const inactiveClassList = 'border-opacity-0 neumorphic-shadow-inner'
|
||||||
|
|
||||||
|
const activeTimestamp = this.activeTimestamp()
|
||||||
|
|
||||||
|
// If there's no active timestamp
|
||||||
|
// then stop
|
||||||
|
if ( activeTimestamp === null ) return
|
||||||
|
|
||||||
|
// console.log('activeTimestamp', activeTimestamp)
|
||||||
|
|
||||||
|
if ( isObject( this.highlightedTimestampElement ) && this.highlightedTimestampElement.time === activeTimestamp.time) return
|
||||||
|
|
||||||
|
// Change active timestamp
|
||||||
|
|
||||||
|
const newActiveTimestamp = this.querySelector(`[time="${activeTimestamp.time}"]`)
|
||||||
|
|
||||||
|
// If there's already a highlited time stamp
|
||||||
|
// then unhighlight it
|
||||||
|
if ( isObject( this.highlightedTimestampElement ) ) {
|
||||||
|
this.highlightedTimestampElement.classList.remove(...activeClassList.split(' '))
|
||||||
|
this.highlightedTimestampElement.classList.add(...inactiveClassList.split(' '))
|
||||||
|
}
|
||||||
|
|
||||||
|
newActiveTimestamp.classList.remove(...inactiveClassList.split(' '))
|
||||||
|
newActiveTimestamp.classList.add(...activeClassList.split(' '))
|
||||||
|
|
||||||
|
// Scroll to new timestamp
|
||||||
|
this.scrollToTimestampButton( newActiveTimestamp )
|
||||||
|
|
||||||
|
this.highlightedTimestampElement = newActiveTimestamp
|
||||||
|
|
||||||
|
// console.log('newActiveTimestamp', newActiveTimestamp)
|
||||||
|
// console.log('this.highlightedTimestampElement', this.highlightedTimestampElement)
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollToTimestampButton ( timestampButton ) {
|
||||||
|
|
||||||
|
// If timestamp button doesn't exist
|
||||||
|
// then stop
|
||||||
|
if ( !isObject( timestampButton ) ) return
|
||||||
|
|
||||||
|
const timestampsScroller = this.$refs['timestamps-scroll-container']
|
||||||
|
// const [ timestampButton ] = this.$refs[`timestamp-${timestamp.time}`]
|
||||||
|
|
||||||
|
// https://stackoverflow.com/a/63773123/1397641
|
||||||
|
const newScrollPosition = timestampButton.offsetLeft - timestampsScroller.offsetLeft
|
||||||
|
|
||||||
|
// console.log('timestampsScroller', timestampsScroller)
|
||||||
|
// console.log('timestampButton', timestampButton)
|
||||||
|
// console.log('newScrollPosition', newScrollPosition)
|
||||||
|
|
||||||
|
timestampsScroller.scroll({ left: newScrollPosition, behavior: 'smooth' })
|
||||||
|
}
|
||||||
|
|
||||||
|
detectAutoplay = async () => {
|
||||||
|
|
||||||
|
// if ( !process.client ) return { willAutoplay: false }
|
||||||
|
|
||||||
|
// const { default: canAutoPlay } = await import('can-autoplay')
|
||||||
|
|
||||||
|
const willAutoplay = await canAutoplay.video()
|
||||||
|
// const willAutoplayMuted = await canAutoPlay.video({ muted: true, inline: true })
|
||||||
|
|
||||||
|
return {
|
||||||
|
willAutoplay: willAutoplay.result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
seekTo = async (timestampInSeconds) => {
|
||||||
|
|
||||||
|
if (this.playerLoaded === false) {
|
||||||
|
await this.startPlayerLoad()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.player.seekTo(timestampInSeconds)
|
||||||
|
}
|
||||||
|
|
||||||
|
// async playVideo() {
|
||||||
|
|
||||||
|
// if (this.playerLoaded === false) {
|
||||||
|
// await this.startPlayerLoad()
|
||||||
|
// }
|
||||||
|
|
||||||
|
// this.$nextTick(() => {
|
||||||
|
// // console.log('this.player', JSON.stringify(this.player))
|
||||||
|
// this.player.playVideo()
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
|
||||||
|
addPrefetch = (kind, url, as) => {
|
||||||
|
// console.log('prefetching', url)
|
||||||
|
|
||||||
|
const linkEl = document.createElement('link')
|
||||||
|
|
||||||
|
linkEl.rel = kind
|
||||||
|
linkEl.href = url
|
||||||
|
|
||||||
|
if (as) {
|
||||||
|
linkEl.as = as;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.head.append(linkEl)
|
||||||
|
}
|
||||||
|
|
||||||
|
warmConnections = () => {
|
||||||
|
if (this.preconnected) return
|
||||||
|
|
||||||
|
console.log('Warming connections')
|
||||||
|
|
||||||
|
// The iframe document and most of its subresources come right off youtube.com
|
||||||
|
this.addPrefetch('preconnect', 'https://www.youtube-nocookie.com')
|
||||||
|
// The botguard script is fetched off from google.com
|
||||||
|
this.addPrefetch('preconnect', 'https://www.google.com')
|
||||||
|
|
||||||
|
// Not certain if these ad related domains are in the critical path. Could verify with domain-specific throttling.
|
||||||
|
this.addPrefetch('preconnect', 'https://googleads.g.doubleclick.net')
|
||||||
|
this.addPrefetch('preconnect', 'https://static.doubleclick.net')
|
||||||
|
|
||||||
|
this.preconnected = true
|
||||||
|
}
|
||||||
|
|
||||||
|
startPlayerLoad = async () => {
|
||||||
|
// console.log('Starting player load')
|
||||||
|
|
||||||
|
this.addIframe()
|
||||||
|
|
||||||
|
this.playerLoaded = true
|
||||||
|
|
||||||
|
await this.initializePlayer()
|
||||||
|
|
||||||
|
// this.$nextTick(() => {
|
||||||
|
// this.initializePlayer()
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
|
||||||
|
initializePlayer = async () => {
|
||||||
|
console.log('Initializing player')
|
||||||
|
|
||||||
|
// Clear player
|
||||||
|
this.player = null
|
||||||
|
|
||||||
|
// Clear progession interval
|
||||||
|
clearInterval(this.progressInterval)
|
||||||
|
|
||||||
|
// If there are no timestamps
|
||||||
|
// then stop
|
||||||
|
if ( !this.hasTimestamps() ) {
|
||||||
|
console.log('No timestamps. Skipping Youtube API initialization')
|
||||||
|
|
||||||
|
this.playerLoaded = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof YT === 'undefined') {
|
||||||
|
await this.initializeApi()
|
||||||
|
}
|
||||||
|
|
||||||
|
const stateHandlers = {
|
||||||
|
// unstarted
|
||||||
|
'-1': () => null,
|
||||||
|
// ended
|
||||||
|
'0': () => null,
|
||||||
|
// playing
|
||||||
|
'1': this.onPlayerPlaying,
|
||||||
|
// paused
|
||||||
|
'2': this.onPlayerPaused,
|
||||||
|
// buffering
|
||||||
|
'3': () => null,
|
||||||
|
// video cued
|
||||||
|
'4': () => null,
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log('frame', this.$refs['frame'])
|
||||||
|
// console.log('frame id', this.$refs['frame'].id)
|
||||||
|
|
||||||
|
const onReady = () => new Promise( resolve => {
|
||||||
|
|
||||||
|
// console.log('Started onReady')
|
||||||
|
|
||||||
|
this.player = new YT.Player(this.$refs['frame'].id, {
|
||||||
|
events: {
|
||||||
|
'onReady': readyEvent => {
|
||||||
|
// console.log('Resolving onReady')
|
||||||
|
|
||||||
|
this.onPlayerReady( readyEvent )
|
||||||
|
|
||||||
|
resolve( readyEvent )
|
||||||
|
},
|
||||||
|
'onStateChange': event => {
|
||||||
|
// console.log('state changed', event)
|
||||||
|
|
||||||
|
const stateHandler = stateHandlers[String(event.data)]
|
||||||
|
// console.log('stateHandler', stateHandler)
|
||||||
|
stateHandler(event)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
// console.log('Waiting for ready')
|
||||||
|
|
||||||
|
const readyEvent = await onReady()
|
||||||
|
|
||||||
|
// console.log('Youtube Player API ready', readyEvent, JSON.stringify(this.player))
|
||||||
|
}
|
||||||
|
|
||||||
|
initializeApi = () => {
|
||||||
|
return new Promise( resolve => {
|
||||||
|
const tag = document.createElement('script')
|
||||||
|
tag.id = `youtube-api-script-${this._uid}`
|
||||||
|
tag.src = 'https://www.youtube.com/iframe_api'
|
||||||
|
|
||||||
|
const firstScriptTag = document.getElementsByTagName('script')[0]
|
||||||
|
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag)
|
||||||
|
|
||||||
|
|
||||||
|
window.onYouTubeIframeAPIReady = resolve
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onPlayerPlaying = () => {
|
||||||
|
// console.log('Player playing')
|
||||||
|
this.playing = true
|
||||||
|
|
||||||
|
this.progressInterval = setInterval(() => {
|
||||||
|
// console.log('this.player.getCurrentTime()', this.player.getCurrentTime())
|
||||||
|
|
||||||
|
// If player is empty
|
||||||
|
// then stop
|
||||||
|
if (this.player === null) {
|
||||||
|
clearInterval(this.progressInterval)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log('this.player', this.player.hasOwnProperty('getCurrentTime'))
|
||||||
|
|
||||||
|
this.playerTime = this.player.getCurrentTime()
|
||||||
|
|
||||||
|
this.highlightActiveTimestamp()
|
||||||
|
|
||||||
|
}, 500)
|
||||||
|
}
|
||||||
|
|
||||||
|
onPlayerPaused = () => {
|
||||||
|
console.log('Player paused')
|
||||||
|
this.playing = false
|
||||||
|
|
||||||
|
clearInterval(this.progressInterval)
|
||||||
|
}
|
||||||
|
|
||||||
|
onPlayerReady (event) {
|
||||||
|
// console.log('Player is ready', event, this.player )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Register custom element
|
||||||
|
window.customElements.define('lite-youtube', LiteYTEmbed)
|
||||||
|
|
@ -4,6 +4,9 @@ export function matchesWholeWord (needle, haystack) {
|
||||||
return new RegExp('\\b' + needle + '\\b').test(haystack)
|
return new RegExp('\\b' + needle + '\\b').test(haystack)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function fuzzyMatchesWholeWord (needle, haystack) {
|
||||||
|
return matchesWholeWord ( needle.toLowerCase() , haystack.toLowerCase() )
|
||||||
|
}
|
||||||
|
|
||||||
export function eitherMatches (stringARaw, stringBRaw) {
|
export function eitherMatches (stringARaw, stringBRaw) {
|
||||||
// Make strings lowercase for more generous comparison
|
// Make strings lowercase for more generous comparison
|
||||||
|
|
|
||||||
9
helpers/slug.js
Normal file
9
helpers/slug.js
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
// Universal JS imports only
|
||||||
|
import slugify from 'slugify'
|
||||||
|
|
||||||
|
export function makeSlug ( name ) {
|
||||||
|
return slugify(name, {
|
||||||
|
lower: true,
|
||||||
|
strict: true
|
||||||
|
})
|
||||||
|
}
|
||||||
45
helpers/structured-data.js
Normal file
45
helpers/structured-data.js
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
function makeFeaturedAppsString ( featuredApps ) {
|
||||||
|
return featuredApps.slice(0, 5).map(app => app.name).join(', ')
|
||||||
|
}
|
||||||
|
|
||||||
|
export function buildVideoStructuredData ( video, featuredApps, options ) {
|
||||||
|
// console.log('video', video)
|
||||||
|
|
||||||
|
const {
|
||||||
|
siteUrl
|
||||||
|
} = options
|
||||||
|
|
||||||
|
const thumbnailUrls = video.thumbnail.srcset.split(',').map( srcSetImage => {
|
||||||
|
const [ imageUrl ] = srcSetImage.trim().split(' ')
|
||||||
|
|
||||||
|
return imageUrl
|
||||||
|
})
|
||||||
|
|
||||||
|
const featuredAppsString = makeFeaturedAppsString( featuredApps )
|
||||||
|
|
||||||
|
const embedUrl = new URL( `${ siteUrl }/embed/rich-results-player` )
|
||||||
|
|
||||||
|
embedUrl.searchParams.append( 'youtube-id', video.id )
|
||||||
|
embedUrl.searchParams.append( 'name', video.name )
|
||||||
|
|
||||||
|
return {
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
// https://developers.google.com/search/docs/data-types/video
|
||||||
|
// https://schema.org/VideoObject
|
||||||
|
"@type": "VideoObject",
|
||||||
|
"name": video.name,
|
||||||
|
"description": `Includes the following apps: ${featuredAppsString}`,
|
||||||
|
"thumbnailUrl": thumbnailUrls,
|
||||||
|
// https://en.wikipedia.org/wiki/ISO_8601
|
||||||
|
"uploadDate": video.lastUpdated.raw,
|
||||||
|
// "duration": "PT1M54S", // Need to updaet Youtube API Request for this
|
||||||
|
// "contentUrl": "https://www.example.com/video/123/file.mp4",
|
||||||
|
"embedUrl": embedUrl.href,
|
||||||
|
// "interactionStatistic": {
|
||||||
|
// "@type": "InteractionCounter",
|
||||||
|
// "interactionType": { "@type": "http://schema.org/WatchAction" },
|
||||||
|
// "userInteractionCount": 5647018
|
||||||
|
// },
|
||||||
|
// "regionsAllowed": "US,NL"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import { JSDOM } from 'jsdom'
|
import { JSDOM } from 'jsdom'
|
||||||
|
|
||||||
import config from '../nuxt.config'
|
import config from '../nuxt.config.js'
|
||||||
|
|
||||||
|
|
||||||
console.log('Running Default Layout file')
|
console.log('Running Default Layout file')
|
||||||
|
|
@ -94,6 +94,9 @@ const cleanNuxtLayout = ( layout ) => {
|
||||||
// Set link tags
|
// Set link tags
|
||||||
document.querySelector('title').insertAdjacentHTML('afterend', templateVar('link-tags') )
|
document.querySelector('title').insertAdjacentHTML('afterend', templateVar('link-tags') )
|
||||||
|
|
||||||
|
// Add meta tags after title node
|
||||||
|
document.querySelector('title').insertAdjacentHTML('afterend', templateVar('structured-data') )
|
||||||
|
|
||||||
// Add meta tags after title node
|
// Add meta tags after title node
|
||||||
document.querySelector('title').insertAdjacentHTML('afterend', templateVar('meta-tags') )
|
document.querySelector('title').insertAdjacentHTML('afterend', templateVar('meta-tags') )
|
||||||
|
|
||||||
|
|
@ -172,11 +175,30 @@ class DefaultLayout {
|
||||||
return Object.values(meta).join('')
|
return Object.values(meta).join('')
|
||||||
}
|
}
|
||||||
|
|
||||||
generateLinkTags = ( pageLinkTags = [] ) => {
|
generateStructuredData = function ( renderData ) {
|
||||||
|
|
||||||
|
const {
|
||||||
|
structuredData = null
|
||||||
|
} = renderData
|
||||||
|
|
||||||
|
// console.log('renderData', Object.keys(renderData))
|
||||||
|
|
||||||
|
if ( structuredData === null ) return ''
|
||||||
|
|
||||||
|
const structuredDataJson = JSON.stringify( structuredData )
|
||||||
|
|
||||||
|
return `<script type="application/ld+json">${ structuredDataJson }</script>`
|
||||||
|
}
|
||||||
|
|
||||||
|
generateLinkTags = ( renderData ) => {
|
||||||
|
|
||||||
|
const {
|
||||||
|
headLinkTags = []
|
||||||
|
} = renderData
|
||||||
|
|
||||||
const linkTags = {
|
const linkTags = {
|
||||||
...defaultLinkTags,
|
...defaultLinkTags,
|
||||||
...Object.fromEntries(pageLinkTags.map( mapLinkTag ))
|
...Object.fromEntries( headLinkTags.map( mapLinkTag ) )
|
||||||
}
|
}
|
||||||
|
|
||||||
return Object.values( linkTags ).join('')
|
return Object.values( linkTags ).join('')
|
||||||
|
|
@ -205,12 +227,15 @@ class DefaultLayout {
|
||||||
|
|
||||||
// Set link tags
|
// Set link tags
|
||||||
// this.generateLinkTags()
|
// this.generateLinkTags()
|
||||||
workingLayoutString = workingLayoutString.replace( templateVar('link-tags'), this.generateLinkTags() )
|
workingLayoutString = workingLayoutString.replace( templateVar('link-tags'), this.generateLinkTags( data ) )
|
||||||
|
|
||||||
// Add meta tags after title node
|
// Add meta tags after title node
|
||||||
// this.generateMetaTags( data )
|
// this.generateMetaTags( data )
|
||||||
workingLayoutString = workingLayoutString.replace( templateVar('meta-tags'), this.generateMetaTags( data ) )
|
workingLayoutString = workingLayoutString.replace( templateVar('meta-tags'), this.generateMetaTags( data ) )
|
||||||
|
|
||||||
|
// Add structured data
|
||||||
|
workingLayoutString = workingLayoutString.replace( templateVar('structured-data'), this.generateStructuredData( data ) )
|
||||||
|
|
||||||
// Set page css
|
// Set page css
|
||||||
// document.querySelector('head').insertAdjacentHTML('beforeend', this.getCss() )
|
// document.querySelector('head').insertAdjacentHTML('beforeend', this.getCss() )
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="">
|
<footer class="">
|
||||||
<div class="max-w-screen-xl mx-auto py-12 px-4 overflow-hidden space-y-8 sm:px-6 lg:px-8">
|
<div class="max-w-screen-xl mx-auto py-12 px-4 overflow-hidden space-y-24 sm:px-6 lg:px-8">
|
||||||
<!-- <nav class="-mx-5 -my-2 flex flex-wrap justify-center">
|
<!-- <nav class="-mx-5 -my-2 flex flex-wrap justify-center">
|
||||||
<div class="px-5 py-2">
|
<div class="px-5 py-2">
|
||||||
<a href="#" class="text-base leading-6 text-gray-500 hover:text-gray-900">
|
<a href="#" class="text-base leading-6 text-gray-500 hover:text-gray-900">
|
||||||
|
|
@ -19,16 +19,27 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</nav> -->
|
</nav> -->
|
||||||
<div class="mt-8 flex justify-center space-x-6">
|
<div class="flex justify-center space-x-6">
|
||||||
<div class="flex flex-col items-center space-y-4">
|
<div class="flex flex-col items-center space-y-4">
|
||||||
<AllUpdatesSubscribe />
|
<AllUpdatesSubscribe />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="mt-8 text-center text-base leading-6 text-gray-400">
|
<p class="text-center text-base leading-6 text-gray-400">
|
||||||
This site is supported by Affiliate links
|
<span>Built by </span>
|
||||||
|
<a
|
||||||
|
href="https://samcarlton.com/"
|
||||||
|
rel="noopener"
|
||||||
|
class="underline"
|
||||||
|
>Sam Carlton</a>
|
||||||
|
<span> and the awesome </span>
|
||||||
|
<a
|
||||||
|
href="https://github.com/ThatGuySam/doesitarm/graphs/contributors"
|
||||||
|
rel="noopener"
|
||||||
|
class="underline"
|
||||||
|
>🦾 Does It ARM Contributors. </a>
|
||||||
</p>
|
</p>
|
||||||
<p class="mt-8 text-center text-base leading-6 text-gray-400">
|
<p class="mt-8 text-center text-base leading-6 text-gray-400">
|
||||||
© {{ currentYear }} Does it ARM All rights reserved.
|
© {{ currentYear }} Does it ARM All rights reserved. This site is supported by Affiliate links.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
|
||||||
18
netlify.toml
18
netlify.toml
|
|
@ -1,6 +1,7 @@
|
||||||
[build]
|
[build]
|
||||||
publish = "dist/"
|
publish = "dist/"
|
||||||
command = "npm run generate --quiet"
|
command = "npm run generate --quiet"
|
||||||
|
# functions = "functions/"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -16,7 +17,7 @@
|
||||||
from = "/app/node"
|
from = "/app/node"
|
||||||
to = "/app/nodejs"
|
to = "/app/nodejs"
|
||||||
status = 301
|
status = 301
|
||||||
|
|
||||||
# old git redirect
|
# old git redirect
|
||||||
[[redirects]]
|
[[redirects]]
|
||||||
from = "/app/git"
|
from = "/app/git"
|
||||||
|
|
@ -24,6 +25,13 @@
|
||||||
status = 301
|
status = 301
|
||||||
|
|
||||||
|
|
||||||
|
# imac redirect
|
||||||
|
[[redirects]]
|
||||||
|
from = "/device/apple-silicon-imac"
|
||||||
|
to = "/device/m1-imac/"
|
||||||
|
status = 307
|
||||||
|
|
||||||
|
|
||||||
# Category Redirects
|
# Category Redirects
|
||||||
[[redirects]]
|
[[redirects]]
|
||||||
from = "/kind/entertainment"
|
from = "/kind/entertainment"
|
||||||
|
|
@ -34,16 +42,16 @@
|
||||||
from = "/kind/photo-tools"
|
from = "/kind/photo-tools"
|
||||||
to = "/kind/photo-and-graphic-tools/"
|
to = "/kind/photo-and-graphic-tools/"
|
||||||
status = 301
|
status = 301
|
||||||
|
|
||||||
|
|
||||||
# Other Redirects
|
# Other Redirects
|
||||||
|
|
||||||
# Random broken link from Chinese sites
|
# Random broken link from Chinese sites
|
||||||
[[redirects]]
|
[[redirects]]
|
||||||
from = "/。"
|
from = "/。"
|
||||||
to = "/"
|
to = "/"
|
||||||
status = 301
|
status = 301
|
||||||
|
|
||||||
[[redirects]]
|
[[redirects]]
|
||||||
from = "/%E3%80%82"
|
from = "/%E3%80%82"
|
||||||
to = "/"
|
to = "/"
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@ export default {
|
||||||
|
|
||||||
publicRuntimeConfig: {
|
publicRuntimeConfig: {
|
||||||
allUpdateSubscribe: process.env.ALL_UPDATE_SUBSCRIBE,
|
allUpdateSubscribe: process.env.ALL_UPDATE_SUBSCRIBE,
|
||||||
testResultStore: process.env.TEST_RESULT_STORE
|
testResultStore: process.env.TEST_RESULT_STORE,
|
||||||
|
siteUrl: process.env.URL
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -142,6 +143,7 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
buildModules: [
|
buildModules: [
|
||||||
|
'@nuxt/postcss8',
|
||||||
'@nuxtjs/tailwindcss'
|
'@nuxtjs/tailwindcss'
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
27041
package-lock.json
generated
27041
package-lock.json
generated
File diff suppressed because it is too large
Load diff
21
package.json
21
package.json
|
|
@ -4,16 +4,25 @@
|
||||||
"description": "Find out the latest app support for Apple Silicon and the Apple M1 Processor",
|
"description": "Find out the latest app support for Apple Silicon and the Apple M1 Processor",
|
||||||
"author": "Sam Carlton",
|
"author": "Sam Carlton",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
"ava": {
|
||||||
|
"require": [
|
||||||
|
"esm"
|
||||||
|
]
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"test": "ava --timeout=1m --verbose",
|
||||||
"dev": "nuxt",
|
"dev": "nuxt",
|
||||||
"build": "nuxt build",
|
"build": "nuxt build",
|
||||||
"start": "nuxt start",
|
"start": "nuxt start",
|
||||||
"generate": "npm run clone-readme && npm run build-lists && npm run generate-nuxt && npm run generate-eleventy",
|
"generate": "npm run clone-readme && npm run build-lists && npm run generate-nuxt && npm run generate-eleventy",
|
||||||
"build-lists": "node -r esm build-lists.js",
|
"build-lists": "node -r esm build-lists.js",
|
||||||
"generate-nuxt": "nuxt generate",
|
"generate-nuxt": "NODE_OPTIONS=--max-old-space-size=60000 nuxt generate",
|
||||||
"generate-eleventy": "npm run generate-postcss && node --max-old-space-size=60000 -r esm node_modules/.bin/eleventy --quiet",
|
"generate-eleventy": "node --max-old-space-size=60000 -r esm node_modules/.bin/eleventy --quiet",
|
||||||
"generate-postcss": "ENV=production postcss assets/css/tailwind.css --o static/tailwind.css",
|
"generate-postcss": "ENV=production postcss assets/css/tailwind.css --o static/tailwind.css",
|
||||||
"dev-eleventy": "node --max-old-space-size=60000 -r esm node_modules/.bin/eleventy --quiet --watch --serve",
|
"dev-eleventy": "node --max-old-space-size=60000 -r esm node_modules/.bin/eleventy --quiet --watch --serve",
|
||||||
|
"dev-eleventy-debug": "DEBUG=Eleventy* node --max-old-space-size=60000 -r esm node_modules/.bin/eleventy --quiet --watch --serve",
|
||||||
|
"dev-eleventy-benchmark": "DEBUG=Eleventy:Benchmark* node --max-old-space-size=60000 -r esm node_modules/.bin/eleventy --quiet --watch --serve",
|
||||||
|
"dev-eleventy-computed": "DEBUG=Eleventy:ComputedData* node --max-old-space-size=60000 -r esm node_modules/.bin/eleventy --quiet --watch --serve",
|
||||||
"lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
|
"lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
|
||||||
"lint:fix": "eslint --fix --ext .js,.vue --ignore-path .gitignore .",
|
"lint:fix": "eslint --fix --ext .js,.vue --ignore-path .gitignore .",
|
||||||
"precommit": "npm run lint",
|
"precommit": "npm run lint",
|
||||||
|
|
@ -26,7 +35,10 @@
|
||||||
"@open-wc/webpack-import-meta-loader": "^0.4.7",
|
"@open-wc/webpack-import-meta-loader": "^0.4.7",
|
||||||
"@zip.js/zip.js": "^2.2.6",
|
"@zip.js/zip.js": "^2.2.6",
|
||||||
"axios": "^0.21.0",
|
"axios": "^0.21.0",
|
||||||
|
"can-autoplay": "^3.0.0",
|
||||||
|
"chance": "^1.1.7",
|
||||||
"cross-env": "^5.2.0",
|
"cross-env": "^5.2.0",
|
||||||
|
"esbuild": "^0.11.20",
|
||||||
"jsdom": "^16.4.0",
|
"jsdom": "^16.4.0",
|
||||||
"lazysizes": "^5.3.0-beta1",
|
"lazysizes": "^5.3.0-beta1",
|
||||||
"markdown-it": "^11.0.1",
|
"markdown-it": "^11.0.1",
|
||||||
|
|
@ -37,12 +49,15 @@
|
||||||
"pretty-bytes": "^5.5.0",
|
"pretty-bytes": "^5.5.0",
|
||||||
"scroll-into-view-if-needed": "^2.2.26",
|
"scroll-into-view-if-needed": "^2.2.26",
|
||||||
"slugify": "^1.4.6",
|
"slugify": "^1.4.6",
|
||||||
|
"terser": "^4.8.0",
|
||||||
"vue-full-screen-file-drop": "^2.0.0"
|
"vue-full-screen-file-drop": "^2.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@11ty/eleventy": "^1.0.0-canary.10",
|
"@11ty/eleventy": "^1.0.0-canary.10",
|
||||||
|
"@nuxt/postcss8": "^1.1.3",
|
||||||
"@nuxtjs/tailwindcss": "^3.3.4",
|
"@nuxtjs/tailwindcss": "^3.3.4",
|
||||||
"autoprefixer": "^8.6.4",
|
"autoprefixer": "^8.6.4",
|
||||||
|
"ava": "^3.15.0",
|
||||||
"babel-eslint": "^8.2.1",
|
"babel-eslint": "^8.2.1",
|
||||||
"cssnano": "^4.1.10",
|
"cssnano": "^4.1.10",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
|
|
@ -52,6 +67,7 @@
|
||||||
"eslint-plugin-prettier": "2.6.2",
|
"eslint-plugin-prettier": "2.6.2",
|
||||||
"eslint-plugin-vue": "^4.0.0",
|
"eslint-plugin-vue": "^4.0.0",
|
||||||
"esm": "^3.2.25",
|
"esm": "^3.2.25",
|
||||||
|
"fast-xml-parser": "^3.19.0",
|
||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
"nodemon": "^1.11.0",
|
"nodemon": "^1.11.0",
|
||||||
"nuxt": "^2.14.11",
|
"nuxt": "^2.14.11",
|
||||||
|
|
@ -59,6 +75,7 @@
|
||||||
"postcss-cli": "^8.3.1",
|
"postcss-cli": "^8.3.1",
|
||||||
"prettier": "1.14.3",
|
"prettier": "1.14.3",
|
||||||
"replace-css-url": "^1.2.6",
|
"replace-css-url": "^1.2.6",
|
||||||
|
"structured-data-testing-tool": "^4.5.0",
|
||||||
"tailwindcss": "^1.9.6"
|
"tailwindcss": "^1.9.6"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@ import dotenv from 'dotenv'
|
||||||
|
|
||||||
import config from '../nuxt.config.js'
|
import config from '../nuxt.config.js'
|
||||||
|
|
||||||
import { getAppType } from '../helpers/app-derived.js'
|
import { getAppType, getRouteType } from '../helpers/app-derived.js'
|
||||||
|
import { deviceSupportsApp } from '../helpers/devices.js'
|
||||||
import { makeLastUpdatedFriendly } from '../helpers/parse-date'
|
import { makeLastUpdatedFriendly } from '../helpers/parse-date'
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -19,7 +20,40 @@ export const makeTitle = function ( app ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const makeDescription = function ( app ) {
|
export const makeDescription = function ( app ) {
|
||||||
return `Latest reported support status of ${ app.name } on Apple Silicon and Apple M1 Processors when installed via Homebrew. `
|
return `Latest reported support status of ${ app.name } on Apple Silicon and Apple M1 Processors.`
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://stackoverflow.com/a/15069646/1397641
|
||||||
|
function makeEnglishList ( array, conjunction = 'and' ) {
|
||||||
|
const total = array.length
|
||||||
|
|
||||||
|
if ( total < 3 ) return array.join(` ${conjunction} `)
|
||||||
|
|
||||||
|
array = array.slice()
|
||||||
|
|
||||||
|
// Prepend conjunction to final part
|
||||||
|
array[ total-1 ] = `${ conjunction } ${ array[ total-1 ] }`
|
||||||
|
|
||||||
|
return array.join(', ')
|
||||||
|
}
|
||||||
|
|
||||||
|
export function renderPageLinksHtml ( links ) {
|
||||||
|
return links.map( (link, i) => {
|
||||||
|
|
||||||
|
const notAppTestLink = !link.label.includes('🧪')
|
||||||
|
|
||||||
|
const isMainLink = (i === 0) && notAppTestLink
|
||||||
|
|
||||||
|
return /* html */`
|
||||||
|
<a
|
||||||
|
class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow focus:shadow-outline-indigo bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out"
|
||||||
|
href="${link.href}"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
role="button"
|
||||||
|
>${ isMainLink ? 'View' : link.label }</a>
|
||||||
|
`
|
||||||
|
} ).join('')
|
||||||
}
|
}
|
||||||
|
|
||||||
export class AppTemplate {
|
export class AppTemplate {
|
||||||
|
|
@ -36,15 +70,16 @@ export class AppTemplate {
|
||||||
|
|
||||||
before: function( data ) {
|
before: function( data ) {
|
||||||
return data.filter( entry => {
|
return data.filter( entry => {
|
||||||
const appType = getAppType( entry.payload.app )
|
// const [ _, routeType ] = entry.route.split('/')
|
||||||
|
const routeType = getRouteType( entry.route )
|
||||||
|
|
||||||
return appType === 'app'
|
return routeType === 'app'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
eleventyComputed: {
|
eleventyComputed: {
|
||||||
title: ({ app: { payload: { app } } }) => {
|
title: ({ app: { payload: { app } } }) => {
|
||||||
// console.log('data', data)
|
// console.log('data', data)
|
||||||
return makeTitle( app )
|
return makeTitle( app )
|
||||||
},
|
},
|
||||||
|
|
@ -63,54 +98,92 @@ export class AppTemplate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render( data ) {
|
async render( data ) {
|
||||||
|
|
||||||
const { app: { payload: { app, relatedVideos = [] } } } = data
|
const {
|
||||||
|
app: { payload: { app, relatedVideos = [] } },
|
||||||
|
'device-list': deviceList
|
||||||
|
} = data
|
||||||
|
|
||||||
|
const hasRelatedVideos = relatedVideos.length > 0
|
||||||
|
|
||||||
|
// console.log('deviceList', deviceList)
|
||||||
|
|
||||||
// console.log('video.payload', Object.keys(video.payload))
|
// console.log('video.payload', Object.keys(video.payload))
|
||||||
|
|
||||||
|
const hasMultipleAliases = !!app.aliases && app.aliases.length > 1
|
||||||
|
|
||||||
|
const appDeviceSupport = deviceList.map( device => {
|
||||||
|
const supportsApp = deviceSupportsApp( device, app )
|
||||||
|
return {
|
||||||
|
...device,
|
||||||
|
emoji: supportsApp ? '✅' : '🚫',
|
||||||
|
ariaLabel: `${app.name} has ${ supportsApp ? '' : 'not' } been reported to work on ${device.name}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const lastUpdatedFriendly = makeLastUpdatedFriendly( app.lastUpdated )
|
const lastUpdatedFriendly = makeLastUpdatedFriendly( app.lastUpdated )
|
||||||
|
|
||||||
const relatedLinksHtml = app.relatedLinks.map( (link, i) => {
|
const relatedLinksHtml = renderPageLinksHtml( app.relatedLinks )
|
||||||
return /* html */`
|
|
||||||
<a
|
|
||||||
class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow focus:shadow-outline-indigo bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out"
|
const relatedVideosRowHtml = hasRelatedVideos ? await this.boundComponent(VideoRow)( relatedVideos ) : null
|
||||||
href="${link.href}"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener"
|
|
||||||
role="button"
|
|
||||||
>${ (i === 0) ? 'View' : link.label }</a>
|
|
||||||
`
|
|
||||||
} ).join('')
|
|
||||||
|
|
||||||
return /* html */`
|
return /* html */`
|
||||||
<section class="container py-32">
|
<section class="container space-y-8 py-32">
|
||||||
<div class="flex flex-col items-center text-center">
|
|
||||||
|
<div class="intro-content flex flex-col items-center text-center min-h-3/4-screen md:min-h-0 space-y-8">
|
||||||
<h1 class="title text-sm md:text-2xl font-bold">
|
<h1 class="title text-sm md:text-2xl font-bold">
|
||||||
${ data.mainHeading }
|
${ data.mainHeading }
|
||||||
</h1>
|
</h1>
|
||||||
<h2 class="subtitle text-2xl md:text-5xl font-bold py-6">
|
<h2 class="subtitle text-2xl md:text-5xl font-bold">
|
||||||
${ app.text }
|
${ app.text }
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
${ hasMultipleAliases ? /* html */`
|
||||||
|
<small class="text-xs opacity-75">May also be known as ${ makeEnglishList( app.aliases, 'or' ) }</small>
|
||||||
|
` : '' }
|
||||||
|
|
||||||
<div class="subscribe">
|
<div class="subscribe">
|
||||||
<iframe src="/embed-subscribe" loading="lazy" style="width: 350px; height: 150px;" class="-my-8"></iframe>
|
<iframe src="/embed-subscribe" loading="lazy" style="width: 350px; height: 150px;" class="-my-10"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="links space-y-6 sm:space-x-6 mb-8">
|
<div class="links space-y-6 sm:space-x-6">
|
||||||
${ relatedLinksHtml }
|
${ relatedLinksHtml }
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="device-support w-full">
|
||||||
|
<h2 class="subtitle text-xl md:text-2xl font-bold mb-3">
|
||||||
|
Device Support
|
||||||
|
</h2>
|
||||||
|
<div class="device-support-apps md:inline-flex max-w-4xl overflow-x-auto overflow-y-visible md:whitespace-no-wrap border rounded-lg divide-y md:divide-y-0 md:divide-x divide-gray-700 space-y-3 md:space-y-0 py-4 px-3">
|
||||||
|
|
||||||
|
${ appDeviceSupport.map( device => /* html */`
|
||||||
|
<div class="device-container w-full md:w-auto inline-flex flex-col space-y-2 px-2">
|
||||||
|
<a
|
||||||
|
href="${ device.endpoint }"
|
||||||
|
role="button"
|
||||||
|
class="device-link block rounded-md text-sm font-medium leading-5 focus:outline-none focus:text-white focus:bg-gray-700 transition duration-150 ease-in-out text-gray-300 hover:bg-darker hover:neumorphic-shadow p-2"
|
||||||
|
aria-label="${ device.ariaLabel }"
|
||||||
|
>${ device.emoji } ${ device.name }</a>
|
||||||
|
|
||||||
|
<a href="${ device.amazonUrl }" target="_blank" class="underline text-xs pb-3" rel="noopener">Check Pricing</a>
|
||||||
|
</div>
|
||||||
|
`).join('') }
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
${ relatedVideos.length > 0 ? /* html */`
|
${ hasRelatedVideos ? /* html */`
|
||||||
<div
|
<div
|
||||||
class="related-videos w-full"
|
class="related-videos w-full"
|
||||||
>
|
>
|
||||||
<h2 class="subtitle text-xl md:text-2xl font-bold mb-3">
|
<h2 class="subtitle text-xl md:text-2xl text-center font-bold mb-3">
|
||||||
Related Videos
|
Related Videos
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
${ this.boundComponent(VideoRow)( relatedVideos ) }
|
${ relatedVideosRowHtml }
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
` : '' }
|
` : '' }
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import dotenv from 'dotenv'
|
||||||
|
|
||||||
import config from '../nuxt.config.js'
|
import config from '../nuxt.config.js'
|
||||||
|
|
||||||
import { getAppType } from '../helpers/app-derived.js'
|
import { getAppType, getRouteType } from '../helpers/app-derived.js'
|
||||||
|
|
||||||
import { AppTemplate } from './app.11ty.js'
|
import { AppTemplate } from './app.11ty.js'
|
||||||
|
|
||||||
|
|
@ -33,9 +33,9 @@ class FormulaTemplate extends AppTemplate {
|
||||||
alias: 'app',
|
alias: 'app',
|
||||||
before: function( data ) {
|
before: function( data ) {
|
||||||
return data.filter( entry => {
|
return data.filter( entry => {
|
||||||
const appType = getAppType( entry.payload.app )
|
const routeType = getRouteType( entry.route )
|
||||||
|
|
||||||
return appType === 'formula'
|
return routeType === 'formula'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,56 @@
|
||||||
import dotenv from 'dotenv'
|
import dotenv from 'dotenv'
|
||||||
|
|
||||||
import config from '../nuxt.config'
|
import config from '../nuxt.config.js'
|
||||||
|
|
||||||
|
import VideoPlayer from '../components-eleventy/video/player.js'
|
||||||
import VideoRow from '../components-eleventy/video/row.js'
|
import VideoRow from '../components-eleventy/video/row.js'
|
||||||
import { isVideo } from '../helpers/app-derived'
|
|
||||||
|
import { getRouteType } from '../helpers/app-derived.js'
|
||||||
|
import { buildVideoStructuredData } from '../helpers/structured-data.js'
|
||||||
|
|
||||||
// Setup dotenv
|
// Setup dotenv
|
||||||
dotenv.config()
|
dotenv.config()
|
||||||
|
|
||||||
export const makeTitle = function ( video ) {
|
export const myChannelId = 'UCB3jOb5QVjX7lYecvyCoTqQ'
|
||||||
return `${ video.name } - ${ config.head.title }`
|
|
||||||
|
export const makeTitle = function ( name ) {
|
||||||
|
// console.log('tvEntry', tvEntry)
|
||||||
|
|
||||||
|
return `${ name } - ${ config.head.title }`
|
||||||
}
|
}
|
||||||
|
|
||||||
export const makeDescription = function ( video ) {
|
export const makeDescription = function ( tvEntry ) {
|
||||||
if ( video.payload.featuredApps.length === 0 ) return 'Apple Silicon performance and support videos'
|
if ( tvEntry.payload.featuredApps.length === 0 ) return 'Apple Silicon performance and support videos'
|
||||||
|
|
||||||
const featuredAppsString = video.payload.featuredApps.slice(0, 5).map(app => app.name).join(', ')
|
const featuredAppsString = tvEntry.payload.featuredApps.slice(0, 5).map(app => app.name).join(', ')
|
||||||
|
|
||||||
// console.log('video.payload.featuredApps', video.payload.featuredApps)
|
// console.log('tvEntry.payload.featuredApps', tvEntry.payload.featuredApps)
|
||||||
|
|
||||||
return `Apple Silicon performance and support videos for ${ featuredAppsString }`
|
return `Apple Silicon performance and support videos for ${ featuredAppsString }`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function renderFeaturedApps ( featuredApps ) {
|
||||||
|
return /* html */`
|
||||||
|
<div
|
||||||
|
class="related-apps w-full"
|
||||||
|
>
|
||||||
|
<h2 class="subtitle text-xl md:text-2xl font-bold mb-3">
|
||||||
|
Related Apps
|
||||||
|
</h2>
|
||||||
|
<div class="featured-apps overflow-x-auto overflow-y-visible whitespace-no-wrap py-2 space-x-2">
|
||||||
|
${ featuredApps.map( app => ( /* html */`
|
||||||
|
<a
|
||||||
|
href="${ app.endpoint }"
|
||||||
|
role="button"
|
||||||
|
class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow-inner bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out inline-block text-xs rounded-lg py-1 px-2"
|
||||||
|
>${ app.name }</a>
|
||||||
|
`) ).join('') }
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
class TV {
|
class TV {
|
||||||
// or `async data() {`
|
// or `async data() {`
|
||||||
// or `get data() {`
|
// or `get data() {`
|
||||||
|
|
@ -32,62 +61,135 @@ class TV {
|
||||||
pagination: {
|
pagination: {
|
||||||
data: 'eleventy-endpoints',
|
data: 'eleventy-endpoints',
|
||||||
size: 1,
|
size: 1,
|
||||||
alias: 'payload',
|
alias: 'tvEntry',
|
||||||
before: function( data ) {
|
before: function( endpoint ) {
|
||||||
return data.filter( entry => {
|
// console.log('Before runs')
|
||||||
return entry.payload.hasOwnProperty('video') && isVideo( entry.payload.video )
|
|
||||||
|
return endpoint.filter( entry => {
|
||||||
|
const routeType = getRouteType( entry.route )
|
||||||
|
|
||||||
|
return routeType === 'tv'
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// tags: [ 'tv' ],
|
||||||
|
|
||||||
|
eleventyComputed: {
|
||||||
|
title: data => {
|
||||||
|
// Declare dependencies for Eleventy
|
||||||
|
// https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies
|
||||||
|
data.tvEntry
|
||||||
|
|
||||||
|
return makeTitle( data.tvEntry.payload.video.name )
|
||||||
|
},
|
||||||
|
description: ( data ) => {
|
||||||
|
// Declare dependencies for Eleventy
|
||||||
|
// https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies
|
||||||
|
data.tvEntry
|
||||||
|
|
||||||
|
return makeDescription( data.tvEntry )
|
||||||
|
},
|
||||||
|
|
||||||
|
headLinkTags: data => {
|
||||||
|
// Declare dependencies for Eleventy
|
||||||
|
// https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies
|
||||||
|
data.tvEntry
|
||||||
|
|
||||||
|
return [
|
||||||
|
// Preload video thumbnail
|
||||||
|
// <link rel="preload" as="image" href="img.png" />
|
||||||
|
{
|
||||||
|
'rel': 'preload',
|
||||||
|
'as': 'image',
|
||||||
|
'href': `https://i.ytimg.com/vi_webp/${ data.tvEntry.payload.video.id }/sddefault.webp`
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
structuredData: data => {
|
||||||
|
// Declare dependencies for Eleventy
|
||||||
|
// https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies
|
||||||
|
data.tvEntry
|
||||||
|
|
||||||
|
return buildVideoStructuredData( data.tvEntry.payload.video, data.tvEntry.payload.featuredApps, {
|
||||||
|
siteUrl: process.env.URL
|
||||||
|
} )
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
eleventyComputed: {
|
permalink: ( data ) => {
|
||||||
title: ({ payload: { video } }) => {
|
|
||||||
// console.log('data', data)
|
|
||||||
return makeTitle( video )
|
|
||||||
},
|
|
||||||
description: ({ payload: { video } }) => {
|
|
||||||
return makeDescription( video )
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
permalink: ({ payload: { video } }) => {
|
return data.tvEntry.route.substring(1) + '/'
|
||||||
// console.log('data', data)
|
|
||||||
return `tv/${ video.slug }/`
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render({ payload: { video } }) {
|
async render( data ) {
|
||||||
|
|
||||||
|
const {
|
||||||
|
tvEntry: {
|
||||||
|
// route,
|
||||||
|
payload: {
|
||||||
|
video,
|
||||||
|
relatedVideos = [],
|
||||||
|
featuredApps = []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 'device-list': deviceList
|
||||||
|
} = data
|
||||||
|
|
||||||
|
|
||||||
// console.log('video.payload', Object.keys(video.payload))
|
// console.log('video.payload', Object.keys(video.payload))
|
||||||
|
|
||||||
|
const coverBottomHtml = /* html */`
|
||||||
|
<div class="page-heading h-full flex items-end md:p-4">
|
||||||
|
<h1 class="title text-xs text-left md:text-2xl font-bold">${ video.name }</h1>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
|
||||||
|
const playerHtml = await this.boundComponent(VideoPlayer)( video, {
|
||||||
|
coverBottomHtml
|
||||||
|
} )
|
||||||
|
|
||||||
|
const hasFeaturedApps = featuredApps.length > 0
|
||||||
|
const featuredAppsHtml = hasFeaturedApps ? renderFeaturedApps( featuredApps ) : ''
|
||||||
|
|
||||||
|
const rowHtml = await this.boundComponent(VideoRow)( relatedVideos )
|
||||||
|
|
||||||
|
// const rowHtml = renderedRow.join('')
|
||||||
|
|
||||||
return /* html */`
|
return /* html */`
|
||||||
<section class="container pb-16">
|
<section class="container pb-16">
|
||||||
<div class="flex flex-col items-center text-center space-y-6">
|
<div class="flex flex-col items-center text-center space-y-6">
|
||||||
<div class="video-canvas w-screen flex flex-col justify-center items-center bg-black pt-16" style="left:50%;right:50%;margin-left:-50vw;margin-right:-50vw;">
|
|
||||||
<div class="ratio-wrapper w-full max-w-4xl">
|
${ playerHtml }
|
||||||
<div class="relative overflow-hidden w-full pb-16/9">
|
|
||||||
<iframe id="youtube-player-${ video.id }-17212" src="https://www.youtube-nocookie.com/embed/${ video.id }?enablejsapi=1&autoplay=1&modestbranding=1&playsinline=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen class="absolute h-full w-full"></iframe>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!---->
|
|
||||||
</div>
|
|
||||||
<div class="md:flex w-full justify-between space-y-4 md:space-y-0 md:px-10">
|
<div class="md:flex w-full justify-between space-y-4 md:space-y-0 md:px-10">
|
||||||
<h1 class="title text-lg md:text-2xl font-bold">${ video.name }</h1>
|
|
||||||
<div class="channel-credit"><a href="https://www.youtube.com/channel/UCptwuAv0XQHo1OQUSaO6NHw" target="_blank" rel="noopener" role="button" class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow focus:shadow-outline-indigo bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out">Subscribe to Max Tech</a></div>
|
${ video.channel.id !== myChannelId ? /* html */`
|
||||||
|
<div
|
||||||
|
class="channel-credit"
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
href="https://www.youtube.com/channel/${ video.channel.id }?sub_confirmation=1"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
role="button"
|
||||||
|
class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow focus:shadow-outline-indigo bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out"
|
||||||
|
>Subscribe to ${ video.channel.name }</a>
|
||||||
|
</div>
|
||||||
|
` : '' }
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="w-full">
|
<hr class="w-full">
|
||||||
|
|
||||||
<div class="related-apps w-full">
|
${ featuredAppsHtml }
|
||||||
<h2 class="subtitle text-xl md:text-2xl font-bold mb-3">Related Apps</h2>
|
|
||||||
<div class="featured-apps overflow-x-auto overflow-y-visible whitespace-no-wrap py-2 space-x-2"><a href="/app/xcode" role="button" class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow-inner bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out inline-block text-xs rounded-lg py-1 px-2">Xcode</a><a href="/app/logic-pro" role="button" class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow-inner bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out inline-block text-xs rounded-lg py-1 px-2">Logic Pro</a><a href="/app/lightroom" role="button" class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow-inner bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out inline-block text-xs rounded-lg py-1 px-2">Lightroom</a><a href="/app/lightroom-classic" role="button" class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow-inner bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out inline-block text-xs rounded-lg py-1 px-2">Lightroom Classic</a><a href="/app/cinebench" role="button" class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow-inner bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out inline-block text-xs rounded-lg py-1 px-2">Cinebench</a><a href="/app/final-cut-pro" role="button" class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow-inner bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out inline-block text-xs rounded-lg py-1 px-2">Final Cut Pro</a><a href="/app/geekbench" role="button" class="relative inline-flex items-center rounded-md px-4 py-2 leading-5 font-bold text-white border border-transparent focus:outline-none focus:border-indigo-600 neumorphic-shadow-inner bg-darker hover:bg-indigo-400 active:bg-indigo-600 transition duration-150 ease-in-out inline-block text-xs rounded-lg py-1 px-2">Geekbench</a></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="related-videos w-full">
|
<div class="related-videos w-full">
|
||||||
<h2 class="subtitle text-xl md:text-2xl font-bold mb-3">Related Videos</h2>
|
<h2 class="subtitle text-xl md:text-2xl font-bold mb-3">Related Videos</h2>
|
||||||
|
|
||||||
${ this.boundComponent(VideoRow)( video.payload.relatedVideos ) }
|
${ rowHtml }
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,33 +107,36 @@ export default {
|
||||||
VideoPlayer,
|
VideoPlayer,
|
||||||
ChannelCredit
|
ChannelCredit
|
||||||
},
|
},
|
||||||
asyncData ({ params: { slug }, payload: { app, allVideos, submitVideoCard } }) {
|
async asyncData ( data ) {
|
||||||
|
|
||||||
// const { allVideoAppsList } = await import('~/helpers/get-list.js')
|
const {
|
||||||
// // const { default: videoList } = await import('~/static/video-list.json')
|
params: { slug },
|
||||||
|
route
|
||||||
|
} = data
|
||||||
|
|
||||||
// const { videosRelatedToApp } = await import('~/helpers/related.js')
|
let {
|
||||||
|
payload
|
||||||
|
} = data
|
||||||
|
|
||||||
// const app = allVideoAppsList.find(app => (app.slug === slug))
|
|
||||||
|
|
||||||
// const submitVideoCard = {
|
|
||||||
// endpoint: `https://docs.google.com/forms/d/e/1FAIpQLSeEVGM9vE7VcfLMy6fJkfU70X2VZ60rHDyhDQLtnAN4nso0WA/viewform?usp=pp_url&entry.1018125313=${app.name}`
|
// Manually get payload as fallback
|
||||||
|
// Uncomment for dev
|
||||||
|
// if ( payload === undefined ) {
|
||||||
|
// // Read back the JSON we just wrote to ensure it exists
|
||||||
|
// const { default: savedList } = await import('~/static/nuxt-endpoints.json')
|
||||||
|
|
||||||
|
// const endpoint = savedList.find( resource => {
|
||||||
|
// return resource.route === route.path
|
||||||
|
// } )
|
||||||
|
|
||||||
|
// payload = endpoint.payload
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// // const featuredApps = []
|
|
||||||
|
|
||||||
// const relatedVideos = videosRelatedToApp( app ).map(video => {
|
|
||||||
// // console.log('video', video)
|
|
||||||
// return {
|
|
||||||
// ...video,
|
|
||||||
// // endpoint: `#${video.id}`
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
app,
|
app: payload.app,
|
||||||
allVideos,
|
allVideos: payload.allVideos,
|
||||||
submitVideoCard
|
submitVideoCard: payload.submitVideoCard
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: function () {
|
data: function () {
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { lastUpdatedFriendly } from '~/helpers/parse-date'
|
import { makeLastUpdatedFriendly } from '~/helpers/parse-date'
|
||||||
import { getAppEndpoint } from '~/helpers/app-derived.js'
|
import { getAppEndpoint } from '~/helpers/app-derived.js'
|
||||||
|
|
||||||
import LinkButton from '~/components/link-button.vue'
|
import LinkButton from '~/components/link-button.vue'
|
||||||
|
|
@ -105,7 +105,7 @@ export default {
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
lastUpdatedFriendly () {
|
lastUpdatedFriendly () {
|
||||||
return lastUpdatedFriendly( this.app.lastUpdated )
|
return makeLastUpdatedFriendly( this.app.lastUpdated )
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
head() {
|
head() {
|
||||||
|
|
|
||||||
|
|
@ -158,18 +158,6 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- <pre class="w-full">{{ appsBeingScanned }}</pre> -->
|
|
||||||
|
|
||||||
<AllUpdatesSubscribe
|
|
||||||
:input-class-groups="{
|
|
||||||
shadow: 'hover:neumorphic-shadow',
|
|
||||||
bg: '',
|
|
||||||
focus: 'bg-transparent neumorphic-shadow pl-8',
|
|
||||||
blur: 'placeholder-white text-center border border-transparent bg-transparent opacity-50 hover:opacity-100 px-3',
|
|
||||||
}"
|
|
||||||
class="my-12"
|
|
||||||
/>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <client-only>
|
<!-- <client-only>
|
||||||
|
|
@ -221,15 +209,38 @@ export default {
|
||||||
[
|
[
|
||||||
'Non-native Apps (🔶)',
|
'Non-native Apps (🔶)',
|
||||||
`
|
`
|
||||||
|
When an App scan is reported and Non-native (as indicated by an 🔶), that means the app file provided does not have native compatibility with Apple Silicon, and we have not had any reports of native versions of the app yet.
|
||||||
|
This doesn't necessarily mean the app won't work, it just means it hasn't been updated for Apple Silicon specifically and can't say for certain that it will definitely work.
|
||||||
|
Most apps reported as Non-native will usually still work under Rosetta 2 Translation with similar performance to the app's experience under an Intel-based Mac.
|
||||||
You can try getting the latest version from the developer\'s the download page scan that.
|
You can try getting the latest version from the developer\'s the download page scan that.
|
||||||
You can also request a manual review to determine the current status of the app on Rosetta 2.
|
You can also request a manual review to determine the current status of the app on Rosetta 2.
|
||||||
`
|
`
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'App Decompression Error (❔)',
|
||||||
|
`
|
||||||
|
This means we weren't able to extract an App Binary from the file provided.
|
||||||
|
If your app is contained within a PKG or a DMG file, you can extract the Mac App file from that Package/Archive and scan it directly.
|
||||||
|
|
||||||
|
If you are scanning from Windows, an EXE file is not scannable; however, you can download the Mac version of the app and extract it onto your Windows system, and that Mac App file can be scanned from your Windows computer.
|
||||||
|
This also applies when scanning apps from Linux-based Systems, ChromeOS, iOS, and, in theory, any system capable of running modern Javascript in a browser and extracting compressed files.
|
||||||
|
|
||||||
|
|
||||||
|
Currently, the supported formats are Mac Apps, Zip files containing Mac Apps, and specific rare DMG files. Bigger files take longer to scan.
|
||||||
|
`
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'What if the scan never ends?',
|
||||||
|
`
|
||||||
|
Currently, some random apps will cause the scan to hang indefinitely.
|
||||||
|
If this happens, you can try scanning a few apps at a time or one at a time until it hangs again and skip scanning that app for now.
|
||||||
|
`
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'Why can\'t it tell me if an app will work on Rosetta 2? ',
|
'Why can\'t it tell me if an app will work on Rosetta 2? ',
|
||||||
`
|
`
|
||||||
Currently, Rosetta 2 is a proprietary Apple software that is only available on macOS on Apple Silicon devices.
|
Currently, Rosetta 2 is a proprietary Apple software that is only available on macOS on Apple Silicon devices.
|
||||||
This means there isn't any way to test Rosetta 2 compatibility with an app without a physical Apple Silicon device and so you definitely can't test that with just a website alone... for now...
|
This means there isn't any way to test Rosetta 2 compatibility with an app without a physical Apple Silicon device, and so you definitely can't test that with just a website alone... for now...
|
||||||
|
|
||||||
Feel free to signup for email updates.
|
Feel free to signup for email updates.
|
||||||
`
|
`
|
||||||
|
|
@ -237,16 +248,16 @@ export default {
|
||||||
[
|
[
|
||||||
'Don\'t all previous Mac Apps work via Rosetta 2 translation? ',
|
'Don\'t all previous Mac Apps work via Rosetta 2 translation? ',
|
||||||
`
|
`
|
||||||
Most apps will work with Rosetta 2 translation well but it's not a perfect technology.
|
Most apps will work with Rosetta 2 translation well, but it's not a perfect technology.
|
||||||
Some apps will have various small issues and graphical bugs but will work well enough, a few apps will fail to launch entirely and some apps will runs with virtually no issues and perform even faster than an equivalent Intel-based Mac.
|
Some apps will have various small issues and graphical bugs but will work well enough, a few apps will fail to launch entirely, and some apps will run with virtually no problems and perform even faster than on an equivalent Intel-based Mac.
|
||||||
For now the best way to determine how well an app will run under Rosetta 2 is by human review.
|
For now, the best way to determine how well an app will run under Rosetta 2 is by human review.
|
||||||
`
|
`
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
title () {
|
title () {
|
||||||
return `Apple Silicon Compatibility`
|
return `Apple Silicon Compatibility Test Online`
|
||||||
},
|
},
|
||||||
description () {
|
description () {
|
||||||
return `Check for Apple Silicon compatibility for any of your apps instantly before you buy an M1 Mac. `
|
return `Check for Apple Silicon compatibility for any of your apps instantly before you buy an M1 Mac. `
|
||||||
|
|
|
||||||
225
pages/device/_slug.vue
Normal file
225
pages/device/_slug.vue
Normal file
|
|
@ -0,0 +1,225 @@
|
||||||
|
<template>
|
||||||
|
<section class="container py-24">
|
||||||
|
<div class="flex flex-col items-center space-y-12">
|
||||||
|
|
||||||
|
<div class="summary space-y-6 max-w-2xl">
|
||||||
|
|
||||||
|
<h1 class="title text-3xl md:text-5xl font-hairline leading-tight text-center">
|
||||||
|
{{ device.name }}
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="device.description"
|
||||||
|
class="md:text-md text-center"
|
||||||
|
>
|
||||||
|
{{ device.description }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="supportedAppList.length !== 0"
|
||||||
|
class="md:text-md text-center"
|
||||||
|
>
|
||||||
|
Supported apps include {{ supportedAppList.join(', ') }}.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex justify-center py-3">
|
||||||
|
<LinkButton
|
||||||
|
v-if="device.amazonUrl"
|
||||||
|
:href="device.amazonUrl"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
Check Pricing
|
||||||
|
</LinkButton>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="search-apps w-full flex flex-col items-center space-y-4">
|
||||||
|
|
||||||
|
<h2
|
||||||
|
class="subtitle md:text-lg font-bold text-center"
|
||||||
|
>
|
||||||
|
Search app support for {{ device.name }}
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<Search
|
||||||
|
:app-list="deviceAppList"
|
||||||
|
:quick-buttons="quickButtons"
|
||||||
|
:autofocus="false"
|
||||||
|
:initial-limit="50"
|
||||||
|
@update:query="query = $event"
|
||||||
|
>
|
||||||
|
<template v-slot:before-search>
|
||||||
|
<div class="empty-div" />
|
||||||
|
</template>
|
||||||
|
</Search>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex flex-col md:flex-row space-x-0 space-y-4 md:space-y-0 md:space-x-4">
|
||||||
|
|
||||||
|
<LinkButton
|
||||||
|
:href="`https://github.com/ThatGuySam/doesitarm/issues?q=is%3Aissue+${query}`"
|
||||||
|
class="text-xs"
|
||||||
|
>
|
||||||
|
Request an App with Github
|
||||||
|
</LinkButton>
|
||||||
|
|
||||||
|
<LinkButton
|
||||||
|
:href="`https://twitter.com/DoesItARM/status/1330027384041508865`"
|
||||||
|
class="text-xs"
|
||||||
|
>
|
||||||
|
Request an App with Twitter
|
||||||
|
</LinkButton>
|
||||||
|
|
||||||
|
<LinkButton
|
||||||
|
:href="`/apple-silicon-app-test/`"
|
||||||
|
class="text-xs"
|
||||||
|
>
|
||||||
|
Scan Your Own App
|
||||||
|
</LinkButton>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Search from '~/components/search.vue'
|
||||||
|
import LinkButton from '~/components/link-button.vue'
|
||||||
|
|
||||||
|
// import { categories } from '~/helpers/categories.js'
|
||||||
|
import { deviceSupportsApp } from '~/helpers/devices.js'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
async asyncData ({ params: { slug } }) {
|
||||||
|
const { default: Chance } = await import('chance')
|
||||||
|
|
||||||
|
const { allList } = await import('~/helpers/get-list.js')
|
||||||
|
const { default: deviceList } = await import('~/static/device-list.json')
|
||||||
|
|
||||||
|
|
||||||
|
const charCode = slug.charCodeAt( slug.length-2 )
|
||||||
|
const shuffler = new Chance( charCode )
|
||||||
|
|
||||||
|
const device = deviceList.find( device => {
|
||||||
|
return device.slug === slug
|
||||||
|
})
|
||||||
|
|
||||||
|
// console.log( 'device', device )
|
||||||
|
|
||||||
|
const deviceAppList = allList.map( app => {
|
||||||
|
const appIsSupported = deviceSupportsApp( device, app )
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: app.name,
|
||||||
|
status: app.status,
|
||||||
|
slug: app.slug,
|
||||||
|
// endpoint: app.endpoint,
|
||||||
|
text: appIsSupported ? `✅ Supported on ${device.name}` : `🚫 Not yet reported working on ${device.name}`,
|
||||||
|
lastUpdated: app.lastUpdated,
|
||||||
|
category: app.category,
|
||||||
|
// searchLinks: makeAppSearchLinks( app, (new Set(videoList)) )
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const supportedApps = deviceAppList.filter( app => {
|
||||||
|
const supported = app.text.startsWith('✅')
|
||||||
|
const hasNotAllowedCategory = ([
|
||||||
|
'no-category',
|
||||||
|
'homebrew',
|
||||||
|
'games',
|
||||||
|
]).some( categorySlug => (app.category.slug === categorySlug) )
|
||||||
|
|
||||||
|
// console.log('hasNonStandardCategory', app.category.slug, hasNonStandardCategory)
|
||||||
|
|
||||||
|
return supported && !hasNotAllowedCategory
|
||||||
|
})
|
||||||
|
|
||||||
|
const featuredApps = shuffler.shuffle( supportedApps ).slice(0, 12)
|
||||||
|
|
||||||
|
// console.log('featuredApps', featuredApps[0])
|
||||||
|
|
||||||
|
return {
|
||||||
|
slug,
|
||||||
|
device,
|
||||||
|
featuredApps,
|
||||||
|
deviceAppList
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
Search,
|
||||||
|
LinkButton
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
query: '',
|
||||||
|
quickButtons: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
supportedAppList () {
|
||||||
|
return this.featuredApps.map(app => app.name)
|
||||||
|
},
|
||||||
|
title () {
|
||||||
|
return `App support list for ${this.device.name}`
|
||||||
|
},
|
||||||
|
description () {
|
||||||
|
return `Check the the latest reported support status of apps and software on ${this.device.name}.`
|
||||||
|
},
|
||||||
|
structuredData () {
|
||||||
|
return {
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
// https://developers.google.com/search/docs/data-types/faqpage
|
||||||
|
// https://schema.org/FAQPage
|
||||||
|
"@type": "FAQPage",
|
||||||
|
"mainEntity": this.deviceAppList.map( app => {
|
||||||
|
return {
|
||||||
|
// https://schema.org/Question
|
||||||
|
"@type": "Question",
|
||||||
|
"name": `Does ${app.name} work on ${ this.device.name }?`,
|
||||||
|
"acceptedAnswer": {
|
||||||
|
// https://schema.org/Answer
|
||||||
|
"@type": "Answer",
|
||||||
|
"text": app.text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
head() {
|
||||||
|
return {
|
||||||
|
title: this.title,
|
||||||
|
meta: [
|
||||||
|
// hid is used as unique identifier. Do not use `vmid` for it as it will not work
|
||||||
|
{
|
||||||
|
'hid': 'description',
|
||||||
|
'name': 'description',
|
||||||
|
'content': this.description
|
||||||
|
},
|
||||||
|
|
||||||
|
// Twitter Card
|
||||||
|
{
|
||||||
|
'hid': 'twitter:title',
|
||||||
|
'property': 'twitter:title',
|
||||||
|
'content': this.title
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'hid': 'twitter:description',
|
||||||
|
'property': 'twitter:description',
|
||||||
|
'content': this.description
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'property': 'twitter:url',
|
||||||
|
'content': `${process.env.URL}${this.$nuxt.$route.path}`
|
||||||
|
},
|
||||||
|
],
|
||||||
|
__dangerouslyDisableSanitizers: ['script'],
|
||||||
|
script: [{ innerHTML: JSON.stringify(this.structuredData), type: 'application/ld+json' }]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
76
pages/devices.vue
Normal file
76
pages/devices.vue
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
<template>
|
||||||
|
<section class="container py-24">
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<h1 class="title text-2xl leading-tight mb-6">
|
||||||
|
Devices
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div class="line-separator border-white border-t-2 mb-12" />
|
||||||
|
|
||||||
|
<!-- deviceList: {{ deviceList }} -->
|
||||||
|
|
||||||
|
<ul class="device-list space-y-3">
|
||||||
|
<li
|
||||||
|
v-for="(device, i) in deviceList"
|
||||||
|
:key="`${device.slug}-${i}`"
|
||||||
|
:ref="`${device.slug}-row`"
|
||||||
|
class="relative"
|
||||||
|
>
|
||||||
|
<!-- device.endpoint: {{ device.endpoint }} -->
|
||||||
|
<a
|
||||||
|
:href="device.endpoint"
|
||||||
|
class="flex justify-start items-center inset-x-0 text-3xl md:text-4xl hover:bg-darkest border-2 border-white border-opacity-0 hover:border-opacity-50 focus:outline-none focus:bg-gray-50 duration-300 ease-in-out rounded-lg space-x-3 -mx-5 px-5 md:pr-64 py-3"
|
||||||
|
style="transition-property: border;"
|
||||||
|
>
|
||||||
|
<div class="font-hairline">
|
||||||
|
<div>{{ device.name }}</div>
|
||||||
|
<!-- <div class="text-xs opacity-75 mb-3">{{ device.appNames }}</div> -->
|
||||||
|
</div>
|
||||||
|
<div>➔</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import LinkButton from '~/components/link-button.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
async asyncData () {
|
||||||
|
const { default: deviceList } = await import('~/static/device-list.json')
|
||||||
|
|
||||||
|
return {
|
||||||
|
deviceList
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
LinkButton
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
// computed: {
|
||||||
|
// deviceList () {
|
||||||
|
// return deviceList
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
head() {
|
||||||
|
return {
|
||||||
|
title: `Categories of App Support for Apple Silicon - Does It ARM`,
|
||||||
|
// meta: [
|
||||||
|
// // hid is used as unique identifier. Do not use `vmid` for it as it will not work
|
||||||
|
// {
|
||||||
|
// hid: 'description',
|
||||||
|
// name: 'description',
|
||||||
|
// content: 'My custom description'
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
80
pages/embed/rich-results-player.vue
Normal file
80
pages/embed/rich-results-player.vue
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
<template>
|
||||||
|
<VideoPlayer
|
||||||
|
v-if="youtubeId !== null"
|
||||||
|
:video="video"
|
||||||
|
class="w-100 h-100 absolute inset-0 flex justify-center items-center"
|
||||||
|
>
|
||||||
|
<template v-slot:cover-bottom>
|
||||||
|
<div class="page-heading h-full flex items-end md:p-4">
|
||||||
|
<h1 class="title text-xs text-left md:text-2xl font-bold">
|
||||||
|
{{ video.name }}
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</VideoPlayer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import VideoPlayer from '~/components/video/player.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
layout: 'embed',
|
||||||
|
|
||||||
|
components: {
|
||||||
|
VideoPlayer
|
||||||
|
},
|
||||||
|
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
youtubeId: null,
|
||||||
|
name: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
video () {
|
||||||
|
return {
|
||||||
|
name: this.name,
|
||||||
|
id: this.youtubeId,
|
||||||
|
timestamps: [],
|
||||||
|
thumbnail: {
|
||||||
|
sizes: '(max-width: 640px) 100vw, 640px',
|
||||||
|
srcset: `https://i.ytimg.com/vi/${this.youtubeId}/default.jpg 120w, https://i.ytimg.com/vi/${this.youtubeId}/mqdefault.jpg 320w, https://i.ytimg.com/vi/${this.youtubeId}/hqdefault.jpg 480w, https://i.ytimg.com/vi/${this.youtubeId}/sddefault.jpg 640w`,
|
||||||
|
src: `https://i.ytimg.com/vi/${this.youtubeId}/default.jpg`
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
head() {
|
||||||
|
return {
|
||||||
|
title: 'Video - Does It ARM',
|
||||||
|
// meta: [
|
||||||
|
// // hid is used as unique identifier. Do not use `vmid` for it as it will not work
|
||||||
|
// {
|
||||||
|
// hid: 'description',
|
||||||
|
// name: 'description',
|
||||||
|
// content: 'My custom description'
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted () {
|
||||||
|
// this.youtubeId = 'NDwmqJYJq9s'
|
||||||
|
|
||||||
|
// console.log('window', window)
|
||||||
|
|
||||||
|
if ( process.client ) {
|
||||||
|
const urlParams = new URLSearchParams(window.location.search)
|
||||||
|
|
||||||
|
this.youtubeId = urlParams.get('youtube-id')
|
||||||
|
|
||||||
|
this.name = urlParams.get('name')
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log('this.youtubeId', this.youtubeId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -1,14 +1,19 @@
|
||||||
<template>
|
<template>
|
||||||
<section class="container py-32">
|
<section class="container py-32">
|
||||||
<div class="flex flex-col items-center text-center">
|
<div class="flex flex-col items-center text-center">
|
||||||
<h1 class="title text-sm md:text-2xl font-bold">
|
|
||||||
Does {{ app.name }} work on Apple Silicon?
|
|
||||||
</h1>
|
|
||||||
<h2 class="subtitle text-2xl md:text-5xl font-bold py-6">
|
|
||||||
{{ app.text }}
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<ThomasCredit />
|
<div class="intro-content flex flex-col items-center text-center min-h-3/4-screen md:min-h-0">
|
||||||
|
|
||||||
|
<h1 class="title text-sm md:text-2xl font-bold">
|
||||||
|
Does {{ app.name }} work on Apple Silicon?
|
||||||
|
</h1>
|
||||||
|
<h2 class="subtitle text-2xl md:text-5xl font-bold py-6">
|
||||||
|
{{ app.text }}
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<ThomasCredit />
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|
|
||||||
|
|
@ -146,6 +146,26 @@ export default {
|
||||||
description () {
|
description () {
|
||||||
return `Check the the latest reported support status of ${this.pluralLabel || this.category.label} on Apple Silicon and Apple M1 Processors. `
|
return `Check the the latest reported support status of ${this.pluralLabel || this.category.label} on Apple Silicon and Apple M1 Processors. `
|
||||||
},
|
},
|
||||||
|
structuredData () {
|
||||||
|
return {
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
// https://developers.google.com/search/docs/data-types/faqpage
|
||||||
|
// https://schema.org/FAQPage
|
||||||
|
"@type": "FAQPage",
|
||||||
|
"mainEntity": this.categoryAppList.map( app => {
|
||||||
|
return {
|
||||||
|
// https://schema.org/Question
|
||||||
|
"@type": "Question",
|
||||||
|
"name": `Does ${app.name} work on Apple Silicon and Apple M1 Macs?`,
|
||||||
|
"acceptedAnswer": {
|
||||||
|
// https://schema.org/Answer
|
||||||
|
"@type": "Answer",
|
||||||
|
"text": app.text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
head() {
|
head() {
|
||||||
return {
|
return {
|
||||||
|
|
@ -173,7 +193,9 @@ export default {
|
||||||
'property': 'twitter:url',
|
'property': 'twitter:url',
|
||||||
'content': `${process.env.URL}${this.$nuxt.$route.path}`
|
'content': `${process.env.URL}${this.$nuxt.$route.path}`
|
||||||
},
|
},
|
||||||
]
|
],
|
||||||
|
__dangerouslyDisableSanitizers: ['script'],
|
||||||
|
script: [{ innerHTML: JSON.stringify(this.structuredData), type: 'application/ld+json' }]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,23 @@
|
||||||
<VideoPlayer
|
<VideoPlayer
|
||||||
:video="video"
|
:video="video"
|
||||||
class="pt-16"
|
class="pt-16"
|
||||||
/>
|
>
|
||||||
|
|
||||||
|
<template v-slot:cover-bottom>
|
||||||
|
<div class="page-heading h-full flex items-end md:p-4">
|
||||||
|
<h1 class="title text-xs text-left md:text-2xl font-bold">
|
||||||
|
{{ video.name }}
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</VideoPlayer>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="md:flex w-full justify-between space-y-4 md:space-y-0 md:px-10"
|
class="md:flex w-full justify-between space-y-4 md:space-y-0 md:px-10"
|
||||||
>
|
>
|
||||||
<h1 class="title text-lg md:text-2xl font-bold">
|
<!-- <h1 class="title text-lg md:text-2xl font-bold">
|
||||||
{{ video.name }}
|
{{ video.name }}
|
||||||
</h1>
|
</h1> -->
|
||||||
|
|
||||||
<ChannelCredit
|
<ChannelCredit
|
||||||
:video="video"
|
:video="video"
|
||||||
|
|
@ -72,12 +81,20 @@
|
||||||
|
|
||||||
import { getAppEndpoint } from '~/helpers/app-derived.js'
|
import { getAppEndpoint } from '~/helpers/app-derived.js'
|
||||||
|
|
||||||
|
import { buildVideoStructuredData } from '~/helpers/structured-data.js'
|
||||||
|
|
||||||
import LinkButton from '~/components/link-button.vue'
|
import LinkButton from '~/components/link-button.vue'
|
||||||
import EmailSubscribe from '~/components/email-subscribe.vue'
|
import EmailSubscribe from '~/components/email-subscribe.vue'
|
||||||
import VideoRow from '~/components/video/row.vue'
|
import VideoRow from '~/components/video/row.vue'
|
||||||
import VideoPlayer from '~/components/video/player.vue'
|
import VideoPlayer from '~/components/video/player.vue'
|
||||||
import ChannelCredit from '~/components/video/channel-credit.vue'
|
import ChannelCredit from '~/components/video/channel-credit.vue'
|
||||||
|
|
||||||
|
|
||||||
|
function makeFeaturedAppsString ( featuredApps ) {
|
||||||
|
return featuredApps.slice(0, 5).map(app => app.name).join(', ')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
LinkButton,
|
LinkButton,
|
||||||
|
|
@ -86,30 +103,35 @@ export default {
|
||||||
VideoPlayer,
|
VideoPlayer,
|
||||||
ChannelCredit
|
ChannelCredit
|
||||||
},
|
},
|
||||||
asyncData ({ params: { slug }, payload: { video, featuredApps, relatedVideos } }) {
|
async asyncData ( data ) {
|
||||||
|
|
||||||
// const { appsRelatedToVideo, videosRelatedToVideo } = await import('~/helpers/related.js')
|
|
||||||
// const { default: videoList } = await import('~/static/video-list.json')
|
|
||||||
|
|
||||||
// Find the video for our current page
|
const {
|
||||||
// const video = videoList.find(video => (video.slug === slug))
|
params: { slug },
|
||||||
|
route
|
||||||
|
} = data
|
||||||
|
|
||||||
// Get featured apps
|
let {
|
||||||
// const featuredApps = appsRelatedToVideo(video)
|
payload
|
||||||
|
} = data
|
||||||
|
|
||||||
// // Get related videos
|
// Manually get payload as fallback
|
||||||
// const relatedVideos = videosRelatedToVideo(video)
|
// Uncomment for dev
|
||||||
|
// if ( payload === undefined ) {
|
||||||
|
// // Read back the JSON we just wrote to ensure it exists
|
||||||
|
// const { default: savedList } = await import('~/static/nuxt-endpoints.json')
|
||||||
|
|
||||||
// console.log({
|
// const endpoint = savedList.find( resource => {
|
||||||
// video,
|
// return resource.route === route.path
|
||||||
// featuredApps,
|
// } )
|
||||||
// relatedVideos
|
|
||||||
// })
|
// payload = endpoint.payload
|
||||||
|
// }
|
||||||
|
|
||||||
return {
|
return {
|
||||||
video,
|
video: payload.video,
|
||||||
featuredApps,
|
featuredApps: payload.featuredApps,
|
||||||
relatedVideos
|
relatedVideos: payload.relatedVideos
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -117,15 +139,21 @@ export default {
|
||||||
return `${this.video.name} - Does It ARM`
|
return `${this.video.name} - Does It ARM`
|
||||||
},
|
},
|
||||||
description () {
|
description () {
|
||||||
const featuredAppsString = this.featuredApps.slice(0, 5).map(app => app.name).join(', ')
|
const featuredAppsString = makeFeaturedAppsString( this.featuredApps )
|
||||||
|
|
||||||
return `Apple Silicon performance and support videos for ${featuredAppsString}`
|
return `Apple Silicon performance and support videos for ${featuredAppsString}`
|
||||||
}
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getAppEndpoint
|
getAppEndpoint
|
||||||
},
|
},
|
||||||
head() {
|
head() {
|
||||||
|
const structuredData = buildVideoStructuredData( this.video, this.featuredApps, {
|
||||||
|
siteUrl: this.$config.siteUrl
|
||||||
|
} )
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title: this.title,
|
title: this.title,
|
||||||
meta: [
|
meta: [
|
||||||
|
|
@ -151,7 +179,10 @@ export default {
|
||||||
'property': 'twitter:url',
|
'property': 'twitter:url',
|
||||||
'content': `${process.env.URL}${this.$nuxt.$route.path}`
|
'content': `${process.env.URL}${this.$nuxt.$route.path}`
|
||||||
},
|
},
|
||||||
]
|
],
|
||||||
|
|
||||||
|
__dangerouslyDisableSanitizers: ['script'],
|
||||||
|
script: [{ innerHTML: JSON.stringify( structuredData ), type: 'application/ld+json' }]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
plugins: {
|
|
||||||
tailwindcss: { config: './tailwind.config.js' },
|
|
||||||
autoprefixer: {},
|
|
||||||
cssnano: {},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1
static/3215494.html
Normal file
1
static/3215494.html
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
|
||||||
194
test/main.js
Normal file
194
test/main.js
Normal file
|
|
@ -0,0 +1,194 @@
|
||||||
|
import { promises as fs } from 'fs'
|
||||||
|
|
||||||
|
import test from 'ava'
|
||||||
|
import parser from 'fast-xml-parser'
|
||||||
|
import axios from 'axios'
|
||||||
|
import { structuredDataTest } from 'structured-data-testing-tool'
|
||||||
|
import { Google, Twitter } from 'structured-data-testing-tool/presets'
|
||||||
|
|
||||||
|
// require('dotenv').config()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
async function testStructuredData ( options ) {
|
||||||
|
const {
|
||||||
|
pageUrls,
|
||||||
|
// Check for compliance with Google, Twitter and Facebook recommendations
|
||||||
|
presets = [
|
||||||
|
Google
|
||||||
|
],
|
||||||
|
// Check the page includes a specific Schema (see https://schema.org/docs/full.html for a list)
|
||||||
|
schemas
|
||||||
|
} = options
|
||||||
|
|
||||||
|
for ( const url of pageUrls ) {
|
||||||
|
|
||||||
|
const pagePath = `./dist${ url.pathname }/index.html`
|
||||||
|
const pageHtml = await fs.readFile( pagePath , 'utf-8' )
|
||||||
|
|
||||||
|
// https://github.com/glitchdigital/structured-data-testing-tool#api
|
||||||
|
await structuredDataTest( pageHtml , {
|
||||||
|
presets,
|
||||||
|
schemas
|
||||||
|
}).then(res => {
|
||||||
|
return res
|
||||||
|
}).catch(err => {
|
||||||
|
// console.log( 'err.res.failed', err.res.failed )
|
||||||
|
|
||||||
|
if (err.type === 'VALIDATION_FAILED') {
|
||||||
|
|
||||||
|
// t.fail( 'Some structured data tests failed.' )
|
||||||
|
const validationError = new Error( 'Some structured data tests failed.' )
|
||||||
|
|
||||||
|
validationError.failed = err.res.failed
|
||||||
|
|
||||||
|
throw validationError
|
||||||
|
|
||||||
|
// return
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error( 'Structured data testing error.', err )
|
||||||
|
})
|
||||||
|
|
||||||
|
// console.log('result', tvUrl.pathname, Object.keys( result ))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
test.before(async t => {
|
||||||
|
const sitemapXml = await fs.readFile('./dist/sitemap.xml', 'utf-8')
|
||||||
|
const sitemap = parser.parse( sitemapXml )
|
||||||
|
|
||||||
|
// Store sitemap urls to context
|
||||||
|
t.context.sitemapUrls = sitemap.urlset.url.map( tag => new URL( tag.loc ) )
|
||||||
|
})
|
||||||
|
|
||||||
|
test('Sitemap contains no double slashes in paths', (t) => {
|
||||||
|
// console.log('t.context.sitemapUrls', t.context.sitemapUrls)
|
||||||
|
|
||||||
|
const urlsWithDoubleSlashes = t.context.sitemapUrls.filter( url => url.pathname.includes('//') )
|
||||||
|
|
||||||
|
if ( urlsWithDoubleSlashes.length > 0) {
|
||||||
|
t.fail( `${ urlsWithDoubleSlashes.length } urls with doubles slashes found including ${ urlsWithDoubleSlashes[0] }` )
|
||||||
|
}
|
||||||
|
|
||||||
|
t.log( `${t.context.sitemapUrls.length} valid sitemap listings` )
|
||||||
|
t.pass()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test('Sitemap mostly matches production', async (t) => {
|
||||||
|
// console.log('t.context.sitemapUrls', t.context.sitemapUrls)
|
||||||
|
|
||||||
|
const theshold = 1
|
||||||
|
|
||||||
|
const urlsNotOnLive = new Set()
|
||||||
|
// const newLocalUrls = new Set()
|
||||||
|
|
||||||
|
const liveSitemapXml = await axios( 'https://doesitarm.com/sitemap.xml' ).then( response => response.data )
|
||||||
|
const liveSitemap = parser.parse( liveSitemapXml )
|
||||||
|
|
||||||
|
// Store sitemap urls to context
|
||||||
|
const liveSitemapUrls = new Map( liveSitemap.urlset.url.map( tag => [ tag.loc, new URL( tag.loc )] ) )
|
||||||
|
|
||||||
|
|
||||||
|
for ( const localUrl of t.context.sitemapUrls ) {
|
||||||
|
const theoreticalLiveUrl = `https://doesitarm.com${ localUrl.pathname }`
|
||||||
|
|
||||||
|
if ( liveSitemapUrls.has( theoreticalLiveUrl ) ) {
|
||||||
|
liveSitemapUrls.delete( theoreticalLiveUrl )
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// localUrl is either: Missing or New
|
||||||
|
urlsNotOnLive.add( theoreticalLiveUrl )
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const message = `${ urlsNotOnLive.size } new or missing from live and ${ liveSitemapUrls.size } not found locally`
|
||||||
|
|
||||||
|
if ( (urlsNotOnLive.size + liveSitemapUrls.size) >= theshold ) {
|
||||||
|
t.fail( message )
|
||||||
|
}
|
||||||
|
|
||||||
|
t.log( message )
|
||||||
|
t.pass()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('All Category pages have valid FAQPage structured data', async (t) => {
|
||||||
|
|
||||||
|
const categoryUrls = t.context.sitemapUrls.filter( url => url.pathname.startsWith('/kind/') )
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
await testStructuredData({
|
||||||
|
pageUrls: categoryUrls,
|
||||||
|
schemas: [ 'FAQPage' ],
|
||||||
|
presets: [
|
||||||
|
Google,
|
||||||
|
// Twitter
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
} catch ( error ) {
|
||||||
|
console.log('failed', error.failed)
|
||||||
|
t.fail( error.message )
|
||||||
|
}
|
||||||
|
|
||||||
|
t.log( `${categoryUrls.length} valid pages` )
|
||||||
|
t.pass()
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test('All Device pages have valid FAQPage structured data', async (t) => {
|
||||||
|
|
||||||
|
const deviceUrls = t.context.sitemapUrls.filter( url => url.pathname.startsWith('/device/') )
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
await testStructuredData({
|
||||||
|
pageUrls: deviceUrls,
|
||||||
|
schemas: [ 'FAQPage' ],
|
||||||
|
presets: [
|
||||||
|
Google,
|
||||||
|
// Twitter
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
} catch ( error ) {
|
||||||
|
console.log('failed', error.failed)
|
||||||
|
t.fail( error.message )
|
||||||
|
}
|
||||||
|
|
||||||
|
t.log( `${deviceUrls.length} valid pages` )
|
||||||
|
t.pass()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test('All TV pages have valid VideoObject structured data', async (t) => {
|
||||||
|
|
||||||
|
const tvUrls = t.context.sitemapUrls.filter( url => url.pathname.startsWith('/tv/') )
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
await testStructuredData({
|
||||||
|
pageUrls: tvUrls,
|
||||||
|
schemas: [ 'VideoObject' ]
|
||||||
|
})
|
||||||
|
|
||||||
|
} catch ( error ) {
|
||||||
|
console.log('failed', error.failed)
|
||||||
|
t.fail( error.message )
|
||||||
|
}
|
||||||
|
|
||||||
|
t.log( `${tvUrls.length} valid pages` )
|
||||||
|
t.pass()
|
||||||
|
|
||||||
|
})
|
||||||
Loading…
Add table
Add a link
Reference in a new issue