Files
metabase/.clj-kondo/config/modules/config.edn
Oleksandr Yakushev f9ce3f291d [match] Remove old match implementations based on clojure.core.match (#73209)
* [match] Remove old match implementations based on clojure.core.match

* Rename match-lite to match-one and replace-lite to replace

* Stop using clojure.core.match completely

* Move metabase.lib.util.match to metabase.util.match

* Remove clojure.core.match dependency

* Update docstrings

* Address comments
2026-05-11 00:58:50 +03:00

3491 lines
92 KiB
Clojure

;;
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;; !! !!
;; !! PRO TIP! Run the tests in [[metabase.core.modules-test]] when you change this file! !!
;; !! !!
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;;
;; A "module" is any `metabase.<module>.core` namespace in `src`.
;;
;; ## `team`:
;;
;; The team that owns this module. This has to match one of the team names in `.github/team.json` EXACTLY. You can
;; run [[metabase.core.modules-test/all-modules-have-teams-test]] to make sure you did this correctly.
;;
;; ## `api`:
;;
;; Map of module name => the "core" external public-facing API namespace(s). You have three options here:
;;
;; 1. Special sentinel value `:any` means means this module does not (yet) have external public-facing API
;; namespace(s). This is mostly a temporary placeholder until we go in and create module namespaces, which means
;; you should go create one.
;;
;; 2. A set of namespace symbols. All namespaces in other modules will only be allowed to use namespaces from
;; this set. Ideally this set should only have one namespace, but restricting it to a set of several is still
;; better than `:any`.
;;
;; 3. `nil` or not listed here -- we default to assuming there is (some subset) of the 'standard' API namespaces
;; `<module>.api`, `<module>.core`, and `<module>.init`
;;
;; ## `uses`:
;;
;; Map of module => other modules you're allowed to use there. You have two options here:
;;
;; 1. `:any` means namespaces in this module are allowed to use any other module -- allowed modules are not
;; enforced for this module. Module API namespaces for modules that have them defined are still enforced. For
;; ones that are `nil`, please go in and add a list of allowed modules. `:any` is mostly meant a temporary
;; placeholder until we can fill these all out, so feel free to fix these.
;;
;; 2. A set of module symbols. This is the list of modules that are allowed to be referenced. An empty set means no
;; other modules are allowed to be referenced; this is the default for any modules that aren't listed here.
;;
;; ## `friends`:
;;
;; 'Friend' in the C++ sense; set of modules that are allowed free access into the internals of this module including
;; namespaces that are not `:api` namespaces. This is useful when writing modules that are 'extensions' of other
;; modules, for example `enterprise/search` might be enterprise extensions of `search`, or `search-rest` might be the
;; REST API component for `search`.
;;
;; search
;; {...
;; :friends #{enterprise/search search-rest}}
;;
;; ## `model-exports`:
;;
;; Set of `:model/X` keywords defined by this module that it allows others to reference. By default all are private.
;; If you know what you're doing, we support an :any keyword, but let's prefer explicit sets for now.
;;
;; enterprise/workspaces
;; {...
;; :model-exports #{:model/Workspace :model/WorkspaceMergeTransform}}
;;
;; ## `model-imports`:
;;
;; Set of `:model/X` keywords that this module is allowed to reference from other modules. Defaults to none.
;; If you know what you're doing, we support an :any keyword, but let's prefer explicit sets for now.
;;
;; transforms-base
;; {...
;; :model-imports #{:model/Database :model/Field :model/Table :model/Transform}}
;;
;; ### `:bypass`
;;
;; Some modules (like `cmd` and `enterprise/serialization`) are inherently cross-cutting and import nearly
;; every model. For these, use `:model-imports :bypass` instead of an explicit set:
;;
;; cmd
;; {...
;; :model-imports :bypass}
;;
;; A bypassed module can reference any model — even ones that are not exported. Models that are *only*
;; referenced outside their home module by bypassed modules do not need to appear in `:model-exports`
;; (in fact, they must not — the staleness test will flag them).
;;
;; ## Tips
;;
;; PRO TIP: Check out the [[dev.deps-graph]] namespace for helpful tools to see where a module is used externally, and
;; for tools for calculating this config -- you can use [[dev.deps-graph/print-kondo-config-diff]] to see what updates
;; you need to make
{:metabase/modules
{actions
{:team "Gadget"
:api #{metabase.actions.args
metabase.actions.core
metabase.actions.init
metabase.actions.schema
metabase.actions.types}
:uses #{analytics
api
driver
events
legacy-mbql
lib
lib-be
model-persistence
models
parameters
queries
query-processor
search
settings
util
warehouses}
:model-exports #{:model/Action}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/DashboardCard
:model/Database
:model/Field
:model/Table
:model/User}}
actions-rest
{:team "Gadget"
:api #{metabase.actions-rest.api}
:uses #{actions
analytics
api
collections
lib
permissions
public-sharing
queries
util}
:model-imports #{:model/Action :model/Card :model/Database}}
activity-feed
{:team "UX West"
:api #{metabase.activity-feed.api
metabase.activity-feed.core
metabase.activity-feed.init}
:uses #{api
app-db
collections
config
events
models
util}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/Document
:model/QueryExecution
:model/Table}}
agent-api
{:team "Metabot"
:api #{metabase.agent-api.api
metabase.agent-api.init}
:uses #{agent-lib
api
auth-identity
dashboards
events
lib
llm
metabot
queries
query-processor
request
server
settings
util}
:model-imports #{:model/Card
:model/Dashboard
:model/DashboardCard
:model/User}}
agent-lib
{:team "Metabot"
:api #{metabase.agent-lib.core}
:uses #{lib
util}}
analytics
{:team "UX West"
:api #{metabase.analytics.api
metabase.analytics.core
metabase.analytics.init
metabase.analytics.settings
metabase.analytics.snowplow}
:uses #{analytics-interface
api
app-db
appearance
config
driver
eid-translation
internal-stats
lib-be
models
permissions
premium-features
request
session
settings
sso
system
task
util
version}
:model-imports #{:model/CacheConfig
:model/Card
:model/Collection
:model/CustomVizPlugin
:model/Dashboard
:model/DashboardCard
:model/Database
:model/DatabaseRouter
:model/Document
:model/Field
:model/ModerationReview
:model/PermissionsGroup
:model/Pulse
:model/PulseCard
:model/PulseChannel
:model/QueryCache
:model/QueryExecution
:model/Segment
:model/Table
:model/Transform
:model/TransformRun
:model/User}}
analytics-interface
{:team "Querying Platform"
:api #{metabase.analytics-interface.core}
:uses #{}}
analyze
{:team "Graphy"
:api #{metabase.analyze.core}
:uses #{config
driver
lib
models
query-processor
sync
util}
:model-imports #{:model/Field :model/Table}}
;; TODO -- consolidate these into a `.core` API namespace.
api
{:team "DevEx"
:api #{metabase.api.common
metabase.api.common.internal
metabase.api.docs
metabase.api.init
metabase.api.macros
metabase.api.macros.defendpoint.tools-manifest
metabase.api.macros.scope
metabase.api.open-api
metabase.api.routes.common
metabase.api.settings
metabase.api.util
metabase.api.util.handlers}
:uses #{api-scope
config
events
models
settings
util}
:model-imports #{:model/Action
:model/Card
:model/Collection
:model/Dashboard
:model/DashboardCard
:model/DashboardTab
:model/Database
:model/Dimension
:model/Document
:model/Measure
:model/ModelIndexValue
:model/NativeQuerySnippet
:model/PermissionsGroup
:model/Pulse
:model/PulseCard
:model/PulseChannel
:model/Segment
:model/Table
:model/Timeline
:model/Transform
:model/User}}
api-keys
{:team "UX West"
:api #{metabase.api-keys.api
metabase.api-keys.core
metabase.api-keys.schema}
:uses #{api
app-db
events
models
permissions
users
util}
:model-exports #{:model/ApiKey}
:model-imports #{:model/User}}
api-routes
{:team "UX West"
:api #{metabase.api-routes.cmd
metabase.api-routes.core}
:uses :any}
api-scope
{:team "Metabot"
:api #{metabase.api-scope.core
metabase.api-scope.init}}
app-db
{:team "UX West"
:api #{metabase.app-db.cluster-lock ; TODO FIXME
metabase.app-db.core
metabase.app-db.init
metabase.app-db.setup}
:uses #{auth-provider
classloader
config
connection-pool
task
util}
:model-imports #{:model/Database
:model/Field
:model/QueryCache
:model/Secret
:model/Setting}}
appearance
{:team "UX West"
:api #{metabase.appearance.core
metabase.appearance.init}
:uses #{settings util}
:model-imports #{:model/Dashboard}}
audit-app
{:team "UX West"
:api #{metabase.audit-app.core
metabase.audit-app.init}
:uses #{api
app-db
events
models
premium-features
settings
task
task-history
tracing
util}
:model-exports #{:model/AuditLog}
:model-imports #{:model/ApiKey
:model/Card
:model/Channel
:model/Collection
:model/Comment
:model/CustomVizPlugin
:model/Dashboard
:model/Database
:model/Document
:model/Glossary
:model/Notification
:model/NotificationHandler
:model/PermissionsGroup
:model/PermissionsGroupMembership
:model/Pulse
:model/QueryExecution
:model/RemoteSyncTask
:model/Segment
:model/Table
:model/Transform
:model/TransformRun
:model/User}}
auth-identity
{:team "UX West"
:api #{metabase.auth-identity.core
metabase.auth-identity.init}
:uses #{channel
events
login-history
models
notification
premium-features
request
util}
:model-exports #{:model/AuthIdentity}
:model-imports #{:model/Session :model/User}}
auth-provider
{:team "UX West"
:api #{metabase.auth-provider.core}
:uses #{premium-features}}
batch-processing
{:team "UX West"
:api #{metabase.batch-processing.core
metabase.batch-processing.init}
:uses #{app-db
settings
util}}
bookmarks
{:team "UX West"
:api #{metabase.bookmarks.api}
:uses #{api
app-db
collections
queries
util}
:model-exports #{:model/CardBookmark :model/CollectionBookmark :model/DashboardBookmark}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/Document}}
bug-reporting
{:team "UX West"
:api #{metabase.bug-reporting.api
metabase.bug-reporting.init}
:uses #{analytics
api
app-db
config
driver
permissions
premium-features
settings
util}
:model-imports #{:model/Database}}
cache
{:team "UX West"
:api #{metabase.cache.api
metabase.cache.core
metabase.cache.init}
:uses #{api
app-db
config
events
models
permissions
premium-features
request
settings
util}
:model-exports #{:model/CacheConfig :model/QueryCache}
:model-imports #{:model/Card
:model/Dashboard
:model/DashboardCard
:model/Database}}
;; TODO -- way too many API namespaces.
channel
{:team "Gadget"
:api #{metabase.channel.api
metabase.channel.core
metabase.channel.email
metabase.channel.email.messages
metabase.channel.init
metabase.channel.models.channel
metabase.channel.render.core
metabase.channel.settings
metabase.channel.slack
metabase.channel.template.core
metabase.channel.urls}
:uses #{analytics
analytics-interface
api
app-db
appearance
collections
config
dashboards
driver
events
formatter
lib
lib-be
models
notification
parameters
permissions
premium-features
query-processor
settings
slackbot
system
task
timeline
types
util}
:model-exports #{:model/Channel :model/ChannelTemplate}
:model-imports #{:model/Dashboard
:model/Database
:model/PulseChannel
:model/User}}
classloader
{:team "DevEx"
:api #{metabase.classloader.core
metabase.classloader.init}
:uses #{util}}
cloud-migration
{:team "UX West"
:api #{metabase.cloud-migration.api
metabase.cloud-migration.core
metabase.cloud-migration.init}
:uses #{api
app-db
cmd
config
models
premium-features
settings
store-api
task
util}
:model-imports #{:model/AuditLog
:model/Card
:model/LoginHistory
:model/Session
:model/Setting
:model/User
:model/UserParameterValue
:model/ViewLog}}
cmd
{:team "UX West"
:api #{metabase.cmd.copy
metabase.cmd.core
metabase.cmd.dump-to-h2}
:uses #{api
api-routes
app-db
auth-identity
classloader
config
models
query-processor
search
settings
util}
:model-imports :bypass}
collections
{:team "UX West"
:api #{metabase.collections.core
metabase.collections.models.collection
metabase.collections.models.collection.root
metabase.collections.schema}
:uses #{api
api-keys
app-db
audit-app
config
events
models
permissions
premium-features
remote-sync
search
util}
:model-exports #{:model/Collection}
:model-imports #{:model/Card
:model/CollectionBookmark
:model/CollectionPermissionGraphRevision
:model/Dashboard
:model/DashboardCard
:model/DashboardCardSeries
:model/Document
:model/NativeQuerySnippet
:model/Permissions
:model/Pulse
:model/Table
:model/Timeline
:model/Transform
:model/User}}
collections-rest
{:team "UX West"
:api #{metabase.collections-rest.api
metabase.collections-rest.init}
:uses #{api
app-db
collections
eid-translation
events
lib-be
models
notification
permissions
premium-features
queries
request
revisions
settings
tracing
transforms
upload
util}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/Document
:model/NativeQuerySnippet
:model/Pulse
:model/Table
:model/Timeline
:model/Transform}}
comments
{:team "UX West"
:api #{metabase.comments.api
metabase.comments.init}
:uses #{analytics
api
channel
events
models
request
users
util}
:model-exports #{:model/Comment}
:model-imports #{:model/Document :model/User}}
;; technically this 'uses' `enterprise/core` and `test` since it tries to load them to see if they exists so we know
;; if EE/test code is available; however we can ignore them since they're not real usages.
config
{:team "DevEx"
:api #{metabase.config.core}
:uses #{}}
;; this is not actually a real module, but comes from one of our libraries.
connection-pool
{:team "UX West"
:api #{metabase.connection-pool}
:uses #{}}
content-translation
{:team "UX West"
:api #{metabase.content-translation.models}
:uses #{premium-features
util}
:model-exports #{:model/ContentTranslation}}
content-verification
{:team "UX West"
:api #{metabase.content-verification.core
metabase.content-verification.init}
:uses #{app-db
models
util}
:model-exports #{:model/ModerationReview}
:model-imports #{:model/Card :model/Dashboard}}
core
{:team "UX West"
:api #{}
:uses :any}
dashboards
{:team "UX West"
:api #{metabase.dashboards.autoplace
metabase.dashboards.constants
metabase.dashboards.init
metabase.dashboards.models.dashboard
metabase.dashboards.models.dashboard-card
metabase.dashboards.models.dashboard-tab
metabase.dashboards.schema
metabase.dashboards.settings}
:uses #{api
app-db
audit-app
collections
config
events
lib
models
parameters
permissions
public-sharing
queries
query-processor
search
settings
util
warehouse-schema}
:model-exports #{:model/Dashboard
:model/DashboardCard
:model/DashboardCardSeries
:model/DashboardTab}
:model-imports #{:model/Action
:model/Card
:model/Collection
:model/DashboardBookmark
:model/ModerationReview
:model/Pulse
:model/PulseCard
:model/Revision
:model/User}}
dashboards-rest
{:team "UX West"
:api #{metabase.dashboards-rest.api}
:uses #{actions
analytics
api
app-db
channel
collections
collections-rest
dashboards
eid-translation
embedding
events
lib
lib-be
models
parameters
permissions
public-sharing
pulse
queries
query-permissions
query-processor
request
revisions
util
xrays}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/DashboardCard
:model/DashboardTab
:model/Field
:model/Pulse
:model/PulseChannel
:model/PulseChannelRecipient
:model/Query
:model/Table
:model/User}}
data-studio
{:team "Gadget"
:api #{metabase.data-studio.api}
:uses #{api
database-routing
driver
events
request
sync
util
warehouse-schema}
:model-imports #{:model/Database
:model/Dimension
:model/Field
:model/FieldValues
:model/Table}}
database-routing
{:team "UX West"
:api #{metabase.database-routing.core}
:uses #{premium-features}}
documents
{:team "UX West"
:api #{metabase.documents.api
metabase.documents.core
metabase.documents.init
metabase.documents.prose-mirror
metabase.documents.schema}
:uses #{activity-feed
api
app-db
batch-processing
collections
events
models
public-sharing
queries
query-permissions
query-processor
revisions
search
util
view-log}
:model-exports #{:model/Document}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/Table
:model/User}}
driver
{:team "Querying Platform"
:api #{metabase.driver
metabase.driver.common
metabase.driver.common.parameters
metabase.driver.common.parameters.parse
metabase.driver.connection
metabase.driver.ddl.interface
metabase.driver.h2
metabase.driver.impl
metabase.driver.init
metabase.driver.mysql
metabase.driver.postgres
metabase.driver.settings
metabase.driver.sql
metabase.driver.sql-jdbc
metabase.driver.sql-jdbc.connection
metabase.driver.sql-jdbc.execute
metabase.driver.sql-jdbc.execute.diagnostic
metabase.driver.sql-jdbc.sync
;; TODO (lbrdnk 2025/12/17): We should revisit addition of the following line. I've added it to make
;; tests pass as we are using it directly with ee/workspaces module. I believe later, when workspaces
;; are in better state quality wise, it should become part of the driver api and that should be used
;; instead of calling directly into the normalize module.
metabase.driver.sql.normalize
metabase.driver.sql.query-processor
metabase.driver.sql.util
metabase.driver.sync
metabase.driver.util}
:uses #{analytics-interface
app-db
appearance
auth-provider
classloader
config
driver-api
events
legacy-mbql
lib
lib-be
premium-features
query-processor
settings
sql-tools
system
tracing
util
warehouse-schema
warehouses}
:model-imports #{:model/Database :model/Field :model/Table}}
driver-api
{:team "Querying Platform"
:api #{metabase.driver-api.core}
:uses #{actions
api
app-db
appearance
classloader
config
connection-pool
database-routing
events
legacy-mbql
lib
lib-be
logger
models
premium-features
query-processor
secrets
settings
sync
system
upload
util
warehouse-schema}}
eid-translation
{:team "UX West"
:api #{metabase.eid-translation.api
metabase.eid-translation.core
metabase.eid-translation.init}
:uses #{api
settings
util}
:model-imports #{:model/Action
:model/Card
:model/Collection
:model/Dashboard
:model/DashboardCard
:model/DashboardTab
:model/Dimension
:model/Document
:model/Measure
:model/NativeQuerySnippet
:model/PermissionsGroup
:model/Pulse
:model/PulseCard
:model/PulseChannel
:model/Segment
:model/Timeline
:model/Transform
:model/User}}
embedding
{:team "Embedding"
:api #{metabase.embedding.init
metabase.embedding.jwt
metabase.embedding.settings
metabase.embedding.util
metabase.embedding.validation}
:uses #{analytics
api
models
premium-features
server
settings
util}
:model-imports #{:model/Card :model/Dashboard}
:model-exports #{:model/EmbeddingTheme}}
embedding-rest
{:team "Embedding"
:api #{metabase.embedding-rest.api}
:uses #{api
dashboards
database-routing
eid-translation
embedding
events
models
notification
parameters
public-sharing-rest
queries
query-processor
request
tiles
util}
:model-imports #{:model/Card :model/Dashboard :model/EmbeddingTheme}}
events
{:team "DevEx"
:api #{metabase.events.core
metabase.events.init}
:uses #{models
util}
:friends #{tracing}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/Database
:model/Field
:model/Measure
:model/NativeQuerySnippet
:model/Pulse
:model/Segment
:model/Table
:model/User}}
formatter
{:team "UX West"
:api #{metabase.formatter.core}
:uses #{appearance
models
query-processor
types
util}}
frontend-errors
{:team "UX West"
:api #{metabase.frontend-errors.api}
:uses #{analytics-interface
api
request
util}}
geojson
{:team "UX West"
:api #{metabase.geojson.api
metabase.geojson.init}
:uses #{api
config
permissions
settings
util}}
glossary
{:team "Gadget"
:api #{metabase.glossary.api}
:uses #{api
events
models
util}
:model-exports #{:model/Glossary}
:model-imports #{:model/User}}
graph
{:team "Graphy"
:api #{metabase.graph.core}
:uses #{util}}
indexed-entities
{:team "UX West"
:api #{metabase.indexed-entities.api
metabase.indexed-entities.init}
:uses #{analytics
api
driver
legacy-mbql
lib
models
query-processor
search
sync
task
util}
:model-exports #{:model/ModelIndex :model/ModelIndexValue}
:model-imports #{:model/Card :model/Collection}}
initialization-status
{:team "UX West"
:api #{metabase.initialization-status.core}
:uses #{}}
interestingness
{:team "UX West"
:api #{metabase.interestingness.core}
:uses #{util}}
internal-stats
{:team "UX West"
:api #{metabase.internal-stats.core}
:uses #{app-db
models}
:model-imports #{:model/AiUsageLog
:model/Card
:model/Dashboard
:model/MetabotMessage
:model/QueryExecution
:model/User}}
legacy-mbql
{:team "Querying Platform"
:api #{metabase.legacy-mbql.normalize
metabase.legacy-mbql.schema
metabase.legacy-mbql.util}
:uses #{lib
types
util}}
lib
{:team "Querying Platform"
:api #{metabase.lib.core
metabase.lib.equality
metabase.lib.init
metabase.lib.metadata
metabase.lib.metadata.protocols
metabase.lib.schema
metabase.lib.schema.actions
metabase.lib.schema.aggregation
metabase.lib.schema.common
metabase.lib.schema.expression
metabase.lib.schema.expression.temporal
metabase.lib.schema.filter
metabase.lib.schema.id
metabase.lib.schema.info
metabase.lib.schema.join
metabase.lib.schema.literal
metabase.lib.schema.mbql-clause
metabase.lib.schema.measure
metabase.lib.schema.metadata
metabase.lib.schema.metadata.fingerprint
metabase.lib.schema.parameter
metabase.lib.schema.ref
metabase.lib.schema.template-tag
metabase.lib.schema.temporal-bucketing
metabase.lib.schema.test-spec
metabase.lib.schema.util
metabase.lib.schema.validate
metabase.lib.types.isa
metabase.lib.util}
:uses #{config
graph
legacy-mbql
types
util}
:friends #{agent-lib ;; Structured MBQL builder; needs direct access to a few lib internals.
legacy-mbql ;; Reuses internal schemas and a few helper functions. Deeply coupled to MBQL.
lib-be ;; BE-specific extension of lib; tight coupling is acceptable.
query-processor ;; Necessarily manipulates MBQL; better to pull most logic into a new module.
source-swap ;; Manipulates MBQL queries; tight coupling with lib is expected.
enterprise/sandbox}} ;; Really part of the QP, though its lives in the enterprise/ tree.
lib-be
{:team "Querying Platform"
:api #{metabase.lib-be.core
metabase.lib-be.init}
:uses #{lib
models
settings
util}
:model-imports #{:model/Card
:model/Database
:model/Dimension
:model/Field
:model/FieldValues
:model/Measure
:model/NativeQuerySnippet
:model/PersistedInfo
:model/Segment
:model/Table
:model/Transform}}
lib-metric
{:team "UX West"
:api #{metabase.lib-metric.core
metabase.lib-metric.schema}
:uses #{lib
lib-be
settings
types
util}
:model-imports #{:model/Card :model/Field :model/Table}}
llm
{:team "Metabot"
:api #{metabase.llm.api
metabase.llm.init
metabase.llm.settings
metabase.llm.startup}
:uses #{analytics
api
driver
lib
lib-be
metabot
models
premium-features
request
settings
sql-tools
sync
util
warehouse-schema}
:model-imports #{:model/Card :model/Database :model/Field :model/Table}}
logger
{:team "DevEx"
:api #{metabase.logger.api
metabase.logger.core
metabase.logger.init}
:uses #{analytics
api
classloader
config
permissions
util}}
login-history
{:team "UX West"
:api #{metabase.login-history.api
metabase.login-history.core
metabase.login-history.init}
:uses #{analytics
api
app-db
channel
request
settings
util}
:model-exports #{:model/LoginHistory}}
mcp
{:team "Metabot"
:api #{metabase.mcp.api
metabase.mcp.core
metabase.mcp.init}
:uses #{agent-api
api
api-scope
config
llm
oauth-server
request
server
settings
system
util}}
measures
{:team "Graphy"
:api #{metabase.measures.api}
:uses #{api
events
lib
lib-be
metrics
models
permissions
remote-sync
search
util}
:model-exports #{:model/Measure}
:model-imports #{:model/Collection :model/Table :model/User}}
metabot
{:team "Metabot"
:api #{metabase.metabot.api
metabase.metabot.api.entity-analysis
metabase.metabot.config
metabase.metabot.core
metabase.metabot.init
metabase.metabot.self
metabase.metabot.settings}
:friends #{agent-api
enterprise/metabot
enterprise/metabot-analytics
slackbot}
:uses #{activity-feed
agent-lib
analytics
analytics-interface
api
api-scope
app-db
audit-app
channel
collections
config
documents
driver
interestingness
legacy-mbql
lib
lib-be
llm
models
native-query-snippets
notification
parameters
permissions
premium-features
pulse
query-processor
request
search
server
settings
slackbot
sql-tools
sync
system
task
transforms
transforms-base
util
warehouses}
:model-exports #{:model/AiUsageLog
:model/Metabot
:model/MetabotConversation
:model/MetabotFeedback
:model/MetabotMessage}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/Database
:model/Field
:model/Glossary
:model/ModerationReview
:model/QueryTable
:model/Table
:model/Transform
:model/User}}
metrics
{:team "UX West"
:api #{metabase.metrics.api
metabase.metrics.core}
:uses #{api
collections
lib
lib-be
lib-metric
models
parameters
permissions
premium-features
query-processor
request
server
util}
:model-imports #{:model/Card
:model/Field
:model/Measure
:model/Table}}
model-persistence
{:team "Graphy"
:api #{metabase.model-persistence.api
metabase.model-persistence.core
metabase.model-persistence.init}
:uses #{api
app-db
driver
events
lib
models
permissions
premium-features
queries
query-processor
request
settings
system
task
task-history
tracing
util}
:model-exports #{:model/PersistedInfo}
:model-imports #{:model/Card :model/Database}}
models
{:team "DevEx"
:api #{metabase.models.humanization
metabase.models.init
metabase.models.interface
metabase.models.resolution
metabase.models.serialization
metabase.models.serialization.resolve
metabase.models.util.spec-update
metabase.models.visualization-settings}
:uses #{api
app-db
classloader
legacy-mbql
lib
settings
util}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/DashboardTab
:model/Database
:model/Field
:model/NativeQuerySnippet
:model/Segment
:model/Table
:model/User}}
native-query-snippets
{:team "Graphy"
:api #{metabase.native-query-snippets.api
metabase.native-query-snippets.core}
:uses #{api
collections
events
lib
models
permissions
premium-features
remote-sync
util}
:model-exports #{:model/NativeQuerySnippet}
:model-imports #{:model/Collection :model/User}}
notification
{:team "Gadget"
:api #{metabase.notification.api
metabase.notification.core
metabase.notification.init
metabase.notification.models
metabase.notification.payload.core}
:uses #{analytics
analytics-interface
api
appearance
auth-identity
channel
config
dashboards
driver
embedding
events
models
parameters
permissions
premium-features
query-processor
request
session
settings
sso
system
task
task-history
tracing
users
util}
:model-exports #{:model/Notification :model/NotificationHandler :model/NotificationRecipient}
:model-imports #{:model/Card
:model/Channel
:model/ChannelTemplate
:model/Dashboard
:model/DashboardCard
:model/DashboardTab
:model/User}}
oauth-server
{:team "UX West"
:api #{metabase.oauth-server.api
metabase.oauth-server.core
metabase.oauth-server.init}
:uses #{api
appearance
models
request
settings
system
task
tracing
util}}
;; TODO -- too many API namespaces
parameters
{:team "Graphy"
:api #{metabase.parameters.chain-filter
metabase.parameters.core
metabase.parameters.custom-values
metabase.parameters.dashboard
metabase.parameters.field
metabase.parameters.field-values
metabase.parameters.init
metabase.parameters.params
metabase.parameters.schema
metabase.parameters.shared}
:uses #{api
app-db
classloader
lib
lib-be
models
query-processor
util
warehouse-schema
warehouses}
:model-imports #{:model/Card
:model/Dashboard
:model/Field
:model/FieldValues
:model/Table}}
permissions
{:team "UX West"
:api #{metabase.permissions.core
metabase.permissions.init
metabase.permissions.schema}
:uses #{api
app-db
audit-app
collections
config
events
lib
models
premium-features
remote-sync
settings
tracing
util
enterprise/advanced-permissions}
:model-exports #{:model/ApplicationPermissionsRevision
:model/CollectionPermissionGraphRevision
:model/DataPermissions
:model/Permissions
:model/PermissionsGroup
:model/PermissionsGroupMembership
:model/PermissionsRevision}
:model-imports #{:model/Collection
:model/Database
:model/Table
:model/User}}
permissions-rest
{:team "UX West"
:api #{metabase.permissions-rest.api}
:uses #{api
audit-app
events
permissions
premium-features
request
settings
util}
:model-imports #{:model/DataPermissions
:model/Database
:model/PermissionsGroup
:model/PermissionsGroupMembership
:model/PermissionsRevision
:model/Table
:model/User}}
pivot
{:team "UX West"
:api #{metabase.pivot.core}
:uses #{models
util}}
plugins
{:team "DevEx"
:api #{metabase.plugins.core}
:uses #{classloader
driver
util}}
premium-features
{:team "UX West"
:api #{metabase.premium-features.api
metabase.premium-features.core
metabase.premium-features.init}
:uses #{analytics-interface
api
app-db
classloader
config
events
internal-stats
llm
settings
startup
task
tracing
util}
:model-imports #{:model/User}}
product-feedback
{:team "UX West"
:api #{metabase.product-feedback.api
metabase.product-feedback.init}
:uses #{analytics
api
app-db
channel
config
premium-features
settings
task
util}
:model-imports #{:model/Card
:model/Dashboard
:model/Database
:model/User}}
public-sharing
{:team "UX West"
:api #{metabase.public-sharing.core
metabase.public-sharing.init
metabase.public-sharing.validation}
:uses #{api
settings
util}}
public-sharing-rest
{:team "UX West"
:api #{metabase.public-sharing-rest.api}
:uses #{actions
analytics
api
dashboards
dashboards-rest
events
lib
models
parameters
public-sharing
queries
query-processor
request
tiles
util}
:model-imports #{:model/Card
:model/Dashboard
:model/DashboardCard
:model/Document}}
pulse
{:team "Gadget"
:api #{metabase.pulse.api
metabase.pulse.core
metabase.pulse.init}
:uses #{api
app-db
channel
classloader
collections
config
driver
embedding
events
lib
models
notification
permissions
premium-features
query-processor
request
task
task-history
tracing
util
enterprise/advanced-permissions
enterprise/sandbox}
:model-exports #{:model/Pulse
:model/PulseCard
:model/PulseChannel
:model/PulseChannelRecipient}
:model-imports #{:model/Card
:model/Channel
:model/Collection
:model/Dashboard
:model/DashboardCard
:model/Notification
:model/User}}
queries
{:team "Graphy"
:api #{metabase.queries.core
metabase.queries.init
metabase.queries.models.query ; TODO FIXME
metabase.queries.schema}
:uses #{analytics
analytics-interface
analyze
api
app-db
audit-app
cache
channel
collections
config
content-verification
dashboards
documents
events
lib
lib-be
metrics
models
parameters
permissions
premium-features
public-sharing
pulse
query-permissions
query-processor
request
search
util
view-log
warehouse-schema}
:model-exports #{:model/Card
:model/Query
:model/QueryExecution
:model/QueryTable}
:model-imports #{:model/Action
:model/CardBookmark
:model/Collection
:model/Dashboard
:model/DashboardCard
:model/DashboardCardSeries
:model/Database
:model/Document
:model/Field
:model/ModerationReview
:model/NativeQuerySnippet
:model/Notification
:model/Revision
:model/Table
:model/User}}
queries-rest
{:team "Querying Platform"
:api #{metabase.queries-rest.api}
:uses #{analyze
api
collections
eid-translation
embedding
events
lib
lib-be
models
parameters
permissions
public-sharing
queries
query-permissions
query-processor
request
revisions
search
util}
:model-imports #{:model/Card
:model/CardBookmark
:model/Collection
:model/Dashboard
:model/Database
:model/Table}}
query-permissions
{:team "UX West"
:api #{metabase.query-permissions.core}
:uses #{api
legacy-mbql
lib
lib-be
models
permissions
query-processor
request
util}
:model-imports #{:model/Card :model/Field}}
query-processor
{:team "Querying Platform"
:friends #{driver-api
enterprise/cache
enterprise/sandbox
parameters
transforms-base
warehouse-schema}
:api #{metabase.query-processor.api
metabase.query-processor.card
metabase.query-processor.compile
metabase.query-processor.core
metabase.query-processor.dashboard
metabase.query-processor.error-type
metabase.query-processor.init
metabase.query-processor.interface
metabase.query-processor.metadata
metabase.query-processor.middleware.constraints
metabase.query-processor.middleware.permissions
metabase.query-processor.parameters.dates
metabase.query-processor.parameters.operators
metabase.query-processor.pipeline
metabase.query-processor.pivot
metabase.query-processor.preprocess
metabase.query-processor.schema
metabase.query-processor.store
metabase.query-processor.streaming
metabase.query-processor.streaming.common
metabase.query-processor.streaming.interface
metabase.query-processor.timezone
metabase.query-processor.util
metabase.query-processor.util.persisted-cache}
:uses #{analytics
analytics-interface
analyze
api
app-db
appearance
audit-app
batch-processing
cache
config
dashboards
driver
events
formatter
legacy-mbql
lib
lib-be
model-persistence
models
parameters
permissions
pivot
premium-features
queries
query-permissions
server
settings
system
tracing
users
util}
:model-imports #{:model/Card
:model/Dashboard
:model/DashboardCard
:model/DashboardCardSeries
:model/Database
:model/QueryCache
:model/QueryExecution
:model/Table}}
remote-sync
{:team "UX West"
:api #{metabase.remote-sync.core
metabase.remote-sync.init}
:uses #{api
models
premium-features}
:model-imports #{:model/Collection}}
request
{:team "UX West"
:api #{metabase.request.core
metabase.request.current
metabase.request.init
metabase.request.schema
metabase.request.user-agent}
:uses #{analytics-interface
api
config
embedding
permissions ; FIXME
premium-features
session
settings
users
util}
:model-imports #{:model/User}}
revisions
{:team "UX West"
:api #{metabase.revisions.api
metabase.revisions.core
metabase.revisions.init}
:uses #{api
config
dashboards
events
lib
models
queries
query-permissions
util}
:model-exports #{:model/Revision}
:model-imports #{:model/Card
:model/Dashboard
:model/DashboardCard
:model/DashboardTab
:model/Document
:model/Measure
:model/Segment
:model/Transform}}
sample-data
{:team "UX West"
:api #{metabase.sample-data.core
metabase.sample-data.init}
:uses #{plugins
settings
sync
util}
:model-imports #{:model/Database}}
search
{:team "UX West"
:api #{metabase.search.api
metabase.search.appdb.scoring
metabase.search.config
metabase.search.core
metabase.search.engine
metabase.search.in-place.scoring
metabase.search.ingestion
metabase.search.init
metabase.search.scoring
metabase.search.spec
metabase.search.task.search-index}
:uses #{analytics
analytics-interface
api
app-db
appearance
audit-app
collections
config
events
lib
lib-be
models
permissions
premium-features
queries
query-processor
request
settings
startup
task
tracing
transforms
util}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/Table
:model/User}}
secrets
{:team "Graphy"
:api #{metabase.secrets.core}
:uses #{api driver models premium-features util}
:model-exports #{:model/Secret}}
segments
{:team "Graphy"
:api #{metabase.segments.api
metabase.segments.schema}
:uses #{api
events
lib
lib-be
models
permissions
remote-sync
search
util
xrays}
:model-exports #{:model/Segment}
:model-imports #{:model/Collection :model/Table :model/User}}
server
{:team "UX West"
:api #{metabase.server.core
metabase.server.init
metabase.server.middleware.session
metabase.server.settings
metabase.server.streaming-response} ; TODO -- too many API namespaces
:uses #{analytics
analytics-interface
api
api-keys
app-db
appearance
config
driver
embedding
initialization-status
lib-be
mcp
oauth-server
premium-features
query-processor
request
session
settings
sso
system
tracing
users
util
enterprise/sso}
:model-imports #{:model/Session}}
session
{:team "UX West"
:api #{metabase.session.api
metabase.session.core
metabase.session.init
metabase.session.settings} ; TODO -- shouldn't be exposed as an API namespace
:uses #{api
app-db
auth-identity
channel
config
events
request
settings
sso
system
task
tracing
util}
:model-exports #{:model/Session}
:model-imports #{:model/AuthIdentity :model/User}}
settings
{:team "DevEx"
:api #{metabase.settings.core
metabase.settings.init}
:uses #{api
app-db
config
events
models
premium-features
util
enterprise/advanced-permissions}
:model-exports #{:model/Setting}}
settings-rest
{:team "DevEx"
:api #{metabase.settings-rest.api}
:uses #{api
permissions
settings
util}}
setup
{:team "UX West"
:api #{metabase.setup.core
metabase.setup.init}
:uses #{app-db
config
settings
util}
:model-imports #{:model/User}}
setup-rest
{:team "UX West"
:api #{metabase.setup-rest.api}
:uses #{analytics
api
appearance
auth-identity
events
request
settings
setup
system
util}
:model-imports #{:model/AuthIdentity :model/User}}
slackbot
{:team "Metabot"
:api #{metabase.slackbot.api
metabase.slackbot.config
metabase.slackbot.init}
:friends #{metabot}
:uses #{analytics
analytics-interface
api
channel
formatter
lib
metabot
permissions
query-processor
request
server
settings
sso
system
upload
util}
:model-imports #{:model/AuthIdentity
:model/Card
:model/Database
:model/MetabotMessage}}
source-swap
{:team "Graphy"
:api #{metabase.source-swap.core
metabase.source-swap.schema
metabase.source-swap.util}
:uses #{driver
lib
sql-tools
util}}
sql-parsing
{:team "DevEx"
:api #{metabase.sql-parsing.core}
:uses #{analytics-interface
util}}
sql-tools
{:team "DevEx"
:api #{metabase.sql-tools.core
metabase.sql-tools.init}
:uses #{analytics
analytics-interface
driver
lib
settings
sql-parsing
util}}
sso
{:team "UX West"
:api #{metabase.sso.api
metabase.sso.api.slack-connect
metabase.sso.core
metabase.sso.init
metabase.sso.settings}
:friends #{enterprise/sso}
:uses #{api
auth-identity
config
permissions
premium-features
request
server
settings
system
util}
:model-imports #{:model/AuthIdentity :model/PermissionsGroupMembership}}
startup
{:team "DevEx"
:api #{metabase.startup.core}
:uses #{util}}
store-api
{:team "Cloud"
:api #{metabase.store-api.core
metabase.store-api.init}
:uses #{config
settings
util}}
sync
{:team "Graphy"
:api #{metabase.sync.api
metabase.sync.core
metabase.sync.init
metabase.sync.schedules
metabase.sync.task.sync-databases
metabase.sync.util}
:uses #{analytics-interface
analyze
api
app-db
audit-app
config
database-routing
driver
events
interestingness
lib
models
premium-features
query-processor
settings
task
task-history
tracing
util
warehouse-schema
warehouses}
:model-imports #{:model/Database
:model/Field
:model/FieldValues
:model/Table}}
system
{:team "UX West"
:api #{metabase.system.core
metabase.system.init}
:uses #{appearance settings util}}
task
{:team "UX West"
:api #{metabase.task.bootstrap
metabase.task.core}
:uses #{app-db
classloader
tracing
util}}
task-history
{:team "UX West"
:api #{metabase.task-history.api
metabase.task-history.core
metabase.task-history.init}
:uses #{api
app-db
config
models
permissions
premium-features
query-processor
request
task
tracing
util}
:model-imports #{:model/Card :model/Dashboard :model/Database}}
tenants
{:team "Admin Webapp"
:api #{metabase.tenants.core}
:uses #{premium-features
util}}
testing-api
{:team "DevEx"
:api #{metabase.testing-api.api
metabase.testing-api.core
metabase.testing-api.init}
:uses #{analytics
api
app-db
config
lib
lib-be
permissions
premium-features
search
util}
:model-imports #{:model/AiUsageLog
:model/Card
:model/Dashboard
:model/MetabotConversation
:model/MetabotMessage
:model/PermissionsGroup
:model/PermissionsGroupMembership
:model/SecurityAdvisory
:model/User}}
tiles
{:team "UX West"
:api #{metabase.tiles.api
metabase.tiles.init}
:uses #{api
legacy-mbql
lib
lib-be
parameters
query-processor
settings
util}}
timeline
{:team "UX West"
:api #{metabase.timeline.api
metabase.timeline.core}
:uses #{analytics
api
collections
events
models
util}
:model-exports #{:model/Timeline}
:model-imports #{:model/Collection :model/User}}
tracing
{:team "DevEx"
:api #{metabase.tracing.core
metabase.tracing.init}
:uses #{events
settings
task
util}}
transforms
{:team "Graphy"
:api #{metabase.transforms.core
metabase.transforms.feature-gating
metabase.transforms.init
metabase.transforms.schema
metabase.transforms.util}
:uses #{analytics-interface
api
app-db
channel
collections
database-routing
driver
events
lib
lib-be
models
permissions
premium-features
queries
query-processor
remote-sync
revisions
search
settings
task
task-history
tracing
transforms-base
util}
:friends #{models
enterprise/transforms-python}
:model-exports #{:model/Transform
:model/TransformJob
:model/TransformJobTransformTag
:model/TransformRun
:model/TransformTag}
:model-imports #{:model/Collection
:model/Database
:model/Field
:model/Table
:model/User}}
transforms-base
{:team "Graphy"
:api #{metabase.transforms-base.init
metabase.transforms-base.interface
metabase.transforms-base.util}
;; TODO regressions — transforms-base should not depend on :model/Transform or
;; :model/TransformRun directly. Remove once the module is agnostic to global
;; versus workspace transforms. See https://linear.app/metabase/issue/BOT-1143
:model-imports #{:model/Database
:model/Table
:model/Transform
:model/TransformRun}
:uses #{database-routing
driver
events
lib
lib-be
query-processor
sync
util}
:friends #{transforms
enterprise/transforms-python}}
transforms-inspector
{:team "Gadget"
:api #{}
:uses #{}}
transforms-rest
{:team "Gadget"
:api #{metabase.transforms-rest.api.transform
metabase.transforms-rest.api.transform-job
metabase.transforms-rest.api.transform-tag}
:uses #{api
models
request
transforms
transforms-base
util}
:model-imports #{:model/Transform
:model/TransformJob
:model/TransformJobTransformTag
:model/TransformRun
:model/TransformTag}}
types
{:team "Querying Platform"
:api #{metabase.types.core
metabase.types.init}
:uses #{util}}
upload
{:team "Graphy"
:api #{metabase.upload.api
metabase.upload.core
metabase.upload.db
metabase.upload.init}
:uses #{analytics
analytics-interface
api
appearance
driver
events
lib
model-persistence
models
permissions
queries
settings
sync
util
warehouse-schema}
:model-imports #{:model/Card
:model/Database
:model/Field
:model/Table}}
user-key-value
{:team "UX West"
:api #{metabase.user-key-value.api
metabase.user-key-value.init}
:uses #{api
config
lib
util}}
users
{:team "UX West"
:api #{metabase.users.core
metabase.users.init
metabase.users.models.user
metabase.users.models.user-parameter-value
metabase.users.schema
metabase.users.settings}
:uses #{analytics
api
batch-processing
channel
config
events
models
notification
permissions
premium-features
settings
setup
system
tenants
util
enterprise/advanced-permissions}
:model-exports #{:model/User :model/UserParameterValue}
:model-imports #{:model/AuthIdentity
:model/Dashboard
:model/Database
:model/PermissionsGroupMembership
:model/Session
:model/Tenant}}
users-rest
{:team "UX West"
:api #{metabase.users-rest.api}
:uses #{api
appearance
auth-identity
collections
config
events
models
permissions
premium-features
request
sso
system
tenants
users
util
enterprise/advanced-permissions}
:model-imports #{:model/AuthIdentity
:model/Card
:model/Collection
:model/Dashboard
:model/LoginHistory
:model/User}}
util
{:team "DevEx"
:api :any
:uses #{classloader
config
settings
system}}
version
{:team "UX West"
:api #{metabase.version.core
metabase.version.init}
:uses #{config
settings
system
task
util}}
view-log
{:team "UX West"
:api #{metabase.view-log.core
metabase.view-log.init}
:uses #{analytics
api
app-db
audit-app
batch-processing
events
models
premium-features
query-permissions
util}
:model-exports #{:model/ViewLog}
:model-imports #{:model/Card :model/Dashboard :model/Table}}
warehouse-schema
{:team "UX West"
:api #{metabase.warehouse-schema.field
metabase.warehouse-schema.metadata-from-qp
metabase.warehouse-schema.metadata-queries
metabase.warehouse-schema.models.field
metabase.warehouse-schema.models.field-user-settings
metabase.warehouse-schema.models.field-values
metabase.warehouse-schema.models.table
metabase.warehouse-schema.table}
:uses #{analyze
api
app-db
audit-app
driver
lib
lib-be
models
parameters
permissions
premium-features
query-processor
remote-sync
search
util
warehouses}
:model-exports #{:model/Dimension
:model/Field
:model/FieldValues
:model/Table}
:model-imports #{:model/Card
:model/Collection
:model/Database
:model/Measure
:model/Segment
:model/Transform
:model/User}}
warehouse-schema-rest
{:team "UX West"
:api #{metabase.warehouse-schema-rest.api}
:uses #{analytics
api
app-db
database-routing
driver
events
lib
models
parameters
permissions
premium-features
query-processor
request
sync
types
upload
util
warehouse-schema
xrays}
:model-imports #{:model/Database
:model/Dimension
:model/Field
:model/FieldValues
:model/Table}}
warehouses
{:team "UX West"
:api #{metabase.warehouses.core
metabase.warehouses.init
metabase.warehouses.models.database}
:uses #{analytics-interface
api
app-db
audit-app
driver
lib
models
permissions
premium-features
search
secrets
settings
sync
util}
:model-exports #{:model/Database}
:model-imports #{:model/Card
:model/Field
:model/Table
:model/User}}
warehouses-rest
{:team "UX West"
:api #{metabase.warehouses-rest.api}
:uses #{analytics
api
app-db
classloader
collections
config
database-routing
driver
events
lib
lib-be
models
permissions
premium-features
queries
request
sample-data
secrets
settings
sync
upload
util
warehouse-schema
warehouses
enterprise/advanced-permissions}
:model-imports #{:model/Card
:model/Collection
:model/Database
:model/Field
:model/Table}}
xrays
{:team "Graphy"
:api #{metabase.xrays.api
metabase.xrays.core
metabase.xrays.init}
:uses #{analyze
api
appearance
collections
dashboards
driver
legacy-mbql
lib
lib-be
models
queries
query-permissions
query-processor
segments
settings
util
warehouse-schema}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/DashboardCard
:model/Database
:model/Field
:model/ModelIndex
:model/ModelIndexValue
:model/Query
:model/Revision
:model/Segment
:model/Table}}
enterprise/action-v2
{:team "Gadget"
:api #{metabase-enterprise.action-v2.api
metabase-enterprise.action-v2.init}
:uses #{actions
api
driver
events
lib
models
query-processor
util
warehouse-schema}
:model-imports #{:model/Database
:model/Field
:model/FieldValues
:model/Table}}
enterprise/advanced-config
{:team "UX West"
:api #{metabase-enterprise.advanced-config.api.logs
metabase-enterprise.advanced-config.file
metabase-enterprise.advanced-config.init
metabase-enterprise.advanced-config.settings}
:uses #{api
api-keys
app-db
driver
permissions
premium-features
settings
setup
sync
users
util}
:model-imports #{:model/ApiKey :model/Database :model/User}}
enterprise/advanced-permissions
{:team "UX West"
:api #{metabase-enterprise.advanced-permissions.api.routes
metabase-enterprise.advanced-permissions.common
metabase-enterprise.advanced-permissions.models.permissions.group-manager}
:uses #{api
audit-app
lib
permissions
premium-features
query-permissions
query-processor
remote-sync
util
warehouses
enterprise/impersonation}
:model-imports #{:model/ApplicationPermissionsRevision
:model/ConnectionImpersonation
:model/DataPermissions
:model/Permissions
:model/PermissionsGroupMembership
:model/Sandbox
:model/Table}}
enterprise/analytics
{:team "UX West"
:api #{}
:uses #{driver
premium-features
enterprise/advanced-config
enterprise/scim
enterprise/semantic-search
enterprise/sso}
:model-imports #{:model/Database :model/Sandbox}}
enterprise/api
{:team "UX West"
:api #{metabase-enterprise.api.core}
:uses #{api
premium-features
util}}
enterprise/api-routes
{:team "UX West"
:api #{metabase-enterprise.api-routes.routes}
:uses :any}
enterprise/audit-app
{:team "UX West"
:api #{metabase-enterprise.audit-app.api.routes
metabase-enterprise.audit-app.init}
:uses #{api
app-db
audit-app
classloader
config
driver
lib
models
permissions
plugins
premium-features
query-permissions
query-processor
settings
setup
startup
sync
users
util
enterprise/serialization}
:model-imports #{:model/AuditLog
:model/Card
:model/Collection
:model/Dashboard
:model/Database
:model/Field
:model/Notification
:model/NotificationRecipient
:model/Permissions
:model/Pulse
:model/PulseChannelRecipient
:model/QueryExecution
:model/Table
:model/User
:model/ViewLog}}
enterprise/auth-identity
{:team "UX West"
:api #{}
:uses #{premium-features}}
enterprise/auth-provider
{:team "UX West"
:api #{}
:uses #{premium-features
util}}
enterprise/billing
{:team "UX West"
:api #{metabase-enterprise.billing.api.routes}
:uses #{api
premium-features
store-api
util}
:model-imports #{:model/User}}
enterprise/cache
{:team "UX West"
:api #{metabase-enterprise.cache.init}
:uses #{cache
premium-features
query-processor
task
util}
:model-imports #{:model/CacheConfig
:model/Card
:model/Dashboard
:model/DatabaseRouter
:model/Query
:model/QueryCache
:model/QueryExecution}}
enterprise/checker
{:team "Graphy"
;; todo: add ability to prevent usage (transitive even) of app db
:api #{}
:uses #{classloader
lib
models
plugins
query-processor
sql-tools
util
enterprise/dependencies}
:model-imports #{:model/Database}}
enterprise/cloud-add-ons
{:team "Cloud"
:api #{metabase-enterprise.cloud-add-ons.api}
:uses #{api
events
premium-features
store-api
util
enterprise/harbormaster}}
enterprise/cloud-proxy
{:team "Cloud"
:api #{metabase-enterprise.cloud-proxy.api}
:uses #{api
premium-features
util
enterprise/harbormaster}}
enterprise/content-translation
{:team "UX West"
:api #{metabase-enterprise.content-translation.routes}
:uses #{api
content-translation
embedding
premium-features
util
enterprise/api}
:model-imports #{:model/ContentTranslation}}
enterprise/content-verification
{:team "UX West"
:api #{metabase-enterprise.content-verification.api.routes}
:uses #{api
content-verification
util
enterprise/api}}
enterprise/core
{:team "DevEx"
:api #{metabase-enterprise.core.init}
:uses :any}
enterprise/custom-viz-plugin
{:team "Gadget"
:api #{metabase-enterprise.custom-viz-plugin.api
metabase-enterprise.custom-viz-plugin.init}
:uses #{api
config
events
models
premium-features
server
settings
util}
:model-exports #{:model/CustomVizPlugin}}
enterprise/dashboard-subscription-filters
{:team "Graphy"
:api #{}
:uses #{premium-features}}
enterprise/data-complexity-score
{:team "Metabot"
:api #{metabase-enterprise.data-complexity-score.api
metabase-enterprise.data-complexity-score.init}
:uses #{analytics
analytics-interface
api
app-db
audit-app
collections
config
metabot
models
premium-features
settings
startup
task
util
enterprise/embeddings
enterprise/semantic-search}
:model-imports #{:model/Card
:model/Collection
:model/Database
:model/Measure
:model/Metabot
:model/ModerationReview
:model/Table}}
enterprise/data-studio
{:team "UX West"
:api #{metabase-enterprise.data-studio.api}
:uses #{api
collections
events
models
permissions
premium-features
util}
:model-imports #{:model/Collection
:model/Dimension
:model/Field
:model/Table}}
enterprise/database-replication
{:team "Cloud"
:api #{metabase-enterprise.database-replication.api
metabase-enterprise.database-replication.init}
:uses #{api
driver
premium-features
settings
util
enterprise/harbormaster}
:model-imports #{:model/Database}}
enterprise/database-routing
{:team "UX West"
:api #{metabase-enterprise.database-routing.api}
:uses #{api
config
database-routing
driver
events
lib
models
premium-features
query-processor
settings
util
warehouse-schema
warehouses}
:model-exports #{:model/DatabaseRouter}
:model-imports #{:model/Database :model/Transform}}
enterprise/dependencies
{:team "Graphy"
:api #{metabase-enterprise.dependencies.analysis
metabase-enterprise.dependencies.api
metabase-enterprise.dependencies.core
metabase-enterprise.dependencies.init
metabase-enterprise.dependencies.models.dependency}
:uses #{analyze
api
app-db
collections
documents
driver
events
graph
lib
lib-be
models
native-query-snippets
permissions
premium-features
queries
query-processor
request
revisions
settings
sql-tools
task
transforms
transforms-base
util}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/Document
:model/Field
:model/Measure
:model/NativeQuerySnippet
:model/Sandbox
:model/Segment
:model/Table
:model/Transform}}
enterprise/email
{:team "UX West"
:api #{metabase-enterprise.email.api}
:uses #{api
channel
permissions
premium-features
settings
util}}
enterprise/embedding-hub
{:team "Embedding"
:api #{metabase-enterprise.embedding-hub.api}
:uses #{api
appearance
audit-app
embedding
permissions
premium-features
enterprise/sso}
:model-imports #{:model/Card
:model/Collection
:model/ConnectionImpersonation
:model/Dashboard
:model/Database
:model/DatabaseRouter
:model/Sandbox
:model/Table
:model/Tenant}}
enterprise/embeddings
{:team "Metabot"
:api #{metabase-enterprise.embeddings.client}
;; Temporary: the impl currently delegates back into semantic-search until
;; embeddings.client/get-embeddings-batch's TODO is executed (move impl + settings here,
;; make token tracking a hook). Drop this dep once the relocation lands.
:uses #{enterprise/semantic-search}}
enterprise/gsheets
{:team "Cloud"
:api #{metabase-enterprise.gsheets.api
metabase-enterprise.gsheets.init}
:uses #{analytics
analytics-interface
api
premium-features
settings
util
enterprise/harbormaster}
:model-imports #{:model/Database :model/Setting}}
enterprise/harbormaster
{:team "Cloud"
:api #{metabase-enterprise.harbormaster.client}
:uses #{api
store-api
util}}
enterprise/impersonation
{:team "Graphy"
:api #{metabase-enterprise.impersonation.api}
:uses #{api
audit-app
driver
lib
models
premium-features
query-processor
util
warehouse-schema
enterprise/sandbox}
:model-exports #{:model/ConnectionImpersonation}
:model-imports #{:model/DataPermissions :model/PermissionsGroupMembership}}
enterprise/internal-stats
{:team "UX West"
:api #{}
:uses #{premium-features
settings}}
enterprise/library
{:team "UX West"
:api #{metabase-enterprise.library.api}
:uses #{api
collections
premium-features}
:model-imports #{:model/Card :model/Collection :model/Table}}
enterprise/metabot
{:team "Metabot"
:api #{metabase-enterprise.metabot.api
metabase-enterprise.metabot.api.routes
metabase-enterprise.metabot.init}
:friends #{slackbot
mcp
metabot}
:uses #{api
lib-be
metabot
models
permissions
premium-features
settings
task
util
enterprise/dependencies
enterprise/transforms-python}
:model-imports #{:model/AiUsageLog
:model/Card
:model/PermissionsGroup
:model/PermissionsGroupMembership
:model/Transform}}
enterprise/metabot-analytics
{:team "Metabot"
:api #{metabase-enterprise.metabot-analytics.api}
:uses #{api
driver
metabot
permissions
query-processor
request
slackbot
sql-tools
util}
:model-imports #{:model/MetabotConversation :model/MetabotFeedback :model/MetabotMessage}}
enterprise/permission-debug
{:team "UX West"
:api #{metabase-enterprise.permission-debug.api}
:uses #{api
lib
models
permissions
query-processor
util}
:model-imports #{:model/Card :model/User}}
enterprise/premium-features
{:team "UX West"
:api #{}
:uses #{premium-features
util}}
enterprise/remote-sync
{:team "UX West"
:api #{metabase-enterprise.remote-sync.api
metabase-enterprise.remote-sync.core
metabase-enterprise.remote-sync.init}
:uses #{analytics-interface
api
app-db
collections
events
models
premium-features
settings
startup
task
task-history
util
enterprise/serialization
enterprise/transforms-python}
:model-exports #{:model/RemoteSyncTask}
:model-imports #{:model/Card
:model/Collection
:model/Dashboard
:model/Document
:model/Field
:model/Measure
:model/NativeQuerySnippet
:model/PythonLibrary
:model/Segment
:model/Table
:model/Timeline
:model/Transform
:model/TransformTag
:model/User}}
enterprise/replacement
{:team "Graphy"
:api #{metabase-enterprise.replacement.api}
:uses #{api
app-db
events
lib
lib-be
model-persistence
models
queries
source-swap
task
transforms
util
warehouse-schema
enterprise/dependencies}
:model-imports #{:model/Card
:model/Dashboard
:model/DashboardCard
:model/Field
:model/Measure
:model/PersistedInfo
:model/Sandbox
:model/Segment
:model/Table
:model/Transform}}
enterprise/sandbox
{:team "UX West"
:api #{metabase-enterprise.sandbox.api.routes
metabase-enterprise.sandbox.api.util}
:uses #{api
app-db
audit-app
driver
events
legacy-mbql
lib
models
permissions
premium-features
query-processor
request
tenants
users
util
warehouse-schema
warehouses
enterprise/api}
:model-exports #{:model/Sandbox}
:model-imports #{:model/Card
:model/ConnectionImpersonation
:model/Database
:model/Field
:model/PermissionsGroupMembership
:model/Table
:model/User}}
enterprise/scim
{:team "UX West"
:api #{metabase-enterprise.scim.core
metabase-enterprise.scim.init
metabase-enterprise.scim.routes}
:uses #{analytics-interface
api
api-keys
models
permissions
server
settings
system
users
util
enterprise/serialization}
:model-imports #{:model/ApiKey
:model/PermissionsGroup
:model/PermissionsGroupMembership
:model/User}}
enterprise/search
{:team "UX West"
:api #{}
:uses #{premium-features
search}}
enterprise/security-center
{:team "Gadget"
:api #{metabase-enterprise.security-center.api
metabase-enterprise.security-center.init}
:uses #{analytics
api
app-db
channel
config
driver
events
models
notification
permissions
premium-features
settings
system
task
util}
:model-exports #{:model/SecurityAdvisory}
:model-imports #{:model/User}}
enterprise/semantic-search
{:team "Metabot"
:api #{metabase-enterprise.semantic-search.api
metabase-enterprise.semantic-search.core
metabase-enterprise.semantic-search.init}
:uses #{activity-feed
analytics
analytics-interface
api
app-db
config
connection-pool
llm
metabot
models
permissions
premium-features
search
settings
task
tracing
util}
:model-imports #{:model/Card :model/Collection :model/Dashboard}}
enterprise/serialization
{:team "Graphy"
:api #{metabase-enterprise.serialization.api
metabase-enterprise.serialization.cmd
metabase-enterprise.serialization.core
metabase-enterprise.serialization.v2.backfill-ids}
:uses #{analytics
api
app-db
appearance
collections
config
events
lib
logger
models
plugins
premium-features
search
server
setup
util}
:model-imports :bypass}
enterprise/snippet-collections
{:team "Graphy"
:api #{}
:uses #{models
native-query-snippets
permissions
premium-features
remote-sync
util}
:model-imports #{:model/NativeQuerySnippet}}
enterprise/sso
{:team "UX West"
:api #{metabase-enterprise.sso.api.routes
metabase-enterprise.sso.init
metabase-enterprise.sso.settings}
:uses #{api
appearance
auth-identity
embedding
premium-features
request
session
settings
sso
system
util
enterprise/scim}
:model-imports #{:model/PermissionsGroup :model/Session}}
enterprise/stale
{:team "UX West"
:api #{metabase-enterprise.stale.api
metabase-enterprise.stale.init}
:uses #{analytics
api
collections
embedding
premium-features
queries
request
settings
util}
:model-imports #{:model/Card :model/Collection :model/Dashboard}}
enterprise/support-access-grants
{:team "UX West"
:api #{metabase-enterprise.support-access-grants.api
metabase-enterprise.support-access-grants.init}
:uses #{api
auth-identity
events
models
request
settings
system
util}
:model-imports #{:model/AuthIdentity :model/Session :model/User}}
enterprise/tenants
{:team "Admin Webapp"
:api #{metabase-enterprise.tenants.api}
:uses #{api
audit-app
auth-identity
collections
events
models
permissions
premium-features
request
settings
util}
:model-exports #{:model/Tenant}
:model-imports #{:model/Collection :model/User}}
enterprise/transforms
{:team "Graphy"
:api #{metabase-enterprise.transforms.api}
:uses #{premium-features
enterprise/transforms-inspector}}
enterprise/transforms-inspector
{:team "Gadget"
:api #{metabase-enterprise.transforms-inspector.api}
:uses #{analytics-interface
api
driver
events
lib
lib-be
query-processor
server
sql-tools
tracing
transforms
transforms-base
util}
:model-imports #{:model/Database
:model/Field
:model/Table
:model/Transform}}
enterprise/transforms-python
{:team "Graphy"
:api #{metabase-enterprise.transforms-python.api
metabase-enterprise.transforms-python.core
metabase-enterprise.transforms-python.init}
:uses #{analytics-interface
api
app-db
config
driver
events
lib
lib-be
models
permissions
query-processor
settings
transforms
transforms-base
util}
:model-exports #{:model/PythonLibrary}
:model-imports #{:model/Database
:model/Field
:model/Table
:model/TransformRun}}
enterprise/upload-management
{:team "UX West"
:api #{metabase-enterprise.upload-management.api}
:uses #{api
models
premium-features
upload
util}
:model-imports #{:model/Database :model/Table}}
enterprise/workspaces
{:team "Metabot"
:api #{}
:uses #{premium-features}}
enterprise/writable-connection
{:team "Graphy"
:api #{}
:uses #{premium-features}}}
;; namespaces matching these patterns (with `re-find`) are excluded from the module linter. Since regex literals
;; aren't allowed in EDN just used the `(str <regex>)` version i.e. two slashes instead of one.
;;
;; this is mostly intended for excluding test namespaces or those rare 'glue' namespaces that glue multiple modules
;; together, e.g. `metabase.lib-be.metadata.jvm`.
:linters
{:metabase/modules
{:ignored-namespace-patterns
#{"-test$" ; anything ending in `-test`
"test[-.]util" ; anything that contains `test.util` or `test-util`
"test[-.]dataset" ; anything that contains `test.dataset` or `test-dataset`
"test\\.impl" ; anything that contains `test.impl`
"test-setup" ; anything that contains `test-setup`
"test[-_]helpers" ; anything that contains `test-helpers` or `test_helpers`
"^metabase(?:-enterprise)?\\.test"}}}} ; anything starting with `metabase.test` or `metabase-enterprise.test`
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;; !! !!
;; !! PRO TIP! Run the tests in [[metabase.core.modules-test]] when you change this file! !!
;; !! !!
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!