{"id":43973360,"url":"https://github.com/grafeodb/grafeo-server","last_synced_at":"2026-04-11T12:00:59.080Z","repository":{"id":336991813,"uuid":"1151417451","full_name":"GrafeoDB/grafeo-server","owner":"GrafeoDB","description":"HTTP server for the Grafeo graph database. Turns Grafeo's embeddable engine into a standalone database server accessible via REST API and web UI.","archived":false,"fork":false,"pushed_at":"2026-04-04T09:21:06.000Z","size":1177,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-04T11:40:03.423Z","etag":null,"topics":["database-server","grafeo","grafeodb","knowledge-graph"],"latest_commit_sha":null,"homepage":"http://grafeo.dev/ecosystem/grafeo-server","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GrafeoDB.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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":"2026-02-06T12:48:50.000Z","updated_at":"2026-04-04T09:20:28.000Z","dependencies_parsed_at":"2026-02-14T10:03:45.945Z","dependency_job_id":"02a16fae-2458-412a-8d9e-a44ee42975fe","html_url":"https://github.com/GrafeoDB/grafeo-server","commit_stats":null,"previous_names":["grafeodb/grafeo-server"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/GrafeoDB/grafeo-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrafeoDB%2Fgrafeo-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrafeoDB%2Fgrafeo-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrafeoDB%2Fgrafeo-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrafeoDB%2Fgrafeo-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GrafeoDB","download_url":"https://codeload.github.com/GrafeoDB/grafeo-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrafeoDB%2Fgrafeo-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31679484,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T08:18:19.405Z","status":"ssl_error","status_checked_at":"2026-04-11T08:17:08.892Z","response_time":54,"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":["database-server","grafeo","grafeodb","knowledge-graph"],"created_at":"2026-02-07T08:00:29.702Z","updated_at":"2026-04-11T12:00:59.074Z","avatar_url":"https://github.com/GrafeoDB.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CI](https://github.com/GrafeoDB/grafeo-server/actions/workflows/ci.yml/badge.svg)](https://github.com/GrafeoDB/grafeo-server/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/GrafeoDB/grafeo-server/graph/badge.svg)](https://codecov.io/gh/GrafeoDB/grafeo-server)\n[![Docker standard](https://img.shields.io/docker/v/grafeo/grafeo-server/latest?label=standard\u0026logo=docker)](https://hub.docker.com/r/grafeo/grafeo-server)\n[![Docker gwp](https://img.shields.io/docker/v/grafeo/grafeo-server/gwp?label=gwp\u0026logo=docker)](https://hub.docker.com/r/grafeo/grafeo-server)\n[![Docker bolt](https://img.shields.io/docker/v/grafeo/grafeo-server/bolt?label=bolt\u0026logo=docker)](https://hub.docker.com/r/grafeo/grafeo-server)\n[![Docker full](https://img.shields.io/docker/v/grafeo/grafeo-server/full?label=full\u0026logo=docker)](https://hub.docker.com/r/grafeo/grafeo-server)\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)\n\n# Grafeo Server\n\nGraph database server for the [Grafeo](https://github.com/GrafeoDB/grafeo) engine. Provides REST API, embedded web UI, GQL Wire Protocol (gRPC), and Bolt v5.x wire protocol access to Grafeo's multi-language query engine.\n\nPure Rust, single binary. Available in four tiers to match different deployment needs.\n\n[![Grafeo Studio](assets/studio.png)](http://localhost:7474/studio/)\n\n## Quick Start\n\n### Docker Hub\n\n```bash\n# Standard - HTTP + Studio UI, all query languages\ndocker run -p 7474:7474 grafeo/grafeo-server\n\n# With persistent storage\ndocker run -p 7474:7474 -v grafeo-data:/data grafeo/grafeo-server --data-dir /data\n```\n\nFour image tiers are available:\n\n| Tier         | Tag                    | Transport         | Languages | AI/Search   | Web UI | Binary  |\n| ------------ | ---------------------- | ----------------- | --------- | ----------- | ------ | ------- |\n| **gwp**      | `grafeo-server:gwp`    | GWP (gRPC :7688)  | GQL       | No          | No     | ~7 MB   |\n| **bolt**     | `grafeo-server:bolt`   | Bolt v5 (:7687)   | Cypher    | No          | No     | ~8 MB   |\n| **standard** | `grafeo-server:latest` | HTTP (:7474)      | All 6     | No          | Studio | ~21 MB  |\n| **full**     | `grafeo-server:full`   | HTTP + GWP + Bolt | All 6     | Yes + embed | Studio | ~25 MB  |\n\n```bash\n# GWP - gRPC wire protocol, GQL only\ndocker run -p 7688:7688 grafeo/grafeo-server:gwp --data-dir /data\n\n# Bolt - Neo4j-compatible wire protocol, Cypher\ndocker run -p 7687:7687 grafeo/grafeo-server:bolt --data-dir /data\n\n# Full - everything including AI, auth, TLS, schemas\ndocker run -p 7474:7474 -p 7687:7687 -p 7688:7688 grafeo/grafeo-server:full\n```\n\nVersioned tags: `grafeo-server:0.4.8`, `grafeo-server:0.4.8-gwp`, `grafeo-server:0.4.8-bolt`, `grafeo-server:0.4.8-full`.\n\nSee [grafeo/grafeo-server on Docker Hub](https://hub.docker.com/r/grafeo/grafeo-server) for all available tags.\n\n### Docker Compose\n\n```bash\ndocker compose up -d\n```\n\nThe server is available at `http://localhost:7474`. Web UI at `http://localhost:7474/studio/`.\n\n### From source\n\n```bash\n# Build the web UI (optional, embedded at compile time)\ncd client \u0026\u0026 npm ci \u0026\u0026 npm run build \u0026\u0026 cd ..\n\n# Build and run (default: HTTP + Studio + all languages)\ncargo run -- --data-dir ./data\n\n# Or in-memory mode for quick experimentation\ncargo run\n```\n\n## API\n\n### Query (auto-commit)\n\n```bash\n# GQL (default)\ncurl -X POST http://localhost:7474/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"INSERT (:Person {name: '\\''Alice'\\'', age: 30})\"}'\n\ncurl -X POST http://localhost:7474/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"MATCH (p:Person) RETURN p.name, p.age\"}'\n\n# Cypher\ncurl -X POST http://localhost:7474/cypher \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"MATCH (n) RETURN count(n)\"}'\n\n# GraphQL\ncurl -X POST http://localhost:7474/graphql \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"{ Person { name age } }\"}'\n\n# Gremlin\ncurl -X POST http://localhost:7474/gremlin \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"g.V().hasLabel('\\''Person'\\'').values('\\''name'\\'')\"}'\n\n# SQL/PGQ\ncurl -X POST http://localhost:7474/sql \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"CALL grafeo.procedures() YIELD name, description\"}'\n\n# SPARQL (operates on the RDF triple store, separate from the property graph)\ncurl -X POST http://localhost:7474/sparql \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"PREFIX foaf: \u003chttp://xmlns.com/foaf/0.1/\u003e PREFIX ex: \u003chttp://example.org/\u003e INSERT DATA { ex:alice a foaf:Person . ex:alice foaf:name \\\"Alice\\\" }\"}'\n\ncurl -X POST http://localhost:7474/sparql \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"PREFIX foaf: \u003chttp://xmlns.com/foaf/0.1/\u003e SELECT ?name WHERE { ?p a foaf:Person . ?p foaf:name ?name }\"}'\n```\n\n### Graph Algorithms (CALL Procedures)\n\nAll query endpoints support `CALL` procedures for 22+ built-in graph algorithms:\n\n```bash\n# List all available algorithms\ncurl -X POST http://localhost:7474/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"CALL grafeo.procedures() YIELD name, description\"}'\n\n# PageRank\ncurl -X POST http://localhost:7474/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"CALL grafeo.pagerank({damping: 0.85}) YIELD node_id, score\"}'\n\n# Connected components via Cypher\ncurl -X POST http://localhost:7474/cypher \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"CALL grafeo.connected_components() YIELD node_id, component_id\"}'\n```\n\nAvailable algorithms include: PageRank, BFS, DFS, Dijkstra, Bellman-Ford, Connected Components, Strongly Connected Components, Louvain, Label Propagation, Betweenness/Closeness/Degree Centrality, Clustering Coefficient, Topological Sort, Kruskal, Prim, Max Flow, Min-Cost Flow, Articulation Points, Bridges, K-Core and more.\n\n### Admin\n\nDatabase introspection, maintenance, and index management. Available via both HTTP and GWP (gRPC).\n\n```bash\n# Database statistics (node/edge/label/property counts, memory, disk)\ncurl http://localhost:7474/admin/default/stats\n\n# WAL status\ncurl http://localhost:7474/admin/default/wal\n\n# Force WAL checkpoint\ncurl -X POST http://localhost:7474/admin/default/wal/checkpoint\n\n# Database integrity validation\ncurl http://localhost:7474/admin/default/validate\n\n# Create a property index\ncurl -X POST http://localhost:7474/admin/default/index \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"index_type\": \"property\", \"label\": \"Person\", \"property\": \"name\"}'\n\n# Drop an index\ncurl -X DELETE http://localhost:7474/admin/default/index \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"index_type\": \"property\", \"label\": \"Person\", \"property\": \"name\"}'\n\n# Query plan cache statistics\ncurl http://localhost:7474/admin/default/cache\n\n# Clear the query plan cache\ncurl -X POST http://localhost:7474/admin/default/cache/clear\n```\n\n### Search\n\nVector, text, and hybrid search endpoints. Require the corresponding engine features (`vector-index`, `text-index`, `hybrid-search`), available in the full tier.\n\n```bash\n# Vector similarity search (KNN via HNSW index)\ncurl -X POST http://localhost:7474/search/vector \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"database\": \"default\", \"vector\": [0.1, 0.2, 0.3], \"top_k\": 10}'\n\n# Full-text BM25 search\ncurl -X POST http://localhost:7474/search/text \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"database\": \"default\", \"query\": \"graph database\", \"top_k\": 10}'\n\n# Hybrid search (vector + text with rank fusion)\ncurl -X POST http://localhost:7474/search/hybrid \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"database\": \"default\", \"query\": \"graph database\", \"vector\": [0.1, 0.2, 0.3], \"top_k\": 10}'\n```\n\n### Batch Queries\n\nExecute multiple queries atomically in a single request. All queries run within an implicit transaction - if any query fails, the entire batch is rolled back.\n\n```bash\ncurl -X POST http://localhost:7474/batch \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"queries\": [\n      {\"query\": \"INSERT (:Person {name: '\\''Alice'\\''})\"},\n      {\"query\": \"INSERT (:Person {name: '\\''Bob'\\''})\"},\n      {\"query\": \"MATCH (p:Person) RETURN p.name\"}\n    ]\n  }'\n```\n\n### Transactions\n\n```bash\n# Begin transaction\nSESSION=$(curl -s -X POST http://localhost:7474/tx/begin | jq -r .session_id)\n\n# Execute within transaction\ncurl -X POST http://localhost:7474/tx/query \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-Session-Id: $SESSION\" \\\n  -d '{\"query\": \"INSERT (:Person {name: '\\''Bob'\\''})\"}'\n\n# Commit\ncurl -X POST http://localhost:7474/tx/commit \\\n  -H \"X-Session-Id: $SESSION\"\n\n# Or rollback\ncurl -X POST http://localhost:7474/tx/rollback \\\n  -H \"X-Session-Id: $SESSION\"\n```\n\n### WebSocket\n\nConnect to `ws://localhost:7474/ws` for interactive query execution over a persistent connection. Messages use a JSON-tagged protocol:\n\n```json\n// Client → Server: query\n{\"type\": \"query\", \"id\": \"q1\", \"query\": \"MATCH (n) RETURN n\", \"language\": \"cypher\", \"database\": \"default\"}\n\n// Server → Client: result\n{\"type\": \"result\", \"id\": \"q1\", \"columns\": [...], \"rows\": [...], \"execution_time_ms\": 1.2}\n\n// Client → Server: ping\n{\"type\": \"ping\"}\n\n// Server → Client: pong\n{\"type\": \"pong\"}\n```\n\nThe `id` field is optional and echoed back for request/response correlation.\n\n### GQL Wire Protocol (GWP)\n\nThe gwp and full builds include a gRPC-based binary wire protocol on port 7688, fully aligned with the GQL type system (ISO/IEC 39075). Use the [`gwp`](https://crates.io/crates/gwp) (0.1.6) Rust client or any gRPC client.\n\n```rust\nuse gwp::client::GqlConnection;\nuse std::collections::HashMap;\n\nlet conn = GqlConnection::connect(\"http://localhost:7688\").await?;\nlet mut session = conn.create_session().await?;\n\nlet mut cursor = session.execute(\n    \"MATCH (n:Person) RETURN n.name\",\n    HashMap::new(),\n).await?;\n\nlet rows = cursor.collect_rows().await?;\nsession.close().await?;\n```\n\nConfigure the port with `--gwp-port` or `GRAFEO_GWP_PORT` (default: 7688).\n\n### Bolt v5.x (BoltR)\n\nThe bolt and full builds include a Bolt v5.x wire protocol on port 7687, compatible with Neo4j drivers. Use the [`boltr`](https://crates.io/crates/boltr) (0.1.2) Rust client or any Bolt v5 driver (Python `neo4j`, JavaScript `neo4j-driver`, etc.).\n\nConfigure the port with `--bolt-port` or `GRAFEO_BOLT_PORT` (default: 7687).\n\n### Health Check\n\n```bash\ncurl http://localhost:7474/health\n```\n\n### API Documentation\n\nInteractive Swagger UI is served at `http://localhost:7474/api/docs/` and the OpenAPI JSON spec at `http://localhost:7474/api/openapi.json`.\n\n## Configuration\n\nAll settings are available as CLI flags and environment variables (prefix `GRAFEO_`). CLI flags override environment variables.\n\n| Variable | CLI Flag | Default | Description |\n|----------|----------|---------|-------------|\n| `GRAFEO_HOST` | `--host` | `0.0.0.0` | Bind address |\n| `GRAFEO_PORT` | `--port` | `7474` | HTTP bind port |\n| `GRAFEO_DATA_DIR` | `--data-dir` | _(none)_ | Persistence directory (omit for in-memory) |\n| `GRAFEO_READ_ONLY` | `--read-only` | `false` | Open all databases in read-only mode |\n| `GRAFEO_SESSION_TTL` | `--session-ttl` | `300` | Transaction session timeout (seconds) |\n| `GRAFEO_QUERY_TIMEOUT` | `--query-timeout` | `30` | Query execution timeout in seconds (0 = disabled) |\n| `GRAFEO_GWP_PORT` | `--gwp-port` | `7688` | GQL Wire Protocol (gRPC) port |\n| `GRAFEO_GWP_MAX_SESSIONS` | `--gwp-max-sessions` | `0` | Max concurrent GWP sessions (0 = unlimited) |\n| `GRAFEO_BOLT_PORT` | `--bolt-port` | `7687` | Bolt v5.x wire protocol port |\n| `GRAFEO_BOLT_MAX_SESSIONS` | `--bolt-max-sessions` | `0` | Max concurrent Bolt sessions (0 = unlimited) |\n| `GRAFEO_CORS_ORIGINS` | `--cors-origins` | _(none)_ | Comma-separated allowed origins (`*` for all) |\n| `GRAFEO_LOG_LEVEL` | `--log-level` | `info` | Tracing log level |\n| `GRAFEO_LOG_FORMAT` | `--log-format` | `pretty` | Log format: `pretty` or `json` |\n| `GRAFEO_RATE_LIMIT` | `--rate-limit` | `0` | Max requests per window per IP (0 = disabled) |\n| `GRAFEO_RATE_LIMIT_WINDOW` | `--rate-limit-window` | `60` | Rate limit window in seconds |\n\n### Authentication (feature: `auth`)\n\nRequires building with `--features auth` or `--features full`.\n\n| Variable | CLI Flag | Default | Description |\n|----------|----------|---------|-------------|\n| `GRAFEO_AUTH_TOKEN` | `--auth-token` | _(none)_ | Bearer token / API key |\n| `GRAFEO_AUTH_USER` | `--auth-user` | _(none)_ | HTTP Basic username (requires password) |\n| `GRAFEO_AUTH_PASSWORD` | `--auth-password` | _(none)_ | HTTP Basic password (requires username) |\n\nWhen an auth token is set, all API endpoints require `Authorization: Bearer \u003ctoken\u003e` or `X-API-Key: \u003ctoken\u003e`. `/health`, `/metrics` and `/studio/` are exempt.\n\n```bash\n# Bearer token\ngrafeo-server --auth-token my-secret-token\n\n# Basic auth\ngrafeo-server --auth-user admin --auth-password secret\n\n# Both methods can be configured simultaneously\n```\n\n### TLS (feature: `tls`)\n\nRequires building with `--features tls` or `--features full`.\n\n| Variable | CLI Flag | Default | Description |\n|----------|----------|---------|-------------|\n| `GRAFEO_TLS_CERT` | `--tls-cert` | _(none)_ | Path to TLS certificate (PEM) |\n| `GRAFEO_TLS_KEY` | `--tls-key` | _(none)_ | Path to TLS private key (PEM) |\n\n```bash\ngrafeo-server --tls-cert cert.pem --tls-key key.pem\n```\n\n### Examples\n\n```bash\n# Minimal (in-memory, no auth)\ngrafeo-server\n\n# Persistent with auth and rate limiting\ngrafeo-server --data-dir ./data --auth-token my-token --rate-limit 100\n\n# Production with TLS\ngrafeo-server --data-dir /data --tls-cert /certs/cert.pem --tls-key /certs/key.pem \\\n  --auth-token $API_TOKEN --rate-limit 1000 --cors-origins \"https://app.example.com\" \\\n  --log-format json\n```\n\n## Feature Flags\n\nGrafeo Server uses Cargo feature flags to control which capabilities are compiled in. The architecture separates transport layers (`http`, `gwp`) from the core database functionality, allowing minimal builds for different deployment scenarios.\n\n### Tiers\n\n| Tier | Cargo Command | Transport | Contents |\n|------|--------------|-----------|--------------|\n| **GWP** | `--no-default-features --features gwp` | GWP (gRPC) | GQL + storage, ~7 MB |\n| **Bolt** | `--no-default-features --features bolt` | Bolt v5 | Cypher + storage, ~8 MB |\n| **Standard** | _(default)_ | HTTP | All languages, Studio UI, algos, ~21 MB |\n| **Full** | `--features full` | HTTP + GWP + Bolt | Everything including AI, auth, TLS, ~25 MB |\n\n```bash\n# Standard (default)\ncargo build --release\n\n# GWP - gRPC wire protocol, GQL only\ncargo build --release --no-default-features --features gwp\n\n# Bolt - Neo4j-compatible, Cypher only\ncargo build --release --no-default-features --features bolt\n\n# Full - everything\ncargo build --release --features full\n```\n\n### Build Your Own\n\nStart with `--no-default-features` and pick what you need. The matrix below shows what works with what.\n\n**Transport** (pick one or more):\n\n| Feature | Description | Port |\n|---------|-------------|------|\n| `http` | REST API via axum (Swagger, OpenAPI, WebSocket) | 7474 |\n| `gwp` | GQL Wire Protocol (gRPC) | 7688 |\n| `bolt` | Bolt v5 wire protocol (Neo4j compatible) | 7687 |\n\n**Query languages** (pick individually or use `all-languages`):\n\n| Feature | Description | Notes |\n|---------|-------------|-------|\n| `gql` | GQL (ISO/IEC 39075) | Works with all transports |\n| `cypher` | Cypher (openCypher 9.0) | Works with all transports |\n| `sparql` | SPARQL (W3C 1.1) | Implies `rdf` |\n| `gremlin` | Gremlin (Apache TinkerPop) | Works with all transports |\n| `graphql` | GraphQL | Works with all transports |\n| `sql-pgq` | SQL/PGQ (SQL:2023 GRAPH_TABLE) | Works with all transports |\n\n**Engine capabilities**:\n\n| Feature | Description | Requires |\n|---------|-------------|----------|\n| `storage` | parallel + wal + spill + mmap | Nothing (recommended for all builds) |\n| `algos` | 22+ graph algorithms via CALL procedures | Nothing |\n| `ai` | vector-index + text-index + hybrid-search + cdc | Nothing |\n| `rdf` | RDF triple store | Enabled automatically by `sparql` |\n| `embed` | In-process ONNX embedding generation (~17 MB) | Nothing |\n| `temporal` | Append-only versioned properties | Nothing |\n| `import` | LOAD DATA format support (jsonl-import + parquet-import) | Nothing |\n| `metrics` | Engine-level Prometheus metrics | Nothing |\n\n**Server extras** (require `http`):\n\n| Feature | Description | Requires |\n|---------|-------------|----------|\n| `studio` | Embedded web UI | `http` |\n| `auth` | Bearer token + HTTP Basic auth | Any transport |\n| `tls` | Built-in HTTPS/gRPCS via rustls | Any transport |\n| `owl-schema` | OWL/Turtle schema loading | Nothing |\n| `rdfs-schema` | RDFS schema support | `owl-schema` (implied) |\n| `json-schema` | JSON Schema validation | Nothing |\n\n**Compatibility notes**:\n- `studio` requires `http` (no standalone Studio)\n- `sparql` implies `rdf` (RDF store is always created)\n- `gwp` uses port 7688 and `bolt` uses port 7687 by default, configurable via `--gwp-port` / `--bolt-port`\n- `auth` and `tls` apply to whichever transports are enabled\n- All features compose freely otherwise\n\n**Examples**:\n\n```bash\n# HTTP API without Studio UI\ncargo build --release --no-default-features --features \"http,all-languages,storage\"\n\n# Standard + auth\ncargo build --release --features auth\n\n# GWP + Bolt (both wire protocols, no HTTP)\ncargo build --release --no-default-features --features \"gwp,bolt,gql,cypher,storage\"\n\n# Minimal AI server (HTTP + GQL + vector/text search)\ncargo build --release --no-default-features --features \"http,gql,storage,ai\"\n\n# Edge deployment (GWP + GQL, no algorithms)\ncargo build --release --no-default-features --features \"gwp,gql,storage\"\n```\n\n### Docker Build Targets\n\nThe Dockerfile supports four build targets matching the tiers:\n\n```bash\ndocker build --target gwp      -t grafeo-server:gwp .       # GWP-only, port 7688\ndocker build --target bolt     -t grafeo-server:bolt .       # Bolt-only, port 7687\ndocker build --target standard -t grafeo-server:standard .   # HTTP + UI, port 7474 (default)\ndocker build --target full     -t grafeo-server:full .       # All ports\n```\n\n### Feature Discovery\n\nThe `/health` endpoint reports which features are compiled into the running server:\n\n```json\n{\n  \"status\": \"ok\",\n  \"features\": {\n    \"languages\": [\"gql\", \"cypher\", \"sparql\", \"gremlin\", \"graphql\", \"sql-pgq\"],\n    \"engine\": [\"parallel\", \"wal\", \"spill\", \"mmap\"],\n    \"server\": [\"gwp\"]\n  }\n}\n```\n\n## Development\n\n```bash\ncargo build                  # Debug build\ncargo test                   # Run tests (default features)\ncargo test --features auth   # Run tests including auth tests\ncargo fmt --all -- --check   # Check formatting\ncargo clippy --all-targets -- -D warnings  # Lint\ncargo deny check             # License/advisory audit\n```\n\n### Web UI development\n\n```bash\n# Terminal 1: Server\ncargo run\n\n# Terminal 2: UI dev server with HMR (proxies API to :7474)\ncd client \u0026\u0026 npm run dev\n# Open http://localhost:5173\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, code style and pull request guidelines.\n\n## Related\n\n- [Grafeo](https://github.com/GrafeoDB/grafeo), the embeddable graph database engine\n- [grafeo-web](https://github.com/GrafeoDB/grafeo-web), Grafeo in the browser via WebAssembly\n- [anywidget-graph](https://github.com/GrafeoDB/anywidget-graph), interactive graph visualization for notebooks\n\n## License\n\nApache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrafeodb%2Fgrafeo-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrafeodb%2Fgrafeo-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrafeodb%2Fgrafeo-server/lists"}