{"id":15981326,"url":"https://github.com/boxed/p","last_synced_at":"2026-01-19T22:31:39.115Z","repository":{"id":114100433,"uuid":"111804497","full_name":"boxed/p","owner":"boxed","description":null,"archived":false,"fork":false,"pushed_at":"2019-08-06T12:52:21.000Z","size":990,"stargazers_count":2,"open_issues_count":5,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-07T03:46:52.389Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/boxed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2017-11-23T12:02:53.000Z","updated_at":"2019-07-24T17:36:29.000Z","dependencies_parsed_at":"2023-06-13T02:30:56.234Z","dependency_job_id":null,"html_url":"https://github.com/boxed/p","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/boxed/p","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boxed%2Fp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boxed%2Fp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boxed%2Fp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boxed%2Fp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/boxed","download_url":"https://codeload.github.com/boxed/p/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boxed%2Fp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28587240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T20:45:59.482Z","status":"ssl_error","status_checked_at":"2026-01-19T20:45:41.500Z","response_time":67,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2024-10-08T00:43:29.983Z","updated_at":"2026-01-19T22:31:39.094Z","avatar_url":"https://github.com/boxed.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# p (for project)\n\nMost languages have nice tools like this:\n\n```\n\u003e somecommand new foo\n\u003e cd foo\n\u003e somecommand test\nCreating isolated environment \nInstalling dependencies\nTested ok!\n```\n\n...but what is that `somecommand`? For elm it's easy, it's `elm`, but for rust it's `cargo` and for Clojure it's `lein`. For some languages there are more than one you need to know about or multiple separate tools that do parts of this. And do you explicitly need to tell it to download dependencies? For `elm` you do, but not for `lein`. It's a bit of a mess.\n\np is the tool to put that under one roof.\n\nTo accomplish this goal we must:\n\n- auto detect language (and project type!) in most cases and be super easily configurable in cases where we don't detect automatically \n- auto detect our os/environment so we can know how to install required tools\n- have an open architecture so implementating support for a language can be done _in that language_ and not force everyone into writing javascript or bash or whatever\n- have an open community so we can have implementations for even very small languages made by the people who knows them\n- expose all the underlying power of the tools we are shadowing so we don't just get the least common denominator\n- have shorter commands than the original tools (by having the hybris of taking a one character command name for example!)\n\n## Configuration \n\nProject type detectors\n\n- simple\n- regex\n- executable\n\nAlises\n\n- Config files\n- Executables\n\n## Master plan\n\n- Build prototype of command dispatcher (includes config file reader, and maybe more) in python\n- When this works well and is solid with good tests (mutation tested ideally), port this base to some compiled language that is faster. Every millisecond counts!\n- In parallel to the testing of the prototype build out language support. This should be safe to do since the final command dispatcher will just use this actual code so that won't need to be rewritten.\n\n\n## [Further Documentation](Documentation/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboxed%2Fp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboxed%2Fp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboxed%2Fp/lists"}