{"id":26983049,"url":"https://github.com/notwindstone/noctis","last_synced_at":"2025-08-31T14:09:49.256Z","repository":{"id":274067913,"uuid":"817872418","full_name":"notwindstone/noctis","owner":"notwindstone","description":"[wip] spotify api, youtube music api, yandex music api, soundcloud api","archived":false,"fork":false,"pushed_at":"2025-07-05T15:30:34.000Z","size":1110,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-05T16:39:49.311Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/notwindstone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-06-20T16:01:47.000Z","updated_at":"2025-07-05T15:30:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"83c18058-4a6d-4924-bcd1-da5c0360da98","html_url":"https://github.com/notwindstone/noctis","commit_stats":null,"previous_names":["notwindstone/music-player","notwindstone/noctis"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/notwindstone/noctis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notwindstone%2Fnoctis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notwindstone%2Fnoctis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notwindstone%2Fnoctis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notwindstone%2Fnoctis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/notwindstone","download_url":"https://codeload.github.com/notwindstone/noctis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notwindstone%2Fnoctis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272988919,"owners_count":25026961,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-03T16:38:36.131Z","updated_at":"2025-08-31T14:09:49.245Z","avatar_url":"https://github.com/notwindstone.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"local-first app based on the webview\n\n## tech stack\n\n### desktop\n\n- Wails\n- TypeScript\n- Svelte 5\n- UnoCSS with presetWind3\n- TypeBox\n- https://github.com/kitschpatrol/svelte-tweakpane-ui\n\n### mobile\n\nProbably Jetpack Compose with the Kotlin, but... do we really need it? There is plenty of options there, maybe we can either fork some app or abandon an idea for making a mobile app\n\n## plan\n\n### yt-dlp\n\n\u003cdetails\u003e\n\nAdd a way to download music from the YouTube\n\n**Current implementation idea:** tbd\n\n**Results:** tbd\n\n\u003c/details\u003e\n\n### music formats and conversion\n\n\u003cdetails\u003e\n\nTry to support as many file formats as possible, like FLAC, WAV, M4A, MP3, etc.\n\nAlso implement a functionality to convert music formats locally\n\n**Current implementation idea:** tbd\n\n**Results:** tbd\n\n\u003c/details\u003e\n\n### extensions\n\n\u003cdetails\u003e\n\nJS code can be dynamically fetched from somewhere and then executed with the `new Function(JS_CODE_AS_STRING)`. That is a key idea for implementing user plugin system. Plugins can communicate with the host app and each other through `window.postMessage`, and the variables can be shared using the `window` object. JS code can also handle applying CSS styles, adding DOM nodes, etc. Any fully CSR JS framework will work perfectly.\n\nThe biggest concern here is the security. Even if the `new Function` can't access local variables and runs in a different scope (unlike `eval`), it still has a lot (and I mean really a lot) of other security issues. Executing an unknown code (especially with the access to the filesystem) is a **horrible** thing\n\nUnfortunately, if VSCode, Obsidian, Vencord and other apps can't implement a secure user plugin system, I won't be able to do it too. It's either functionality or security, not both\n\n**Current implementation idea:** An extension repository that hosts moderated plugin versions. Moderation will require only a source code and, if differs from usual, build manual. Plugins will run only once on application load, without blocking the main thread\n\n**Results:** custom elements, insane UI customization, etc.\n\n\u003c/details\u003e\n\n## design\n\ntbd\n\n## testing\n\n- vitest\n- playwright\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotwindstone%2Fnoctis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnotwindstone%2Fnoctis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotwindstone%2Fnoctis/lists"}