{"apps":[{"id":"amit-bet/fastlane","owner_id":"amit-bet","slug":"fastlane","title":"Life in the Fast Lane","summary":"A polished 1–4 player life strategy game about work, education, housing, shopping, and beating the competition.","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["fastlane"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"fastlane","icon":"icon.svg","name":"Life in the Fast Lane","tags":["game","strategy","simulation","retro"],"assets":{"icon":"icon.svg","screenshots":[]},"author":{"name":"DynApp"},"launch":{"commands":["fastlane"]},"source":{"root":"src","language":"javascript","framework":"none"},"display":{"orientation":"landscape"},"license":"MIT","scripts":{"test":"node --test tests/*.test.mjs","build":"node build.mjs","typecheck":"node scripts/typecheck.mjs"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/fastlane"},"version":"0.12.2","repository":{"url":"https://github.com/amitbet/dynapp","type":"git"},"description":"A polished 1–4 player life strategy game about work, education, housing, shopping, and beating the competition.","shareability":{"modifiableByA2":true,"intendedAudience":"general users","requiresExternalAccounts":false},"schemaVersion":2,"minShellVersion":"0.1.1","backendPermissions":[],"snapshot":"https://dynapp.io/snapshots/amit-bet/fastlane.png"},"tags":[],"permissions":[],"permission_reasons":{},"content_license":"MIT","licensed_materials":[],"rights_status":"clear","rights_reasons":["The declared content license is not disallowed by Dyner policy."],"current_revision_id":"rev_cz_jJl1LKBTkFSjgDVE","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/fastlane","origin_revision_id":"rev_PjF0rrbUg7PgJlVN7X0","fork_depth":0,"installs_count":"1","launches_count":"52","votes_count":"0","score_source_quality":100,"score_editability":20,"score_mergeability":0,"score_permission_reasons":100,"score_content_rights":100,"score_trust":52,"score_popularity":0,"score_activity":100,"activity_files_changed_30d":183,"activity_lines_added_30d":"7169","activity_lines_deleted_30d":"2354","score_total":43,"created_at":"2026-07-17T10:05:48.806Z","updated_at":"2026-10-29T03:07:26.164Z","hostname_slug":"amitbet-fastlane"},{"id":"amit-bet/home-intercom","owner_id":"amit-bet","slug":"home-intercom","title":"Home Intercom","summary":"Talk through your xiaozhi ESP32 intercom speakers from this computer's microphone: auto-discovers speakers on the home hub, push-to-talk, open calls and announce-to-all.","icon":"icon.svg","manifest_schema_version":2,"launch":{},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"home-intercom","icon":"icon.svg","name":"Home Intercom","tags":["intercom","smart-home","audio"],"assets":{"icon":"icon.svg","screenshots":[]},"author":{"name":"Amit Bezalel"},"source":{"root":"src","language":"javascript","framework":"none"},"license":"MIT","scripts":{"test":"node tests/app.test.mjs","build":"node build.mjs","typecheck":"node scripts/typecheck.mjs"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/home-intercom"},"version":"0.1.22","repository":{"url":"https://github.com/amitbet/dynapp","type":"git"},"description":"Talk through your xiaozhi ESP32 intercom speakers from this computer's microphone: auto-discovers speakers on the home hub, push-to-talk, open calls and announce-to-all.","shareability":{"modifiableByA2":true,"intendedAudience":"developers","requiresExternalAccounts":false},"schemaVersion":2,"minShellVersion":"0.1.1","backendPermissions":[{"reason":"Opens a TCP connection from this computer's DynApp agent to your home intercom hub (xiaozhi-hub on the LAN) to list speakers and stream call audio, since an HTTPS page cannot open plain LAN sockets.","permission":"net.tcp.connect"},{"reason":"Uses the DynApp agent on this computer (127.0.0.1:9011) as the carrier for the TCP bridge to the intercom hub.","permission":"remoteEnv.connect"},{"reason":"Runs a local coding agent you ask to inspect and change the app's exposed data model.","remote":true,"permission":"agent.session"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self' https://127.0.0.1:9011 https://localhost:9011; worker-src 'self' blob:; media-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src 'none'; frame-ancestors 'none'"},"tags":[],"permissions":["net.tcp.connect","remoteEnv.connect","agent.session"],"permission_reasons":{"agent.session":"Runs a local coding agent you ask to inspect and change the app's exposed data model.","net.tcp.connect":"Opens a TCP connection from this computer's DynApp agent to your home intercom hub (xiaozhi-hub on the LAN) to list speakers and stream call audio, since an HTTPS page cannot open plain LAN sockets.","remoteEnv.connect":"Uses the DynApp agent on this computer (127.0.0.1:9011) as the carrier for the TCP bridge to the intercom hub."},"content_license":"MIT","licensed_materials":[],"rights_status":"clear","rights_reasons":["The declared content license is not disallowed by Dyner policy."],"current_revision_id":"rev_pshsg6RxbQCF9o4ZqJ4","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/home-intercom","origin_revision_id":"rev_stLI9mw9dU_0ZqNc54g","fork_depth":0,"installs_count":"0","launches_count":"116","votes_count":"0","score_source_quality":100,"score_editability":11,"score_mergeability":0,"score_permission_reasons":87,"score_content_rights":100,"score_trust":52,"score_popularity":0,"score_activity":93,"activity_files_changed_30d":41,"activity_lines_added_30d":"463","activity_lines_deleted_30d":"176","score_total":42,"created_at":"2026-09-23T20:37:00.567Z","updated_at":"2026-10-29T03:07:25.582Z","hostname_slug":"amitbet-home-intercom"},{"id":"amit-bet/dyhelp","owner_id":"amit-bet","slug":"dyhelp","title":"DyHelp","summary":"The practical guide to DynApps, Dyner, DyMaker, forks, publishing, permissions, and updates","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["dyhelp","help"]},"targets":{"ios":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"dyhelp","icon":"icon.svg","name":"DyHelp","tags":["documentation","help","dynapp","learning"],"assets":{"icon":"icon.svg","screenshots":[]},"author":{"name":"DynApp"},"launch":{"commands":["dyhelp","help"]},"source":{"root":"src","language":"javascript","framework":"none"},"builtIn":true,"license":"MIT","scripts":{"test":"node tests/app.test.mjs","build":"node build.mjs","typecheck":"node scripts/typecheck.mjs"},"targets":{"ios":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/dyhelp"},"version":"0.3.34","repository":{"url":"https://github.com/amitbet/dynapp","type":"git"},"description":"The practical guide to DynApps, Dyner, DyMaker, forks, publishing, permissions, and updates","shareability":{"modifiableByA2":true,"intendedAudience":"general","requiresExternalAccounts":false},"schemaVersion":2,"minShellVersion":"0.1.1","backendPermissions":[],"snapshot":"https://dynapp.io/snapshots/amit-bet/dyhelp.png"},"tags":[],"permissions":[],"permission_reasons":{},"content_license":"MIT","licensed_materials":[],"rights_status":"clear","rights_reasons":["The declared content license is not disallowed by Dyner policy."],"current_revision_id":"rev_ztWF70CiL-kIDhcHOVo","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/dyhelp","origin_revision_id":"rev_awG_rlPoF4z2HvBdqVg","fork_depth":0,"installs_count":"6","launches_count":"3","votes_count":"0","score_source_quality":100,"score_editability":20,"score_mergeability":0,"score_permission_reasons":100,"score_content_rights":100,"score_trust":52,"score_popularity":0,"score_activity":56,"activity_files_changed_30d":7,"activity_lines_added_30d":"26","activity_lines_deleted_30d":"21","score_total":41,"created_at":"2026-07-14T03:35:00.488Z","updated_at":"2026-10-29T03:07:25.631Z","hostname_slug":"amitbet-dyhelp"},{"id":"amit-bet/dykeep","owner_id":"amit-bet","slug":"dykeep","title":"DyKeep","summary":"A private, offline-first encrypted password vault","icon":"icon.svg","manifest_schema_version":2,"launch":{},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Opens an encrypted DyKeep vault backup selected explicitly by the user for local import.","permission":"dialog.openDataFile"},{"reason":"Saves an encrypted DyKeep vault backup to a location selected explicitly by the user.","permission":"dialog.saveDataFile"},{"reason":"Checks whether a copied credential is still on the clipboard before clearing only that value.","permission":"clipboard.read"},{"reason":"Copies a selected username or password and clears that exact clipboard value after a short delay.","permission":"clipboard.write"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"dykeep","icon":"icon.svg","name":"DyKeep","tags":["security","passwords","productivity","offline"],"assets":{"icon":"icon.svg","screenshots":[]},"author":{"name":"DynApp"},"source":{"root":"src","language":"javascript","framework":"none"},"license":"MIT","scripts":{"test":"node --test tests/*.test.mjs","build":"node build.mjs","typecheck":"node scripts/typecheck.mjs"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Opens an encrypted DyKeep vault backup selected explicitly by the user for local import.","permission":"dialog.openDataFile"},{"reason":"Saves an encrypted DyKeep vault backup to a location selected explicitly by the user.","permission":"dialog.saveDataFile"},{"reason":"Checks whether a copied credential is still on the clipboard before clearing only that value.","permission":"clipboard.read"},{"reason":"Copies a selected username or password and clears that exact clipboard value after a short delay.","permission":"clipboard.write"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/dykeep"},"version":"0.1.36","repository":{"url":"https://github.com/amitbet/dynapp","type":"git"},"description":"A private, offline-first encrypted password vault","shareability":{"modifiableByA2":true,"intendedAudience":"general users","requiresExternalAccounts":false},"schemaVersion":2,"minShellVersion":"0.1.1","backendPermissions":[{"reason":"Opens an encrypted DyKeep vault backup selected explicitly by the user for local import.","permission":"dialog.openDataFile"},{"reason":"Saves an encrypted DyKeep vault backup to a location selected explicitly by the user.","permission":"dialog.saveDataFile"},{"reason":"Checks whether a copied credential is still on the clipboard before clearing only that value.","permission":"clipboard.read"},{"reason":"Copies a selected username or password and clears that exact clipboard value after a short delay.","permission":"clipboard.write"}],"snapshot":"https://dynapp.io/snapshots/amit-bet/dykeep.png"},"tags":[],"permissions":["dialog.openDataFile","dialog.saveDataFile","clipboard.read","clipboard.write"],"permission_reasons":{"clipboard.read":"Checks whether a copied credential is still on the clipboard before clearing only that value.","clipboard.write":"Copies a selected username or password and clears that exact clipboard value after a short delay.","dialog.openDataFile":"Opens an encrypted DyKeep vault backup selected explicitly by the user for local import.","dialog.saveDataFile":"Saves an encrypted DyKeep vault backup to a location selected explicitly by the user."},"content_license":"MIT","licensed_materials":[],"rights_status":"clear","rights_reasons":["The declared content license is not disallowed by Dyner policy."],"current_revision_id":"rev_GzUlYVgtClp5I2sIUJ0","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/dykeep","origin_revision_id":"rev_hCCOuUiI_DwBjcyakfs","fork_depth":0,"installs_count":"2","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":9,"score_mergeability":0,"score_permission_reasons":85,"score_content_rights":100,"score_trust":52,"score_popularity":0,"score_activity":52,"activity_files_changed_30d":7,"activity_lines_added_30d":"30","activity_lines_deleted_30d":"5","score_total":39,"created_at":"2026-07-15T06:47:43.370Z","updated_at":"2026-10-29T03:07:26.116Z","hostname_slug":"amitbet-dykeep"},{"id":"amit-bet/ensnap","owner_id":"amit-bet","slug":"ensnap","title":"Ensnap","summary":"Capture a screen or region with a global hotkey, mark it up, and copy or save the result.","icon":"icon.svg","manifest_schema_version":2,"launch":{},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"ensnap","icon":"icon.svg","name":"Ensnap","tags":["screenshots","productivity","graphics","annotation"],"assets":{"icon":"icon.svg","screenshots":["snapshot.svg"]},"author":{"name":"DynApp"},"source":{"root":"src","language":"javascript","framework":"none"},"license":"MIT","scripts":{"test":"node --test tests/*.test.mjs","build":"node build.mjs","typecheck":"node scripts/typecheck.mjs"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/ensnap"},"version":"0.1.4","repository":{"url":"https://github.com/amitbet/dynapp","type":"git"},"description":"Capture a screen or region with a global hotkey, mark it up, and copy or save the result.","shareability":{"modifiableByA2":true,"intendedAudience":"everyone","requiresExternalAccounts":false},"schemaVersion":2,"minShellVersion":"0.1.1","backendPermissions":[{"reason":"Captures the selected display when you press a global hotkey or use the tray menu so Ensnap can crop and mark up what is on screen.","permission":"screen.capture"},{"reason":"Registers the area and display capture shortcuts so Ensnap can grab a screenshot while another app is focused.","permission":"globalShortcut"},{"reason":"Adds an Ensnap tray icon with capture actions so you can take a screenshot without bringing the window forward first.","permission":"tray.manage"},{"reason":"Copies the captured or annotated PNG so you can paste it into another app without saving a file first.","permission":"clipboard.write"},{"reason":"Shows the system save dialog so you can write the finished PNG to a filename and folder you choose.","permission":"dialog.saveImage"},{"reason":"Lets you pick an existing image to mark up when native screen capture is unavailable or you want to annotate a file.","permission":"dialog.openImage"}]},"tags":[],"permissions":["screen.capture","globalShortcut","tray.manage","clipboard.write","dialog.saveImage","dialog.openImage"],"permission_reasons":{"tray.manage":"Adds an Ensnap tray icon with capture actions so you can take a screenshot without bringing the window forward first.","globalShortcut":"Registers the area and display capture shortcuts so Ensnap can grab a screenshot while another app is focused.","screen.capture":"Captures the selected display when you press a global hotkey or use the tray menu so Ensnap can crop and mark up what is on screen.","clipboard.write":"Copies the captured or annotated PNG so you can paste it into another app without saving a file first.","dialog.openImage":"Lets you pick an existing image to mark up when native screen capture is unavailable or you want to annotate a file.","dialog.saveImage":"Shows the system save dialog so you can write the finished PNG to a filename and folder you choose."},"content_license":"MIT","licensed_materials":[],"rights_status":"clear","rights_reasons":["The declared content license is not disallowed by Dyner policy."],"current_revision_id":"rev_hnP71LYOkvPwBcNrTFE","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/ensnap","origin_revision_id":"rev_IUb5NdwXwgG7IBaJ7Ts","fork_depth":0,"installs_count":"0","launches_count":"22","votes_count":"0","score_source_quality":100,"score_editability":4,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":100,"score_trust":52,"score_popularity":0,"score_activity":32,"activity_files_changed_30d":14,"activity_lines_added_30d":"4","activity_lines_deleted_30d":"4","score_total":38,"created_at":"2026-09-05T08:22:59.674Z","updated_at":"2026-10-29T03:07:26.083Z","hostname_slug":"amitbet-ensnap"},{"id":"amnon-bet/stocksim","owner_id":"amnon-bet","slug":"stocksim","title":"Stock Simulator","summary":"A Yahoo-backed market replay workstation for strategy simulation and stock detail ranking","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["stocksim"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"stocksim","icon":"icon.svg","name":"Stock Simulator","tags":["finance","stocks","simulation","analytics"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["stocksim"]},"origin":{"url":"https://dynapp.io/app/amit-bet/stocksim","appId":"amit-bet/stocksim","version":"0.1.50","revision":"rev_8s7TZgV6WdXbfYygK2I"},"source":{"root":"src","language":"javascript"},"license":"MIT","scripts":{"test":"node node_modules/vitest/vitest.mjs run","build":"node build.mjs"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amnon-bet/stocksim"},"version":"0.1.51","description":"A Yahoo-backed market replay workstation for strategy simulation and stock detail ranking","schemaVersion":2,"minShellVersion":"1.4.128","backendPermissions":[{"reason":"Exports simulation results and ranked stock data as a text file at a location you choose.","permission":"dialog.saveTextFile"},{"reason":"Retrieves market data over HTTPS from the financial data providers used by the simulator.","connect":["https://query1.finance.yahoo.com/v8/","https://query1.finance.yahoo.com/v1/","https://query2.finance.yahoo.com/v8/","https://query2.finance.yahoo.com/v1/","https://stockcharts.com/j-sum/","https://stockcharts.com/quotebrain/","https://finviz.com/quote.ashx","https://api.nasdaq.com/"],"permission":"net.protocol.https"},{"reason":"Lets you choose the machine that retrieves market data for the hosted simulator.","permission":"remoteEnv.ui.picker"},{"reason":"Connects to the selected machine to retrieve market data for the hosted simulator.","permission":"remoteEnv.connect"},{"reason":"Lets you choose the folder of CSV tickers and Pine scripts that Technical Analysis loads and watches.","permission":"dialog.pickPath"},{"reason":"Opens the folder picker in your home directory and expands a path typed with ~ when you link a data folder.","permission":"fs.home"},{"reason":"Lists your drives and top-level folders in the folder picker when you link a data folder.","permission":"fs.roots"},{"reason":"Checks that the data folder you type exists and is a folder before Technical Analysis links it.","permission":"fs.stat"},{"reason":"Lets you browse folders in the picker and lists the CSV and Pine files in your linked data folder so they load automatically.","permission":"fs.list"},{"reason":"Reads the CSV tickers and Pine scripts in your linked data folder into Technical Analysis.","permission":"fs.readText"},{"reason":"Notices when files in your linked data folder change so Technical Analysis reloads them without a prompt.","permission":"fs.watch"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'unsafe-eval' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https:; font-src 'self' data:; connect-src 'self' https://query1.finance.yahoo.com https://query2.finance.yahoo.com https://stockcharts.com https://finviz.com https://api.nasdaq.com; worker-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src 'none'; frame-ancestors 'none'"},"tags":[],"permissions":["dialog.saveTextFile","net.protocol.https","remoteEnv.ui.picker","remoteEnv.connect","dialog.pickPath","fs.home","fs.roots","fs.stat","fs.list","fs.readText","fs.watch"],"permission_reasons":{"fs.home":"Opens the folder picker in your home directory and expands a path typed with ~ when you link a data folder.","fs.list":"Lets you browse folders in the picker and lists the CSV and Pine files in your linked data folder so they load automatically.","fs.stat":"Checks that the data folder you type exists and is a folder before Technical Analysis links it.","fs.roots":"Lists your drives and top-level folders in the folder picker when you link a data folder.","fs.watch":"Notices when files in your linked data folder change so Technical Analysis reloads them without a prompt.","fs.readText":"Reads the CSV tickers and Pine scripts in your linked data folder into Technical Analysis.","dialog.pickPath":"Lets you choose the folder of CSV tickers and Pine scripts that Technical Analysis loads and watches.","remoteEnv.connect":"Connects to the selected machine to retrieve market data for the hosted simulator.","net.protocol.https":"Retrieves market data over HTTPS from the financial data providers used by the simulator.","dialog.saveTextFile":"Exports simulation results and ranked stock data as a text file at a location you choose.","remoteEnv.ui.picker":"Lets you choose the machine that retrieves market data for the hosted simulator."},"content_license":"MIT","licensed_materials":[],"rights_status":"clear","rights_reasons":["The declared content license is not disallowed by Dyner policy."],"current_revision_id":"rev_Qmw2VJhh2InO7gEl4mM","forked_from_app_id":"amit-bet/stocksim","forked_from_revision_id":"rev_8s7TZgV6WdXbfYygK2I","origin_app_id":"amit-bet/stocksim","origin_revision_id":"rev_gLAdrPzV5u6LzgNVV5E","fork_depth":1,"installs_count":"0","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":30,"score_permission_reasons":84,"score_content_rights":100,"score_trust":26,"score_popularity":0,"score_activity":69,"activity_files_changed_30d":6,"activity_lines_added_30d":"114","activity_lines_deleted_30d":"7","score_total":38,"created_at":"2026-09-30T18:50:16.849Z","updated_at":"2026-10-29T03:07:25.995Z","hostname_slug":"amnonbet-stocksim"},{"id":"amit-bet/dymaker","owner_id":"amit-bet","slug":"dymaker","title":"DyMaker","summary":"A DynApp-aware code editor for creating, modifying, testing, and packaging apps with coding agents","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["directory"],"commands":["dymaker"]},"targets":{"web":{"ready":false,"formFactors":["desktop"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"dymaker","icon":"icon.svg","name":"DyMaker","tags":["developer-tools","code-editor","ai","dynapp"],"assets":{"icon":"icon.svg","screenshots":[]},"author":{"url":"https://github.com/amitbet/dynapp","name":"DynApp"},"launch":{"accepts":["directory"],"commands":["dymaker"]},"source":{"root":"src","language":"javascript","framework":"none"},"builtIn":true,"license":"MIT","scripts":{"test":"npm test","build":"npm run build","typecheck":"npm run typecheck"},"targets":{"web":{"ready":false,"formFactors":["desktop"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/dymaker"},"version":"0.1.52","repository":{"url":"https://github.com/amitbet/dynapp","type":"git"},"description":"A DynApp-aware code editor for creating, modifying, testing, and packaging apps with coding agents","shareability":{"modifiableByA2":true,"intendedAudience":"general","requiresExternalAccounts":false},"schemaVersion":2,"minShellVersion":"0.1.1","backendPermissions":[{"reason":"Carries the environment selected by the source app into DyMaker so the same draft folder opens for editing.","permission":"remoteEnv.ui.picker"},{"reason":"Connects DyMaker to the selected local or remote agent that owns the draft project files.","permission":"remoteEnv.connect"},{"reason":"Lets you choose DynApp project folders and parent folders for newly generated apps.","permission":"dialog.pickPath"},{"reason":"Saves the verified DynApp developer skill ZIP only when you choose the Download ZIP action.","permission":"dialog.saveDataFile"},{"reason":"Copies images pasted or dragged from browsers into Shell-owned attachment storage so coding agents can access them.","permission":"file.import"},{"reason":"Resolves files selected, pasted, or dropped into the composer so coding agents can access those attachments.","permission":"file.pathForFile"},{"reason":"Copies the selected DynApp project directory path to the clipboard when you request an external-agent handoff.","permission":"clipboard.write"},{"reason":"Opens DynApp project directories sent from the launcher, Finder, Explorer, or the command line.","permission":"externalOpen.files"},{"reason":"Provides a useful initial location when choosing or creating local DynApp projects.","remote":true,"permission":"fs.home"},{"reason":"Lists files inside the DynApp project you selected so the editor can build its explorer.","remote":true,"permission":"fs.list"},{"reason":"Checks project files and folders while validating package structure and refreshing editor state.","remote":true,"permission":"fs.stat"},{"reason":"Reads source, manifest, documentation, and configuration files from the selected DynApp project.","remote":true,"permission":"fs.readText"},{"reason":"Reads bounded image bytes from attachments you selected so DyMaker can show local previews before sending.","remote":true,"permission":"fs.readBase64"},{"reason":"Saves requested project edits and installs verified skill files only for the detected agents you explicitly select.","remote":true,"permission":"fs.writeText"},{"reason":"Creates requested project folders and personal skill directories only for the detected agents you explicitly select.","remote":true,"permission":"fs.mkdir"},{"reason":"Packages the selected DynApp project into a zip archive only when you choose the Package command.","remote":true,"permission":"fs.pack"},{"reason":"Removes only DyMaker's temporary thread-export staging directory after a requested ZIP export finishes.","remote":true,"permission":"fs.remove"},{"reason":"Watches the selected project so file changes made by tools and coding agents refresh the workbench.","remote":true,"permission":"fs.watch"},{"reason":"Opens the selected DynApp project in an installed editor or the platform file manager when you request it.","remote":true,"permission":"fs.openWith"},{"reason":"Runs the build, test, typecheck, and other scripts explicitly declared by the selected DynApp manifest.","remote":true,"permission":"fs.exec"},{"reason":"Runs coding-agent and Git executables with structured arguments and streams their output into the workbench.","remote":true,"permission":"fs.execFile"},{"reason":"Persists bounded coding-session runtime identifiers and replay cursors so active work can recover after a DyMaker reload.","remote":true,"permission":"sessions.manage"},{"reason":"Uses your Shell-managed Google sign-in to identify the Dyner account that owns published apps.","permission":"apps.account"},{"reason":"Browses DynApps available from the configured app store when you choose an app to inspect or fork.","permission":"apps.catalog"},{"reason":"Tracks unpublished changes in the selected thread's DynApp and bumps and uploads it to your Dyner account only when you click its Publish command.","remote":true,"permission":"apps.publish"},{"reason":"Copies the complete official DynApp boilerplate into the local folder you choose when you create a new app.","permission":"apps.manage"},{"reason":"Promotes your published fork into an independent top-level lineage only after you accept the detach warning, optionally applying your one-time slug change.","permission":"apps.detach"},{"reason":"Installs an app-store DynApp only after you explicitly choose the install action in DyMaker.","permission":"apps.install"},{"reason":"Opens a permission-reviewed live preview of the selected thread's DynApp project when you request it.","remote":true,"permission":"apps.launch"},{"reason":"Updates the DyMaker window title to show the active project and unsaved editor state.","permission":"window.manage"}]},"tags":[],"permissions":["remoteEnv.ui.picker","remoteEnv.connect","dialog.pickPath","dialog.saveDataFile","file.import","file.pathForFile","clipboard.write","externalOpen.files","fs.home","fs.list","fs.stat","fs.readText","fs.readBase64","fs.writeText","fs.mkdir","fs.pack","fs.remove","fs.watch","fs.openWith","fs.exec","fs.execFile","sessions.manage","apps.account","apps.catalog","apps.publish","apps.manage","apps.detach","apps.install","apps.launch","window.manage"],"permission_reasons":{"fs.exec":"Runs the build, test, typecheck, and other scripts explicitly declared by the selected DynApp manifest.","fs.home":"Provides a useful initial location when choosing or creating local DynApp projects.","fs.list":"Lists files inside the DynApp project you selected so the editor can build its explorer.","fs.pack":"Packages the selected DynApp project into a zip archive only when you choose the Package command.","fs.stat":"Checks project files and folders while validating package structure and refreshing editor state.","fs.mkdir":"Creates requested project folders and personal skill directories only for the detected agents you explicitly select.","fs.watch":"Watches the selected project so file changes made by tools and coding agents refresh the workbench.","fs.remove":"Removes only DyMaker's temporary thread-export staging directory after a requested ZIP export finishes.","apps.detach":"Promotes your published fork into an independent top-level lineage only after you accept the detach warning, optionally applying your one-time slug change.","apps.launch":"Opens a permission-reviewed live preview of the selected thread's DynApp project when you request it.","apps.manage":"Copies the complete official DynApp boilerplate into the local folder you choose when you create a new app.","file.import":"Copies images pasted or dragged from browsers into Shell-owned attachment storage so coding agents can access them.","fs.execFile":"Runs coding-agent and Git executables with structured arguments and streams their output into the workbench.","fs.openWith":"Opens the selected DynApp project in an installed editor or the platform file manager when you request it.","fs.readText":"Reads source, manifest, documentation, and configuration files from the selected DynApp project.","apps.account":"Uses your Shell-managed Google sign-in to identify the Dyner account that owns published apps.","apps.catalog":"Browses DynApps available from the configured app store when you choose an app to inspect or fork.","apps.install":"Installs an app-store DynApp only after you explicitly choose the install action in DyMaker.","apps.publish":"Tracks unpublished changes in the selected thread's DynApp and bumps and uploads it to your Dyner account only when you click its Publish command.","fs.writeText":"Saves requested project edits and installs verified skill files only for the detected agents you explicitly select.","fs.readBase64":"Reads bounded image bytes from attachments you selected so DyMaker can show local previews before sending.","window.manage":"Updates the DyMaker window title to show the active project and unsaved editor state.","clipboard.write":"Copies the selected DynApp project directory path to the clipboard when you request an external-agent handoff.","dialog.pickPath":"Lets you choose DynApp project folders and parent folders for newly generated apps.","sessions.manage":"Persists bounded coding-session runtime identifiers and replay cursors so active work can recover after a DyMaker reload.","file.pathForFile":"Resolves files selected, pasted, or dropped into the composer so coding agents can access those attachments.","remoteEnv.connect":"Connects DyMaker to the selected local or remote agent that owns the draft project files.","externalOpen.files":"Opens DynApp project directories sent from the launcher, Finder, Explorer, or the command line.","dialog.saveDataFile":"Saves the verified DynApp developer skill ZIP only when you choose the Download ZIP action.","remoteEnv.ui.picker":"Carries the environment selected by the source app into DyMaker so the same draft folder opens for editing."},"content_license":"MIT","licensed_materials":[],"rights_status":"clear","rights_reasons":["The declared content license is not disallowed by Dyner policy."],"current_revision_id":"rev_5WI3RPFFK4MPYrV_wA4","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/dymaker","origin_revision_id":"rev_0XLi9Uj3ZFP96DLKx1M","fork_depth":0,"installs_count":"0","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":83,"score_content_rights":100,"score_trust":52,"score_popularity":0,"score_activity":41,"activity_files_changed_30d":52,"activity_lines_added_30d":"8","activity_lines_deleted_30d":"8","score_total":37,"created_at":"2026-07-22T22:02:49.090Z","updated_at":"2026-10-29T03:07:26.050Z","hostname_slug":"amitbet-dymaker"},{"id":"amit-bet/remote-control","owner_id":"amit-bet","slug":"remote-control","title":"Remote Control","summary":"A tabbed remote control client for RDP, Apple High Performance Screen Sharing, VNC, and SSH","icon":"icon.svg","manifest_schema_version":2,"launch":{},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"remote-control","icon":"icon.svg","name":"Remote Control","tags":["remote-desktop","rdp","apple","vnc","ssh","terminal","network","productivity"],"assets":{"icon":"icon.svg","screenshots":[]},"author":{"name":"DynApp"},"license":"MIT","targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/remote-control"},"version":"0.1.225","description":"A tabbed remote control client for RDP, Apple High Performance Screen Sharing, VNC, and SSH","shareability":{"modifiableByA2":true,"intendedAudience":"general","requiresExternalAccounts":true},"schemaVersion":2,"minShellVersion":"0.1.1","backendPermissions":[{"reason":"Connects directly to the Windows computer you specify using the Remote Desktop protocol and Network Level Authentication.","request":"on-demand","permission":"net.protocol.rdp"},{"reason":"Connects to VNC servers selected by the user and provides full remote keyboard, pointer, clipboard, and display control.","request":"on-demand","permission":"net.protocol.vnc"},{"reason":"Uses a target-scoped Shell WebSocket bridge for VNC servers that expose raw RFB over TCP.","request":"on-demand","permission":"net.tcp.connect"},{"reason":"Carries Apple High Performance Screen Sharing media datagrams to the selected Mac.","request":"on-demand","permission":"net.udp.connect"},{"reason":"Starts the installed OpenSSH client with an argument array for key- or SSH-agent-authenticated terminal tabs.","remote":true,"request":"on-demand","permission":"fs.execFile"},{"reason":"Sets a descriptive native window title for the Remote Desktop connection manager.","permission":"window.manage"},{"reason":"Copies clipboard text from this device into an active remote desktop session.","remote":true,"permission":"clipboard.read"},{"reason":"Copies clipboard text received from an active remote desktop session onto this device.","remote":true,"permission":"clipboard.write"},{"reason":"Starts a native Finder drag for files dragged out of a remote Mac.","remote":true,"permission":"drag.files"},{"reason":"Lets you choose which paired computer provides network access for hosted remote desktop sessions.","permission":"remoteEnv.ui.picker"},{"reason":"Uses This machine as the trusted network transport provider.","permission":"remoteEnv.connect"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'wasm-unsafe-eval' blob:; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self' ws: wss: https: 'unsafe-webtransport-hashes'; worker-src 'self' blob:; media-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src 'none'; frame-ancestors 'none'"},"tags":[],"permissions":["net.protocol.rdp","net.protocol.vnc","net.tcp.connect","net.udp.connect","fs.execFile","window.manage","clipboard.read","clipboard.write","drag.files","remoteEnv.ui.picker","remoteEnv.connect"],"permission_reasons":{"drag.files":"Starts a native Finder drag for files dragged out of a remote Mac.","fs.execFile":"Starts the installed OpenSSH client with an argument array for key- or SSH-agent-authenticated terminal tabs.","window.manage":"Sets a descriptive native window title for the Remote Desktop connection manager.","clipboard.read":"Copies clipboard text from this device into an active remote desktop session.","clipboard.write":"Copies clipboard text received from an active remote desktop session onto this device.","net.tcp.connect":"Uses a target-scoped Shell WebSocket bridge for VNC servers that expose raw RFB over TCP.","net.udp.connect":"Carries Apple High Performance Screen Sharing media datagrams to the selected Mac.","net.protocol.rdp":"Connects directly to the Windows computer you specify using the Remote Desktop protocol and Network Level Authentication.","net.protocol.vnc":"Connects to VNC servers selected by the user and provides full remote keyboard, pointer, clipboard, and display control.","remoteEnv.connect":"Uses This machine as the trusted network transport provider.","remoteEnv.ui.picker":"Lets you choose which paired computer provides network access for hosted remote desktop sessions."},"content_license":"MIT","licensed_materials":[],"rights_status":"clear","rights_reasons":["The declared content license is not disallowed by Dyner policy."],"current_revision_id":"rev_fz0QW5Qt1bViAQZN6pY","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/remote-control","origin_revision_id":"rev_Z_AfvpmSQjF2v9qsPv0","fork_depth":0,"installs_count":"0","launches_count":"169","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":89,"score_content_rights":100,"score_trust":52,"score_popularity":0,"score_activity":23,"activity_files_changed_30d":38,"activity_lines_added_30d":"2","activity_lines_deleted_30d":"2","score_total":37,"created_at":"2026-09-02T07:16:36.318Z","updated_at":"2026-10-29T03:07:25.978Z","hostname_slug":"amitbet-remote-control"},{"id":"amit-bet/ballistic","owner_id":"amit-bet","slug":"ballistic","title":"Ballistic","summary":"A retro artillery game with deformable terrain, weapon shops, AI opponents, and LAN multiplayer","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["ballistic"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":false,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":false,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"],"minShellVersion":"0.1.255"}},"manifest":{"id":"ballistic","icon":"icon.svg","name":"Ballistic","tags":["game","artillery","strategy","multiplayer"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["ballistic"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":false,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":false,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"],"minShellVersion":"0.1.255"}},"updates":{"storeId":"amit-bet/ballistic"},"description":"A retro artillery game with deformable terrain, weapon shops, AI opponents, and LAN multiplayer","schemaVersion":2,"backendPermissions":[{"reason":"Opens a WebSocket listener on the local network only while you host a multiplayer game.","request":"on-demand","permission":"net.tcp.listen"}],"snapshot":"https://dynapp.io/snapshots/amit-bet/ballistic.png"},"tags":[],"permissions":["net.tcp.listen"],"permission_reasons":{"net.tcp.listen":"Opens a WebSocket listener on the local network only while you host a multiplayer game."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev__xTv49M519jkpjWdYoo","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/ballistic","origin_revision_id":"rev_jrsDq8mGKA0vcO9-MXQ","fork_depth":0,"installs_count":"16","launches_count":"42","votes_count":"1","score_source_quality":100,"score_editability":14,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":10,"score_activity":100,"activity_files_changed_30d":205,"activity_lines_added_30d":"18942","activity_lines_deleted_30d":"2379","score_total":36,"created_at":"2026-07-13T05:35:39.752Z","updated_at":"2026-10-29T03:07:25.598Z","hostname_slug":"amitbet-ballistic"},{"id":"amit-bet/iotscope","owner_id":"amit-bet","slug":"iotscope","title":"IoT Scope","summary":"Scan your network for IoT devices and Zigbee gadgets via MQTT bridges like Zigbee2MQTT","icon":"📡","manifest_schema_version":2,"launch":{"commands":["iotscope"]},"targets":{"web":{"ready":false,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"iotscope","icon":"📡","name":"IoT Scope","tags":["iot","network","smart-home","zigbee","utilities"],"assets":{"icon":"icon.svg","screenshots":[]},"author":{"name":"DynApp"},"launch":{"commands":["iotscope"]},"source":{"root":"src","language":"javascript","framework":"vite"},"license":"MIT","scripts":{"test":"node tests/app.test.mjs","build":"node build.mjs","typecheck":"node scripts/typecheck.mjs"},"targets":{"web":{"ready":false,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/iotscope"},"version":"0.2.71","description":"Scan your network for IoT devices and Zigbee gadgets via MQTT bridges like Zigbee2MQTT","shareability":{"modifiableByA2":true,"intendedAudience":"general","requiresExternalAccounts":false},"schemaVersion":2,"minShellVersion":"0.1.1","backendPermissions":[{"reason":"Runs read-only network discovery tools such as arp, ping, and dns-sd to locate devices on your LAN.","remote":true,"permission":"fs.execFile"},{"reason":"Probes local IoT device HTTP endpoints to read firmware, model, and service information.","connect":["http://127.0.0.1/"],"permission":"net.protocol.http"},{"reason":"Probes local IoT device HTTPS endpoints when devices expose configuration over TLS.","connect":["https://127.0.0.1/"],"permission":"net.protocol.https"},{"reason":"Declares intent to query MQTT brokers for Zigbee2MQTT, Tasmota, and Home Assistant device lists.","remote":true,"permission":"net.protocol.mqtt"},{"reason":"Declares intent to discover mDNS/Bonjour services such as MQTT brokers, Home Assistant, and ESPHome.","remote":true,"permission":"net.protocol.mdns"},{"reason":"Sets the native window title to IoT Scope so the utility is identifiable in the taskbar and window switcher.","permission":"window.manage"},{"reason":"Stores your last network scan results locally so the device list is restored when you reopen IoT Scope.","permission":"storage.local"},{"reason":"Lets you choose which machine IoT Scope scans when using the hosted app.","permission":"remoteEnv.ui.picker"},{"reason":"Connects IoT Scope to the selected remote machine so network discovery runs there instead of in your browser.","permission":"remoteEnv.connect"}]},"tags":[],"permissions":["fs.execFile","net.protocol.http","net.protocol.https","net.protocol.mqtt","net.protocol.mdns","window.manage","storage.local","remoteEnv.ui.picker","remoteEnv.connect"],"permission_reasons":{"fs.execFile":"Runs read-only network discovery tools such as arp, ping, and dns-sd to locate devices on your LAN.","storage.local":"Stores your last network scan results locally so the device list is restored when you reopen IoT Scope.","window.manage":"Sets the native window title to IoT Scope so the utility is identifiable in the taskbar and window switcher.","net.protocol.http":"Probes local IoT device HTTP endpoints to read firmware, model, and service information.","net.protocol.mdns":"Declares intent to discover mDNS/Bonjour services such as MQTT brokers, Home Assistant, and ESPHome.","net.protocol.mqtt":"Declares intent to query MQTT brokers for Zigbee2MQTT, Tasmota, and Home Assistant device lists.","remoteEnv.connect":"Connects IoT Scope to the selected remote machine so network discovery runs there instead of in your browser.","net.protocol.https":"Probes local IoT device HTTPS endpoints when devices expose configuration over TLS.","remoteEnv.ui.picker":"Lets you choose which machine IoT Scope scans when using the hosted app."},"content_license":"MIT","licensed_materials":[],"rights_status":"clear","rights_reasons":["The declared content license is not disallowed by Dyner policy."],"current_revision_id":"rev_CfVTz8G6gTDd341t8Tg","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/iotscope","origin_revision_id":"rev_CfVTz8G6gTDd341t8Tg","fork_depth":0,"installs_count":"0","launches_count":"1","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":82,"score_content_rights":100,"score_trust":52,"score_popularity":0,"score_activity":0,"activity_files_changed_30d":0,"activity_lines_added_30d":"0","activity_lines_deleted_30d":"0","score_total":35,"created_at":"2026-09-02T07:11:57.618Z","updated_at":"2026-10-29T03:07:26.198Z","hostname_slug":"amitbet-iotscope"},{"id":"amit-bet/atlas-of-almost","owner_id":"amit-bet","slug":"atlas-of-almost","title":"The Atlas of Almost","summary":"A short point-and-click adventure about a cartographer finding the words that bring her brother home.","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["atlas-of-almost"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]}},"manifest":{"id":"atlas-of-almost","icon":"icon.svg","name":"The Atlas of Almost","tags":["game","adventure","point-and-click","story"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["atlas-of-almost"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]}},"updates":{"storeId":"amit-bet/atlas-of-almost"},"description":"A short point-and-click adventure about a cartographer finding the words that bring her brother home.","schemaVersion":2,"backendPermissions":[]},"tags":[],"permissions":[],"permission_reasons":{},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_NrC6UfcTYn2BWV-63Uc","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/atlas-of-almost","origin_revision_id":"rev_VFQ__j3VD0M7RRizX3s","fork_depth":0,"installs_count":"0","launches_count":"14","votes_count":"0","score_source_quality":100,"score_editability":20,"score_mergeability":0,"score_permission_reasons":100,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":84,"activity_files_changed_30d":17,"activity_lines_added_30d":"343","activity_lines_deleted_30d":"2","score_total":34,"created_at":"2026-10-15T18:22:37.916Z","updated_at":"2026-10-29T03:07:25.738Z","hostname_slug":"amitbet-atlas-of-almost"},{"id":"amit-bet/tunebook","owner_id":"amit-bet","slug":"tunebook","title":"Tunebook","summary":"A compact music and audiobook player with a collapsible playlist, speed controls, chapters, resume, and a sleep timer","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["tunebook"],"fileTypes":[{"name":"MP3 audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/mpeg","audio/mp3"],"extensions":["mp3"],"description":"MP3 audio file"},{"name":"MPEG-4 audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/mp4","audio/x-m4a","audio/aac"],"extensions":["m4a","aac"],"description":"AAC or Apple Lossless audio in an MPEG-4 container"},{"name":"Audiobook","rank":"Owner","role":"Viewer","mimeTypes":["audio/x-m4b","audio/mp4"],"extensions":["m4b"],"description":"MPEG-4 audiobook with chapters"},{"name":"FLAC audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/flac","audio/x-flac"],"extensions":["flac"],"description":"Free Lossless Audio Codec file"},{"name":"Ogg audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/ogg","audio/opus"],"extensions":["ogg","oga","opus"],"description":"Ogg Vorbis or Opus audio file"},{"name":"WAV audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/wav","audio/x-wav","audio/wave"],"extensions":["wav"],"description":"Waveform audio file"},{"name":"AIFF audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/aiff","audio/x-aiff"],"extensions":["aif","aiff"],"description":"Audio Interchange File Format file"},{"name":"WebM audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/webm"],"extensions":["weba"],"description":"WebM audio file"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"tunebook","icon":"icon.svg","name":"Tunebook","tags":["media","music","audiobook","audio-player"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["tunebook"],"fileTypes":[{"name":"MP3 audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/mpeg","audio/mp3"],"extensions":["mp3"],"description":"MP3 audio file"},{"name":"MPEG-4 audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/mp4","audio/x-m4a","audio/aac"],"extensions":["m4a","aac"],"description":"AAC or Apple Lossless audio in an MPEG-4 container"},{"name":"Audiobook","rank":"Owner","role":"Viewer","mimeTypes":["audio/x-m4b","audio/mp4"],"extensions":["m4b"],"description":"MPEG-4 audiobook with chapters"},{"name":"FLAC audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/flac","audio/x-flac"],"extensions":["flac"],"description":"Free Lossless Audio Codec file"},{"name":"Ogg audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/ogg","audio/opus"],"extensions":["ogg","oga","opus"],"description":"Ogg Vorbis or Opus audio file"},{"name":"WAV audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/wav","audio/x-wav","audio/wave"],"extensions":["wav"],"description":"Waveform audio file"},{"name":"AIFF audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/aiff","audio/x-aiff"],"extensions":["aif","aiff"],"description":"Audio Interchange File Format file"},{"name":"WebM audio","rank":"Owner","role":"Viewer","mimeTypes":["audio/webm"],"extensions":["weba"],"description":"WebM audio file"}]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/tunebook"},"description":"A compact music and audiobook player with a collapsible playlist, speed controls, chapters, resume, and a sleep timer","schemaVersion":2,"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared audio file associations.","permission":"fileAssociations.manage"},{"reason":"Plays audio files sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Reads an audio file the operating system opened with Tunebook when only its local path was delivered.","remote":true,"permission":"fs.readBase64"}]},"tags":[],"permissions":["fileAssociations.manage","externalOpen.files","fs.readBase64"],"permission_reasons":{"fs.readBase64":"Reads an audio file the operating system opened with Tunebook when only its local path was delivered.","externalOpen.files":"Plays audio files sent from Finder, Explorer, file associations, or the command line.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared audio file associations."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_SU2lTLZPx4EteKQlOJQ","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/tunebook","origin_revision_id":"rev_tWY7pCr_X12dyF6624o","fork_depth":0,"installs_count":"0","launches_count":"7","votes_count":"0","score_source_quality":100,"score_editability":10,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":97,"activity_files_changed_30d":21,"activity_lines_added_30d":"3803","activity_lines_deleted_30d":"60","score_total":33,"created_at":"2026-10-04T09:22:11.471Z","updated_at":"2026-10-29T03:07:25.937Z","hostname_slug":"amitbet-tunebook"},{"id":"amit-bet/calendar","owner_id":"amit-bet","slug":"calendar","title":"Calendar","summary":"A focused view of calendars configured on your device with RSVP-aware meeting alerts","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["calendar"]},"targets":{"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Reads the device calendars you choose so the mobile app can display upcoming events and RSVP status.","permission":"calendar.read"},{"reason":"Shows foreground mobile reminders for meetings that still need your response.","permission":"notification.show"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Reads the device calendars you choose so the Android app can display upcoming events and RSVP status.","permission":"calendar.read"},{"reason":"Shows foreground Android reminders for meetings that still need your response.","permission":"notification.show"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"calendar","icon":"icon.svg","name":"Calendar","tags":["productivity","calendar","meetings","notifications"],"assets":{"icon":"icon.svg","screenshots":["snapshot.svg"]},"launch":{"commands":["calendar"]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Reads the device calendars you choose so the mobile app can display upcoming events and RSVP status.","permission":"calendar.read"},{"reason":"Shows foreground mobile reminders for meetings that still need your response.","permission":"notification.show"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Reads the device calendars you choose so the Android app can display upcoming events and RSVP status.","permission":"calendar.read"},{"reason":"Shows foreground Android reminders for meetings that still need your response.","permission":"notification.show"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/calendar"},"description":"A focused view of calendars configured on your device with RSVP-aware meeting alerts","schemaVersion":2,"backendPermissions":[{"reason":"Reads the device calendars you choose so the app can display upcoming events and meeting RSVP status.","remote":true,"permission":"calendar.read"},{"reason":"Shows timely reminders for upcoming meetings that still need your response.","permission":"notification.show"},{"reason":"Sets the native window title to Calendar so the app is identifiable in the taskbar and window switcher.","permission":"window.manage"}]},"tags":[],"permissions":["calendar.read","notification.show","window.manage"],"permission_reasons":{"calendar.read":"Reads the device calendars you choose so the app can display upcoming events and meeting RSVP status.","window.manage":"Sets the native window title to Calendar so the app is identifiable in the taskbar and window switcher.","notification.show":"Shows foreground Android reminders for meetings that still need your response."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_sO63jxa_KjQYWO6zzmg","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/calendar","origin_revision_id":"rev_FSA5EQEtme1W5Y_dhfE","fork_depth":0,"installs_count":"3","launches_count":"2","votes_count":"0","score_source_quality":100,"score_editability":11,"score_mergeability":0,"score_permission_reasons":87,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":90,"activity_files_changed_30d":7,"activity_lines_added_30d":"518","activity_lines_deleted_30d":"16","score_total":33,"created_at":"2026-07-13T05:29:57.449Z","updated_at":"2026-10-29T03:07:25.818Z","hostname_slug":"amitbet-calendar"},{"id":"amit-bet/lifewar","owner_id":"amit-bet","slug":"lifewar","title":"LifeWar","summary":"1v1 Game of Life war: forge cellular constructs in the armory, then deploy gliders, spaceships and methuselahs to breach the enemy line. Online multiplayer and a machine opponent.","icon":"icon.svg","manifest_schema_version":2,"launch":{},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"],"minShellVersion":"0.1.256"}},"manifest":{"id":"lifewar","icon":"icon.svg","name":"LifeWar","tags":["game","multiplayer","cellular-automata","strategy"],"assets":{"icon":"icon.svg","screenshots":[]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"],"minShellVersion":"0.1.256"}},"updates":{"storeId":"amit-bet/lifewar"},"description":"1v1 Game of Life war: forge cellular constructs in the armory, then deploy gliders, spaceships and methuselahs to breach the enemy line. Online multiplayer and a machine opponent.","schemaVersion":2,"backendPermissions":[{"reason":"Host a LifeWar WebSocket relay on this computer for players on the local network.","request":"on-demand","permission":"net.tcp.listen"}]},"tags":[],"permissions":["net.tcp.listen"],"permission_reasons":{"net.tcp.listen":"Host a LifeWar WebSocket relay on this computer for players on the local network."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_4BBTg8OXRsp49dsMK2Y","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/lifewar","origin_revision_id":"rev_ehrD3KRpp9NtCvB1N6U","fork_depth":0,"installs_count":"0","launches_count":"7","votes_count":"0","score_source_quality":100,"score_editability":18,"score_mergeability":0,"score_permission_reasons":100,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":60,"activity_files_changed_30d":36,"activity_lines_added_30d":"56","activity_lines_deleted_30d":"7","score_total":32,"created_at":"2026-09-02T12:23:35.636Z","updated_at":"2026-10-29T03:07:25.905Z","hostname_slug":"amitbet-lifewar"},{"id":"amit-bet/commander","owner_id":"amit-bet","slug":"commander","title":"Commander.js","summary":"A Total Commander-style dual-panel file manager: F5 copy, F6 move, marking, Lister viewer, command line","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["commanderjs"]},"targets":{"web":{"ready":false},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"commander","icon":"icon.svg","name":"Commander.js","tags":["files","file-manager","productivity","developer-tools"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["commanderjs"]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"web":{"ready":false},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/commander"},"description":"A Total Commander-style dual-panel file manager: F5 copy, F6 move, marking, Lister viewer, command line","schemaVersion":2,"backendPermissions":[{"reason":"Lets you log in from the badge menu and discover remote environments linked to your DynApp account.","permission":"apps.account"},{"reason":"Lets Commander paste explicitly requested remote files into the active local panel.","permission":"clipboard.write"},{"reason":"Lists and manages files on user-selected SFTP servers through the Shell.","remote":true,"permission":"net.protocol.sftp"},{"reason":"Writes files copied from a selected remote environment in relay-safe bounded chunks.","remote":true,"permission":"fs.writeChunk"},{"reason":"Lets you choose the execution environment used while testing Commander.","permission":"remoteEnv.ui.picker"},{"reason":"Lets Commander open the selected environment connection for filesystem operations while testing remote access.","permission":"remoteEnv.connect"},{"reason":"Lets you choose folders to open in either file panel instead of typing their paths.","permission":"dialog.pickPath"},{"reason":"Resolves files dropped onto Commander into local paths that its file panels can browse.","permission":"file.pathForFile"},{"reason":"Copies the files and folders you select between Commander’s two panels.","remote":true,"permission":"fs.copy"},{"reason":"Calculates selected folder sizes for the size column and directory information views.","remote":true,"permission":"fs.dirSize"},{"reason":"Displays free and used space for the drive shown in each file panel.","remote":true,"permission":"fs.diskUsage"},{"reason":"Runs commands you explicitly enter in Commander’s command line and launches selected executables.","remote":true,"permission":"fs.exec"},{"reason":"Opens an interactive terminal command in the current panel directory when you request it.","remote":true,"permission":"fs.execTerminal"},{"reason":"Finds your home directory so Commander can offer it as a reliable navigation location.","remote":true,"permission":"fs.home"},{"reason":"Lists folder contents to populate the two file-management panels.","remote":true,"permission":"fs.list"},{"reason":"Creates a new folder at the location and with the name you choose.","remote":true,"permission":"fs.mkdir"},{"reason":"Moves or renames the files and folders you select in Commander.","remote":true,"permission":"fs.move"},{"reason":"Opens a selected file with its operating-system default application when requested.","remote":true,"permission":"fs.openPath"},{"reason":"Creates archives from files and folders you select with Commander’s pack command.","remote":true,"permission":"fs.pack"},{"reason":"Reads selected binary files so the built-in viewer can preview their contents safely.","remote":true,"permission":"fs.readBase64"},{"reason":"Reads bounded portions of large files for previews without loading the entire file into memory.","remote":true,"permission":"fs.readChunk"},{"reason":"Reads text files you select for the built-in viewer and editor.","remote":true,"permission":"fs.readText"},{"reason":"Permanently removes files only when you explicitly choose Commander’s delete operation.","remote":true,"permission":"fs.remove"},{"reason":"Lists available drives and filesystem roots for the panel drive selectors.","remote":true,"permission":"fs.roots"},{"reason":"Starts a native drag so files you drag out of Commander drop into other applications as real files.","permission":"fs.startDrag"},{"reason":"Reads file type, size, and timestamp metadata shown in the panels and properties.","remote":true,"permission":"fs.stat"},{"reason":"Moves selected files to the operating-system trash when you choose safe deletion.","remote":true,"permission":"fs.trash"},{"reason":"Saves text changes made in Commander’s built-in editor to the file you opened.","remote":true,"permission":"fs.writeText"},{"reason":"Connects to FTP servers you configure so they can be browsed as a remote file panel.","remote":true,"permission":"net.protocol.ftp"},{"reason":"Runs explicitly requested remote executables from Commander’s command line.","remote":true,"permission":"fs.execFile"}]},"tags":[],"permissions":["apps.account","clipboard.write","net.protocol.sftp","fs.writeChunk","remoteEnv.ui.picker","remoteEnv.connect","dialog.pickPath","file.pathForFile","fs.copy","fs.dirSize","fs.diskUsage","fs.exec","fs.execTerminal","fs.home","fs.list","fs.mkdir","fs.move","fs.openPath","fs.pack","fs.readBase64","fs.readChunk","fs.readText","fs.remove","fs.roots","fs.startDrag","fs.stat","fs.trash","fs.writeText","net.protocol.ftp","fs.execFile"],"permission_reasons":{"fs.copy":"Copies the files and folders you select between Commander’s two panels.","fs.exec":"Runs commands you explicitly enter in Commander’s command line and launches selected executables.","fs.home":"Finds your home directory so Commander can offer it as a reliable navigation location.","fs.list":"Lists folder contents to populate the two file-management panels.","fs.move":"Moves or renames the files and folders you select in Commander.","fs.pack":"Creates archives from files and folders you select with Commander’s pack command.","fs.stat":"Reads file type, size, and timestamp metadata shown in the panels and properties.","fs.mkdir":"Creates a new folder at the location and with the name you choose.","fs.roots":"Lists available drives and filesystem roots for the panel drive selectors.","fs.trash":"Moves selected files to the operating-system trash when you choose safe deletion.","fs.remove":"Permanently removes files only when you explicitly choose Commander’s delete operation.","fs.dirSize":"Calculates selected folder sizes for the size column and directory information views.","fs.execFile":"Runs explicitly requested remote executables from Commander’s command line.","fs.openPath":"Opens a selected file with its operating-system default application when requested.","fs.readText":"Reads text files you select for the built-in viewer and editor.","apps.account":"Lets you log in from the badge menu and discover remote environments linked to your DynApp account.","fs.diskUsage":"Displays free and used space for the drive shown in each file panel.","fs.readChunk":"Reads bounded portions of large files for previews without loading the entire file into memory.","fs.startDrag":"Starts a native drag so files you drag out of Commander drop into other applications as real files.","fs.writeText":"Saves text changes made in Commander’s built-in editor to the file you opened.","fs.readBase64":"Reads selected binary files so the built-in viewer can preview their contents safely.","fs.writeChunk":"Writes files copied from a selected remote environment in relay-safe bounded chunks.","clipboard.write":"Lets Commander paste explicitly requested remote files into the active local panel.","dialog.pickPath":"Lets you choose folders to open in either file panel instead of typing their paths.","fs.execTerminal":"Opens an interactive terminal command in the current panel directory when you request it.","file.pathForFile":"Resolves files dropped onto Commander into local paths that its file panels can browse.","net.protocol.ftp":"Connects to FTP servers you configure so they can be browsed as a remote file panel.","net.protocol.sftp":"Lists and manages files on user-selected SFTP servers through the Shell.","remoteEnv.connect":"Lets Commander open the selected environment connection for filesystem operations while testing remote access.","remoteEnv.ui.picker":"Lets you choose the execution environment used while testing Commander."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_kOWeZvLwXcVjTMI3FcM","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/commander","origin_revision_id":"rev_TBMYZmcVV4CIYMOzfJE","fork_depth":0,"installs_count":"7","launches_count":"228","votes_count":"1","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":84,"score_content_rights":40,"score_trust":52,"score_popularity":10,"score_activity":48,"activity_files_changed_30d":45,"activity_lines_added_30d":"16","activity_lines_deleted_30d":"10","score_total":31,"created_at":"2026-07-13T05:30:02.524Z","updated_at":"2026-10-29T03:07:25.835Z","hostname_slug":"amitbet-commander"},{"id":"amit-bet/seek","owner_id":"amit-bet","slug":"seek","title":"Seek","summary":"Instant filename and path search with a fast, persistent on-disk index","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":[],"commands":["seek"]},"targets":{"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"seek","icon":"icon.svg","name":"Seek","tags":["search","files","productivity","utilities"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":[],"commands":["seek"]},"targets":{"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/seek"},"description":"Instant filename and path search with a fast, persistent on-disk index","schemaVersion":2,"backendPermissions":[{"reason":"Lets you choose which folders should be included in or prioritized by the search index.","permission":"dialog.pickPath"},{"reason":"Builds and queries the filename index that provides fast searches across your selected locations.","remote":true,"permission":"search.files"},{"reason":"Copies a selected search result's full path from its context menu.","permission":"clipboard.write"},{"reason":"Sets the native window title to Seek so search results are identifiable in the taskbar and window switcher.","permission":"window.manage"}]},"tags":[],"permissions":["dialog.pickPath","search.files","clipboard.write","window.manage"],"permission_reasons":{"search.files":"Builds and queries the filename index that provides fast searches across your selected locations.","window.manage":"Sets the native window title to Seek so search results are identifiable in the taskbar and window switcher.","clipboard.write":"Copies a selected search result's full path from its context menu.","dialog.pickPath":"Lets you choose which folders should be included in or prioritized by the search index."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_5VlFXFYRBwll8waI01A","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/seek","origin_revision_id":"rev_3DiPcKukqYGDvYMy_58","fork_depth":0,"installs_count":"6","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":8,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":75,"activity_files_changed_30d":4,"activity_lines_added_30d":"146","activity_lines_deleted_30d":"35","score_total":31,"created_at":"2026-07-13T05:35:44.127Z","updated_at":"2026-10-29T03:07:26.215Z","hostname_slug":"amitbet-seek"},{"id":"amit-bet/pdfjs","owner_id":"amit-bet","slug":"pdfjs","title":"Pdf.js","summary":"A PDF viewer with thumbnails, zoom controls, search, and drag-and-drop loading","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["pdfjs"],"fileTypes":[{"name":"PDF document","rank":"Owner","role":"Viewer","mimeTypes":["application/pdf"],"extensions":["pdf"],"description":"PDF document"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"pdfjs","icon":"icon.svg","name":"Pdf.js","tags":["pdf","document-viewer","productivity"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["pdfjs"],"fileTypes":[{"name":"PDF document","rank":"Owner","role":"Viewer","mimeTypes":["application/pdf"],"extensions":["pdf"],"description":"PDF document"}]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/pdfjs"},"description":"A PDF viewer with thumbnails, zoom controls, search, and drag-and-drop loading","schemaVersion":2,"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you save a copy of the open PDF, including supported document changes.","permission":"dialog.saveDataFile"},{"reason":"Lets you choose the PDF document you want to view.","permission":"dialog.pickPath"},{"reason":"Opens PDFs sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Resolves a selected or dropped PDF to its local path for reliable loading.","permission":"file.pathForFile"},{"reason":"Reads the PDF bytes you selected so the viewer can render its pages.","remote":true,"permission":"fs.readBase64"},{"reason":"Checks the selected PDF’s file metadata before loading or reopening it.","remote":true,"permission":"fs.stat"},{"reason":"Connects pickerless hosted viewer sessions to the automatically detected local Shell agent.","permission":"remoteEnv.connect"}],"snapshot":"https://dynapp.io/snapshots/amit-bet/pdfjs.png"},"tags":[],"permissions":["fileAssociations.manage","dialog.saveDataFile","dialog.pickPath","externalOpen.files","file.pathForFile","fs.readBase64","fs.stat","remoteEnv.connect"],"permission_reasons":{"fs.stat":"Checks the selected PDF’s file metadata before loading or reopening it.","fs.readBase64":"Reads the PDF bytes you selected so the viewer can render its pages.","dialog.pickPath":"Lets you choose the PDF document you want to view.","file.pathForFile":"Resolves a selected or dropped PDF to its local path for reliable loading.","remoteEnv.connect":"Connects pickerless hosted viewer sessions to the automatically detected local Shell agent.","externalOpen.files":"Opens PDFs sent from Finder, Explorer, file associations, or the command line.","dialog.saveDataFile":"Lets you save a copy of the open PDF, including supported document changes.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_mslNpLOopW7KeM3y60Y","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/pdfjs","origin_revision_id":"rev_1R7kXjdpcBpnuKu1snk","fork_depth":0,"installs_count":"2","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":1,"score_mergeability":0,"score_permission_reasons":83,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":90,"activity_files_changed_30d":6,"activity_lines_added_30d":"2205","activity_lines_deleted_30d":"14","score_total":31,"created_at":"2026-07-13T05:30:19.289Z","updated_at":"2026-10-29T03:07:26.181Z","hostname_slug":"amitbet-pdfjs"},{"id":"amit-bet/gridbook","owner_id":"amit-bet","slug":"gridbook","title":"Gridbook","summary":"A spreadsheet with formulas, charts, and XLSX/ODS/CSV/Parquet files","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["gridbook"],"fileTypes":[{"name":"Spreadsheet","rank":"Alternate","role":"Editor","mimeTypes":["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.spreadsheet","text/csv","application/vnd.apache.parquet","application/vnd.ms-excel.sheet.macroEnabled.12","application/vnd.openxmlformats-officedocument.spreadsheetml.template","application/vnd.ms-excel.template.macroEnabled.12"],"extensions":["xlsx","ods","csv","parquet","xlsm","xltx","xltm"],"description":"Spreadsheet"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"gridbook","icon":"icon.svg","name":"Gridbook","tags":["productivity","spreadsheet","data","charts"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["gridbook"],"fileTypes":[{"name":"Spreadsheet","rank":"Alternate","role":"Editor","mimeTypes":["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.spreadsheet","text/csv","application/vnd.apache.parquet","application/vnd.ms-excel.sheet.macroEnabled.12","application/vnd.openxmlformats-officedocument.spreadsheetml.template","application/vnd.ms-excel.template.macroEnabled.12"],"extensions":["xlsx","ods","csv","parquet","xlsm","xltx","xltm"],"description":"Spreadsheet"}]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/gridbook"},"description":"A spreadsheet with formulas, charts, and XLSX/ODS/CSV/Parquet files","schemaVersion":2,"workspaceData":{"family":{"id":"docs:gridbook","name":"Gridbook workbooks","access":"read-write","legacyIds":[]}},"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose an XLSX, ODS, CSV, or Parquet file to open and edit.","permission":"dialog.openDataFile"},{"reason":"Opens supported spreadsheets sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Saves the workbook as XLSX or ODS at the filename and location you choose.","permission":"dialog.saveDataFile"},{"reason":"Exports spreadsheet data as CSV text to a file you choose.","permission":"dialog.saveTextFile"},{"reason":"Runs a local coding agent you ask to build tables, write formulas, and edit this workbook for you.","remote":true,"permission":"agent.session"},{"reason":"Keeps each Gridbook workbook available offline on this device.","permission":"workspaces.local"},{"reason":"Loads workbooks shared with the signed-in workspace.","permission":"workspaces.shared.read"},{"reason":"Synchronizes workbook edits to the selected shared workspace.","permission":"workspaces.shared.write"},{"reason":"Lets the user select the workspace whose workbook is active.","permission":"workspaces.ui.switcher"}],"snapshot":"https://dynapp.io/snapshots/amit-bet/gridbook.png"},"tags":[],"permissions":["fileAssociations.manage","dialog.openDataFile","externalOpen.files","dialog.saveDataFile","dialog.saveTextFile","agent.session","workspaces.local","workspaces.shared.read","workspaces.shared.write","workspaces.ui.switcher"],"permission_reasons":{"agent.session":"Runs a local coding agent you ask to build tables, write formulas, and edit this workbook for you.","workspaces.local":"Keeps each Gridbook workbook available offline on this device.","externalOpen.files":"Opens supported spreadsheets sent from Finder, Explorer, file associations, or the command line.","dialog.openDataFile":"Lets you choose an XLSX, ODS, CSV, or Parquet file to open and edit.","dialog.saveDataFile":"Saves the workbook as XLSX or ODS at the filename and location you choose.","dialog.saveTextFile":"Exports spreadsheet data as CSV text to a file you choose.","workspaces.shared.read":"Loads workbooks shared with the signed-in workspace.","workspaces.ui.switcher":"Lets the user select the workspace whose workbook is active.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","workspaces.shared.write":"Synchronizes workbook edits to the selected shared workspace."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_-bftBjA-FJwjUj0HL0I","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/gridbook","origin_revision_id":"rev_69vzasRVuHqL5AxOpzk","fork_depth":0,"installs_count":"4","launches_count":"58","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":82,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":100,"activity_files_changed_30d":141,"activity_lines_added_30d":"5495","activity_lines_deleted_30d":"1044","score_total":31,"created_at":"2026-07-13T05:35:42.295Z","updated_at":"2026-10-29T03:07:26.148Z","hostname_slug":"amitbet-gridbook"},{"id":"amit-bet/slidedeck","owner_id":"amit-bet","slug":"slidedeck","title":"Slidedeck","summary":"A PowerPoint-style presentation editor with PPTX, PPTM, ODP and OTP support","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["slidedeck"],"fileTypes":[{"name":"Presentation","rank":"Alternate","role":"Editor","mimeTypes":["application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-powerpoint.presentation.macroEnabled.12","application/vnd.oasis.opendocument.presentation","application/vnd.oasis.opendocument.presentation-template","application/vnd.openxmlformats-officedocument.presentationml.template","application/vnd.ms-powerpoint.template.macroEnabled.12","application/vnd.openxmlformats-officedocument.presentationml.slideshow","application/vnd.ms-powerpoint.slideshow.macroEnabled.12"],"extensions":["pptx","pptm","odp","otp","potx","potm","ppsx","ppsm"],"description":"PowerPoint or OpenDocument presentation"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"slidedeck","icon":"icon.svg","name":"Slidedeck","tags":["presentations","office","productivity","slides"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["slidedeck"],"fileTypes":[{"name":"Presentation","rank":"Alternate","role":"Editor","mimeTypes":["application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-powerpoint.presentation.macroEnabled.12","application/vnd.oasis.opendocument.presentation","application/vnd.oasis.opendocument.presentation-template","application/vnd.openxmlformats-officedocument.presentationml.template","application/vnd.ms-powerpoint.template.macroEnabled.12","application/vnd.openxmlformats-officedocument.presentationml.slideshow","application/vnd.ms-powerpoint.slideshow.macroEnabled.12"],"extensions":["pptx","pptm","odp","otp","potx","potm","ppsx","ppsm"],"description":"PowerPoint or OpenDocument presentation"}]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/slidedeck"},"description":"A PowerPoint-style presentation editor with PPTX, PPTM, ODP and OTP support","schemaVersion":2,"workspaceData":{"family":{"id":"docs:slidedeck","name":"Slidedeck presentations","access":"read-write","legacyIds":[]}},"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose a PowerPoint or OpenDocument presentation to open and edit.","permission":"dialog.openDataFile"},{"reason":"Saves the presentation to the filename, format, and location you choose.","permission":"dialog.saveDataFile"},{"reason":"Opens supported presentations sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Runs a local coding agent you ask to build and edit slides in this presentation for you.","remote":true,"permission":"agent.session"},{"reason":"Keeps each Slidedeck presentation available offline on this device.","permission":"workspaces.local"},{"reason":"Loads presentations shared with the signed-in workspace.","permission":"workspaces.shared.read"},{"reason":"Synchronizes presentation edits to the selected shared workspace.","permission":"workspaces.shared.write"},{"reason":"Lets the user select the workspace whose presentation is active.","permission":"workspaces.ui.switcher"}],"snapshot":"https://dynapp.io/snapshots/amit-bet/slidedeck.png"},"tags":[],"permissions":["fileAssociations.manage","dialog.openDataFile","dialog.saveDataFile","externalOpen.files","agent.session","workspaces.local","workspaces.shared.read","workspaces.shared.write","workspaces.ui.switcher"],"permission_reasons":{"agent.session":"Runs a local coding agent you ask to build and edit slides in this presentation for you.","workspaces.local":"Keeps each Slidedeck presentation available offline on this device.","externalOpen.files":"Opens supported presentations sent from Finder, Explorer, file associations, or the command line.","dialog.openDataFile":"Lets you choose a PowerPoint or OpenDocument presentation to open and edit.","dialog.saveDataFile":"Saves the presentation to the filename, format, and location you choose.","workspaces.shared.read":"Loads presentations shared with the signed-in workspace.","workspaces.ui.switcher":"Lets the user select the workspace whose presentation is active.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","workspaces.shared.write":"Synchronizes presentation edits to the selected shared workspace."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_-AyeRryrs92yg3FblCo","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/slidedeck","origin_revision_id":"rev_HyKePeiotLNvx6Mxh2I","fork_depth":0,"installs_count":"3","launches_count":"9","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":82,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":92,"activity_files_changed_30d":58,"activity_lines_added_30d":"448","activity_lines_deleted_30d":"129","score_total":31,"created_at":"2026-07-13T05:35:46.522Z","updated_at":"2026-10-29T03:07:26.015Z","hostname_slug":"amitbet-slidedeck"},{"id":"amit-bet/stocksim","owner_id":"amit-bet","slug":"stocksim","title":"Stock Simulator","summary":"A Yahoo-backed market replay workstation for strategy simulation and stock detail ranking","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["stocksim"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"stocksim","icon":"icon.svg","name":"Stock Simulator","tags":["finance","stocks","simulation","analytics"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["stocksim"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/stocksim"},"description":"A Yahoo-backed market replay workstation for strategy simulation and stock detail ranking","schemaVersion":2,"backendPermissions":[{"reason":"Exports simulation results and ranked stock data as a text file at a location you choose.","permission":"dialog.saveTextFile"},{"reason":"Retrieves market data over HTTPS from the financial data providers used by the simulator.","connect":["https://query1.finance.yahoo.com/v8/","https://query1.finance.yahoo.com/v1/","https://query2.finance.yahoo.com/v8/","https://query2.finance.yahoo.com/v1/","https://stockcharts.com/j-sum/","https://stockcharts.com/quotebrain/","https://finviz.com/quote.ashx","https://api.nasdaq.com/"],"permission":"net.protocol.https"},{"reason":"Lets you choose the machine that retrieves market data for the hosted simulator.","permission":"remoteEnv.ui.picker"},{"reason":"Connects to the selected machine to retrieve market data for the hosted simulator.","permission":"remoteEnv.connect"},{"reason":"Lets you choose the folder of CSV tickers and Pine scripts that Technical Analysis loads and watches.","permission":"dialog.pickPath"},{"reason":"Opens the folder picker in your home directory and expands a path typed with ~ when you link a data folder.","permission":"fs.home"},{"reason":"Lists your drives and top-level folders in the folder picker when you link a data folder.","permission":"fs.roots"},{"reason":"Checks that the data folder you type exists and is a folder before Technical Analysis links it.","permission":"fs.stat"},{"reason":"Lets you browse folders in the picker and lists the CSV and Pine files in your linked data folder so they load automatically.","permission":"fs.list"},{"reason":"Reads the CSV tickers and Pine scripts in your linked data folder into Technical Analysis.","permission":"fs.readText"},{"reason":"Notices when files in your linked data folder change so Technical Analysis reloads them without a prompt.","permission":"fs.watch"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'unsafe-eval' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https:; font-src 'self' data:; connect-src 'self' https://query1.finance.yahoo.com https://query2.finance.yahoo.com https://stockcharts.com https://finviz.com https://api.nasdaq.com; worker-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src 'none'; frame-ancestors 'none'"},"tags":[],"permissions":["dialog.saveTextFile","net.protocol.https","remoteEnv.ui.picker","remoteEnv.connect","dialog.pickPath","fs.home","fs.roots","fs.stat","fs.list","fs.readText","fs.watch"],"permission_reasons":{"fs.home":"Opens the folder picker in your home directory and expands a path typed with ~ when you link a data folder.","fs.list":"Lets you browse folders in the picker and lists the CSV and Pine files in your linked data folder so they load automatically.","fs.stat":"Checks that the data folder you type exists and is a folder before Technical Analysis links it.","fs.roots":"Lists your drives and top-level folders in the folder picker when you link a data folder.","fs.watch":"Notices when files in your linked data folder change so Technical Analysis reloads them without a prompt.","fs.readText":"Reads the CSV tickers and Pine scripts in your linked data folder into Technical Analysis.","dialog.pickPath":"Lets you choose the folder of CSV tickers and Pine scripts that Technical Analysis loads and watches.","remoteEnv.connect":"Connects to the selected machine to retrieve market data for the hosted simulator.","net.protocol.https":"Retrieves market data over HTTPS from the financial data providers used by the simulator.","dialog.saveTextFile":"Exports simulation results and ranked stock data as a text file at a location you choose.","remoteEnv.ui.picker":"Lets you choose the machine that retrieves market data for the hosted simulator."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_MBYARrec0IjdcH1ffPw","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/stocksim","origin_revision_id":"rev_gLAdrPzV5u6LzgNVV5E","fork_depth":0,"installs_count":"4","launches_count":"199","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":84,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":100,"activity_files_changed_30d":240,"activity_lines_added_30d":"2601","activity_lines_deleted_30d":"549","score_total":31,"created_at":"2026-07-13T05:30:34.534Z","updated_at":"2026-10-29T03:07:25.960Z","hostname_slug":"amitbet-stocksim"},{"id":"amit-bet/design","owner_id":"amit-bet","slug":"design","title":"Design.js","summary":"A Figma-style UI design tool: frames, vector shapes, text, charts, components, and export","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["designjs"],"fileTypes":[{"name":"Design.js document","rank":"Owner","role":"Editor","mimeTypes":["application/x-dynapp-design"],"extensions":["design"],"description":"Design.js document"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"design","icon":"icon.svg","name":"Design.js","tags":["design","vector-graphics","prototyping","creative"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["designjs"],"fileTypes":[{"name":"Design.js document","rank":"Owner","role":"Editor","mimeTypes":["application/x-dynapp-design"],"extensions":["design"],"description":"Design.js document"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/design"},"description":"A Figma-style UI design tool: frames, vector shapes, text, charts, components, and export","schemaVersion":2,"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose a Design.js document to open and edit.","permission":"dialog.openDataFile"},{"reason":"Saves your editable Design.js document to a location and filename you choose.","permission":"dialog.saveDataFile"},{"reason":"Allows Design.js documents opened from Finder, Explorer, or the command line to load in the app.","permission":"externalOpen.files"},{"reason":"Lets you select image assets to place inside the current design.","permission":"dialog.openImage"},{"reason":"Exports selected frames or designs as image files at a location you choose.","permission":"dialog.saveImage"},{"reason":"Exports generated SVG or other text-based design output to a file you choose.","permission":"dialog.saveTextFile"}],"snapshot":"https://dynapp.io/snapshots/amit-bet/design.png"},"tags":[],"permissions":["fileAssociations.manage","dialog.openDataFile","dialog.saveDataFile","externalOpen.files","dialog.openImage","dialog.saveImage","dialog.saveTextFile"],"permission_reasons":{"dialog.openImage":"Lets you select image assets to place inside the current design.","dialog.saveImage":"Exports selected frames or designs as image files at a location you choose.","externalOpen.files":"Allows Design.js documents opened from Finder, Explorer, or the command line to load in the app.","dialog.openDataFile":"Lets you choose a Design.js document to open and edit.","dialog.saveDataFile":"Saves your editable Design.js document to a location and filename you choose.","dialog.saveTextFile":"Exports generated SVG or other text-based design output to a file you choose.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_h4_y1Mafkv0C5DyZiAw","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/design","origin_revision_id":"rev_8p5LLTiOfbATRu8h96I","fork_depth":0,"installs_count":"1","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":2,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":82,"activity_files_changed_30d":6,"activity_lines_added_30d":"247","activity_lines_deleted_30d":"42","score_total":31,"created_at":"2026-07-13T05:30:05.277Z","updated_at":"2026-10-29T03:07:25.921Z","hostname_slug":"amitbet-design"},{"id":"amit-bet/dyner","owner_id":"amit-bet","slug":"dyner","title":"Dyner","summary":"Browse, install, and update apps for this DynApp client","icon":"icon.svg","manifest_schema_version":2,"launch":{},"targets":{"ios":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads the Dyner catalog compatible with this iOS client when you browse or search for apps.","permission":"apps.catalog"},{"reason":"Lists and opens the apps available on this iOS client from Dyner's My Apps tab.","permission":"apps.manage"},{"reason":"Installs or updates only the Dyner app revision you explicitly choose on this iOS client.","permission":"apps.install"},{"reason":"Removes only an installed Dyner app after you explicitly confirm its Uninstall action on this iOS client.","permission":"apps.uninstall"},{"reason":"Opens an app on this iOS client after you explicitly select its Open action.","permission":"apps.launch"}]},"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads the Dyner catalog compatible with this mobile client when you browse or search for apps.","permission":"apps.catalog"},{"reason":"Lists and opens the apps available on this mobile client from Dyner's My Apps tab.","permission":"apps.manage"},{"reason":"Installs or updates only the Dyner app revision you explicitly choose on this mobile client.","permission":"apps.install"},{"reason":"Removes only an installed Dyner app after you explicitly confirm its Uninstall action on this mobile client.","permission":"apps.uninstall"},{"reason":"Opens an app on this mobile client after you explicitly select its Open action.","permission":"apps.launch"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads the Dyner catalog compatible with this Android client when you browse or search for apps.","permission":"apps.catalog"},{"reason":"Lists, opens, updates, and adds shortcuts for apps from Dyner's My Apps tab on this Android client.","permission":"apps.manage"},{"reason":"Installs or updates only the Dyner revision you choose and requests its Android home-screen shortcut on first install.","permission":"apps.install"},{"reason":"Removes only an installed Dyner app after you explicitly confirm its Uninstall action on this Android client.","permission":"apps.uninstall"},{"reason":"Opens an app on this Android client after you explicitly select its Open action.","permission":"apps.launch"},{"reason":"Lets you choose a paired Go agent environment from the Android client.","permission":"remoteEnv.ui.picker"},{"reason":"Connects to a Go agent only after you explicitly pair an Android remote environment.","permission":"remoteEnv.connect"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"dyner","icon":"icon.svg","name":"Dyner","tags":["app-store","discovery","installation","updates"],"assets":{"icon":"icon.svg","screenshots":[]},"source":{"root":"content","language":"javascript","framework":"none"},"builtIn":true,"targets":{"ios":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads the Dyner catalog compatible with this iOS client when you browse or search for apps.","permission":"apps.catalog"},{"reason":"Lists and opens the apps available on this iOS client from Dyner's My Apps tab.","permission":"apps.manage"},{"reason":"Installs or updates only the Dyner app revision you explicitly choose on this iOS client.","permission":"apps.install"},{"reason":"Removes only an installed Dyner app after you explicitly confirm its Uninstall action on this iOS client.","permission":"apps.uninstall"},{"reason":"Opens an app on this iOS client after you explicitly select its Open action.","permission":"apps.launch"}]},"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads the Dyner catalog compatible with this mobile client when you browse or search for apps.","permission":"apps.catalog"},{"reason":"Lists and opens the apps available on this mobile client from Dyner's My Apps tab.","permission":"apps.manage"},{"reason":"Installs or updates only the Dyner app revision you explicitly choose on this mobile client.","permission":"apps.install"},{"reason":"Removes only an installed Dyner app after you explicitly confirm its Uninstall action on this mobile client.","permission":"apps.uninstall"},{"reason":"Opens an app on this mobile client after you explicitly select its Open action.","permission":"apps.launch"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads the Dyner catalog compatible with this Android client when you browse or search for apps.","permission":"apps.catalog"},{"reason":"Lists, opens, updates, and adds shortcuts for apps from Dyner's My Apps tab on this Android client.","permission":"apps.manage"},{"reason":"Installs or updates only the Dyner revision you choose and requests its Android home-screen shortcut on first install.","permission":"apps.install"},{"reason":"Removes only an installed Dyner app after you explicitly confirm its Uninstall action on this Android client.","permission":"apps.uninstall"},{"reason":"Opens an app on this Android client after you explicitly select its Open action.","permission":"apps.launch"},{"reason":"Lets you choose a paired Go agent environment from the Android client.","permission":"remoteEnv.ui.picker"},{"reason":"Connects to a Go agent only after you explicitly pair an Android remote environment.","permission":"remoteEnv.connect"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/dyner"},"description":"Browse, install, and update apps for this DynApp client","schemaVersion":2,"backendPermissions":[{"reason":"Manages shared workspace members and invitations from Dyner's client settings.","permission":"workspaces.shared.manage"},{"reason":"Manages this client's remote environments and access listeners from Dyner's settings.","permission":"remoteEnv.manage"},{"reason":"Signs you in with Google and keeps your Dyner identity available for catalog and installation requests.","permission":"apps.account"},{"reason":"Loads the Dyner catalog compatible with this desktop client when you browse or search for apps.","permission":"apps.catalog"},{"reason":"Shows installed apps and performs only the launch, update, editing, shortcut, and uninstall actions you choose in My Apps.","remote":true,"permission":"apps.manage"},{"reason":"Adds or removes your single authenticated Dyner star when you explicitly click an app's Star button.","permission":"apps.vote"},{"reason":"Installs or updates only the Dyner app you choose and adds its macOS Applications or Windows/Linux Desktop entry on first install.","permission":"apps.install"},{"reason":"Removes only the installed Dyner app and its OS Applications/Desktop entry after you explicitly confirm Uninstall.","permission":"apps.uninstall"},{"reason":"Opens an app on this desktop client after you explicitly select its Open action.","remote":true,"permission":"apps.launch"},{"reason":"Records the permissions you approve for other DynApps with the local DynApp agent and lets you review or revoke them.","permission":"permissions.manage"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'unsafe-inline' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https:; font-src 'self' data:; connect-src 'self' http://127.0.0.1:9011 wss://127.0.0.1:9011 https://*:9011; worker-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src 'none'","snapshot":"https://dynapp.io/snapshots/amit-bet/dyner.png"},"tags":[],"permissions":["workspaces.shared.manage","remoteEnv.manage","apps.account","apps.catalog","apps.manage","apps.vote","apps.install","apps.uninstall","apps.launch","permissions.manage","remoteEnv.ui.picker","remoteEnv.connect"],"permission_reasons":{"apps.vote":"Adds or removes your single authenticated Dyner star when you explicitly click an app's Star button.","apps.launch":"Opens an app on this desktop client after you explicitly select its Open action.","apps.manage":"Shows installed apps and performs only the launch, update, editing, shortcut, and uninstall actions you choose in My Apps.","apps.account":"Signs you in with Google and keeps your Dyner identity available for catalog and installation requests.","apps.catalog":"Loads the Dyner catalog compatible with this desktop client when you browse or search for apps.","apps.install":"Installs or updates only the Dyner app you choose and adds its macOS Applications or Windows/Linux Desktop entry on first install.","apps.uninstall":"Removes only the installed Dyner app and its OS Applications/Desktop entry after you explicitly confirm Uninstall.","remoteEnv.manage":"Manages this client's remote environments and access listeners from Dyner's settings.","remoteEnv.connect":"Connects to a Go agent only after you explicitly pair an Android remote environment.","permissions.manage":"Records the permissions you approve for other DynApps with the local DynApp agent and lets you review or revoke them.","remoteEnv.ui.picker":"Lets you choose a paired Go agent environment from the Android client.","workspaces.shared.manage":"Manages shared workspace members and invitations from Dyner's client settings."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_U5vkbIxLhIm2ERPtiOc","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/dyner","origin_revision_id":"rev_uxwgeoGRQX90VogcbvE","fork_depth":0,"installs_count":"0","launches_count":"790","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":85,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":96,"activity_files_changed_30d":98,"activity_lines_added_30d":"689","activity_lines_deleted_30d":"108","score_total":31,"created_at":"2026-07-22T22:02:53.968Z","updated_at":"2026-10-29T03:07:25.889Z","hostname_slug":"amitbet-dyner"},{"id":"amit-bet/homeboard","owner_id":"amit-bet","slug":"homeboard","title":"Homeboard","summary":"A live, customizable home dashboard for FlowFuse Dashboard","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["homeboard"]},"targets":{"web":{"ready":false,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads a local unencrypted FlowFuse Dashboard address only when you configure one in the mobile app.","connect":["http://192.168.1.101:1880/","http://home.local/"],"permission":"net.protocol.http"},{"reason":"Loads the secure FlowFuse Dashboard address you configure and its dashboard resources in the mobile app.","connect":["https://192.168.1.101:1880/","https://home.local/"],"permission":"net.protocol.https"},{"reason":"Opens links that leave your configured dashboard in the mobile device’s default browser.","permission":"shell.openExternal"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads a local unencrypted FlowFuse Dashboard address only when you configure one in the Android app.","connect":["http://192.168.1.101:1880/","http://home.local/"],"permission":"net.protocol.http"},{"reason":"Loads the secure FlowFuse Dashboard address you configure and its dashboard resources in the Android app.","connect":["https://192.168.1.101:1880/","https://home.local/"],"permission":"net.protocol.https"},{"reason":"Opens links that leave your configured dashboard in the Android device’s default browser.","permission":"shell.openExternal"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"homeboard","icon":"icon.svg","name":"Homeboard","tags":["dashboard","flowfuse","iot","customization"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["homeboard"]},"targets":{"web":{"ready":false,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads a local unencrypted FlowFuse Dashboard address only when you configure one in the mobile app.","connect":["http://192.168.1.101:1880/","http://home.local/"],"permission":"net.protocol.http"},{"reason":"Loads the secure FlowFuse Dashboard address you configure and its dashboard resources in the mobile app.","connect":["https://192.168.1.101:1880/","https://home.local/"],"permission":"net.protocol.https"},{"reason":"Opens links that leave your configured dashboard in the mobile device’s default browser.","permission":"shell.openExternal"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Loads a local unencrypted FlowFuse Dashboard address only when you configure one in the Android app.","connect":["http://192.168.1.101:1880/","http://home.local/"],"permission":"net.protocol.http"},{"reason":"Loads the secure FlowFuse Dashboard address you configure and its dashboard resources in the Android app.","connect":["https://192.168.1.101:1880/","https://home.local/"],"permission":"net.protocol.https"},{"reason":"Opens links that leave your configured dashboard in the Android device’s default browser.","permission":"shell.openExternal"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/homeboard"},"description":"A live, customizable home dashboard for FlowFuse Dashboard","schemaVersion":2,"backendPermissions":[{"reason":"Loads the FlowFuse Dashboard address you configure and its dashboard resources.","connect":["http://192.168.1.101:1880/","http://home.local/"],"permission":"net.protocol.http"},{"reason":"Loads a TLS FlowFuse Dashboard address you configure and its dashboard resources.","connect":["https://192.168.1.101:1880/","https://home.local/"],"permission":"net.protocol.https"},{"reason":"Maintains the live WebSocket connection used by FlowFuse Dashboard widgets and updates.","permission":"net.protocol.ws"},{"reason":"Opens links from dashboard widgets in your default browser when they leave the configured dashboard.","permission":"shell.openExternal"},{"reason":"Sets the native window title to Homeboard so the dashboard is identifiable in the taskbar and window switcher.","permission":"window.manage"},{"reason":"Stores your dashboard URL, selected theme, page, and local layout customizations in this browser.","permission":"storage.local"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: http://192.168.1.101:1880 http://home.local https://192.168.1.101:1880 https://home.local; font-src 'self' data:; connect-src 'self' http://192.168.1.101:1880 http://home.local https://192.168.1.101:1880 https://home.local ws://192.168.1.101:1880 ws://home.local wss://192.168.1.101:1880 wss://home.local; worker-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src http://192.168.1.101:1880 http://home.local https://192.168.1.101:1880 https://home.local; frame-ancestors 'none'","snapshot":"https://dynapp.io/snapshots/amit-bet/homeboard.png"},"tags":[],"permissions":["net.protocol.http","net.protocol.https","net.protocol.ws","shell.openExternal","window.manage","storage.local"],"permission_reasons":{"storage.local":"Stores your dashboard URL, selected theme, page, and local layout customizations in this browser.","window.manage":"Sets the native window title to Homeboard so the dashboard is identifiable in the taskbar and window switcher.","net.protocol.ws":"Maintains the live WebSocket connection used by FlowFuse Dashboard widgets and updates.","net.protocol.http":"Loads a local unencrypted FlowFuse Dashboard address only when you configure one in the Android app.","net.protocol.https":"Loads the secure FlowFuse Dashboard address you configure and its dashboard resources in the Android app.","shell.openExternal":"Opens links from dashboard widgets in your default browser when they leave the configured dashboard."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_QfEmc-tNIR_Zds_7vwc","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/homeboard","origin_revision_id":"rev_q4b7X1Q89LLLku08PGg","fork_depth":0,"installs_count":"6","launches_count":"3","votes_count":"0","score_source_quality":100,"score_editability":4,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":72,"activity_files_changed_30d":3,"activity_lines_added_30d":"115","activity_lines_deleted_30d":"27","score_total":31,"created_at":"2026-07-13T05:30:09.173Z","updated_at":"2026-10-29T03:07:25.868Z","hostname_slug":"amitbet-homeboard"},{"id":"amit-bet/youtube","owner_id":"amit-bet","slug":"youtube","title":"YouTube","summary":"A responsive YouTube client with Google sign-in, subscriptions, browse, search, channels, captions, speed controls, and local watch history","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["youtube"]},"targets":{"ios":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Exchanges and revokes Google OAuth tokens, and can call the YouTube Data API, through the Shell HTTP bridge.","connect":["https://www.googleapis.com/youtube/","https://oauth2.googleapis.com/token","https://oauth2.googleapis.com/revoke"],"permission":"net.protocol.https"}]},"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Exchanges and revokes Google OAuth tokens, and can call the YouTube Data API, through the Shell HTTP bridge.","connect":["https://www.googleapis.com/youtube/","https://oauth2.googleapis.com/token","https://oauth2.googleapis.com/revoke"],"permission":"net.protocol.https"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Exchanges and revokes Google OAuth tokens, and can call the YouTube Data API, through the Shell HTTP bridge.","connect":["https://www.googleapis.com/youtube/","https://oauth2.googleapis.com/token","https://oauth2.googleapis.com/revoke"],"permission":"net.protocol.https"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"youtube","icon":"icon.svg","name":"YouTube","tags":["media","video","streaming","youtube"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["youtube"]},"targets":{"ios":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Exchanges and revokes Google OAuth tokens, and can call the YouTube Data API, through the Shell HTTP bridge.","connect":["https://www.googleapis.com/youtube/","https://oauth2.googleapis.com/token","https://oauth2.googleapis.com/revoke"],"permission":"net.protocol.https"}]},"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Exchanges and revokes Google OAuth tokens, and can call the YouTube Data API, through the Shell HTTP bridge.","connect":["https://www.googleapis.com/youtube/","https://oauth2.googleapis.com/token","https://oauth2.googleapis.com/revoke"],"permission":"net.protocol.https"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Exchanges and revokes Google OAuth tokens, and can call the YouTube Data API, through the Shell HTTP bridge.","connect":["https://www.googleapis.com/youtube/","https://oauth2.googleapis.com/token","https://oauth2.googleapis.com/revoke"],"permission":"net.protocol.https"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/youtube"},"description":"A responsive YouTube client with Google sign-in, subscriptions, browse, search, channels, captions, speed controls, and local watch history","schemaVersion":2,"backendPermissions":[{"reason":"Exchanges and revokes Google OAuth tokens, and can call the YouTube Data API, through the Shell HTTP bridge.","connect":["https://www.googleapis.com/youtube/","https://oauth2.googleapis.com/token","https://oauth2.googleapis.com/revoke"],"permission":"net.protocol.https"},{"reason":"Identifies the installed DynApp client to the official YouTube embedded player so desktop playback is accepted.","permission":"web.embedIdentity"},{"reason":"Opens Google authorization in the system browser and receives its short-lived, read-only YouTube authorization response.","permission":"oauth.authorize"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'wasm-unsafe-eval' https://www.youtube.com https://s.ytimg.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https://i.ytimg.com https://i9.ytimg.com https://yt3.ggpht.com https://yt3.googleusercontent.com https://lh3.googleusercontent.com; font-src 'self' data:; connect-src 'self'; worker-src 'self' blob:; media-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src https://www.youtube.com https://www.youtube-nocookie.com; frame-ancestors 'none'","snapshot":"https://dynapp.io/snapshots/amit-bet/youtube.png"},"tags":[],"permissions":["net.protocol.https","web.embedIdentity","oauth.authorize"],"permission_reasons":{"oauth.authorize":"Opens Google authorization in the system browser and receives its short-lived, read-only YouTube authorization response.","web.embedIdentity":"Identifies the installed DynApp client to the official YouTube embedded player so desktop playback is accepted.","net.protocol.https":"Exchanges and revokes Google OAuth tokens, and can call the YouTube Data API, through the Shell HTTP bridge."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_1FQ9N2w7zuiF4GtZP2s","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/youtube","origin_revision_id":"rev_fNpjgF-_-H1eiYTw_tU","fork_depth":0,"installs_count":"4","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":10,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":68,"activity_files_changed_30d":3,"activity_lines_added_30d":"90","activity_lines_deleted_30d":"20","score_total":31,"created_at":"2026-07-22T18:43:41.017Z","updated_at":"2026-10-29T03:07:25.801Z","hostname_slug":"amitbet-youtube"},{"id":"amit-bet/mdview","owner_id":"amit-bet","slug":"mdview","title":"Markdown Viewer","summary":"A Markdown reader and visual editor with a comfortable reading column, outline navigation, Mermaid diagrams, and drag-and-drop loading","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["mdview"],"fileTypes":[{"name":"Markdown document","rank":"Owner","role":"Viewer","mimeTypes":["text/markdown","text/x-markdown"],"extensions":["md","markdown","mdown","mkd","mkdn","mdwn","rmd"],"description":"Markdown document"},{"name":"Mermaid diagram","rank":"Owner","role":"Viewer","mimeTypes":["text/vnd.mermaid"],"extensions":["mmd","mermaid"],"description":"Mermaid diagram source"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"mdview","icon":"icon.svg","name":"Markdown Viewer","tags":["markdown","document-viewer","reading","productivity"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["mdview"],"fileTypes":[{"name":"Markdown document","rank":"Owner","role":"Viewer","mimeTypes":["text/markdown","text/x-markdown"],"extensions":["md","markdown","mdown","mkd","mkdn","mdwn","rmd"],"description":"Markdown document"},{"name":"Mermaid diagram","rank":"Owner","role":"Viewer","mimeTypes":["text/vnd.mermaid"],"extensions":["mmd","mermaid"],"description":"Mermaid diagram source"}]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/mdview"},"description":"A Markdown reader and visual editor with a comfortable reading column, outline navigation, Mermaid diagrams, and drag-and-drop loading","schemaVersion":2,"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose the Markdown document you want to read.","permission":"dialog.pickPath"},{"reason":"Lets you choose a Markdown filename and location when saving a document without a writable source file.","permission":"dialog.saveTextFile"},{"reason":"Opens Markdown files sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Resolves a selected or dropped Markdown file to its local path for reliable loading.","permission":"file.pathForFile"},{"reason":"Reads the Markdown text you selected so the viewer can render it.","remote":true,"permission":"fs.readText"},{"reason":"Writes rendered edits back to the current Markdown file when you choose Save.","remote":true,"permission":"fs.writeText"},{"reason":"Loads images the open document references from the same folder.","remote":true,"permission":"fs.readBase64"},{"reason":"Checks the selected document's file metadata before loading or reopening it.","remote":true,"permission":"fs.stat"},{"reason":"Shows the open document in Finder or File Explorer from the tab and title right-click menu.","remote":true,"permission":"fs.openPath"},{"reason":"Provides the Shell's Show in Finder / File Explorer action for the open document. The viewer does not query or build the file index.","remote":true,"permission":"search.files"},{"reason":"Opens http and mailto links from the document in your default browser.","permission":"shell.openExternal"},{"reason":"Connects pickerless hosted viewer sessions to the automatically detected local Shell agent.","permission":"remoteEnv.connect"}]},"tags":[],"permissions":["fileAssociations.manage","dialog.pickPath","dialog.saveTextFile","externalOpen.files","file.pathForFile","fs.readText","fs.writeText","fs.readBase64","fs.stat","fs.openPath","search.files","shell.openExternal","remoteEnv.connect"],"permission_reasons":{"fs.stat":"Checks the selected document's file metadata before loading or reopening it.","fs.openPath":"Shows the open document in Finder or File Explorer from the tab and title right-click menu.","fs.readText":"Reads the Markdown text you selected so the viewer can render it.","fs.writeText":"Writes rendered edits back to the current Markdown file when you choose Save.","search.files":"Provides the Shell's Show in Finder / File Explorer action for the open document. The viewer does not query or build the file index.","fs.readBase64":"Loads images the open document references from the same folder.","dialog.pickPath":"Lets you choose the Markdown document you want to read.","file.pathForFile":"Resolves a selected or dropped Markdown file to its local path for reliable loading.","remoteEnv.connect":"Connects pickerless hosted viewer sessions to the automatically detected local Shell agent.","externalOpen.files":"Opens Markdown files sent from Finder, Explorer, file associations, or the command line.","shell.openExternal":"Opens http and mailto links from the document in your default browser.","dialog.saveTextFile":"Lets you choose a Markdown filename and location when saving a document without a writable source file.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_lh4CgeFXvUyfC4TG7m8","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/mdview","origin_revision_id":"rev_-SBeN3z2x2aXQCLWy4o","fork_depth":0,"installs_count":"0","launches_count":"144","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":83,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":100,"activity_files_changed_30d":39,"activity_lines_added_30d":"3486","activity_lines_deleted_30d":"151","score_total":31,"created_at":"2026-09-02T07:12:35.275Z","updated_at":"2026-10-29T03:07:25.784Z","hostname_slug":"amitbet-mdview"},{"id":"amit-bet/write","owner_id":"amit-bet","slug":"write","title":"Write","summary":"A full-featured word processor with a tabbed ribbon, page layout, comments, tables, images and DOCX support","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["write"],"fileTypes":[{"name":"Document","rank":"Alternate","role":"Editor","mimeTypes":["application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/html","text/plain","application/vnd.ms-word.document.macroEnabled.12","application/vnd.openxmlformats-officedocument.wordprocessingml.template","application/vnd.ms-word.template.macroEnabled.12"],"extensions":["docx","html","htm","txt","docm","dotx","dotm"],"description":"Document"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"write","icon":"icon.svg","name":"Write","tags":["word-processor","documents","office","productivity"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["write"],"fileTypes":[{"name":"Document","rank":"Alternate","role":"Editor","mimeTypes":["application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/html","text/plain","application/vnd.ms-word.document.macroEnabled.12","application/vnd.openxmlformats-officedocument.wordprocessingml.template","application/vnd.ms-word.template.macroEnabled.12"],"extensions":["docx","html","htm","txt","docm","dotx","dotm"],"description":"Document"}]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/write"},"description":"A full-featured word processor with a tabbed ribbon, page layout, comments, tables, images and DOCX support","schemaVersion":2,"workspaceData":{"family":{"id":"docs:write","name":"Write documents","access":"read-write","legacyIds":["write-docs","amit-bet/write"]}},"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose a DOCX, HTML, or plain-text document to open and edit.","permission":"dialog.openDataFile"},{"reason":"Opens supported documents sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Saves the document as DOCX or another structured format at the location you choose.","permission":"dialog.saveDataFile"},{"reason":"Exports the document as HTML or plain text to a file you choose.","permission":"dialog.saveTextFile"},{"reason":"Opens the DynApp issue form in your default browser when you choose Feedback.","permission":"shell.openExternal"},{"reason":"Runs a local coding agent you ask to draft, restructure, and edit this document for you.","remote":true,"permission":"agent.session"},{"reason":"Keeps the default Write recovery document in the Shell-owned local workspace.","permission":"workspaces.local"},{"reason":"Opens Write documents and referenced images from a selected shared workspace.","permission":"workspaces.shared.read"},{"reason":"Saves Write documents and referenced images to a selected shared workspace.","permission":"workspaces.shared.write"},{"reason":"Creates workspaces only when requested from the workspace picker.","permission":"workspaces.shared.manage"},{"reason":"Lets the user choose whether Write is editing the local document or a shared workspace document.","permission":"workspaces.ui.switcher"}],"snapshot":"https://dynapp.io/snapshots/amit-bet/write.png"},"tags":[],"permissions":["fileAssociations.manage","dialog.openDataFile","externalOpen.files","dialog.saveDataFile","dialog.saveTextFile","shell.openExternal","agent.session","workspaces.local","workspaces.shared.read","workspaces.shared.write","workspaces.shared.manage","workspaces.ui.switcher"],"permission_reasons":{"agent.session":"Runs a local coding agent you ask to draft, restructure, and edit this document for you.","workspaces.local":"Keeps the default Write recovery document in the Shell-owned local workspace.","externalOpen.files":"Opens supported documents sent from Finder, Explorer, file associations, or the command line.","shell.openExternal":"Opens the DynApp issue form in your default browser when you choose Feedback.","dialog.openDataFile":"Lets you choose a DOCX, HTML, or plain-text document to open and edit.","dialog.saveDataFile":"Saves the document as DOCX or another structured format at the location you choose.","dialog.saveTextFile":"Exports the document as HTML or plain text to a file you choose.","workspaces.shared.read":"Opens Write documents and referenced images from a selected shared workspace.","workspaces.ui.switcher":"Lets the user choose whether Write is editing the local document or a shared workspace document.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","workspaces.shared.write":"Saves Write documents and referenced images to a selected shared workspace.","workspaces.shared.manage":"Creates workspaces only when requested from the workspace picker."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_uglfeZ5MwpbVDjiKN-8","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/write","origin_revision_id":"rev_4WKwOLxNtuaPBW2VqsQ","fork_depth":0,"installs_count":"4","launches_count":"11","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":82,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":96,"activity_files_changed_30d":59,"activity_lines_added_30d":"753","activity_lines_deleted_30d":"281","score_total":31,"created_at":"2026-07-13T05:35:49.231Z","updated_at":"2026-10-29T03:07:25.615Z","hostname_slug":"amitbet-write"},{"id":"amit-bet/whatsapp","owner_id":"amit-bet","slug":"whatsapp","title":"WhatsApp","summary":"An unofficial WhatsApp Web-style client: pair with your phone by QR code, then read and send messages, media, and replies through a local bridge service","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["whatsapp"]},"targets":{"web":{"ready":false,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"whatsapp","icon":"icon.svg","name":"WhatsApp","tags":["chat","messaging","whatsapp","social"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["whatsapp"]},"targets":{"web":{"ready":false,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/whatsapp"},"description":"An unofficial WhatsApp Web-style client: pair with your phone by QR code, then read and send messages, media, and replies through a local bridge service","schemaVersion":2,"backendPermissions":[{"reason":"Connects to the local WhatsApp bridge service to stream chats and messages and to fetch media attachments and profile pictures.","connect":["http://127.0.0.1:5210/","http://localhost:5210/"],"permission":"net.protocol.http"},{"reason":"Connects to a WhatsApp bridge service that is published over HTTPS when it runs on another machine on your network.","connect":["https://127.0.0.1:5210/","https://localhost:5210/"],"permission":"net.protocol.https"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: http://127.0.0.1:5210 http://localhost:5210 https://127.0.0.1:5210 https://localhost:5210; font-src 'self' data:; connect-src 'self' http://127.0.0.1:5210 http://localhost:5210 https://127.0.0.1:5210 https://localhost:5210 ws://127.0.0.1:5210 ws://localhost:5210 wss://127.0.0.1:5210 wss://localhost:5210; worker-src 'self' blob:; media-src 'self' blob: http://127.0.0.1:5210 http://localhost:5210 https://127.0.0.1:5210 https://localhost:5210; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src 'none'; frame-ancestors 'none'","snapshot":"https://dynapp.io/snapshots/amit-bet/whatsapp.png"},"tags":[],"permissions":["net.protocol.http","net.protocol.https"],"permission_reasons":{"net.protocol.http":"Connects to the local WhatsApp bridge service to stream chats and messages and to fetch media attachments and profile pictures.","net.protocol.https":"Connects to a WhatsApp bridge service that is published over HTTPS when it runs on another machine on your network."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_8PXWNCsgxZPWfxtFSLU","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/whatsapp","origin_revision_id":"rev_eJzp-b58OTpGv4f_a08","fork_depth":0,"installs_count":"1","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":12,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":59,"activity_files_changed_30d":3,"activity_lines_added_30d":"48","activity_lines_deleted_30d":"12","score_total":31,"created_at":"2026-07-22T18:43:36.233Z","updated_at":"2026-10-29T03:07:25.526Z","hostname_slug":"amitbet-whatsapp"},{"id":"amit-bet/subtrans","owner_id":"amit-bet","slug":"subtrans","title":"SubTrans.js","summary":"Finds embedded, local, or online subtitles for videos, translates them, and writes .srt files","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["subtrans"]},"targets":{"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"subtrans","icon":"icon.svg","name":"SubTrans.js","tags":["video","subtitles","translation","accessibility"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["subtrans"]},"targets":{"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/subtrans"},"description":"Finds embedded, local, or online subtitles for videos, translates them, and writes .srt files","schemaVersion":2,"backendPermissions":[{"reason":"Lets you choose This machine so SubTrans can read local videos and run ffmpeg.","permission":"remoteEnv.ui.picker"},{"reason":"Connects this page to the DynApp Shell on This machine after you approve it in Dyner.","permission":"remoteEnv.connect"},{"reason":"Lets you choose the folder containing the videos whose subtitles you want to process.","permission":"dialog.pickPath"},{"reason":"Resolves a dropped video or folder to its local path so Subtrans can process it.","permission":"file.pathForFile"},{"reason":"Receives exact paths for videos and folders dropped onto SubTrans through a temporary native drop target.","permission":"drop.files"},{"reason":"Locates your home directory to store the app-managed FFmpeg download in the standard cache location.","remote":true,"permission":"fs.home"},{"reason":"Scans the folder you selected to find video files and matching sidecar subtitle files.","remote":true,"permission":"fs.list"},{"reason":"Checks whether selected paths and subtitle candidates are files or folders before processing them.","remote":true,"permission":"fs.stat"},{"reason":"Reads only the first and last 64 KiB of each video to calculate its OpenSubtitles movie hash.","remote":true,"permission":"fs.readChunk"},{"reason":"Reads existing SRT subtitle files that you selected or that match a video.","remote":true,"permission":"fs.readText"},{"reason":"Writes the translated SRT subtitle beside the source video after processing.","remote":true,"permission":"fs.writeText"},{"reason":"Removes only temporary subtitle files created during FFmpeg extraction after they are no longer needed.","remote":true,"permission":"fs.remove"},{"reason":"Creates the app-owned cache directory used for its managed FFmpeg installation.","remote":true,"permission":"fs.mkdir"},{"reason":"Runs FFmpeg with structured arguments to inspect videos and extract embedded subtitle tracks you choose to translate.","remote":true,"permission":"fs.execFile"},{"reason":"Translates subtitles with Codex or Claude Code on this machine, using their existing sign-in, when you pick one as the provider.","remote":true,"permission":"agent.session"},{"reason":"Downloads the managed FFmpeg binary over HTTPS into the app-owned cache when FFmpeg is unavailable.","connect":["https://github.com/descriptinc/ffmpeg-ffprobe-static/releases/download/","https://objects.githubusercontent.com/","https://release-assets.githubusercontent.com/","https://translate.googleapis.com/","https://api.opensubtitles.com/api/v1/","https://api.subdl.com/api/","https://dl.subdl.com/"],"permission":"net.protocol.https"},{"reason":"Opens the OpenSubtitles or SubDL API-key signup page in your default browser when you click Get key.","permission":"shell.openExternal"}]},"tags":[],"permissions":["remoteEnv.ui.picker","remoteEnv.connect","dialog.pickPath","file.pathForFile","drop.files","fs.home","fs.list","fs.stat","fs.readChunk","fs.readText","fs.writeText","fs.remove","fs.mkdir","fs.execFile","agent.session","net.protocol.https","shell.openExternal"],"permission_reasons":{"fs.home":"Locates your home directory to store the app-managed FFmpeg download in the standard cache location.","fs.list":"Scans the folder you selected to find video files and matching sidecar subtitle files.","fs.stat":"Checks whether selected paths and subtitle candidates are files or folders before processing them.","fs.mkdir":"Creates the app-owned cache directory used for its managed FFmpeg installation.","fs.remove":"Removes only temporary subtitle files created during FFmpeg extraction after they are no longer needed.","drop.files":"Receives exact paths for videos and folders dropped onto SubTrans through a temporary native drop target.","fs.execFile":"Runs FFmpeg with structured arguments to inspect videos and extract embedded subtitle tracks you choose to translate.","fs.readText":"Reads existing SRT subtitle files that you selected or that match a video.","fs.readChunk":"Reads only the first and last 64 KiB of each video to calculate its OpenSubtitles movie hash.","fs.writeText":"Writes the translated SRT subtitle beside the source video after processing.","agent.session":"Translates subtitles with Codex or Claude Code on this machine, using their existing sign-in, when you pick one as the provider.","dialog.pickPath":"Lets you choose the folder containing the videos whose subtitles you want to process.","file.pathForFile":"Resolves a dropped video or folder to its local path so Subtrans can process it.","remoteEnv.connect":"Connects this page to the DynApp Shell on This machine after you approve it in Dyner.","net.protocol.https":"Downloads the managed FFmpeg binary over HTTPS into the app-owned cache when FFmpeg is unavailable.","shell.openExternal":"Opens the OpenSubtitles or SubDL API-key signup page in your default browser when you click Get key.","remoteEnv.ui.picker":"Lets you choose This machine so SubTrans can read local videos and run ffmpeg."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_4ItJ9iUkXwBIv90DEPU","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/subtrans","origin_revision_id":"rev_LLXJvOF4fByL_jzVGZs","fork_depth":0,"installs_count":"3","launches_count":"102","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":81,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":100,"activity_files_changed_30d":23,"activity_lines_added_30d":"602","activity_lines_deleted_30d":"413","score_total":31,"created_at":"2026-07-13T05:30:36.692Z","updated_at":"2026-10-29T03:07:25.421Z","hostname_slug":"amitbet-subtrans"},{"id":"amit-bet/gitscope","owner_id":"amit-bet","slug":"gitscope","title":"GitScope","summary":"A GitHub-style browser for DynApp source variants, published revisions, source trees, and code snapshots","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["gitscope"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"gitscope","icon":"icon.svg","name":"GitScope","tags":["source-browser","dynapp","revisions","developer-tools","code-browser"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["gitscope"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/gitscope"},"description":"A GitHub-style browser for DynApp source variants, published revisions, source trees, and code snapshots","schemaVersion":2,"backendPermissions":[{"reason":"Connects to the hosted Dyner source repository API when GitScope runs through the HTTPS PWA route.","connect":["https://dynapp.io/","https://api.github.com/repos/"],"permission":"net.protocol.https"},{"reason":"Adds or removes your Dyner star for the published app currently open in GitScope when you click Star.","permission":"apps.vote"},{"reason":"Signs you in with Google when starring an app requires a Dyner account in this GitScope session.","permission":"apps.account"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self' https://dynapp.io https://api.github.com; worker-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src 'none'; frame-ancestors 'none'"},"tags":[],"permissions":["net.protocol.https","apps.vote","apps.account"],"permission_reasons":{"apps.vote":"Adds or removes your Dyner star for the published app currently open in GitScope when you click Star.","apps.account":"Signs you in with Google when starring an app requires a Dyner account in this GitScope session.","net.protocol.https":"Connects to the hosted Dyner source repository API when GitScope runs through the HTTPS PWA route."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_mb1E0ZPMZwv_QpBFoAw","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/gitscope","origin_revision_id":"rev_8B1tbF6kn3m91wuFWy8","fork_depth":0,"installs_count":"0","launches_count":"1","votes_count":"0","score_source_quality":100,"score_editability":11,"score_mergeability":0,"score_permission_reasons":87,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":40,"activity_files_changed_30d":2,"activity_lines_added_30d":"4","activity_lines_deleted_30d":"11","score_total":30,"created_at":"2026-09-02T07:10:07.690Z","updated_at":"2026-10-29T03:07:26.067Z","hostname_slug":"amitbet-gitscope"},{"id":"amit-bet/viewer","owner_id":"amit-bet","slug":"viewer","title":"View.js","summary":"An image viewer with folder thumbnails, zoom, and prev/next browsing","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file","directory"],"commands":["viewjs"],"fileTypes":[{"name":"Image","rank":"Alternate","role":"Viewer","mimeTypes":["image/png","image/apng","image/jpeg","image/gif","image/webp","image/bmp","image/avif","image/svg+xml","image/x-icon"],"extensions":["png","apng","jpg","jpeg","jpe","jfif","gif","webp","bmp","avif","svg","ico"],"description":"Image file"}]},"targets":{"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"viewer","icon":"icon.svg","name":"View.js","tags":["images","photo-viewer","media","utilities"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file","directory"],"commands":["viewjs"],"fileTypes":[{"name":"Image","rank":"Alternate","role":"Viewer","mimeTypes":["image/png","image/apng","image/jpeg","image/gif","image/webp","image/bmp","image/avif","image/svg+xml","image/x-icon"],"extensions":["png","apng","jpg","jpeg","jpe","jfif","gif","webp","bmp","avif","svg","ico"],"description":"Image file"}]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/viewer"},"description":"An image viewer with folder thumbnails, zoom, and prev/next browsing","schemaVersion":2,"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose an image or image folder to browse in the viewer.","permission":"dialog.pickPath"},{"reason":"Opens images and folders sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Receives the exact paths of images and folders dropped onto View.js through a temporary native drop target.","permission":"drop.files"},{"reason":"Resolves a selected or dropped image to its local path for viewing and folder navigation.","permission":"file.pathForFile"},{"reason":"Provides your home folder as a safe starting location when browsing for images.","remote":true,"permission":"fs.home"},{"reason":"Lists neighboring images in the open folder for thumbnails and previous-or-next navigation.","remote":true,"permission":"fs.list"},{"reason":"Checks whether an opened path is an image file or folder before loading it.","remote":true,"permission":"fs.stat"},{"reason":"Reads local image bytes through the Shell because hosted browsers block file URLs.","remote":true,"permission":"fs.readBase64"}]},"tags":[],"permissions":["fileAssociations.manage","dialog.pickPath","externalOpen.files","drop.files","file.pathForFile","fs.home","fs.list","fs.stat","fs.readBase64"],"permission_reasons":{"fs.home":"Provides your home folder as a safe starting location when browsing for images.","fs.list":"Lists neighboring images in the open folder for thumbnails and previous-or-next navigation.","fs.stat":"Checks whether an opened path is an image file or folder before loading it.","drop.files":"Receives the exact paths of images and folders dropped onto View.js through a temporary native drop target.","fs.readBase64":"Reads local image bytes through the Shell because hosted browsers block file URLs.","dialog.pickPath":"Lets you choose an image or image folder to browse in the viewer.","file.pathForFile":"Resolves a selected or dropped image to its local path for viewing and folder navigation.","externalOpen.files":"Opens images and folders sent from Finder, Explorer, file associations, or the command line.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_KUaeQY8Zb8TZnsA2FRI","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/viewer","origin_revision_id":"rev_2n3uUG4xueejUlp40S8","fork_depth":0,"installs_count":"2","launches_count":"8","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":89,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":72,"activity_files_changed_30d":6,"activity_lines_added_30d":"111","activity_lines_deleted_30d":"37","score_total":30,"created_at":"2026-07-13T05:30:38.864Z","updated_at":"2026-10-29T03:07:25.683Z","hostname_slug":"amitbet-viewer"},{"id":"amit-bet/jellyfin","owner_id":"amit-bet","slug":"jellyfin","title":"Jellyfin","summary":"A Jellyfin media server client: browse your movie and TV libraries, search, and stream with resume and watched-state sync","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["jellyfin"]},"targets":{"ios":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Connects to your Jellyfin server over the local network to browse libraries and stream video in the iOS app.","connect":["http://127.0.0.1:8096/","http://localhost:8096/","http://192.168.1.81:8096/"],"permission":"net.protocol.http"},{"reason":"Connects to remote Jellyfin servers published over HTTPS from the iOS app.","connect":["https://127.0.0.1:8096/","https://localhost:8096/","https://192.168.1.81:8096/"],"permission":"net.protocol.https"}]},"web":{"ready":false,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Connects to your Jellyfin server over the local network to browse libraries and stream video in the mobile app.","connect":["http://127.0.0.1:8096/","http://localhost:8096/","http://192.168.1.81:8096/"],"permission":"net.protocol.http"},{"reason":"Connects to remote Jellyfin servers published over HTTPS from the mobile app.","connect":["https://127.0.0.1:8096/","https://localhost:8096/","https://192.168.1.81:8096/"],"permission":"net.protocol.https"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Connects to your Jellyfin server over the local network to browse libraries and stream video in the Android app.","connect":["http://127.0.0.1:8096/","http://localhost:8096/","http://192.168.1.81:8096/"],"permission":"net.protocol.http"},{"reason":"Connects to remote Jellyfin servers published over HTTPS from the Android app.","connect":["https://127.0.0.1:8096/","https://localhost:8096/","https://192.168.1.81:8096/"],"permission":"net.protocol.https"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"jellyfin","icon":"icon.svg","name":"Jellyfin","tags":["media","video","streaming","jellyfin"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"commands":["jellyfin"]},"targets":{"ios":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Connects to your Jellyfin server over the local network to browse libraries and stream video in the iOS app.","connect":["http://127.0.0.1:8096/","http://localhost:8096/","http://192.168.1.81:8096/"],"permission":"net.protocol.http"},{"reason":"Connects to remote Jellyfin servers published over HTTPS from the iOS app.","connect":["https://127.0.0.1:8096/","https://localhost:8096/","https://192.168.1.81:8096/"],"permission":"net.protocol.https"}]},"web":{"ready":false,"formFactors":["desktop","tablet","phone"]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Connects to your Jellyfin server over the local network to browse libraries and stream video in the mobile app.","connect":["http://127.0.0.1:8096/","http://localhost:8096/","http://192.168.1.81:8096/"],"permission":"net.protocol.http"},{"reason":"Connects to remote Jellyfin servers published over HTTPS from the mobile app.","connect":["https://127.0.0.1:8096/","https://localhost:8096/","https://192.168.1.81:8096/"],"permission":"net.protocol.https"}]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[{"reason":"Connects to your Jellyfin server over the local network to browse libraries and stream video in the Android app.","connect":["http://127.0.0.1:8096/","http://localhost:8096/","http://192.168.1.81:8096/"],"permission":"net.protocol.http"},{"reason":"Connects to remote Jellyfin servers published over HTTPS from the Android app.","connect":["https://127.0.0.1:8096/","https://localhost:8096/","https://192.168.1.81:8096/"],"permission":"net.protocol.https"}]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/jellyfin"},"description":"A Jellyfin media server client: browse your movie and TV libraries, search, and stream with resume and watched-state sync","schemaVersion":2,"backendPermissions":[{"reason":"Connects to your Jellyfin server over the local network to browse libraries and stream video.","connect":["http://127.0.0.1:8096/","http://localhost:8096/","http://192.168.1.81:8096/"],"permission":"net.protocol.http"},{"reason":"Connects to remote Jellyfin servers that are published over HTTPS.","connect":["https://127.0.0.1:8096/","https://localhost:8096/","https://192.168.1.81:8096/"],"permission":"net.protocol.https"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: http://127.0.0.1:8096 http://localhost:8096 http://192.168.1.81:8096 https://127.0.0.1:8096 https://localhost:8096 https://192.168.1.81:8096; font-src 'self' data:; connect-src 'self' http://127.0.0.1:8096 http://localhost:8096 http://192.168.1.81:8096 https://127.0.0.1:8096 https://localhost:8096 https://192.168.1.81:8096; worker-src 'self' blob:; media-src 'self' blob: http://127.0.0.1:8096 http://localhost:8096 http://192.168.1.81:8096 https://127.0.0.1:8096 https://localhost:8096 https://192.168.1.81:8096; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src 'none'; frame-ancestors 'none'","snapshot":"https://dynapp.io/snapshots/amit-bet/jellyfin.png"},"tags":[],"permissions":["net.protocol.http","net.protocol.https"],"permission_reasons":{"net.protocol.http":"Connects to your Jellyfin server over the local network to browse libraries and stream video in the Android app.","net.protocol.https":"Connects to remote Jellyfin servers published over HTTPS from the Android app."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_pnBdAJRN42srxTp48AE","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/jellyfin","origin_revision_id":"rev_iOg7_aMoPJqWAoertWE","fork_depth":0,"installs_count":"4","launches_count":"34","votes_count":"0","score_source_quality":100,"score_editability":12,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":16,"activity_files_changed_30d":1,"activity_lines_added_30d":"1","activity_lines_deleted_30d":"1","score_total":29,"created_at":"2026-07-22T17:27:47.550Z","updated_at":"2026-10-29T03:07:26.100Z","hostname_slug":"amitbet-jellyfin"},{"id":"amit-bet/sketcha","owner_id":"amit-bet","slug":"sketcha","title":"Sketcha","summary":"A SketchUp-style 3D modeler: push/pull solid modeling, inference snapping, groups, components, materials, and scenes","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["sketcha"],"fileTypes":[{"name":"Sketcha model","rank":"Owner","role":"Editor","mimeTypes":["application/x-dynapp-sketcha"],"extensions":["skc"],"description":"Sketcha binary model"},{"name":"SketchUp model","rank":"Alternate","role":"Viewer","mimeTypes":["application/vnd.sketchup.skp","application/octet-stream"],"extensions":["skp"],"description":"SketchUp model (imported)"},{"name":"COLLADA model","rank":"Alternate","role":"Viewer","mimeTypes":["model/vnd.collada+xml"],"extensions":["dae"],"description":"COLLADA digital asset (imported)"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"sketcha","icon":"icon.svg","name":"Sketcha","tags":["3d","modeling","design","creative"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["sketcha"],"fileTypes":[{"name":"Sketcha model","rank":"Owner","role":"Editor","mimeTypes":["application/x-dynapp-sketcha"],"extensions":["skc"],"description":"Sketcha binary model"},{"name":"SketchUp model","rank":"Alternate","role":"Viewer","mimeTypes":["application/vnd.sketchup.skp","application/octet-stream"],"extensions":["skp"],"description":"SketchUp model (imported)"},{"name":"COLLADA model","rank":"Alternate","role":"Viewer","mimeTypes":["model/vnd.collada+xml"],"extensions":["dae"],"description":"COLLADA digital asset (imported)"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/sketcha"},"description":"A SketchUp-style 3D modeler: push/pull solid modeling, inference snapping, groups, components, materials, and scenes","schemaVersion":2,"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose Sketcha, SketchUp, or COLLADA model files to open or import.","permission":"dialog.openDataFile"},{"reason":"Saves the editable Sketcha model to the filename and location you choose.","permission":"dialog.saveDataFile"},{"reason":"Opens supported model files sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Exports the current 3D view as an image file at a location you choose.","permission":"dialog.saveImage"},{"reason":"Resolves dropped model files to local paths so their geometry and linked resources can be imported.","permission":"file.pathForFile"},{"reason":"Reads large binary model files in bounded chunks during import without loading unnecessary data.","remote":true,"permission":"fs.readChunk"},{"reason":"Controls the dedicated modeler window state needed for the full 3D workspace.","permission":"window.manage"},{"reason":"Reads Sketcha model data copied from another Sketcha window or hosted instance.","permission":"clipboard.read"},{"reason":"Copies selected Sketcha entities so they can be pasted into another Sketcha window or hosted instance.","permission":"clipboard.write"}],"snapshot":"https://dynapp.io/snapshots/amit-bet/sketcha.png"},"tags":[],"permissions":["fileAssociations.manage","dialog.openDataFile","dialog.saveDataFile","externalOpen.files","dialog.saveImage","file.pathForFile","fs.readChunk","window.manage","clipboard.read","clipboard.write"],"permission_reasons":{"fs.readChunk":"Reads large binary model files in bounded chunks during import without loading unnecessary data.","window.manage":"Controls the dedicated modeler window state needed for the full 3D workspace.","clipboard.read":"Reads Sketcha model data copied from another Sketcha window or hosted instance.","clipboard.write":"Copies selected Sketcha entities so they can be pasted into another Sketcha window or hosted instance.","dialog.saveImage":"Exports the current 3D view as an image file at a location you choose.","file.pathForFile":"Resolves dropped model files to local paths so their geometry and linked resources can be imported.","externalOpen.files":"Opens supported model files sent from Finder, Explorer, file associations, or the command line.","dialog.openDataFile":"Lets you choose Sketcha, SketchUp, or COLLADA model files to open or import.","dialog.saveDataFile":"Saves the editable Sketcha model to the filename and location you choose.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_GelWBpCJ10qAIqJ_480","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/sketcha","origin_revision_id":"rev_o-FB0zzXwYOLQUuvK3s","fork_depth":0,"installs_count":"4","launches_count":"59","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":81,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":26,"activity_files_changed_30d":2,"activity_lines_added_30d":"3","activity_lines_deleted_30d":"2","score_total":28,"created_at":"2026-07-13T05:30:28.456Z","updated_at":"2026-10-29T03:07:26.132Z","hostname_slug":"amitbet-sketcha"},{"id":"amit-bet/paint","owner_id":"amit-bet","slug":"paint","title":"Paint.js","summary":"A Paint.NET-style image editor","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["paintjs"],"fileTypes":[{"name":"Paint.js project","rank":"Owner","role":"Editor","mimeTypes":["application/x-paintjs-project"],"extensions":["paintjs"],"description":"Paint.js project"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"paint","icon":"icon.svg","name":"Paint.js","tags":["graphics","image-editor","drawing","creative"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["paintjs"],"fileTypes":[{"name":"Paint.js project","rank":"Owner","role":"Editor","mimeTypes":["application/x-paintjs-project"],"extensions":["paintjs"],"description":"Paint.js project"}]},"source":{"root":"content","language":"javascript","framework":"none"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/paint"},"description":"A Paint.NET-style image editor","schemaVersion":2,"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose an editable Paint.js project to reopen with its layers intact.","permission":"dialog.openDataFile"},{"reason":"Lets you select an image to open as a document or import into the canvas.","permission":"dialog.openImage"},{"reason":"Loads Paint.js projects opened through their operating-system file association.","permission":"externalOpen.files"},{"reason":"Saves the layered Paint.js project to the filename and location you choose.","permission":"dialog.saveDataFile"},{"reason":"Exports the finished canvas as an image file at a location you choose.","permission":"dialog.saveImage"}],"snapshot":"https://dynapp.io/snapshots/amit-bet/paint.png"},"tags":[],"permissions":["fileAssociations.manage","dialog.openDataFile","dialog.openImage","externalOpen.files","dialog.saveDataFile","dialog.saveImage"],"permission_reasons":{"dialog.openImage":"Lets you select an image to open as a document or import into the canvas.","dialog.saveImage":"Exports the finished canvas as an image file at a location you choose.","externalOpen.files":"Loads Paint.js projects opened through their operating-system file association.","dialog.openDataFile":"Lets you choose an editable Paint.js project to reopen with its layers intact.","dialog.saveDataFile":"Saves the layered Paint.js project to the filename and location you choose.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_cSMYHdcie9JzSdyq-Rk","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/paint","origin_revision_id":"rev_RrJlL1yTjYKLjYrUP2s","fork_depth":0,"installs_count":"5","launches_count":"11","votes_count":"0","score_source_quality":100,"score_editability":4,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":28,"activity_files_changed_30d":3,"activity_lines_added_30d":"3","activity_lines_deleted_30d":"3","score_total":28,"created_at":"2026-07-13T05:30:15.705Z","updated_at":"2026-10-29T03:07:26.032Z","hostname_slug":"amitbet-paint"},{"id":"amit-bet/sqliteviewer","owner_id":"amit-bet","slug":"sqliteviewer","title":"SQLite Viewer","summary":"Explore SQLite schemas and tables, edit data, and run full SQL queries","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["sqliteviewer"],"fileTypes":[{"name":"SQLite database","rank":"Alternate","role":"Editor","mimeTypes":["application/vnd.sqlite3","application/x-sqlite3"],"extensions":["db","sqlite","sqlite3","db3"],"description":"SQLite database file"}]},"targets":{"web":{"ready":false},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"sqliteviewer","icon":"icon.svg","name":"SQLite Viewer","tags":["database","sqlite","sql-editor","developer-tools","data"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["sqliteviewer"],"fileTypes":[{"name":"SQLite database","rank":"Alternate","role":"Editor","mimeTypes":["application/vnd.sqlite3","application/x-sqlite3"],"extensions":["db","sqlite","sqlite3","db3"],"description":"SQLite database file"}]},"targets":{"web":{"ready":false},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/sqliteviewer"},"description":"Explore SQLite schemas and tables, edit data, and run full SQL queries","schemaVersion":2,"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose a SQLite database file to inspect and edit.","permission":"dialog.pickPath"},{"reason":"Saves a new or imported SQLite database to the destination you choose.","permission":"dialog.saveDataFile"},{"reason":"Opens SQLite databases sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Obtains the local path of a dropped database so changes can be saved back to it.","permission":"file.pathForFile"},{"reason":"Reads the complete SQLite database file you explicitly choose or open.","remote":true,"permission":"fs.readBase64"},{"reason":"Writes SQL and data changes back to the currently opened SQLite database.","remote":true,"permission":"fs.writeBase64"},{"reason":"Runs a local coding agent you ask to inspect schemas, write queries, or edit the open database.","remote":true,"permission":"agent.session"},{"reason":"Updates the window title to show the open database and whether it has unsaved changes.","permission":"window.manage"},{"reason":"Connects pickerless hosted SQLite Viewer sessions to the automatically detected local Shell agent.","permission":"remoteEnv.connect"}],"contentSecurityPolicy":"default-src 'self'; script-src 'self' 'wasm-unsafe-eval' blob:; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self'; worker-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-src 'none'; frame-ancestors 'none'"},"tags":[],"permissions":["fileAssociations.manage","dialog.pickPath","dialog.saveDataFile","externalOpen.files","file.pathForFile","fs.readBase64","fs.writeBase64","agent.session","window.manage","remoteEnv.connect"],"permission_reasons":{"agent.session":"Runs a local coding agent you ask to inspect schemas, write queries, or edit the open database.","fs.readBase64":"Reads the complete SQLite database file you explicitly choose or open.","window.manage":"Updates the window title to show the open database and whether it has unsaved changes.","fs.writeBase64":"Writes SQL and data changes back to the currently opened SQLite database.","dialog.pickPath":"Lets you choose a SQLite database file to inspect and edit.","file.pathForFile":"Obtains the local path of a dropped database so changes can be saved back to it.","remoteEnv.connect":"Connects pickerless hosted SQLite Viewer sessions to the automatically detected local Shell agent.","externalOpen.files":"Opens SQLite databases sent from Finder, Explorer, file associations, or the command line.","dialog.saveDataFile":"Saves a new or imported SQLite database to the destination you choose.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_6SgHFYBBgboD4dm7C5s","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/sqliteviewer","origin_revision_id":"rev_BQ6uNWyJ27C04pPSnX0","fork_depth":0,"installs_count":"0","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":23,"activity_files_changed_30d":9,"activity_lines_added_30d":"2","activity_lines_deleted_30d":"2","score_total":28,"created_at":"2026-09-02T07:28:57.577Z","updated_at":"2026-10-29T03:07:25.564Z","hostname_slug":"amitbet-sqliteviewer"},{"id":"amit-bet/portscope","owner_id":"amit-bet","slug":"portscope","title":"Portscope","summary":"See every listening port, its owning process, and the executable behind it","icon":"icon.svg","manifest_schema_version":2,"launch":{"commands":["portscope"]},"targets":{"web":{"ready":false},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"portscope","icon":"icon.svg","name":"Portscope","tags":["developer","network","ports","processes","utilities"],"assets":{"icon":"icon.svg","screenshots":["screenshot.png"]},"launch":{"commands":["portscope"]},"targets":{"web":{"ready":false},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/portscope"},"description":"See every listening port, its owning process, and the executable behind it","schemaVersion":2,"backendPermissions":[{"reason":"Scans local TCP and UDP listeners to show which processes currently occupy ports on this machine.","remote":true,"permission":"system.ports.read"},{"reason":"Terminates only the listening process you explicitly confirm so its occupied ports can be released.","remote":true,"permission":"system.processes.terminate"},{"reason":"Runs a local coding agent you ask to inspect listeners or terminate an explicitly selected batch of processes.","remote":true,"permission":"agent.session"},{"reason":"Sets the native window title to Portscope so the utility is identifiable in the taskbar and window switcher.","permission":"window.manage"},{"reason":"Lets you choose the machine whose listening ports this PWA inspects.","permission":"remoteEnv.ui.picker"},{"reason":"Connects Portscope to the selected machine to inspect and release its ports.","permission":"remoteEnv.connect"}]},"tags":[],"permissions":["system.ports.read","system.processes.terminate","agent.session","window.manage","remoteEnv.ui.picker","remoteEnv.connect"],"permission_reasons":{"agent.session":"Runs a local coding agent you ask to inspect listeners or terminate an explicitly selected batch of processes.","window.manage":"Sets the native window title to Portscope so the utility is identifiable in the taskbar and window switcher.","remoteEnv.connect":"Connects Portscope to the selected machine to inspect and release its ports.","system.ports.read":"Scans local TCP and UDP listeners to show which processes currently occupy ports on this machine.","remoteEnv.ui.picker":"Lets you choose the machine whose listening ports this PWA inspects.","system.processes.terminate":"Terminates only the listening process you explicitly confirm so its occupied ports can be released."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_bIFY1BsO_XkImsVauyU","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/portscope","origin_revision_id":"rev_5L-nXdYs2QVS-6EsAOQ","fork_depth":0,"installs_count":"0","launches_count":"13","votes_count":"0","score_source_quality":100,"score_editability":4,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":23,"activity_files_changed_30d":8,"activity_lines_added_30d":"2","activity_lines_deleted_30d":"2","score_total":28,"created_at":"2026-09-02T07:14:35.786Z","updated_at":"2026-10-29T03:07:25.543Z","hostname_slug":"amitbet-portscope"},{"id":"amit-bet/notepadpp","owner_id":"amit-bet","slug":"notepadpp","title":"Notepad.js","summary":"A fast, tabbed source-code editor with rich syntax highlighting for popular languages and markup","icon":"icon.svg","manifest_schema_version":2,"launch":{"accepts":["file"],"commands":["notepadjs"],"fileTypes":[{"name":"Source code and text","rank":"Alternate","role":"Editor","mimeTypes":["text/plain","text/markdown","text/javascript","text/typescript","text/html","text/css","application/json","application/xml","text/yaml"],"extensions":["txt","md","markdown","js","mjs","cjs","jsx","ts","tsx","py","pyw","html","htm","css","scss","sass","less","json","jsonc","xml","svg","yaml","yml","toml","ini","cfg","conf","sh","bash","zsh","fish","ps1","bat","cmd","sql","graphql","gql","c","h","cc","cpp","cxx","hpp","cs","java","kt","kts","go","rs","rb","php","swift","lua","pl","r","dart","vue","dockerfile","makefile"],"description":"Source code, markup, configuration, and plain text files"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"manifest":{"id":"notepadpp","icon":"icon.svg","name":"Notepad.js","tags":["text-editor","code-editor","developer-tools","productivity"],"assets":{"icon":"icon.svg","screenshots":[]},"launch":{"accepts":["file"],"commands":["notepadjs"],"fileTypes":[{"name":"Source code and text","rank":"Alternate","role":"Editor","mimeTypes":["text/plain","text/markdown","text/javascript","text/typescript","text/html","text/css","application/json","application/xml","text/yaml"],"extensions":["txt","md","markdown","js","mjs","cjs","jsx","ts","tsx","py","pyw","html","htm","css","scss","sass","less","json","jsonc","xml","svg","yaml","yml","toml","ini","cfg","conf","sh","bash","zsh","fish","ps1","bat","cmd","sql","graphql","gql","c","h","cc","cpp","cxx","hpp","cs","java","kt","kts","go","rs","rb","php","swift","lua","pl","r","dart","vue","dockerfile","makefile"],"description":"Source code, markup, configuration, and plain text files"}]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet"]},"desktop":{"ready":true,"formFactors":["desktop"]}},"updates":{"storeId":"amit-bet/notepadpp"},"description":"A fast, tabbed source-code editor with rich syntax highlighting for popular languages and markup","schemaVersion":2,"backendPermissions":[{"reason":"Allows the version badge menu to apply or remove this app's declared operating-system file associations.","permission":"fileAssociations.manage"},{"reason":"Lets you choose a source or text file to open in an editor tab.","permission":"dialog.pickPath"},{"reason":"Lets you choose the filename and location when saving a new text document.","permission":"dialog.saveTextFile"},{"reason":"Opens supported files sent from Finder, Explorer, file associations, or the command line.","permission":"externalOpen.files"},{"reason":"Obtains the local path of a dropped file so edits can be saved back to that file.","permission":"file.pathForFile"},{"reason":"Reads the source and text files you explicitly open into editor tabs.","remote":true,"permission":"fs.readText"},{"reason":"Writes your edits back to the current file when you choose Save.","remote":true,"permission":"fs.writeText"},{"reason":"Updates the editor window title and state to reflect the active document and unsaved changes.","permission":"window.manage"},{"reason":"Connects pickerless hosted editor sessions to the automatically detected local Shell agent.","permission":"remoteEnv.connect"}]},"tags":[],"permissions":["fileAssociations.manage","dialog.pickPath","dialog.saveTextFile","externalOpen.files","file.pathForFile","fs.readText","fs.writeText","window.manage","remoteEnv.connect"],"permission_reasons":{"fs.readText":"Reads the source and text files you explicitly open into editor tabs.","fs.writeText":"Writes your edits back to the current file when you choose Save.","window.manage":"Updates the editor window title and state to reflect the active document and unsaved changes.","dialog.pickPath":"Lets you choose a source or text file to open in an editor tab.","file.pathForFile":"Obtains the local path of a dropped file so edits can be saved back to that file.","remoteEnv.connect":"Connects pickerless hosted editor sessions to the automatically detected local Shell agent.","externalOpen.files":"Opens supported files sent from Finder, Explorer, file associations, or the command line.","dialog.saveTextFile":"Lets you choose the filename and location when saving a new text document.","fileAssociations.manage":"Allows the version badge menu to apply or remove this app's declared operating-system file associations."},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_CgWRpsDYzkCFmhB2zLM","forked_from_app_id":null,"forked_from_revision_id":null,"origin_app_id":"amit-bet/notepadpp","origin_revision_id":"rev_VbRwRk0jcOnRO_XdhYY","fork_depth":0,"installs_count":"1","launches_count":"3","votes_count":"0","score_source_quality":100,"score_editability":0,"score_mergeability":0,"score_permission_reasons":80,"score_content_rights":40,"score_trust":52,"score_popularity":0,"score_activity":16,"activity_files_changed_30d":1,"activity_lines_added_30d":"1","activity_lines_deleted_30d":"1","score_total":27,"created_at":"2026-07-13T05:30:13.185Z","updated_at":"2026-10-29T03:07:25.508Z","hostname_slug":"amitbet-notepadpp"},{"id":"rotemg10/ballistic","owner_id":"rotemg10","slug":"ballistic","title":"Ballistic","summary":"A retro artillery game with deformable terrain, weapon shops, AI opponents, and LAN multiplayer","icon":"💥","manifest_schema_version":2,"launch":{"commands":["ballistic"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"],"permissions":[]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]}},"manifest":{"id":"ballistic","icon":"💥","name":"Ballistic","launch":{"commands":["ballistic"]},"origin":{"url":"https://dyner-seven.vercel.app/?app=amit-bet%2Fballistic#app-detail","appId":"amit-bet/ballistic","version":"1.0.3","revision":"rev_8H-NFuQwSiouy3Yw5Nk"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"],"permissions":[]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]}},"version":"1.0.4","description":"A retro artillery game with deformable terrain, weapon shops, AI opponents, and LAN multiplayer","schemaVersion":2,"backendPermissions":[]},"tags":[],"permissions":[],"permission_reasons":{},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev_G1FF4QvVSXQAY8ynLX8","forked_from_app_id":"amit-bet/ballistic","forked_from_revision_id":"rev_8H-NFuQwSiouy3Yw5Nk","origin_app_id":"amit-bet/ballistic","origin_revision_id":"rev_8H-NFuQwSiouy3Yw5Nk","fork_depth":1,"installs_count":"5","launches_count":"2","votes_count":"0","score_source_quality":100,"score_editability":20,"score_mergeability":0,"score_permission_reasons":100,"score_content_rights":40,"score_trust":33,"score_popularity":0,"score_activity":0,"activity_files_changed_30d":0,"activity_lines_added_30d":"0","activity_lines_deleted_30d":"0","score_total":26,"created_at":"2026-07-13T19:34:24.451Z","updated_at":"2026-10-29T03:07:25.851Z","hostname_slug":"rotemg10-ballistic"},{"id":"rotemg10/ballistic-fork","owner_id":"rotemg10","slug":"ballistic-fork","title":"Ballistic Fork","summary":"A retro artillery game with deformable terrain, weapon shops, AI opponents, and LAN multiplayer","icon":"💥","manifest_schema_version":2,"launch":{"commands":["ballistic"]},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"],"permissions":[]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]}},"manifest":{"id":"ballistic-fork","icon":"💥","name":"Ballistic Fork","launch":{"commands":["ballistic"]},"origin":{"url":"https://dyner-seven.vercel.app/?app=amit-bet%2Fballistic#app-detail","appId":"amit-bet/ballistic","version":"1.0.3","revision":"rev_8H-NFuQwSiouy3Yw5Nk"},"targets":{"web":{"ready":true,"formFactors":["desktop","tablet","phone"],"permissions":[]},"mobile":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]},"android":{"ready":true,"formFactors":["phone","tablet"],"permissions":[]}},"version":"1.0.4","description":"A retro artillery game with deformable terrain, weapon shops, AI opponents, and LAN multiplayer","schemaVersion":2,"backendPermissions":[]},"tags":[],"permissions":[],"permission_reasons":{},"content_license":null,"licensed_materials":[],"rights_status":"review","rights_reasons":["Content does not declare a license."],"current_revision_id":"rev__Cn8Q5C1eovwh9Sp7Uk","forked_from_app_id":"amit-bet/ballistic","forked_from_revision_id":"rev_8H-NFuQwSiouy3Yw5Nk","origin_app_id":"amit-bet/ballistic","origin_revision_id":"rev_8H-NFuQwSiouy3Yw5Nk","fork_depth":1,"installs_count":"1","launches_count":"0","votes_count":"0","score_source_quality":100,"score_editability":20,"score_mergeability":0,"score_permission_reasons":100,"score_content_rights":40,"score_trust":33,"score_popularity":0,"score_activity":0,"activity_files_changed_30d":0,"activity_lines_added_30d":"0","activity_lines_deleted_30d":"0","score_total":26,"created_at":"2026-07-13T17:25:55.268Z","updated_at":"2026-10-29T03:07:25.648Z","hostname_slug":"rotemg10-ballistic-fork"}],"limit":50,"offset":0}