# How to List Files in the GeoLibre Repository: A Complete Guide

> Learn how to list files in the GeoLibre repository using git ls-files, git ls-tree, or the GitHub web interface. Our guide shows you the fastest methods.

- Repository: [Open Geospatial Solutions/GeoLibre](https://github.com/opengeos/GeoLibre)
- Tags: how-to-guide
- Published: 2026-08-18

---

**To list files in the GeoLibre repository, use `git ls-files` for tracked files, `git ls-tree -r HEAD --name-only` for the current commit, or browse the GitHub web interface without cloning.**

GeoLibre is an open-source geospatial platform organized as a single **npm workspaces monorepo**. The repository contains multiple JavaScript/TypeScript workspaces, a Python FastAPI sidecar, and a standalone Python package. Understanding how to navigate its file structure is essential for contributors and developers exploring the codebase hosted at `opengeos/GeoLibre`.

## Using Git to List Files Locally

The most reliable way to list files in GeoLibre is to clone the repository and use standard Git commands. These commands work across all branches and reflect the actual state of the working tree.

### List All Tracked Files

The `git ls-files` command outputs every file currently tracked by Git in a flat list:

```bash
git clone https://github.com/opengeos/GeoLibre.git
cd GeoLibre
git ls-files

```

This reveals paths like [`apps/geolibre-desktop/src-tauri/src/lib.rs`](https://github.com/opengeos/GeoLibre/blob/main/apps/geolibre-desktop/src-tauri/src/lib.rs) and [`packages/map/src/cesium-camera.ts`](https://github.com/opengeos/GeoLibre/blob/main/packages/map/src/cesium-camera.ts), showing how the modular workspace structure maps to the filesystem.

### List Files at a Specific Commit

To see files as they exist at the current HEAD commit without working tree modifications:

```bash
git ls-tree -r HEAD --name-only

```

This is useful when comparing repository states or auditing what was included in a specific release.

### Check Modified and Untracked Files

During development, `git status` shows which files have changed, been staged, or are untracked:

```bash
git status

```

This helps identify new files in `backend/geolibre_server/` or `python/` that may need to be added to version control.

## Browsing Files Without Cloning

If you prefer not to clone the repository, several options exist for exploring the file structure remotely.

### GitHub Web Interface

Navigate directly to the repository root:

```

https://github.com/opengeos/GeoLibre

```

The web interface displays the full directory tree and allows drilling into nested workspaces like `apps/`, `packages/`, and `workers/`.

### GitHub API (Programmatic Access)

For automation or tooling, query the GitHub API:

```bash
curl -s https://api.github.com/repos/opengeos/GeoLibre/contents/ | jq '.[].name'

```

This returns top-level directory names without downloading the entire repository.

## Understanding the GeoLibre File Structure

The repository layout follows a strict organization pattern documented in [`docs/architecture.md`](https://github.com/opengeos/GeoLibre/blob/main/docs/architecture.md). Here are the key directories you'll encounter when listing files:

### Applications (`apps/`)

- **`apps/geolibre-desktop/`** — Desktop application source with Tauri integration and Vite build configuration

### Core Libraries (`packages/`)

- **`packages/core/`** — Foundational utilities including `@geolibre/core`
- **`packages/map/`** — Map rendering components (examine [`packages/map/src/cesium-camera.ts`](https://github.com/opengeos/GeoLibre/blob/main/packages/map/src/cesium-camera.ts))
- **`packages/ui/`** — Shared UI component library

### Python Components

- **`backend/geolibre_server/`** — FastAPI sidecar with entry point at [`backend/geolibre_server/app/main.py`](https://github.com/opengeos/GeoLibre/blob/main/backend/geolibre_server/app/main.py)
- **`python/`** — Standalone `geolibre` Jupyter anywidget package

### Testing and Documentation

- **`e2e/`** — Playwright end-to-end test suite with specs like [`e2e/smoke.spec.ts`](https://github.com/opengeos/GeoLibre/blob/main/e2e/smoke.spec.ts)
- **`docs/`** — Architecture documentation and guides

## Key Files to Examine First

When you list files in GeoLibre, prioritize these paths for understanding the codebase:

- **[`package.json`](https://github.com/opengeos/GeoLibre/blob/main/package.json)** — Defines workspace boundaries and root dependencies
- **[`apps/geolibre-desktop/vite.config.ts`](https://github.com/opengeos/GeoLibre/blob/main/apps/geolibre-desktop/vite.config.ts)** — Central build configuration
- **[`packages/core/src/expressions.ts`](https://github.com/opengeos/GeoLibre/blob/main/packages/core/src/expressions.ts)** — Core style expression utilities
- **[`backend/geolibre_server/app/main.py`](https://github.com/opengeos/GeoLibre/blob/main/backend/geolibre_server/app/main.py)** — Python API entry point
- **[`README.md`](https://github.com/opengeos/GeoLibre/blob/main/README.md)** — Project overview and contribution guidelines

## Summary

- **Clone and use `git ls-files`** for complete, filterable file listings of the GeoLibre repository
- **Use `git ls-tree -r HEAD --name-only`** when you need commit-specific file states
- **Browse `https://github.com/opengeos/GeoLibre`** to explore without downloading
- **Remember the monorepo structure**: files are organized under `apps/`, `packages/`, `workers/`, `backend/`, and `python/` directories
- **Reference [`docs/architecture.md`](https://github.com/opengeos/GeoLibre/blob/main/docs/architecture.md)** for authoritative documentation on module responsibilities

## Frequently Asked Questions

### How do I list only files in a specific GeoLibre workspace?

Run `git ls-files` with a path prefix matching the workspace directory. For example, `git ls-files packages/core/` returns only files within the `@geolibre/core` package. This filters the output to relevant source code without manual searching.

### Can I search for specific file types in the GeoLibre repository?

Yes. Pipe `git ls-files` to `grep` or use pattern matching: `git ls-files "*.ts"` finds all TypeScript files, while `git ls-files "**/*.py"` locates Python files across the backend and python directories. This works because Git stores pathnames with forward slashes regardless of platform.

### What's the difference between `git ls-files` and `git ls-tree`?

`git ls-files` shows the working tree state including staged changes, while `git ls-tree` examines a specific Git object (typically a commit) and returns exactly what was stored at that point. Use `ls-tree` when you need historical accuracy; use `ls-files` during active development.

### Does GeoLibre have files that aren't tracked by Git?

Yes. Generated artifacts like `node_modules/`, build outputs in `dist/`, and Python `__pycache__/` directories are excluded via `.gitignore`. These won't appear in `git ls-files` but will show as untracked with `git status` if present locally.