# Sigh error while File system usage in the application plugin

**URL:** <https://community.grafana.com/t/sigh-error-while-file-system-usage-in-the-application-plugin/155994>\
**Category:** Signing & publishing\
**Tags:** plugins\
**Created:** [August 10, 2025, 3:40pm UTC](https://community.grafana.com/t/sigh-error-while-file-system-usage-in-the-application-plugin/155994 "2025-08-10T15:40:44Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![vakhtang1](https://avatars.discourse-cdn.com/v4/letter/v/e19b73/32.png) [@vakhtang1](https://community.grafana.com/u/vakhtang1)\
**Post date:** [August 10, 2025, 3:40pm UTC](https://community.grafana.com/t/sigh-error-while-file-system-usage-in-the-application-plugin/155994/1 "2025-08-10T15:40:44Z")

</div>

Hello,

I’m developing an application plugin for Grafana, and as part of its functionality, I need to read files from disk.

When I submitted the plugin for community signing, the validation process returned this error:

`error: It is not permitted to access the file system. Using fs.WalkDir is not permitted. `

I understand that Grafana’s validator does not allow direct file system access, so I refactored my code to use Go’s `embed.FS` (embedding the files into the binary at compile time, meaning they don’t exist as separate files on disk at runtime). However, I received the same error.

My questions are:

1. Does the use of `embed.FS` also trigger a rejection during the signing process?

2. If so, what are the recommended approaches to include and access static data from within a plugin?

I’m aware that I could implement an external microservice with an HTTP API to provide the data, but that seems like an unnecessarily complex architecture for this use case.

I also looked for a Grafana API that plugins could use to retrieve such data, but as far as I understand, there is no such API in the latest version.

Thanks in advance for any advice!

---

<div class="post-metadata">

**Author:** ![academo](https://avatars.discourse-cdn.com/v4/letter/a/e9a140/32.png) [@academo](https://community.grafana.com/u/academo)\
**Post date:** [August 19, 2025, 3:51pm UTC](https://community.grafana.com/t/sigh-error-while-file-system-usage-in-the-application-plugin/155994/2 "2025-08-19T15:51:35Z")

</div>

Hi @vakhtang1 this case where only compile time files are used sounds reasonable.

Can you please open an issue in [GitHub - grafana/plugin-validator: Tool for validating Grafana community plugins](https://github.com/grafana/plugin-validator/) with a minimal example of the failing code so we can make sure to evaluate the case correctly?

---

<div class="post-metadata">

**Author:** ![vakhtang1](https://avatars.discourse-cdn.com/v4/letter/v/e19b73/32.png) [@vakhtang1](https://community.grafana.com/u/vakhtang1)\
**Post date:** [August 24, 2025, 7:47am UTC](https://community.grafana.com/t/sigh-error-while-file-system-usage-in-the-application-plugin/155994/3 "2025-08-24T07:47:54Z")

</div>

Hello @academo

Thank you for your response. I’ve opened an issue here:

> <https://github.com/grafana/plugin-validator/issues/356>
>
> Hello,
> 
> Following the \[\[current discussion\](https://community.grafana.com/t/sigh…-error-while-file-system-usage-in-the-application-plugin/155994),\](https://community.grafana.com/t/sigh-error-while-file-system-usage-in-the-application-plugin/155994), I’m developing an application plugin for Grafana, and as part of its functionality, I need to read files from the disk.
> 
> When I submitted the plugin for community signing, the validation process returned this error:
> 
> Error: It is not permitted to access the file system. Using fs.WalkDir is not permitted. 
> 
> The code already migrated to using embedded FS, so it actually embeds the files into the binary at compile time, meaning they don’t exist as separate files on disk at runtime.
> This is the code sample:
> \`\`\`
> //go:embed data/\*
> var dataFiles embed.FS
> 
> func LoadInitData() error {
> // This will hold: folderName → (fileName → content)
> folderMaps := make(map\[string\]map\[string\]\[\]byte)
> 
> err := fs.WalkDir(dataFiles, DataFolder, func(path string, d fs.DirEntry, err error) error {
> if err != nil {
> return err
> }
> 
> if !d.IsDir() {
> dir := filepath.Base(filepath.Dir(path))
> name := strings.TrimSuffix(filepath.Base(path), ".json")
> 
> if \_, exists := folderMaps\[dir\]; !exists {
> folderMaps\[dir\] = make(map\[string\]\[\]byte)
> }
> 
> content, err := dataFiles.ReadFile(path)
> if err != nil {
> return err
> }
> folderMaps\[dir\]\[name\] = content
> }
> return nil
> })
> 
> if err != nil {
> return err
> }
> 
> return parseData(folderMaps)
> }
> \`\`\`
> Since the plugin no longer accesses the file system directly, I hope this approach is compatible with the signing requirements.
> 
> Best regards,
> Vakhtang
