[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"github-stars":3,"directus-schema-sync":110,"marketplace-site-banners":135},{"id":4,"node_id":5,"name":6,"full_name":7,"private":8,"owner":9,"html_url":27,"description":28,"fork":8,"url":29,"forks_url":30,"keys_url":31,"collaborators_url":32,"teams_url":33,"hooks_url":34,"issue_events_url":35,"events_url":36,"assignees_url":37,"branches_url":38,"tags_url":39,"blobs_url":40,"git_tags_url":41,"git_refs_url":42,"trees_url":43,"statuses_url":44,"languages_url":45,"stargazers_url":46,"contributors_url":47,"subscribers_url":48,"subscription_url":49,"commits_url":50,"git_commits_url":51,"comments_url":52,"issue_comment_url":53,"contents_url":54,"compare_url":55,"merges_url":56,"archive_url":57,"downloads_url":58,"issues_url":59,"pulls_url":60,"milestones_url":61,"notifications_url":62,"labels_url":63,"releases_url":64,"deployments_url":65,"created_at":66,"updated_at":67,"pushed_at":68,"git_url":69,"ssh_url":70,"clone_url":71,"svn_url":27,"homepage":72,"size":73,"stargazers_count":74,"watchers_count":74,"language":75,"has_issues":76,"has_projects":76,"has_downloads":76,"has_wiki":8,"has_pages":8,"has_discussions":76,"forks_count":77,"mirror_url":78,"archived":8,"disabled":8,"open_issues_count":79,"license":80,"allow_forking":76,"is_template":8,"web_commit_signoff_required":8,"has_pull_requests":76,"pull_request_creation_policy":85,"topics":86,"visibility":26,"forks":77,"open_issues":79,"watchers":74,"default_branch":106,"temp_clone_token":78,"custom_properties":107,"organization":108,"network_count":77,"subscribers_count":109},7122594,"MDEwOlJlcG9zaXRvcnk3MTIyNTk0","directus","directus\u002Fdirectus",false,{"login":6,"id":10,"node_id":11,"avatar_url":12,"gravatar_id":13,"url":14,"html_url":15,"followers_url":16,"following_url":17,"gists_url":18,"starred_url":19,"subscriptions_url":20,"organizations_url":21,"repos_url":22,"events_url":23,"received_events_url":24,"type":25,"user_view_type":26,"site_admin":8},15967950,"MDEyOk9yZ2FuaXphdGlvbjE1OTY3OTUw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F15967950?v=4","","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus","https:\u002F\u002Fgithub.com\u002Fdirectus","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Ffollowers","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Ffollowing{\u002Fother_user}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fgists{\u002Fgist_id}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fstarred{\u002Fowner}{\u002Frepo}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fsubscriptions","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Forgs","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Frepos","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fevents{\u002Fprivacy}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Freceived_events","Organization","public","https:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus","The flexible backend for all your projects 🐰 Turn your DB into a headless CMS, admin panels, or apps with a custom UI, instant APIs, auth & more.","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fforks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fkeys{\u002Fkey_id}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcollaborators{\u002Fcollaborator}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fteams","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fhooks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues\u002Fevents{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fevents","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fassignees{\u002Fuser}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fbranches{\u002Fbranch}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Ftags","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Fblobs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Ftags{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Frefs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Ftrees{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fstatuses\u002F{sha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Flanguages","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fstargazers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcontributors","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fsubscribers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fsubscription","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcontents\u002F{+path}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcompare\u002F{base}...{head}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fmerges","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002F{archive_format}{\u002Fref}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fdownloads","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fpulls{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fmilestones{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fnotifications{?since,all,participating}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Flabels{\u002Fname}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Freleases{\u002Fid}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fdeployments","2012-12-12T01:35:36Z","2026-06-01T20:57:39Z","2026-06-01T21:41:46Z","git:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus.git","git@github.com:directus\u002Fdirectus.git","https:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus.git","https:\u002F\u002Fdirectus.io",442985,36031,"TypeScript",true,4790,null,402,{"key":81,"name":82,"spdx_id":83,"url":78,"node_id":84},"other","Other","NOASSERTION","MDc6TGljZW5zZTA=","all",[87,88,89,90,91,92,6,93,94,95,96,97,98,99,100,101,102,103,104,105],"api","app","cms","composable","data-visualization","database","graphql","headless-cms","javascript","mariadb","mssql","mysql","no-code","node","postgresql","sql","sqlite","typescript","vue","main",{},{"login":6,"id":10,"node_id":11,"avatar_url":12,"gravatar_id":13,"url":14,"html_url":15,"followers_url":16,"following_url":17,"gists_url":18,"starred_url":19,"subscriptions_url":20,"organizations_url":21,"repos_url":22,"events_url":23,"received_events_url":24,"type":25,"user_view_type":26,"site_admin":8},327,{"name":111,"description":112,"verified":8,"id":113,"readme":114,"type":115,"last_updated":116,"host_version":117,"downloads":118,"total_downloads":119,"sandbox":76,"license":78,"publisher":120,"versions":123,"formatted_name":132,"formatted_readme":133,"formatted_description":112,"images":134,"recent_downloads_7_days":119,"recent_downloads_30_days":119},"directus-schema-sync","Sync directus schema between environments","bc995b4e-faad-416b-b488-1cbe46a976d9","# Install\n```\nFROM directus\u002Fdirectus:10.8.2\n\nARG GITHUB_TOKEN\n\nUSER root\nRUN corepack enable \\\n  && corepack prepare pnpm@8.9.0 --activate\n\nUSER node\nRUN pnpm install directus-extension-schema-sync@1.0.*\n```\n\n# Setting for directus\n- Add `export_schema` field with type JSON to `directus_collections`\n- Add new collection `export_tools` with fields:\n  - `url: string`\n  - `login: string`\n  - `password: string`\n  - `type: dropdown` with value `dev, stage, prod`\n  - `current_client: boolean` (toggle type on directus UI)\n\n## How extentention select clients setting?\nSelect row with `current_client=true` otherwise last row with type `stage` for master directus \nand last row with type `prod` for remote directus\n\n# export_schema \nconfig type\n```\nexport type ExportElement = {\n  collection: string;\n  exclude_fields?: string[];\n  related_collections?: ExportElement[];\n  referenced_collections?: ExportElement[];\n};\nexport type ExportSchemaConfig = {\n  export: boolean;\n} & ExportElement;\n```\nconfig does not merge with other configs, e.g you have `events` collection with referrence to `place`, when you select `events`, extention will only use events config\n\n```\n{\n    \"export\": true,\n    \"exclude_fields\": [\n        \"states\"\n    ],\n    \"referenced_collections\": [\n        {\n            \"collection\": \"unit_types\"\n        }\n    ],\n    \"related_collections\": [\n        {\n            \"collection\": \"unit_state\",\n            \"exclude_fields\": [\n                \"behaviours\"\n            ]\n        },\n        {\n            \"collection\": \"unit_behaviour\",\n            \"referenced_collections\": [\n                {\n                    \"collection\": \"unit_behaviour_type\"\n                }\n            ]\n        }\n    ]\n} \n```\norder to sync data:\n1. referenced_collections\n2. current collection\n3. related_collections\n\n# For developer\nadd directus instance with npm\n`npm init directus-project@10.8.2`\n\nimportant rules:\n# Controls the maximum request body size. Accepts number of bytes, or human readable string [\"1mb\"]\nShould increase `MAX_PAYLOAD_SIZE` to be able send heavy request\n`MAX_PAYLOAD_SIZE=\"50mb\"`\n`CONTENT_SECURITY_POLICY_DIRECTIVES__connect_SRC=\"self http:\u002F\u002F0.0.0.0:8055 http:\u002F\u002F0.0.0.0:8056\"` use to local develop\n\n\n.env example\n```\n####################################################################################################\n#\n# These values set environment variables which modify core settings of Directus.\n#\n# Values in square brackets are the default values.\n#\n# The following options are not all possible options. For more, see\n# https:\u002F\u002Fdocs.directus.io\u002Fself-hosted\u002Fconfig-options\u002F\n#\n####################################################################################################\n####################################################################################################\n\n### General\n\n# IP or host the API listens on [\"0.0.0.0\"]\nHOST=\"0.0.0.0\"\n\n# The port Directus will run on [8055]\nPORT=8055\n\n# The URL where your API can be reached on the web. It is also used for things like OAuth redirects,\n# forgot-password emails, and logos that needs to be publicly available on the internet. [\"\u002F\"]\nPUBLIC_URL=\"\u002F\"\n# PUBLIC_URL=\"http:\u002F\u002Flocalhost:8055\"\n\n# What level of detail to log. [info]\n# \"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\", \"silent\"\n# LOG_LEVEL=\"info\"\n\n# Render the logs human readable (pretty) or as JSON (raw), [pretty]\n# \"pretty\", \"raw\"\n# LOG_STYLE=\"pretty\"\n\n# Controls the maximum request body size. Accepts number of bytes, or human readable string [\"1mb\"]\nMAX_PAYLOAD_SIZE=\"50mb\"\n\n# Where to redirect to when navigating to \u002F. Accepts a relative path, absolute URL, or false to disable [\".\u002Fadmin\"]\n# ROOT_REDIRECT=\".\u002Fadmin\"\n\n# Whether or not to serve the Admin App under \u002Fadmin. [true]\n# SERVE_APP=true\n\n# Whether or not to enable GraphQL Introspection [true]\n# GRAPHQL_INTROSPECTION=true\n\n# Limit the maximum amount of items that can get requested in one query.\n# QUERY_LIMIT_DEFAULT=100\n# QUERY_LIMIT_MAX=Infinity\n\n# The maximum number of items for batch mutations when creating, updating and deleting. [\"Infinity\"]\n# MAX_BATCH_MUTATION=\"Infinity\"\n\n# Shared Redis server for things like caching, rate limiting, container synchronization, etc\n# REDIS=\"redis:\u002F\u002F@127.0.0.1:6379\"\n\n####################################################################################################\n### Database\n\n# All DB_* environment variables are passed to the connection configuration of a Knex instance.\n# Based on your project's needs, you can extend the DB_* environment variables with any config\n# you need to pass to the database instance.\n\nDB_CLIENT=\"pg\"\nDB_HOST=\"127.0.0.1\"\nDB_PORT=\"5432\"\nDB_DATABASE=\"dir_dev\"\nDB_USER=\"postgres\"\nDB_PASSWORD=\"mysecretpassword\"\nDB_SSL=\"false\"\n\n# These match the databases defined in the docker-compose file in the root of this repo\n\n## Postgres\n# DB_CLIENT=\"pg\"\n# DB_HOST=\"localhost\"\n# DB_PORT=5432\n# DB_DATABASE=\"directus\"\n# DB_USER=\"postgres\"\n# DB_PASSWORD=\"secret\"\n\n## CockroachDB\n# DB_CLIENT=\"cockroachdb\"\n# DB_HOST=\"localhost\"\n# DB_PORT=26257\n# DB_DATABASE=\"directus\"\n# DB_USER=\"root\"\n# DB_PASSWORD=\"\"\n\n## MySQL 8\n# DB_CLIENT=\"mysql\"\n# DB_HOST=\"localhost\"\n# DB_PORT=3306\n# DB_DATABASE=\"directus\"\n# DB_USER=\"root\"\n# DB_PASSWORD=\"secret\"\n\n## MariaDB\n# DB_CLIENT=\"mysql\"\n# DB_HOST=\"localhost\"\n# DB_PORT=3306\n# DB_DATABASE=\"directus\"\n# DB_USER=\"root\"\n# DB_PASSWORD=\"secret\"\n\n## MS SQL\n# DB_CLIENT=\"mssql\"\n# DB_HOST=\"localhost\"\n# DB_PORT=1343\n# DB_DATABASE=\"directus\"\n# DB_USER=\"sa\"\n# DB_PASSWORD=\"Test@123\"\n\n## OracleDB\n# DB_CLIENT=\"oracledb\"\n# DB_CONNECT_STRING=\"localhost:1521\u002FXE\"\n# DB_USER=\"secretsysuser\"\n# DB_PASSWORD=\"secretpassword\"\n\n## SQLite Example\n# DB_CLIENT=\"sqlite3\"\n# DB_FILENAME=\".\u002Fdata.db\"\n\n## MySQL 5.7\n# DB_CLIENT=\"mysql\"\n# DB_HOST=\"localhost\"\n# DB_PORT=3306\n# DB_DATABASE=\"directus\"\n# DB_USER=\"root\"\n# DB_PASSWORD=\"secret\"\n\n####################################################################################################\n### Rate Limiting\n\n# Whether or not to enable rate limiting on the API [false]\nRATE_LIMITER_ENABLED=false\n\n# Where to store the rate limiter counts [memory]\n# memory, redis\nRATE_LIMITER_STORE=memory\n\n# The amount of allowed hits per duration [50]\nRATE_LIMITER_POINTS=25\n\n# The time window in seconds in which the hits are counted [1]\nRATE_LIMITER_DURATION=1\n\n####################################################################################################\n### Caching\n\n# Whether or not caching is enabled. [false]\nCACHE_ENABLED=false\n\n# How long the cache is persisted [\"5m\"]\n# CACHE_TTL=\"30m\"\n\n# How to scope the cache data [\"system-cache\"]\n# CACHE_NAMESPACE=\"system-cache\"\n\n# Automatically purge the cache on create, update, and delete actions. [false]\nCACHE_AUTO_PURGE=true\n\n# List of collections that prevent cache purging when `CACHE_AUTO_PURGE` is enabled. [\"directus_activity,directus_presets\"]\n# CACHE_AUTO_PURGE_IGNORE_LIST=\"directus_activity,directus_presets\"\n\n# memory | redis\nCACHE_STORE=memory\n\n# How long assets will be cached for in the browser. Sets the max-age value of the Cache-Control header [\"30d\"]\nASSETS_CACHE_TTL=\"30d\"\n\n####################################################################################################\n### File Storage\n\n# A CSV of storage locations (eg: local,digitalocean,amazon) to use. You can use any names you'd like for these keys [\"local\"]\nSTORAGE_LOCATIONS=\"local\"\nSTORAGE_LOCAL_DRIVER=\"local\"\nSTORAGE_LOCAL_ROOT=\".\u002Fuploads\"\n\n## S3 Example (location name: DigitalOcean)\n# STORAGE_DIGITALOCEAN_DRIVER=\"s3\"\n# STORAGE_DIGITALOCEAN_KEY=\"abcdef\"\n# STORAGE_DIGITALOCEAN_SECRET=\"ghijkl\"\n# STORAGE_DIGITALOCEAN_ENDPOINT=\"https:\u002F\u002Fams3.digitaloceanspaces.com\"\n# STORAGE_DIGITALOCEAN_BUCKET=\"my-files\"\n# STORAGE_DIGITALOCEAN_REGION=\"ams3\"\n\n## Google Cloud Storage Example (location name: Google)\n# STORAGE_GOOGLE_DRIVER=\"gcs\"\n# STORAGE_GOOGLE_KEY_FILENAME=\"abcdef\"\n# STORAGE_GOOGLE_BUCKET=\"my-files\"\n\n\n## A comma-separated list of metadata keys to collect during file upload. Use * for all\n# Extracting all metadata might cause memory issues when the file has an unusually large set of metadata\n# [ifd0.Make,ifd0.Model,exif.FNumber,exif.ExposureTime,exif.FocalLength,exif.ISO]\n# FILE_METADATA_ALLOW_LIST=\n\n####################################################################################################\n### Security\n\nKEY=\"2d2a6a5d-63ec-45a8-931a-bd9abcdb7915\"\nSECRET=\"2vEH4tpeDLiNqHomB8b3VZU-2NODUmjh\"\n\n\n# Unique identifier for the project\n# KEY=\"xxxxxxx-xxxxxx-xxxxxxxx-xxxxxxxxxx\"\n\n# Secret string for the project\n# SECRET=\"abcdef\"\n\n# The duration that the access token is valid [\"15m\"]\nACCESS_TOKEN_TTL=\"1440m\"\n\n# The duration that the refresh token is valid, and also how long users stay logged-in to the App [\"7d\"]\nREFRESH_TOKEN_TTL=\"7d\"\n\n# Whether or not to use a secure cookie for the refresh token in cookie mode [false]\nREFRESH_TOKEN_COOKIE_SECURE=false\n\n# Value for sameSite in the refresh token cookie when in cookie mode [\"lax\"]\nREFRESH_TOKEN_COOKIE_SAME_SITE=\"lax\"\n\n# Name of refresh token cookie [\"directus_refresh_token\"]\nREFRESH_TOKEN_COOKIE_NAME=\"directus_refresh_token\"\n\n# Which domain to use for the refresh cookie. Useful for development mode.\n# REFRESH_TOKEN_COOKIE_DOMAIN\n\n# The duration in milliseconds that a login request will be stalled for,\n# and it should be greater than the time taken for a login request with an invalid password [500]\n# LOGIN_STALL_TIME=500\n\n# Whether or not to enable the CORS headers [false]\nCORS_ENABLED=true\n\n# Value for the Access-Control-Allow-Origin header. Use true to match the Origin header, or provide a domain or a CSV of domains for specific access [false]\nCORS_ORIGIN=true\n\n# Value for the Access-Control-Allow-Methods header [GET,POST,PATCH,DELETE]\nCORS_METHODS=GET,POST,PATCH,DELETE\n\n# Value for the Access-Control-Allow-Headers header [Content-Type,Authorization]\nCORS_ALLOWED_HEADERS=Content-Type,Authorization\n\n# Value for the Access-Control-Expose-Headers header [Content-Range]\nCORS_EXPOSED_HEADERS=Content-Range\n\n# Whether or not to send the Access-Control-Allow-Credentials header [true]\nCORS_CREDENTIALS=true\n\n# Value for the Access-Control-Max-Age header [18000]\nCORS_MAX_AGE=18000\n\nCONTENT_SECURITY_POLICY_DIRECTIVES__connect_SRC=\"self http:\u002F\u002F0.0.0.0:8055 http:\u002F\u002F0.0.0.0:8056\"\n\n####################################################################################################\n### Argon2\n\n# How much memory to use when generating hashes, in KiB [4096]\n# HASH_MEMORY_COST=81920\n\n# The length of the hash function output in bytes [32]\n# HASH_HASH_LENGTH=32\n\n# The amount of passes (iterations) used by the hash function. It increases hash strength at the cost of time required to compute [3]\n# HASH_TIME_COST=10\n\n# The amount of threads to compute the hash on. Each thread has a memory pool with HASH_MEMORY_COST size [1]\n# HASH_PARALLELISM=2\n\n# The variant of the hash function (0: argon2d, 1: argon2i, or 2: argon2id) [2]\n# HASH_TYPE=2\n\n# An extra and optional non-secret value. The value will be included B64 encoded in the parameters portion of the digest []\n# HASH_ASSOCIATED_DATA=foo\n\n####################################################################################################\n### Auth Providers\n\n# A comma-separated list of auth providers []\nAUTH_PROVIDERS=\"\"\n# AUTH_PROVIDERS=\"github\"\n\n# AUTH_GITHUB_DRIVER=\"oauth2\"\n# AUTH_GITHUB_CLIENT_ID=\"73e...4b\"\n# AUTH_GITHUB_CLIENT_SECRET=\"b9...98\"\n# AUTH_GITHUB_AUTHORIZE_URL=\"https:\u002F\u002Fgithub.com\u002Flogin\u002Foauth\u002Fauthorize\"\n# AUTH_GITHUB_ACCESS_URL=\"https:\u002F\u002Fgithub.com\u002Flogin\u002Foauth\u002Faccess_token\"\n# AUTH_GITHUB_PROFILE_URL=\"https:\u002F\u002Fapi.github.com\u002Fuser\"\n# AUTH_GITHUB_ALLOW_PUBLIC_REGISTRATION=true\n# AUTH_GITHUB_DEFAULT_ROLE_ID=\"82424427-c9d4-4289-8bc5-ed1bf8422c90\"\n# AUTH_GITHUB_ICON=\"github\"\n# AUTH_GITHUB_LABEL=\"GitHub\"\n# AUTH_GITHUB_EMAIL_KEY=\"email\"\n# AUTH_GITHUB_IDENTIFIER_KEY=\"login\"\n\n####################################################################################################\n### Extensions\n\n# Path to your local extensions folder [\".\u002Fextensions\"]\nEXTENSIONS_PATH=\".\u002Fextensions\"\n\n# Automatically reload extensions when they have changed [false]\nEXTENSIONS_AUTO_RELOAD=true\n\n####################################################################################################\n### Email\n\n# Email address from which emails are sent [\"no-reply@directus.io\"]\nEMAIL_FROM=\"no-reply@directus.io\"\n\n# What to use to send emails. One of\n# sendmail, smtp, mailgun, sendgrid, ses.\nEMAIL_TRANSPORT=\"sendmail\"\nEMAIL_SENDMAIL_NEW_LINE=\"unix\"\nEMAIL_SENDMAIL_PATH=\"\u002Fusr\u002Fsbin\u002Fsendmail\"\n\n## Email (Sendmail Transport)\n\n# What new line style to use in sendmail [\"unix\"]\n# EMAIL_SENDMAIL_NEW_LINE=\"unix\"\n\n# Path to your sendmail executable [\"\u002Fusr\u002Fsbin\u002Fsendmail\"]\n# EMAIL_SENDMAIL_PATH=\"\u002Fusr\u002Fsbin\u002Fsendmail\"\n\n## Email (SMTP Transport)\n# EMAIL_SMTP_HOST=\"localhost\"\n\n# Use SMTP pooling\n# EMAIL_SMTP_POOL=true\n# EMAIL_SMTP_PORT=465\n# EMAIL_SMTP_SECURE=false # Use TLS\n# EMAIL_SMTP_IGNORE_TLS=false\n# EMAIL_SMTP_USER=\"username\"\n# EMAIL_SMTP_PASSWORD=\"password\"\n\n## Email (Mailgun Transport)\n# EMAIL_MAILGUN_API_KEY=\"key-1234123412341234\"\n# EMAIL_MAILGUN_DOMAIN=\"a domain name from https:\u002F\u002Fapp.mailgun.com\u002Fapp\u002Fsending\u002Fdomains\"\n\n## Email (SendGrid Transport)\n# EMAIL_SENDGRID_API_KEY=\"key-1234123412341234\"\n```\n","module","2025-02-05T12:20:22.336Z","^9.26.0",[],0,{"username":121,"verified":8,"id":122,"github_username":78,"github_name":78,"github_blog":78,"github_bio":78,"github_location":78,"github_company":78,"github_avatar_url":78},"fenkoalex-org","d96da957-01f6-4dd7-887b-fdcfc9131a30",[124],{"version":125,"package":113,"publisher":122,"type":115,"host_version":117,"publish_date":116,"verified":8,"id":126,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":127,"unpacked_size":128,"sandbox":76,"sandbox_requested_scopes":78,"license":78,"bundled":129,"maintainers":130},"1.0.1","783edc00-b99e-4d8b-8125-4da2884089ce",25,422755,[],[131],11942,"Directus Schema Sync","\u003Ch1>Install\u003C\u002Fh1>\n\u003Cpre>\u003Ccode>FROM directus\u002Fdirectus:10.8.2\n\nARG GITHUB_TOKEN\n\nUSER root\nRUN corepack enable \\\n  &amp;&amp; corepack prepare pnpm@8.9.0 --activate\n\nUSER node\nRUN pnpm install directus-extension-schema-sync@1.0.*\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch1>Setting for directus\u003C\u002Fh1>\n\u003Cul>\n\u003Cli>Add \u003Ccode>export_schema\u003C\u002Fcode> field with type JSON to \u003Ccode>directus_collections\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Add new collection \u003Ccode>export_tools\u003C\u002Fcode> with fields:\n\u003Cul>\n\u003Cli>\u003Ccode>url: string\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>login: string\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>password: string\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>type: dropdown\u003C\u002Fcode> with value \u003Ccode>dev, stage, prod\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>current_client: boolean\u003C\u002Fcode> (toggle type on directus UI)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>How extentention select clients setting?\u003C\u002Fh2>\n\u003Cp>Select row with \u003Ccode>current_client=true\u003C\u002Fcode> otherwise last row with type \u003Ccode>stage\u003C\u002Fcode> for master directus\nand last row with type \u003Ccode>prod\u003C\u002Fcode> for remote directus\u003C\u002Fp>\n\u003Ch1>export_schema\u003C\u002Fh1>\n\u003Cp>config type\u003C\u002Fp>\n\u003Cpre>\u003Ccode>export type ExportElement = {\n  collection: string;\n  exclude_fields?: string[];\n  related_collections?: ExportElement[];\n  referenced_collections?: ExportElement[];\n};\nexport type ExportSchemaConfig = {\n  export: boolean;\n} &amp; ExportElement;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>config does not merge with other configs, e.g you have \u003Ccode>events\u003C\u002Fcode> collection with referrence to \u003Ccode>place\u003C\u002Fcode>, when you select \u003Ccode>events\u003C\u002Fcode>, extention will only use events config\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"export\": true,\n    \"exclude_fields\": [\n        \"states\"\n    ],\n    \"referenced_collections\": [\n        {\n            \"collection\": \"unit_types\"\n        }\n    ],\n    \"related_collections\": [\n        {\n            \"collection\": \"unit_state\",\n            \"exclude_fields\": [\n                \"behaviours\"\n            ]\n        },\n        {\n            \"collection\": \"unit_behaviour\",\n            \"referenced_collections\": [\n                {\n                    \"collection\": \"unit_behaviour_type\"\n                }\n            ]\n        }\n    ]\n} \n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>order to sync data:\u003C\u002Fp>\n\u003Col>\n\u003Cli>referenced_collections\u003C\u002Fli>\n\u003Cli>current collection\u003C\u002Fli>\n\u003Cli>related_collections\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch1>For developer\u003C\u002Fh1>\n\u003Cp>add directus instance with npm\n\u003Ccode>npm init directus-project@10.8.2\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>important rules:\u003C\u002Fp>\n\u003Ch1>Controls the maximum request body size. Accepts number of bytes, or human readable string [\"1mb\"]\u003C\u002Fh1>\n\u003Cp>Should increase \u003Ccode>MAX_PAYLOAD_SIZE\u003C\u002Fcode> to be able send heavy request\n\u003Ccode>MAX_PAYLOAD_SIZE=\"50mb\"\u003C\u002Fcode>\n\u003Ccode>CONTENT_SECURITY_POLICY_DIRECTIVES__connect_SRC=\"self http:\u002F\u002F0.0.0.0:8055 http:\u002F\u002F0.0.0.0:8056\"\u003C\u002Fcode> use to local develop\u003C\u002Fp>\n\u003Cp>.env example\u003C\u002Fp>\n\u003Cpre>\u003Ccode>####################################################################################################\n#\n# These values set environment variables which modify core settings of Directus.\n#\n# Values in square brackets are the default values.\n#\n# The following options are not all possible options. For more, see\n# https:\u002F\u002Fdocs.directus.io\u002Fself-hosted\u002Fconfig-options\u002F\n#\n####################################################################################################\n####################################################################################################\n\n### General\n\n# IP or host the API listens on [\"0.0.0.0\"]\nHOST=\"0.0.0.0\"\n\n# The port Directus will run on [8055]\nPORT=8055\n\n# The URL where your API can be reached on the web. It is also used for things like OAuth redirects,\n# forgot-password emails, and logos that needs to be publicly available on the internet. [\"\u002F\"]\nPUBLIC_URL=\"\u002F\"\n# PUBLIC_URL=\"http:\u002F\u002Flocalhost:8055\"\n\n# What level of detail to log. [info]\n# \"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\", \"silent\"\n# LOG_LEVEL=\"info\"\n\n# Render the logs human readable (pretty) or as JSON (raw), [pretty]\n# \"pretty\", \"raw\"\n# LOG_STYLE=\"pretty\"\n\n# Controls the maximum request body size. Accepts number of bytes, or human readable string [\"1mb\"]\nMAX_PAYLOAD_SIZE=\"50mb\"\n\n# Where to redirect to when navigating to \u002F. Accepts a relative path, absolute URL, or false to disable [\".\u002Fadmin\"]\n# ROOT_REDIRECT=\".\u002Fadmin\"\n\n# Whether or not to serve the Admin App under \u002Fadmin. [true]\n# SERVE_APP=true\n\n# Whether or not to enable GraphQL Introspection [true]\n# GRAPHQL_INTROSPECTION=true\n\n# Limit the maximum amount of items that can get requested in one query.\n# QUERY_LIMIT_DEFAULT=100\n# QUERY_LIMIT_MAX=Infinity\n\n# The maximum number of items for batch mutations when creating, updating and deleting. [\"Infinity\"]\n# MAX_BATCH_MUTATION=\"Infinity\"\n\n# Shared Redis server for things like caching, rate limiting, container synchronization, etc\n# REDIS=\"redis:\u002F\u002F@127.0.0.1:6379\"\n\n####################################################################################################\n### Database\n\n# All DB_* environment variables are passed to the connection configuration of a Knex instance.\n# Based on your project's needs, you can extend the DB_* environment variables with any config\n# you need to pass to the database instance.\n\nDB_CLIENT=\"pg\"\nDB_HOST=\"127.0.0.1\"\nDB_PORT=\"5432\"\nDB_DATABASE=\"dir_dev\"\nDB_USER=\"postgres\"\nDB_PASSWORD=\"mysecretpassword\"\nDB_SSL=\"false\"\n\n# These match the databases defined in the docker-compose file in the root of this repo\n\n## Postgres\n# DB_CLIENT=\"pg\"\n# DB_HOST=\"localhost\"\n# DB_PORT=5432\n# DB_DATABASE=\"directus\"\n# DB_USER=\"postgres\"\n# DB_PASSWORD=\"secret\"\n\n## CockroachDB\n# DB_CLIENT=\"cockroachdb\"\n# DB_HOST=\"localhost\"\n# DB_PORT=26257\n# DB_DATABASE=\"directus\"\n# DB_USER=\"root\"\n# DB_PASSWORD=\"\"\n\n## MySQL 8\n# DB_CLIENT=\"mysql\"\n# DB_HOST=\"localhost\"\n# DB_PORT=3306\n# DB_DATABASE=\"directus\"\n# DB_USER=\"root\"\n# DB_PASSWORD=\"secret\"\n\n## MariaDB\n# DB_CLIENT=\"mysql\"\n# DB_HOST=\"localhost\"\n# DB_PORT=3306\n# DB_DATABASE=\"directus\"\n# DB_USER=\"root\"\n# DB_PASSWORD=\"secret\"\n\n## MS SQL\n# DB_CLIENT=\"mssql\"\n# DB_HOST=\"localhost\"\n# DB_PORT=1343\n# DB_DATABASE=\"directus\"\n# DB_USER=\"sa\"\n# DB_PASSWORD=\"Test@123\"\n\n## OracleDB\n# DB_CLIENT=\"oracledb\"\n# DB_CONNECT_STRING=\"localhost:1521\u002FXE\"\n# DB_USER=\"secretsysuser\"\n# DB_PASSWORD=\"secretpassword\"\n\n## SQLite Example\n# DB_CLIENT=\"sqlite3\"\n# DB_FILENAME=\".\u002Fdata.db\"\n\n## MySQL 5.7\n# DB_CLIENT=\"mysql\"\n# DB_HOST=\"localhost\"\n# DB_PORT=3306\n# DB_DATABASE=\"directus\"\n# DB_USER=\"root\"\n# DB_PASSWORD=\"secret\"\n\n####################################################################################################\n### Rate Limiting\n\n# Whether or not to enable rate limiting on the API [false]\nRATE_LIMITER_ENABLED=false\n\n# Where to store the rate limiter counts [memory]\n# memory, redis\nRATE_LIMITER_STORE=memory\n\n# The amount of allowed hits per duration [50]\nRATE_LIMITER_POINTS=25\n\n# The time window in seconds in which the hits are counted [1]\nRATE_LIMITER_DURATION=1\n\n####################################################################################################\n### Caching\n\n# Whether or not caching is enabled. [false]\nCACHE_ENABLED=false\n\n# How long the cache is persisted [\"5m\"]\n# CACHE_TTL=\"30m\"\n\n# How to scope the cache data [\"system-cache\"]\n# CACHE_NAMESPACE=\"system-cache\"\n\n# Automatically purge the cache on create, update, and delete actions. [false]\nCACHE_AUTO_PURGE=true\n\n# List of collections that prevent cache purging when `CACHE_AUTO_PURGE` is enabled. [\"directus_activity,directus_presets\"]\n# CACHE_AUTO_PURGE_IGNORE_LIST=\"directus_activity,directus_presets\"\n\n# memory | redis\nCACHE_STORE=memory\n\n# How long assets will be cached for in the browser. Sets the max-age value of the Cache-Control header [\"30d\"]\nASSETS_CACHE_TTL=\"30d\"\n\n####################################################################################################\n### File Storage\n\n# A CSV of storage locations (eg: local,digitalocean,amazon) to use. You can use any names you'd like for these keys [\"local\"]\nSTORAGE_LOCATIONS=\"local\"\nSTORAGE_LOCAL_DRIVER=\"local\"\nSTORAGE_LOCAL_ROOT=\".\u002Fuploads\"\n\n## S3 Example (location name: DigitalOcean)\n# STORAGE_DIGITALOCEAN_DRIVER=\"s3\"\n# STORAGE_DIGITALOCEAN_KEY=\"abcdef\"\n# STORAGE_DIGITALOCEAN_SECRET=\"ghijkl\"\n# STORAGE_DIGITALOCEAN_ENDPOINT=\"https:\u002F\u002Fams3.digitaloceanspaces.com\"\n# STORAGE_DIGITALOCEAN_BUCKET=\"my-files\"\n# STORAGE_DIGITALOCEAN_REGION=\"ams3\"\n\n## Google Cloud Storage Example (location name: Google)\n# STORAGE_GOOGLE_DRIVER=\"gcs\"\n# STORAGE_GOOGLE_KEY_FILENAME=\"abcdef\"\n# STORAGE_GOOGLE_BUCKET=\"my-files\"\n\n\n## A comma-separated list of metadata keys to collect during file upload. Use * for all\n# Extracting all metadata might cause memory issues when the file has an unusually large set of metadata\n# [ifd0.Make,ifd0.Model,exif.FNumber,exif.ExposureTime,exif.FocalLength,exif.ISO]\n# FILE_METADATA_ALLOW_LIST=\n\n####################################################################################################\n### Security\n\nKEY=\"2d2a6a5d-63ec-45a8-931a-bd9abcdb7915\"\nSECRET=\"2vEH4tpeDLiNqHomB8b3VZU-2NODUmjh\"\n\n\n# Unique identifier for the project\n# KEY=\"xxxxxxx-xxxxxx-xxxxxxxx-xxxxxxxxxx\"\n\n# Secret string for the project\n# SECRET=\"abcdef\"\n\n# The duration that the access token is valid [\"15m\"]\nACCESS_TOKEN_TTL=\"1440m\"\n\n# The duration that the refresh token is valid, and also how long users stay logged-in to the App [\"7d\"]\nREFRESH_TOKEN_TTL=\"7d\"\n\n# Whether or not to use a secure cookie for the refresh token in cookie mode [false]\nREFRESH_TOKEN_COOKIE_SECURE=false\n\n# Value for sameSite in the refresh token cookie when in cookie mode [\"lax\"]\nREFRESH_TOKEN_COOKIE_SAME_SITE=\"lax\"\n\n# Name of refresh token cookie [\"directus_refresh_token\"]\nREFRESH_TOKEN_COOKIE_NAME=\"directus_refresh_token\"\n\n# Which domain to use for the refresh cookie. Useful for development mode.\n# REFRESH_TOKEN_COOKIE_DOMAIN\n\n# The duration in milliseconds that a login request will be stalled for,\n# and it should be greater than the time taken for a login request with an invalid password [500]\n# LOGIN_STALL_TIME=500\n\n# Whether or not to enable the CORS headers [false]\nCORS_ENABLED=true\n\n# Value for the Access-Control-Allow-Origin header. Use true to match the Origin header, or provide a domain or a CSV of domains for specific access [false]\nCORS_ORIGIN=true\n\n# Value for the Access-Control-Allow-Methods header [GET,POST,PATCH,DELETE]\nCORS_METHODS=GET,POST,PATCH,DELETE\n\n# Value for the Access-Control-Allow-Headers header [Content-Type,Authorization]\nCORS_ALLOWED_HEADERS=Content-Type,Authorization\n\n# Value for the Access-Control-Expose-Headers header [Content-Range]\nCORS_EXPOSED_HEADERS=Content-Range\n\n# Whether or not to send the Access-Control-Allow-Credentials header [true]\nCORS_CREDENTIALS=true\n\n# Value for the Access-Control-Max-Age header [18000]\nCORS_MAX_AGE=18000\n\nCONTENT_SECURITY_POLICY_DIRECTIVES__connect_SRC=\"self http:\u002F\u002F0.0.0.0:8055 http:\u002F\u002F0.0.0.0:8056\"\n\n####################################################################################################\n### Argon2\n\n# How much memory to use when generating hashes, in KiB [4096]\n# HASH_MEMORY_COST=81920\n\n# The length of the hash function output in bytes [32]\n# HASH_HASH_LENGTH=32\n\n# The amount of passes (iterations) used by the hash function. It increases hash strength at the cost of time required to compute [3]\n# HASH_TIME_COST=10\n\n# The amount of threads to compute the hash on. Each thread has a memory pool with HASH_MEMORY_COST size [1]\n# HASH_PARALLELISM=2\n\n# The variant of the hash function (0: argon2d, 1: argon2i, or 2: argon2id) [2]\n# HASH_TYPE=2\n\n# An extra and optional non-secret value. The value will be included B64 encoded in the parameters portion of the digest []\n# HASH_ASSOCIATED_DATA=foo\n\n####################################################################################################\n### Auth Providers\n\n# A comma-separated list of auth providers []\nAUTH_PROVIDERS=\"\"\n# AUTH_PROVIDERS=\"github\"\n\n# AUTH_GITHUB_DRIVER=\"oauth2\"\n# AUTH_GITHUB_CLIENT_ID=\"73e...4b\"\n# AUTH_GITHUB_CLIENT_SECRET=\"b9...98\"\n# AUTH_GITHUB_AUTHORIZE_URL=\"https:\u002F\u002Fgithub.com\u002Flogin\u002Foauth\u002Fauthorize\"\n# AUTH_GITHUB_ACCESS_URL=\"https:\u002F\u002Fgithub.com\u002Flogin\u002Foauth\u002Faccess_token\"\n# AUTH_GITHUB_PROFILE_URL=\"https:\u002F\u002Fapi.github.com\u002Fuser\"\n# AUTH_GITHUB_ALLOW_PUBLIC_REGISTRATION=true\n# AUTH_GITHUB_DEFAULT_ROLE_ID=\"82424427-c9d4-4289-8bc5-ed1bf8422c90\"\n# AUTH_GITHUB_ICON=\"github\"\n# AUTH_GITHUB_LABEL=\"GitHub\"\n# AUTH_GITHUB_EMAIL_KEY=\"email\"\n# AUTH_GITHUB_IDENTIFIER_KEY=\"login\"\n\n####################################################################################################\n### Extensions\n\n# Path to your local extensions folder [\".\u002Fextensions\"]\nEXTENSIONS_PATH=\".\u002Fextensions\"\n\n# Automatically reload extensions when they have changed [false]\nEXTENSIONS_AUTO_RELOAD=true\n\n####################################################################################################\n### Email\n\n# Email address from which emails are sent [\"no-reply@directus.io\"]\nEMAIL_FROM=\"no-reply@directus.io\"\n\n# What to use to send emails. One of\n# sendmail, smtp, mailgun, sendgrid, ses.\nEMAIL_TRANSPORT=\"sendmail\"\nEMAIL_SENDMAIL_NEW_LINE=\"unix\"\nEMAIL_SENDMAIL_PATH=\"\u002Fusr\u002Fsbin\u002Fsendmail\"\n\n## Email (Sendmail Transport)\n\n# What new line style to use in sendmail [\"unix\"]\n# EMAIL_SENDMAIL_NEW_LINE=\"unix\"\n\n# Path to your sendmail executable [\"\u002Fusr\u002Fsbin\u002Fsendmail\"]\n# EMAIL_SENDMAIL_PATH=\"\u002Fusr\u002Fsbin\u002Fsendmail\"\n\n## Email (SMTP Transport)\n# EMAIL_SMTP_HOST=\"localhost\"\n\n# Use SMTP pooling\n# EMAIL_SMTP_POOL=true\n# EMAIL_SMTP_PORT=465\n# EMAIL_SMTP_SECURE=false # Use TLS\n# EMAIL_SMTP_IGNORE_TLS=false\n# EMAIL_SMTP_USER=\"username\"\n# EMAIL_SMTP_PASSWORD=\"password\"\n\n## Email (Mailgun Transport)\n# EMAIL_MAILGUN_API_KEY=\"key-1234123412341234\"\n# EMAIL_MAILGUN_DOMAIN=\"a domain name from https:\u002F\u002Fapp.mailgun.com\u002Fapp\u002Fsending\u002Fdomains\"\n\n## Email (SendGrid Transport)\n# EMAIL_SENDGRID_API_KEY=\"key-1234123412341234\"\n\u003C\u002Fcode>\u003C\u002Fpre>\n",[],[136],{"id":137,"icon":138,"content":139,"link":140,"include_paths":78,"exclude_paths":78},"812bf73d-ebfb-4246-9538-937a09a0c795","connected_tv","Learn more about our native MCP","https:\u002F\u002Fdirectus.io\u002Fmcp"]