{"id":24961690,"url":"https://github.com/esteinig/brick","last_synced_at":"2026-03-07T21:31:16.185Z","repository":{"id":213617997,"uuid":"734490264","full_name":"esteinig/brick","owner":"esteinig","description":"BRICK creates a BRIG-like interactive data visualisation for bacterial genome annotations and comparisons :microbe:","archived":false,"fork":false,"pushed_at":"2025-03-19T22:11:07.000Z","size":2393,"stargazers_count":18,"open_issues_count":12,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-08T08:42:46.575Z","etag":null,"topics":["bakta","blast","brig","cds","d3","genomad","genomics","html","mge","snps","svg"],"latest_commit_sha":null,"homepage":"","language":"Svelte","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/esteinig.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null}},"created_at":"2023-12-21T20:21:38.000Z","updated_at":"2025-08-06T19:10:06.000Z","dependencies_parsed_at":"2024-01-06T04:24:03.376Z","dependency_job_id":"594ccfee-9b4f-40a6-a707-b3bd410b74ab","html_url":"https://github.com/esteinig/brick","commit_stats":null,"previous_names":["esteinig/brick"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/esteinig/brick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esteinig%2Fbrick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esteinig%2Fbrick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esteinig%2Fbrick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esteinig%2Fbrick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esteinig","download_url":"https://codeload.github.com/esteinig/brick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esteinig%2Fbrick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30231603,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T19:01:10.287Z","status":"ssl_error","status_checked_at":"2026-03-07T18:59:58.103Z","response_time":53,"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":["bakta","blast","brig","cds","d3","genomad","genomics","html","mge","snps","svg"],"created_at":"2025-02-03T08:56:00.403Z","updated_at":"2026-03-07T21:31:16.006Z","avatar_url":"https://github.com/esteinig.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BRICK \u003ca href='https://github.com/esteinig'\u003e\u003cimg src='docs/brick.png' align=\"right\" height=\"320\" /\u003e\u003c/a\u003e\n\n[`BRIG`](https://github.com/happykhan/BRIG)-like interactive data visualization for prokaryotic genome annotation, comparison and exploration of large-scale genomic regions\n\n- [How to run `BRICK`](#web-service-convenient)\n  - [Web application](#web-service-convenient) \n  - [Local application (Docker)](#local-application-easy)\n  - [Self-hosted application (Docker)](#server-application-advanced)\n- [Development setup and workflow](#development)\n- [Dependencies and citations](#dependencies)\n- [Etymology](#etymology)\n- [Contributors](#contributors)\n\n## Web service (convenient)\n\nAt the moment, the most convenient way to get started is by using our hosted web application ([brick.ink](https://brick.ink)). Please note that the server is located in Australia - for a snappier experience you can [deploy the application stack](#local-application-easy) on your local machine.\n\nSession visualizations and all session data, including uploaded files and working data expire after seven days and are deleted from database and storage. All data are stored anonymously and sessions can only be accessed using the unique identifier in the URL.\n\nIf you notice egregious bugs or styling issues, please [let us know]()! Testing is currently limited to `Linux` and `Firefox`. \n\n### Files\n\nIn the current iteration of the web application there are some restrictions in place:\n\n* File upload size is restricted to 20 MB, please let me know if this is not sufficient\n* Files and working data have a total session limit of 200 MB\n\n### Sessions\n\nDon't hesitate to come back to the session - while a session has not expired you can:\n\n* Navigate away at any time and come back to the session using the session URL\n* Download the session data and re-hydrate your session in the data upload panel\n* Share your (editable) session with colleagues by sending them the session URL\n\n`BRICK` is under active development. Please note there is currently no guarantee for data persistence in the web application or backwards compatabiltity until major version release. \n\n## Local application (easy)\n\nYou can run a pre-configured local production stack of the latest release with `Docker`:\n\n```bash\n# Clone latest stable release on main\ngit clone https://github.com/esteinig/brick \u0026\u0026 cd brick\n\n# -d for detached mode\ndocker compose --profile prod up \n\n# Application available in your browser at: http://localhost:5173/ \n```\n\nUpdate to the latest stable version on `main`:\n\n```bash\ngit pull # update main\ndocker compose --profile prod up --build \n```\n\n## Server application (advanced)\n\nYou can self-host the application on a local or remote server - in this case my assumption is that you know what you are doing 👀\n\n\u003cdetails\u003e\n\n\u003csummary\u003eExpand to view self-hosting instructions\u003c/summary\u003e\n\nSee the `docker` subdirectory for reverse-proxy and alternative service configurations using `Traefik`. \n\nIf you are hosting your own instance of the application on the web, my assumption is that you know what you are doing and have enough background knowledge to modify `docker/traefik/web/dynamic.yml` and `docker/docker-compose.web.yml`. Please ensure proper attribution if you are running your own web-instance, it helps to keep our main server running :heart:  \n\nPlease note that some tools may require adjustments of the `docker/brick.env` application and server configuration file, in particular adjustment of the `BODY_SIZE_LIMIT` variable which controls the maximum size for requests including file uploads, and the `PRIVATE_CELERY_TASK_CHECK_TIMEOUT` variable, which controls how long we are checking for results from a task queue worker that processes a long-running task.\n\nIn this example, we are using the pre-configured `localhost` reverse-proxy to test deployment on a local machine (`http://brick.localhost/`), assuming there are no other reverse-proxy service running:\n\n```bash\n# Create the external `proxy` network which \n# connects your stack with the reverse-proxy\ndocker network create proxy\n\n# Link the localhost stack into the current repository\nln -s docker/docker-compose.localhost.yml .\nln -s docker/docker-compose.traefik.localhost.yml .\n\n# Create a secrets directory captured in `.gitignore` \n# and copy the default secret files for the stack database\nmkdir .secrets\ncp docker/mongodb/* .secrets/\n\n# Modify the secret files, one line per file, line endings are stripped \n# automatically on server start in case you use `nano` or other editors\n# that introduce them by default\n\n# Up the reverse proxy service\ndocker compose -f docker-compose.traefik.localhost.yml up -d\n\n# Up the production stack\ndocker compose -f docker-compose.localhost.yml up\n\n# Application available in your browser at: http://brick.localhost/\n```\n\nThe production stack comes with an (optional) database cleaner that safely removes sessions and session working directories in the `work` volume, which can be activated using the `--profile server` flag:\n\n```bash\ndocker compose --profile prod --profile server up \n```\n\nDefault interval (every day) and expiration time (7 days) can be changed in `docker-compose.yml`:\n\n```yml\ncommand: brick utils clean --expire-days 7 --day-of-week \"*\" --time-of-day '04:00' --log /tmp/brick-cleaner.log\n```\n\nIf you are running a web-instance through `Cloudflare` you need to set your SSL configuration to `full`. \n\n\n\u003c/details\u003e\n\n## Development\n\nAny and all questions, suggestions for improvement, bug reports, pull requests and ideas you would like to see implemented are welcome! Please open an [issue](https://github.com/esteinig/brick/issues) in this repository. \n\n\u003cdetails\u003e\n\n\u003csummary\u003eExpand to view development notes and workflows\u003c/summary\u003e\n\nDevelopment workflows and notes are mainly are reminder to myself and anyone who would like to contribute - if you have any questions please feel free to open an issue or contact me through the usual channels.\n\nDevelopment and pull requests can be made on the [`dev`](https://github.com/esteinig/brick/tree/dev) branch. You can use the `dev` profile for hot reloads of changes to the application interface. Note that the `dev` profile in `docker-compose.web.yml` actually deploys the production service, but on a different domain, to be implemented (`dev.brick.ink`). For hot-reload of the Sveltekit interface the application should be installed first (`npm install`) so that you can point your IDE at the development clone and changes made to the `app` and `node_modules` folder are mirrored into the development container.\n\nNote that the `--profile dev` stack serves the application on port `5174` **not on** `5173` (`--profile prod`) for concurrent production build testing.\n\nIt may help to run a fresh development stack with a project identifier to keep volumes and containers separate for the current branch. Project specific stack containers and volumes (all data) can be removed with the `-v` flag. Changes to the `Python` package currently have to use the `--build` flag to rebuild the package inside the `docker/Dockerfile.server` container. \n\n\n```bash\n# You may be on a new feature branch `feat/new-feature`...\n\n# Up a fresh stack with the `--project` flag for this branch\ndocker compose --profile dev --project-name new-feature up -d\n\n# Down the stack and remove all volumes \ndocker compose --profile dev --project-name new-feature down -v\n```\n\nUnit tests are defined in `tests` can be run with the `tests` service:\n\n```bash\n# At the moment we need to rebuild after modifying tests\ndocker compose build tests \u0026\u0026 docker compose run --rm tests\n```\n\nRelease branches (`release/**`) can be used to auto bump version and generate the changelog for example by using `git checkout -b release/$(cog bump --dry-run --auto) \u0026\u0026 cog bump --auto`. I am not sure if `cocogitto` is stable yet, it may be worthwhile checking version bumps before creating the branch with `cog bump --dry-run --auto`. A new PR is created with the updated `CHANGELOG.md` and version bumps from `cocogitto`, which can then be merged into main (`release.yml`).\n\nReleases are deployed to the production server on creation of a new release (`cicd-prod.yml`). Tests are run with the `test.yml` action workflow on push any test branch (`test/**`). One can create a release branch and before merging into `main` simply checkout and push a new test branch of the release to trigger the unit testing action for example `git checkout -b test/0.3.0 \u0026\u0026 git push origin test/0.3.0`.\n\n\u003c/details\u003e\n\n## Dependencies\n\n`BRICK` would not be possible without the relentless work of bioinformaticians and researchers developing open-soource software for the community. \nIf you use their tools in the visualization, please cite the following publications:\n\n\u003e [Altschul et al. (1990)](https://pubmed.ncbi.nlm.nih.gov/2231712/) - Basic local alignment search tool - Journal of Molecular Biology\n\n\u003e [Camargo et al. (2023)](https://www.nature.com/articles/s41587-023-01953-y) - Identification of mobile genetic elements with geNomad - Nature Biotechnology\n\n\u003e [Sherry et al. (2023)](https://www.nature.com/articles/s41467-022-35713-4) - An ISO-certified genomics workflow for identification and surveillance of antimicrobial resistance (abritAMR) - Nature Communications\n\nIf you would like to acknowledge the authors of the original visualization, please cite:\n\n\u003e [Alikhan et al. (2011)](https://bmcgenomics.biomedcentral.com/articles/10.1186/1471-2164-12-402) - BLAST Ring Image Generator (BRIG): simple prokaryote genome comparisons - BMC Genomics\n\nSimilarly, the stack would not be possible without the following wonderful tools:\n\n* [Svelte/Sveltekit](https://kit.svelte.dev/)\n* [Skeleton UI](https://www.skeleton.dev/)\n* [FastAPI](https://fastapi.tiangolo.com/)\n* [Celery](https://docs.celeryq.dev/en/stable/)\n* [Redis](https://github.com/redis/redis)\n* [MongoDB](https://www.mongodb.com/)\n\n## Etymology\n\n`BRICK` is not very brick-like... and **BR**IG-like **I**nteractive **C**ircular **K**nowledgebase is a bit of a stretch 👀 \n\n## Contributors\n\n* Eike Steinig - [@esteinig](https://github.com/esteinig)\n* Wytamma Wirth - [@Wytamma](https://github.com/Wytamma)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Festeinig%2Fbrick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Festeinig%2Fbrick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Festeinig%2Fbrick/lists"}