{"id":18258234,"url":"https://github.com/ginkgobioworks/edge","last_synced_at":"2025-10-14T04:15:46.580Z","repository":{"id":37549496,"uuid":"54493721","full_name":"ginkgobioworks/edge","owner":"ginkgobioworks","description":"Efficiently keep track of changes to genomes","archived":false,"fork":false,"pushed_at":"2024-07-22T15:34:02.000Z","size":39470,"stargazers_count":38,"open_issues_count":9,"forks_count":4,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-09-06T13:59:30.899Z","etag":null,"topics":["bioinformatics","edge","genome","genome-annotation","gff","ncbi-blast","prefix-tree","primer"],"latest_commit_sha":null,"homepage":"https://pypi.python.org/pypi/edge-genome","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/ginkgobioworks.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2016-03-22T17:07:28.000Z","updated_at":"2025-08-25T16:33:44.000Z","dependencies_parsed_at":"2024-12-30T17:46:44.358Z","dependency_job_id":null,"html_url":"https://github.com/ginkgobioworks/edge","commit_stats":{"total_commits":684,"total_committers":19,"mean_commits":36.0,"dds":0.466374269005848,"last_synced_commit":"79094cbe67fb319334a224fdd0622c45afa996a3"},"previous_names":[],"tags_count":71,"template":false,"template_full_name":null,"purl":"pkg:github/ginkgobioworks/edge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ginkgobioworks%2Fedge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ginkgobioworks%2Fedge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ginkgobioworks%2Fedge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ginkgobioworks%2Fedge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ginkgobioworks","download_url":"https://codeload.github.com/ginkgobioworks/edge/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ginkgobioworks%2Fedge/sbom","scorecard":{"id":427289,"data":{"date":"2025-08-11","repo":{"name":"github.com/ginkgobioworks/edge","commit":"79094cbe67fb319334a224fdd0622c45afa996a3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":1,"reason":"Found 1/8 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 27 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:4: pin your Docker image by updating python:3.6-buster to python:3.6-buster@sha256:56ba32a1c5aa030914cc957f1c9fe58d9d462bdf89a1e5f2b4dbdda68085327e","Warn: downloadThenRun not pinned by hash: Dockerfile:15","Warn: npmCommand not pinned by hash: Dockerfile:23","Warn: pipCommand not pinned by hash: Dockerfile:31","Warn: pipCommand not pinned by hash: Dockerfile:34","Warn: pipCommand not pinned by hash: Dockerfile:37","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned","Info:   0 out of   3 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":0,"reason":"23 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2021-858 / GHSA-q4xr-rc97-m4xx","Warn: Project is vulnerable to: PYSEC-2022-190 / GHSA-2gwj-7jmv-h26r","Warn: Project is vulnerable to: PYSEC-2022-1 / GHSA-53qw-q765-4fww","Warn: Project is vulnerable to: PYSEC-2021-98 / GHSA-68w8-qjq3-2gfm","Warn: Project is vulnerable to: PYSEC-2022-20 / GHSA-6cw3-g6wv-c2xv","Warn: Project is vulnerable to: GHSA-7xr5-9hcq-chf9","Warn: Project is vulnerable to: PYSEC-2022-2 / GHSA-8c5j-9r9f-c6w8","Warn: Project is vulnerable to: GHSA-8x94-hmjh-97hq","Warn: Project is vulnerable to: PYSEC-2022-19 / GHSA-95rw-fx8r-36v6","Warn: Project is vulnerable to: PYSEC-2022-3 / GHSA-jrh2-hc4r-7jwx","Warn: Project is vulnerable to: PYSEC-2021-99 / GHSA-p99v-5w3c-jqq9","Warn: Project is vulnerable to: PYSEC-2021-8 / GHSA-qm57-vhq3-3fwf","Warn: Project is vulnerable to: GHSA-rrqc-c2jx-6jgv","Warn: Project is vulnerable to: PYSEC-2021-7 / GHSA-rxjp-mfm9-w4wr","Warn: Project is vulnerable to: PYSEC-2021-439 / GHSA-v6rh-hp5x-86rv","Warn: Project is vulnerable to: PYSEC-2022-191 / GHSA-w24h-v9qh-8gxj","Warn: Project is vulnerable to: PYSEC-2022-42973 / GHSA-q4qm-xhf9-4p8f","Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: GHSA-6p56-wp2h-9hxr","Warn: Project is vulnerable to: PYSEC-2019-108 / GHSA-9fq2-x9r6-wfmf","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2017-1 / GHSA-frgw-fgh6-9g52"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T02:30:26.253Z","repository_id":37549496,"created_at":"2025-08-19T02:30:26.253Z","updated_at":"2025-08-19T02:30:26.253Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017985,"owners_count":26086213,"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-10-14T02:00:06.444Z","response_time":60,"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":["bioinformatics","edge","genome","genome-annotation","gff","ncbi-blast","prefix-tree","primer"],"created_at":"2024-11-05T10:29:47.777Z","updated_at":"2025-10-14T04:15:46.556Z","avatar_url":"https://github.com/ginkgobioworks.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"====\nEdge\n====\n\n.. image:: https://travis-ci.org/ginkgobioworks/edge.svg?branch=master\n    :target: https://travis-ci.org/ginkgobioworks/edge\n\nEdge helps propagate annotations from parent genome to child genomes.\nAnnotations added to parent genomes are automatically visible on all child\ngenomes, even on child genomes that were created before annotation addition.\nEdge does this by keeping structural changes between a genome and child genomes\nderived from it. A user creates a modified genome by applying a sequence-based\noperation, such as homologous recombination, to a parent genome. Users can\nannotate or make corrections to sequences on a genome; Edge automatically\napplies the changes to the appropriate regions on the derived genomes.\n\nEdge provides UIs to look at operations and changes and APIs for making\nchanges. Edge can export genome sequences and annotations as GFF files.  While\nEdge comes with a simple UI for browsing features and sequences, the UI is\nprimitive compared to other specialized applications.\n\n\n\nTry it using Docker\n-------------------\n* Use ``docker-compose``:\n\nThe Docker environment is defined in ``docker-compose.yml``. Use the ``edge`` service for your\ncommands.\n\nTo start the edge server:\n\n::\n\n    docker-compose up\n\nThen check it out in your browser: http://localhost:9000/edge/#/genomes .\n\nTo import a genome, use:\n\n::\n\n    docker-compose run edge python src/manage.py import_gff 'Saccharomyces cerevisiae' example/sc_s288c.gff\n\nTo run a shell inside the Edge container:\n\n::\n\n    docker-compose run --rm edge bash\n\n* Alternatively, you can use the ``Makefile``:\n\nThe ``Makefile`` holds all the commands necessary for managing the server and database, both in\nusage and development. Run ``make`` without arguments to see a list of commmands.\n\nAny of these ``make`` targets can be run directly from a shell inside a container:\n\n::\n\n    you@localhost:edge$ docker-compose run --rm edge bash\n    # Now you're inside the Docker container\n    root@docker-image:/usr/src/edge# make test\n\nFurthermore, any target can have ``-ext`` added to it. Commands that end in ``-ext`` are meant to be\nrun *externally* to the image, *i.e.*, from the host system.\n\nFor example, to start the edge server:\n\n::\n\n    make start-ext\n\n\nTo run a shell:\n\n::\n\n    make bash-ext\n\n\nTo import a genome as an example:\n\n::\n\n    make add-s288c-ext\n\n\nIf the edge app is already running in a container, or you don't want to rebuild the image yet, you\ncan change ``-ext`` to ``-ext_fast``, which will run the make target in a new container without\ntrying to rebuild the image.\n\n\nTry it without Docker\n---------------------\n\nOn your own machine, Construct your virtual environment and pip-install dependencies (use\n``requirements.txt``).\n\nTo start a server, first update ``src/server/settings.py`` to use either sqlite or MySQL. For MySQL,\ncreate the appropriate databse. Then,\n\n::\n\n    make migrate\n    (cd example; gunzip ecoli-mg1655.gff.gz; gunzip yeast.gff.gz)\n    python src/manage.py import_gff 'E. coli MG1655' example/ecoli-mg1655.gff\n    python src/manage.py import_gff 'Saccharomyces cerevisiae' example/yeast.gff\n    make run\n\nThen set your browser to http://localhost:8000/edge/. Note the port is different than the Docker\ncase\n\nIf you need `NCBI BLAST`_ or Primer3_ support, you'll need to make sure the packages are installed\non your system. Debian and Ubuntu distributions provide binary versions of both of these packages.\n\nDepending on where the NCBI BLAST tools and Primer3 are installed, you will probably need to tell\nedge where to find them, using the following environment variables:\n\n::\n\n    NCBI_BIN_DIR       # Path to directory holding ncbi binaries, e.g. /usr/bin\n    PRIMER3_BIN        # Path to primer3 binary, e.g. /usr/bin/primer3_core\n    PRIMER3_CONFIG_DIR # Path to primer3 config directory, e.g. etc/primer3_config/\n\n\nThen, to set up the edge BLAST db, from the ``src`` subdirectory,\n\n::\n\n    python manage.py build_edge_blastdb\n\n.. _NCBI BLAST: https://blast.ncbi.nlm.nih.gov/Blast.cgi?PAGE_TYPE=BlastDocs\u0026DOC_TYPE=Download\n.. _Primer3: https://sourceforge.net/projects/primer3/\n\n\nEditing data\n------------\n\nYou can edit genome and fragment metadata, such as name, notes, circular attributes, from the Django\nadmin. Create a Django admin superuser, (see the ``superuser`` make target), then set your browser\nto the ``/admin/`` endpoint of wherever you are running your dev server.\n\n\nDeploying to production\n-----------------------\n\nDo *not* use the Dockerfile as-is for production, or the ``make run`` task. Django's ``runserver``\ncommand is not meant to run a production server. Instead, you'll need to spin up a production WSGI\nserver and run the Django projct with that, with your own settings. In this situation, it's better\nto simply install the ``edge-genome`` python package on your deployed system and add it to your\ndeployment Django server's ``installed_apps`` setting. The package is designed so that, when built,\nit already contains all of the javascript assets compiled in their final state.\n\n\nDevelopment, testing, and package release\n-----------------------------------------\n\nRunning tests\n~~~~~~~~~~~~~\n\nWhen developing locally, you can run tests in the controlled environment of the docker container\nfrom your local machine with ``make test-all-ext``. Make sure you've run the migrations at least once\nbefore doing this. If your server is already running, and you want to run tests from the host\nmachine in a separate container, use ``make test-all-ext_fast``. Or just keep a container up and run\nthe tests from inside it.\n\nStatic files\n~~~~~~~~~~~~\n\nNote that edge uses webassets_ for compilation of static assets. These assets are not automatically\ncompiled (because the integration of that with Django is flaky). Instead, compile assets after\ncahnging them with ``make build_assets``. To constantly recompile them, see ``make watch``.\n\nStatic dependencies are managed with Bower_. (Eventually to be replaced with npm_/webpack_).\nDependencies are downloaded before the python package is built so Python package consumers already\nhave all required JavaScript.\n\nVersioning\n~~~~~~~~~~\n\nEdge is versioned semantically. Continuous integration builds are done automatically on all branches\nthrough Travis CI, and tagged commits to master are automatically released to PyPI. To release a new\nversion, bump the version number with the appropriate severity of the changes (major, minor, or\npatch), and push the resulting tagged commits to the GitHub remote repo:\n\n::\n\n    you@localhost:edge$ docker-compose run --rm edge make bump/patch-ext # Or bump/major, or bump/minor\n    you@localhost:edge$ git push --tags origin master\n\nIf you cannot push to master directly, do the same thing on a new branch and submit a pull request.\n\n.. _webassets: https://webassets.readthedocs.io/\n.. _Bower: https://bower.io/\n.. _npm: https://npmjs.org/\n.. _webpack: https://webpack.js.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fginkgobioworks%2Fedge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fginkgobioworks%2Fedge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fginkgobioworks%2Fedge/lists"}