{"id":30840734,"url":"https://github.com/linkml/linkml-browser","last_synced_at":"2026-01-31T05:07:02.490Z","repository":{"id":310900741,"uuid":"1041485042","full_name":"linkml/linkml-browser","owner":"linkml","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-28T21:39:02.000Z","size":5765,"stargazers_count":5,"open_issues_count":7,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-29T08:57:54.455Z","etag":null,"topics":["javascript","linkml","python","static-site-generator","user-interface"],"latest_commit_sha":null,"homepage":"https://linkml.github.io/linkml-browser/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/linkml.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-20T14:55:36.000Z","updated_at":"2026-01-28T18:15:47.000Z","dependencies_parsed_at":"2025-08-20T23:34:58.732Z","dependency_job_id":"13e457b4-8332-43b9-a3fd-85a0b4d70827","html_url":"https://github.com/linkml/linkml-browser","commit_stats":null,"previous_names":["linkml/linkml-browser"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/linkml/linkml-browser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linkml%2Flinkml-browser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linkml%2Flinkml-browser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linkml%2Flinkml-browser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linkml%2Flinkml-browser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/linkml","download_url":"https://codeload.github.com/linkml/linkml-browser/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linkml%2Flinkml-browser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28929865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T04:05:25.756Z","status":"ssl_error","status_checked_at":"2026-01-31T04:02:35.005Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","linkml","python","static-site-generator","user-interface"],"created_at":"2025-09-06T19:10:31.220Z","updated_at":"2026-01-31T05:07:02.467Z","avatar_url":"https://github.com/linkml.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LinkML Browser\n\nGenerate standalone, schema-driven faceted browsers for any tabular JSON dataset.\n\n\u003e ⚠️ **LinkML Schema Support**: Currently uses custom JSON schemas. Native LinkML schema support is planned - see our [LinkML Integration Roadmap](docs/linkml_integration.md) for details and timeline.\n\n## Overview\n\nLinkML Browser allows you to quickly create interactive, searchable web interfaces for browsing JSON data. It generates a standalone HTML/JavaScript application that provides:\n\n- **Faceted search and filtering** - Filter data by multiple criteria simultaneously\n- **Full-text search** - Search across specified fields with real-time results\n- **High performance** - Client-side indexing for instant search results\n- **Schema-driven** - Define facets, search fields, and display options via JSON schema\n- **Standalone** - No server required, works entirely in the browser\n- **Customizable** - Control which fields are searchable, filterable, and how they're displayed\n\n## Installation\n\n```bash\n# Using uv (recommended)\nuv add linkml-browser\n\n# Or using pip\npip install linkml-browser\n```\n\n### Development Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/linkml/linkml-browser.git\ncd linkml-browser\n\n# Install with uv\nuv sync\n\n# Run commands with uv\nuv run linkml-browser --help\n```\n\n## Quick Start\n\n1. **Deploy a browser from your JSON data:**\n\n```bash\nlinkml-browser deploy data.json output-directory/\n```\n\nThis will:\n- Analyze your data structure\n- Generate an appropriate schema\n- Create a standalone browser in `output-directory/`\n- Open `output-directory/index.html` in your browser to view\n\n2. **Customize with a schema:**\n\nFirst, generate a schema template:\n```bash\nlinkml-browser init-schema data.json --output schema.json\n```\n\nEdit `schema.json` to customize facets, search fields, and display options, then deploy:\n```bash\nlinkml-browser deploy data.json output/ --schema schema.json\n```\n\n## Schema Format\n\nThe schema controls how your data is displayed and filtered:\n\n```json\n{\n  \"title\": \"My Data Browser\",\n  \"description\": \"Browse and filter my data\",\n  \"searchPlaceholder\": \"Search...\",\n  \"searchableFields\": [\"title\", \"description\", \"tags\"],\n  \"facets\": [\n    {\n      \"field\": \"category\",\n      \"label\": \"Category\",\n      \"type\": \"string\",\n      \"sortBy\": \"count\"\n    },\n    {\n      \"field\": \"tags\",\n      \"label\": \"Tags\",\n      \"type\": \"array\",\n      \"sortBy\": \"alphabetical\"\n    },\n    {\n      \"field\": \"year\",\n      \"label\": \"Year\",\n      \"type\": \"integer\",\n      \"sortBy\": \"alphabetical\"\n    }\n  ],\n  \"displayFields\": [\n    {\"field\": \"title\", \"label\": \"Title\", \"type\": \"string\"},\n    {\"field\": \"description\", \"label\": \"Description\", \"type\": \"string\"},\n    {\"field\": \"category\", \"label\": \"Category\", \"type\": \"string\"},\n    {\"field\": \"tags\", \"label\": \"Tags\", \"type\": \"array\"}\n  ]\n}\n```\n\n### Schema Properties\n\n- **title**: Browser title displayed at the top\n- **description**: Subtitle text\n- **searchPlaceholder**: Placeholder text for the search box\n- **searchableFields**: Array of field names to include in full-text search\n- **facets**: Array of facet configurations for filtering\n- **displayFields**: Array of fields to show in search results\n\n### Facet Types\n\n- **string**: Single-value text fields (uses OR logic when multiple values selected)\n- **array**: Multi-value fields (uses AND logic - items must have ALL selected values)\n- **integer**: Numeric fields (displays as range filter with min/max inputs)\n\n## Command Reference\n\n### Show Help\n\n```bash\n# Show all available commands\nlinkml-browser --help\n\n# Show help for a specific command\nlinkml-browser deploy --help\nlinkml-browser init-schema --help\n```\n\n### `deploy` - Generate a browser\n\n```bash\nlinkml-browser deploy DATA_FILE OUTPUT_DIR [OPTIONS]\n```\n\n**Arguments:**\n- `DATA_FILE`: Path to your JSON data file (required)\n- `OUTPUT_DIR`: Directory where the browser will be created (required)\n\n**Options:**\n- `--schema, -s`: Path to custom schema file\n- `--title, -t`: Browser title (default: \"Data Browser\")\n- `--description, -d`: Browser description\n- `--force, -f`: Overwrite existing output directory\n\n**Examples:**\n```bash\n# Basic usage - will infer schema automatically\nlinkml-browser deploy mydata.json browser/\n\n# With custom title and description\nlinkml-browser deploy mydata.json browser/ \\\n  --title \"My Dataset\" \\\n  --description \"Explore my research data\"\n\n# Using a custom schema file\nlinkml-browser deploy mydata.json browser/ \\\n  --schema my-schema.json\n\n# Force overwrite existing directory\nlinkml-browser deploy mydata.json browser/ --force\n```\n\n### `init-schema` - Generate a schema template\n\n```bash\nlinkml-browser init-schema DATA_FILE [OPTIONS]\n```\n\n**Arguments:**\n- `DATA_FILE`: Path to your JSON data file (required)\n\n**Options:**\n- `--output, -o`: Output schema file path (default: \"schema.json\")\n- `--title, -t`: Browser title\n- `--description, -d`: Browser description\n\n**Examples:**\n```bash\n# Generate schema.json in current directory\nlinkml-browser init-schema mydata.json\n\n# Specify output file and title\nlinkml-browser init-schema mydata.json \\\n  --output custom-schema.json \\\n  --title \"Research Data Browser\"\n```\n\n## Examples\n\n### Example 1: Product Catalog\n\n```bash\n# Simple deployment\nlinkml-browser deploy products.json product-browser/\n\n# With custom schema\nlinkml-browser init-schema products.json -o product-schema.json\n# Edit product-schema.json to customize...\nlinkml-browser deploy products.json product-browser/ -s product-schema.json\n```\n\n### Example 2: Scientific Data\n\n```bash\nlinkml-browser deploy experiments.json \\\n  experiment-browser/ \\\n  --title \"Experiment Database\" \\\n  --description \"Browse and filter experimental results\"\n```\n\n## Data Format\n\nYour JSON data should be an array of objects:\n\n```json\n[\n  {\n    \"id\": \"item-1\",\n    \"title\": \"First Item\",\n    \"category\": \"TypeA\",\n    \"tags\": [\"tag1\", \"tag2\"],\n    \"year\": 2024\n  },\n  {\n    \"id\": \"item-2\",\n    \"title\": \"Second Item\",\n    \"category\": \"TypeB\",\n    \"tags\": [\"tag2\", \"tag3\"],\n    \"year\": 2023\n  }\n]\n```\n\n## Features\n\n### Faceted Filtering\n- Click facet values to filter results\n- Multiple selections within a facet use OR logic (for scalar fields)\n- Array fields use AND logic (items must have ALL selected values)\n- Numeric fields provide min/max range filtering\n\n### Search\n- Real-time search across configured fields\n- Partial word matching\n- Case-insensitive\n- Combines with facet filters\n\n### Performance\n- Client-side indexing for instant results\n- Handles thousands of items smoothly\n- Shows search performance metrics\n\n## Deployment\n\nThe generated browser is completely standalone:\n\n1. **Local files**: Open `index.html` directly in a browser\n2. **Web server**: Upload the entire output directory to any web server\n3. **GitHub Pages**: Commit to a repository and enable GitHub Pages\n\nNo backend or database required!\n\n## Future Plans\n\n- Support for LinkML schemas (currently uses custom JSON schema format)\n- Additional field types (dates, URLs, etc.)\n- Export functionality\n- Custom styling options\n- Data validation\n\n## Programmatic Usage\n\nLinkML Browser can also be used as a Python library:\n\n```python\nfrom linkml_browser import BrowserGenerator, load_json_data\n\n# Load your data\ndata = load_json_data(\"mydata.json\")\n\n# Create a browser generator\ngenerator = BrowserGenerator(data)\n\n# Generate browser files\ngenerator.generate(output_dir=\"browser/\", force=True)\n\n# Or with a custom schema\nfrom linkml_browser import load_schema\n\nschema = load_schema(\"my-schema.json\")\ngenerator = BrowserGenerator(data, schema)\ngenerator.generate(output_dir=\"browser/\")\n```\n\n## Development\n\n```bash\n# Clone the repository\ngit clone https://github.com/linkml/linkml-browser.git\ncd linkml-browser\n\n# Install with uv\nuv sync\n\n# Run the CLI\nuv run linkml-browser --help\n\n# Run tests (when available)\nuv run pytest\n```\n\n### Project Structure\n\n```\nlinkml-browser/\n├── src/linkml_browser/\n│   ├── __init__.py      # Package exports\n│   ├── core.py          # Core logic (BrowserGenerator)\n│   ├── main.py          # CLI interface\n│   └── index.html       # Browser template\n├── pyproject.toml       # Project configuration\n├── README.md            # This file\n└── CLAUDE.md           # Development context\n```\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinkml%2Flinkml-browser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flinkml%2Flinkml-browser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinkml%2Flinkml-browser/lists"}