{"id":32165872,"url":"https://github.com/sagastume/boltx","last_synced_at":"2026-02-18T22:02:00.806Z","repository":{"id":206986684,"uuid":"718177587","full_name":"sagastume/boltx","owner":"sagastume","description":"Neo4j driver for Elixir","archived":false,"fork":false,"pushed_at":"2025-09-15T15:01:03.000Z","size":1548,"stargazers_count":35,"open_issues_count":13,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-14T11:19:14.150Z","etag":null,"topics":["bolt","bolt-protocol","database-driver","driver","elixir","graphdb","neo4j","neo4j-driver"],"latest_commit_sha":null,"homepage":"","language":"Elixir","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/sagastume.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["sagastume"]}},"created_at":"2023-11-13T14:44:25.000Z","updated_at":"2025-09-05T19:08:42.000Z","dependencies_parsed_at":"2024-01-06T19:26:38.087Z","dependency_job_id":"e665a822-1834-4e1e-ae54-3e04d11b6c21","html_url":"https://github.com/sagastume/boltx","commit_stats":null,"previous_names":["sagastume/boltx"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/sagastume/boltx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sagastume%2Fboltx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sagastume%2Fboltx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sagastume%2Fboltx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sagastume%2Fboltx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sagastume","download_url":"https://codeload.github.com/sagastume/boltx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sagastume%2Fboltx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29596329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T20:59:56.587Z","status":"ssl_error","status_checked_at":"2026-02-18T20:58:41.434Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["bolt","bolt-protocol","database-driver","driver","elixir","graphdb","neo4j","neo4j-driver"],"created_at":"2025-10-21T15:01:29.043Z","updated_at":"2026-02-18T22:02:00.800Z","avatar_url":"https://github.com/sagastume.png","language":"Elixir","funding_links":["https://github.com/sponsors/sagastume"],"categories":[],"sub_categories":[],"readme":"# Boltx\n\n`Boltx` is an Elixir driver for [Neo4j](https://neo4j.com/developer/graph-database/)/Bolt Protocol.\n\n- Supports Neo4j versions: 3.0.x/3.1.x/3.2.x/3.4.x/3.5.x/4.x/5.9 -5.13.0\n- Supports Bolt version: 1.0/2.0/3.0/4.x/5.0/5.1/5.2/5.3/5.4\n- Supports transactions, prepared queries, streaming, pooling and more via DBConnection\n- Automatic decoding and encoding of Elixir values\n\nDocumentation: [https://hexdocs.pm/boltx](https://hexdocs.pm/boltx)\n\n## Features\n\n| Feature               | Implemented |\n| --------------------- | ------------ |\n| Querys                | YES          |\n| Transactions          | YES          |\n| Stream capabilities   | NO           |\n| Routing               | NO           |\n\n## Usage\n\nAdd :boltx to your dependencies:\n\n```elixir\ndef deps() do\n  [\n    {:boltx, \"~\u003e 0.0.6\"}\n  ]\nend\n```\n\nUsing the latest version.\n\n```elixir\n\nopts = [\n    hostname: \"127.0.0.1\",\n    auth: [username: \"neo4j\", password: \"\"],\n    user_agent: \"boltxTest/1\",\n    pool_size: 15,\n    max_overflow: 3,\n    prefix: :default\n]\n\niex\u003e {:ok, conn} = Boltx.start_link(opts)\n{:ok, #PID\u003c0.237.0\u003e}\n\niex\u003e Boltx.query!(conn, \"return 1 as n\") |\u003e Boltx.Response.first()\n%{\"n\" =\u003e 1}\n\n# Commit is performed automatically if everythings went fine\nBoltx.transaction(conn, fn conn -\u003e\n  result = Boltx.query!(conn, \"CREATE (m:Movie {title: \"Matrix\"}) RETURN m\")\nend)\n\n```\n\n### Set it up in an app\n\nAdd the configuration to the corresponding files for each environment or to your config/config.ex.\n\u003e #### Name of process\n\u003e\n\u003e The process name must be defined in your configuration\n\n\n```elixir\nimport Config\n\nconfig :boltx, Bolt,\n  uri: \"bolt://localhost:7687\",\n  auth: [username: \"neo4j\", password: \"password\"],\n  user_agent: \"boltxTest/1\",\n  pool_size: 15,\n  max_overflow: 3,\n  prefix: :default,\n  name: Bolt\n```\n\nAdd Boltx to the application's main monitoring tree and let OTP manage it.\n\n```elixir\n# lib/n4_d/application.ex\n\ndefmodule N4D.Application do\n  @moduledoc false\n\n  use Application\n\n  def start(_type, _args) do\n    children = [\n      %{\n        id: Boltx,\n        start: {Boltx, :start_link, [Application.get_env(:boltx, Bolt)] },\n      }\n    ]\n\n    opts = [strategy: :one_for_one, name: N4D.Supervisor]\n    Supervisor.start_link(children, opts)\n  end\nend\n```\nOr\n\n```elixir\nchildren = [\n  {Boltx, Application.get_env(:boltx, Bolt)}\n]\n```\nNow you can run query with the name you set\n\n```elixir\niex\u003e Boltx.query!(Bolt, \"return 1 as n\") |\u003e Boltx.Response.first()\n%{\"n\" =\u003e 1}\n```\n\n\n### URI schemes\n\nBy default the scheme is `bolt+s`\n\n| URI        | Description                                | TLSOptions              |\n|------------|--------------------------------------------|-------------------------|\n| neo4j      | Unsecured                                  | []                      |\n| neo4j+s    | Secured with full certificate              | [verify: :verify_none]  |\n| neo4j+ssc  | Secured with self-signed certificate       | [verify: :verify_peer]  |\n| bolt       | Unsecured                                  | []                      |\n| bolt+s     | Secured with full certificate              | [verify: :verify_none]  |\n| bolt+ssc   | Secured with self-signed certificate       | [verify: :verify_peer]  |\n\n## Contributing\n\n### Getting Started\n\nNeo4j uses the Bolt protocol for communication and query execution. You can find the official documentation for Bolt here: [Bolt Documentation](https://neo4j.com/docs/bolt/current).\n\nIt is crucial to grasp various concepts before getting started, with the most important ones being:\n\n- [PackStream](https://neo4j.com/docs/bolt/current/packstream/): The syntax layer for the Bolt messaging protocol.\n- [Bolt Protocol](https://neo4j.com/docs/bolt/current/bolt/): The application protocol for database queries via a database query language.\n  - Bolt Protocol handshake specification\n  - Bolt Protocol message specification\n  - Structure Semantics\n\nIt is advisable to use the specific terminology from the official documentation and official drivers to ensure consistency with this implementation.\n\n### Test\n\nAs certain versions of Bolt may be compatible with specific functionalities while others can undergo significant changes, tags are employed to facilitate version-specific testing. Some of these tags include:\n\n- `:core` (Included in all executions).\n- `:bolt_version_{{specific version}}` (Tag to run the test on a specific version, for example, for 5.2: `:bolt_version_5_2`, for version 1: `:bolt_version_1_0)`.\n- `bolt_{major version}_x`  (Tag to run on all minor versions of a major version, for example, for 5: `:bolt_5_x`, for all minor versions of 4:: `:bolt_4_x`).\n- `:last_version` (Tag to run the test only on the latest version).\n\nBy default, all tags are disabled except the `:core` tag. To enable the tags, it is necessary to configure the following environment variables:\n\n- `BOLT_VERSIONS`: This variable is used for Bolt version configuration but is also useful for testing. You can specify a version, for example, BOLT_VERSIONS=\"1.0\".\n- `BOLT_TCP_PORT`:  You can configure the port with the environment variable (BOLT_TCP_PORT=7688).\n\n#### Help script\nTo simplify test execution, the test-runner.sh script is available. You can find the corresponding documentation here: [Help script](scripts/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsagastume%2Fboltx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsagastume%2Fboltx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsagastume%2Fboltx/lists"}