Choosing a Language and Client

I’m considering using EventStoreDB for a new web app project. I’m looking into the many other tools that I’ll need to make the whole project work. Picking a language for server-side code is a big choice. With all the tools I choose, I want to be sure the combination offers a first class development experience. No one wants to suffer.

I see the officially supported EventStoreDB clients are .NET, Java, Node.js, Go, and Rust.

The Connecting to EventStoreDB documentation implies that the .NET client is the only client ready for production. I’ve learned many languages over the years but the .NET world is somewhere I’ve never explored at all. I’m so unfamiliar with .NET that it even came as a surprise to see it mentioned. While I have no reason to believe it is anything other than excellent, it has always seemed distinct from the open source software world that has produced most of the tools I use.

The Java, Node.js, Go, and Rust clients “are currently in preview and can get API changes”. That doesn’t feel like firm footing for starting a new project. It makes me nervous. How ready are these for production? I don’t see much activity on Github. Are they larval or close to complete and stable?

I’d rather stay away from Java and the JVM. I don’t know much about Rust other than it is likely more low level for my needs creating web apps. So Node.js and Go are the two on the list that have appeal. Without knowing more, I’m probably leaning towards Go but I don’t want to be fighting against the grain all the time because the Go client for EventStoreDB is not ready for prime time.

(While PHP is often the butt of many jokes, given its popularity, I was surprised to see it is not one of the official supported clients.)

Advice for someone in my situation?

Well,what type of web app & what does the rest of the team knows ?

Gut felling answser for you : between Node.js & go , node.js is probably your best bet.
(we have customers using it)
As for the “preview” , yes there might be some changes , we need to harmonize API naming, and some are not on par yet in the feature set.
We are totally aware of this and it will be a point of attention in the near future.

1 Like

I’m glad to read this is a priority. I imagine other devs come to evaluate EventStoreDB and have similar questions and want to feel confident they are making good choices at the beginning of their projects.

I’m about to put together our system using eventstore and connecting to it using the gRPC client, but for the life of me, I can not get it to connect using the nodejs gRPC client.

I recently put together a project using the .NET gRPC client and it works fine, but this project will be nodeJS, so I need to get it to work.

My eventstore docker setup is identical to the .NET project so I know it is valid. But I just keeping “UNAVAILABLE: No connection established” using the nodejs client.

Any help would be appreciated…

My docker setup for evenstore:

eventstoredb:
image: eventstore/eventstore:21.2.0-buster-slim
environment:
  - EVENTSTORE_CLUSTER_SIZE=1
  - EVENTSTORE_RUN_PROJECTIONS=All
  - EVENTSTORE_START_STANDARD_PROJECTIONS=true
  - EVENTSTORE_EXT_TCP_PORT=1113
  - EVENTSTORE_EXT_HTTP_PORT=2113
  - EVENTSTORE_INSECURE=true
  - EVENTSTORE_ENABLE_EXTERNAL_TCP=true
  - EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP=true
ports:
  - "1113:1113"
  - "2113:2113"
volumes:
  - type: volume
    source: eventstore-volume-data
    target: /var/lib/eventstore
  - type: volume
    source: eventstore-volume-logs
    target: /var/log/eventstore

And how I am trying to connect with the nodejs client:

    const client = new EventStoreDBClient({
    endpoint: "localhost:2113",
  });

Pretty straightforward, but it won’t connect. I CAN see the webpage at http://localhost:2113/web/index.html#/dashboard

1 Like

Hi @aaron:
I think you’re missing the esdb:// prefix in the connection string

this tool https://developers.eventstore.com/clients/grpc/getting-started/#connection-details
will help setting up the connection string for various setup.
( choose ‘specify manually’ )

I tried using “esdb://localhost:3000?tls=false” but it complains about DNS issues when changing the endpoint to anything but a “host:port”.

But I was able to get around this by just using the static client instead of using the constructor.

const eventstoreClient = EventStoreDBClient.connectionString("esdb://localhost:3000?tls=false")

thanks!