{"id":20821944,"url":"https://github.com/internetarchive/arklet","last_synced_at":"2025-07-06T13:04:37.405Z","repository":{"id":36973583,"uuid":"397399207","full_name":"internetarchive/arklet","owner":"internetarchive","description":"ARK minter, binder, resolver","archived":false,"fork":false,"pushed_at":"2024-11-11T07:56:30.000Z","size":112,"stargazers_count":22,"open_issues_count":3,"forks_count":16,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-07-01T23:37:27.878Z","etag":null,"topics":["ark","arks","django","postgres","python"],"latest_commit_sha":null,"homepage":"","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/internetarchive.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,"zenodo":null}},"created_at":"2021-08-17T21:48:25.000Z","updated_at":"2025-04-04T04:14:19.000Z","dependencies_parsed_at":"2024-11-11T08:36:58.178Z","dependency_job_id":null,"html_url":"https://github.com/internetarchive/arklet","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/internetarchive/arklet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/internetarchive%2Farklet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/internetarchive%2Farklet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/internetarchive%2Farklet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/internetarchive%2Farklet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/internetarchive","download_url":"https://codeload.github.com/internetarchive/arklet/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/internetarchive%2Farklet/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263905740,"owners_count":23527971,"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","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":["ark","arks","django","postgres","python"],"created_at":"2024-11-17T22:13:30.184Z","updated_at":"2025-07-06T13:04:37.387Z","avatar_url":"https://github.com/internetarchive.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Arklet - A basic ARK resolver\n\n![lint_python](https://github.com/internetarchive/arklet/actions/workflows/lint_python.yml/badge.svg)\n\n\n## What is an ARK?\nSee https://arks.org/\n\n## What is Arklet?\nArklet is a Python Django application for minting, binding, and resolving ARKs.\nIt is intended to follow best practices set out by https://arks.org/.\n\nTechnical design notes:\n- Django is the only required dependency.\n- Supports each Django and Python version that is itself supported by the maintainers (Python 3.7-3.10, Django 3.2.x-4.0.x).\n    - Tests are run against the upcoming versions of Python and Django as well. \n- This repo can be run as a standalone service \n- ...or the ark package can be installed as a reusable app in other Django projects. \n    - If using the included arklet/settings.py file django-environ is also required.\n- Arklet is database agnostic.\n\nArklet is developed with poetry, pytest, black, tox, and more.\n\n## Running\n\n### Locally with Postgres\n\nCreate the default `.env` file in the project's root directory\n\n```\n# /!\\ Set your own secret key /!\\\nARKLET_DJANGO_SECRET_KEY=[YOUR_SECRET]\n\n# For local development, set to True\nARKLET_DEBUG=True\n```\n\nThe following steps walk through running Postgres, installing with poetry, and starting\nthe app. You can omit any of the extras listed in the poetry install step if they are\nnot used in your deployment. The included arklet/settings.py file does require environ.\nYou can skip installing the development dependencies by passing `--no-dev` to poetry.\nDjango is the only required dependency.\n```\ncd path/to/project\nmkdir postgres-data\ndocker run --name arklet-postgres -v postgres-data:/var/lib/postgresql/data \\\n    -p 5432:5432 \\\n    -e POSTGRES_USER=arklet -e POSTGRES_PASSWORD=arklet \\\n    -d postgres\npoetry install --extras \"postgres sentry environ\"\npoetry run python manage.py migrate\npoetry run python manage.py createsuperuser\npoetry run python manage.py runserver\n```\n\n### Separate dockers\nUsing docker, we can use a [this provided](./docker/env.docker.local) config file.\n\nSee above for running PostgreSQL, and run the **Arklet** docker as follows (in *bash*):\n```\ndocker build \\\n    --target dev \\\n    -t \"arklet\" -f ./Dockerfile . \\\n    --build-arg ENV=DEV \\\n\u0026\u0026 docker run --rm -it \\\n    -p 8000:8000 \\\n    --env-file=./docker/env.docker.local \\\n    -e ARKLETDEBUG=\"true\" \\\n    --name arklet \\\n    -v `pwd`/ark:/app/ark \\\n    -v `pwd`/ark_import:/app/ark_import \\\n    -v `pwd`/arklet:/app/arklet \\\n    arklet\n```\n\n### With docker-compose\nUsing the provided `docker-compose.yml` with default settings in the [docker\nconfiguration directory](./docker) :\n\n```\ndocker-compose up\n```\n\nBy default, the folders `ark`, `ark_import` and `arklet` are mounted in the\ncontainer. Should you wish to attach a console to the `arklet` container (needed\nto create the django superuser) :\n```\n# In another shell\ndocker exec -it arklet_django /bin/bash\n# You're now in the docker container\n./manage.py createsuperuser\n```\n\n### First steps\nCreate your first NAAN, Key, and Shoulder in the admin:\n127.0.0.1:8000/admin\n\nAnd by the way, you now host a working ARK resolver! You can already\ntry the following ones :\n- [http://127.0.0.1:8000/ark:/13960/t5n960f7n](http://127.0.0.1:8000/ark:/13960/t5n960f7n)\n- [http://127.0.0.1:8000/ark:/67375/C0X-SPWFRSGR-N](http://127.0.0.1:8000/ark:/67375/C0X-SPWFRSGR-N)\n- [http://127.0.0.1:8000/ark:/12148/bpt6k65358454](http://127.0.0.1:8000/ark:/12148/bpt6k65358454)\n- ...\n\nHappy minting, binding, and resolving!\n\n## Configuration Options\n\nSee arklet/settings.py for the full list of options to put in your config file.\n\n## Deploying\n### With docker\nUsing the provided Dockerfile (is you wish to set a build target, use `prod`, \nbut being the default target you can skip this), provide the following values\nin your environment:\n\n- ARKLET_DJANGO_SECRET_KEY=[YOUR_SECRET]\n- ARKLET_DEBUG=False\n- ARKLET_HOST=0.0.0.0\n- ARKLET_PORT=[Port of choice]\n- ARKLET_POSTGRES_NAME=[DB NAME]\n- ARKLET_POSTGRES_USER=[DB USER]\n- ARKLET_POSTGRES_PASSWORD=[DB PASS]\n- ARKLET_POSTGRES_HOST=[DB HOST]\n- ARKLET_POSTGRES_PORT=[DB PORT]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finternetarchive%2Farklet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finternetarchive%2Farklet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finternetarchive%2Farklet/lists"}