---
layout: community_extension_doc
title: Frequently Asked Questions
description: Frequently asked questions about DuckDB Community Extensions.
---
### Are community extensions safe to install?
Similarly to other package management systems, DuckDB's Community Extensions repository contains community-contributed code,
therefore, there are no guarantees regarding the content of extensions.
The DuckDB Foundation and DuckLabs do not vet the code within community extensions and, therefore, cannot guarantee that DuckDB community extensions are safe to use.
For details on securing your DuckDB setup, please refer to the [Securing Extensions page]({% link docs/2.0/operations_manual/securing_duckdb/securing_extensions.md %}).
### How can I secure my DuckDB setup when installing extensions?
The loading of community extensions can be explicitly disabled with the following one-way configuration option:
```sql
SET allow_community_extensions = false;
```
For details on securing your DuckDB setup, please refer to the [Securing Extensions page]({% link docs/2.0/operations_manual/securing_duckdb/securing_extensions.md %}).
### Can I expose SQL macros as an extension?
Writing a DuckDB extension as a collection of SQL macros is already done by a few extensions. The [`pivot_table`]({% link community_extensions/extensions/pivot_table.md %}) and [`chsql`]({% link community_extensions/extensions/chsql.md %}) extensions for example follow this pattern.
Currently some C++ wrapper code is required, but this is possibly the simplest way to build a community extension *and* the best way to package a set of utility macros to be safely distributed.
### Can I write extensions in Rust?
Writing a DuckDB extension in Rust is possible and [several](https://github.com/duckdb/community-extensions/blob/main/extensions/crypto/description.yml) [extensions](https://github.com/duckdb/community-extensions/blob/main/extensions/evalexpr_rhai/description.yml) [exist](https://github.com/duckdb/community-extensions/blob/main/extensions/prql/description.yml) [already](https://github.com/duckdb/duckdb-delta),
providing various examples to draw inspiration from.
Currently, writing a Rust-based DuckDB extension requires writing glue code in C++ and will force you to build through DuckDB's CMake & C++ based extension template.
We understand that this is not ideal and acknowledge the fact that Rust developers prefer to work on pure Rust codebases. For this (and many other) reason(s), a [C Extension API](https://github.com/duckdb/duckdb/pull/12682) is
in development that will allow DuckDB extensions written in pure Rust. As the C Extension API matures, a pure-Rust extension template will be made available.
### Can I write extensions in Go?
We are working on adding Go support for extensions.
### How to write my extension in language X?
DuckDB's [Extension Template](https://github.com/duckdb/extension-template) is based on the DuckDB C++ API and uses DuckDB's CMake-based build system. The DuckDB team will currently only provide support for extensions written using this framework. However, note that CMake is pretty flexible: for example, several [Rust-based](#can-i-write-extensions-in-rust) examples already exist.
The old [C Extension API](https://github.com/duckdb/duckdb/pull/12682) was available in DuckDB 1.1 to 1.5.
DuckDB 2.0 ships a new C Extension API.
### How are naming collisions between extensions handled?
Currently, DuckDB extensions must have a unique name. For this reason, PRs that introduce naming collisions will not be accepted and will require
a rename. To resolve this, manual namespacing would be the solution, for example by prefixing your vendor name to the extension name: `⟨vendor_name⟩_⟨extension_name⟩`{:.language-sql .highlight}.
Note that in general the DuckDB Foundation may refuse certain extension names or force an existing community extension to be renamed.
For example, if a core DuckDB extension of the same name exists or is created, the community extension of the same name has to be renamed to avoid confusion (“am I loading the community extension or the core extension?”).
The multi-faceted nature of extension names requires us to also consider historical extension names, trademarks, etc.
Hence, the DuckDB Foundation reserves the right to make the decision on extension names on a case-by-case basis.
### The CI toolchain is missing dependency X, now what?
The [toolchain](https://github.com/duckdb/extension-ci-tools) used to compile DuckDB extensions may not contain all build-time
dependencies required to build your extension. If this is the case, please just open a PR adding toolchain components as [optional extras](https://github.com/duckdb/extension-ci-tools/pull/53).
Alternatively, you can try adding the installation of the required dependencies through the [Makefile](https://github.com/duckdb/extension-template/blob/main/Makefile) in your extension repository.
However, you should be warned that this could potentially lead to a more fragile build system with a corresponding increased maintenance load as DuckDB and its toolchain are updated.