Automated Fishing Reports: The Charter & Haul App with Offline Sync

During the course of 2019, New Zealand rolled out an electronic catch and position reporting requirement for commercial fishing vessels and later amateur charter vessels to report the day’s journey and haul. For the Ministry for Primary Industries it’s an important way to keep up with quotas, but doing it on paper is both time consuming and easy to mix up. By reducing error-prone manual submissions, automation has helped the ministry make better informed decisions around fishing sustainability and monitoring.

Martin Junek developed eCatch in 2018, in anticipation of the rollout. eCatch is now contracted by Fisheries New Zealand to provide tools for both commercial and amateur fishing vessels. 
Read on to learn how using CouchDB’s replication protocol means eCatch automates reporting even when vessels drift out of network coverage.

Which of CouchDB’s distinct features have been essential to you achieving your goal(s)?

How did you hear about CouchDB, and why did you choose to use it?

I had used CouchDB in another project before. We needed a database that is easy to sync with a mobile app, easy to host in Docker and that we have complete control over. Cost was also a major consideration for a starting business.

Did you have a specific problem that CouchDB solved?

I wanted to create an offline-first app that syncs to a CouchDB: collecting data offline and syncing them to a central CouchDB when the device comes online again.

CouchDB’s _changes feed feature plays a big role in eCatch: 

  • We collect the data that is synchronised to CouchDB. Then there’s a service that waits for anything new to appear in the database, and sends it off to the Ministry for Primary Industries via their API. So, we basically listen to the changes feed on the global database and that tells us there’s a new document in the database.
  • We also have a Postgres database, and whatever lands in CouchDB gets sent off to Postgres where it’s easier for us to query. 

For the folks who are unsure of how they could use CouchDB — because there are a lot of databases out there — could you explain the use case?

We needed an app that collects data offline (electronic catch reporting for commercial fishing vessels) and then syncs the data with a central database. 

An important requirement is the ability to separate data for each device/user, so there is no chance of accidental data leak. The data the app collects is considered sensitive. 

What would you say is the top benefit of using CouchDB?

Definitely the sync feature that works out-of-the-box. Easy to host and maintain — it has been very stable the whole time. Also listening for the _changes feed to handle new data, which is then integrated to 3rd party systems.

It’s a common problem with SAAS apps that a bug in the code can expose somebody else’s data. CouchDB solves that just because there’s a different database for every user. So I don’t have to worry about that much, which is a big plus.

What additional tools are you using in your infrastructure? Have you discovered anything that pairs well with CouchDB?

Docker for hosting, as well as PostgreSQL. We feed all data into Postgres for easier querying/data analysis. We also use PouchDB in React Native; this requires a 3rd party adapter, which is a missing link in the CouchDB/PouchDB ecosystem. It’s one of my biggest concerns that the author stops maintaining it. 

What are your future plans with your project? Any cool plans or developments you want to promote?

We’d like to expand the app into other areas of the industry.

If you’re curious, visit eCatch in the Google Play and App store to get an idea of how users interact with it:

Thank you, Martin, for giving us a behind-the-scenes look at eCatch and how it helps New Zealand’s seas. We wish you happy surfing!

Use cases are a great avenue for sharing useful technical information — let us know how you use CouchDB. Additionally, if there’s something you’d like to see covered on the CouchDB blog, we would love to accommodate. Email us!

For more about CouchDB visit couchdb.apache.org or follow us on Mastodon: @couchdb@fosstodon.org  

3.5.1

Dear community,

Apache CouchDB® 3.5.1 has been released and is available for download.

CouchDB 3.5.1 is a maintenance release, and was originally published on 2025-11-11.

https://couchdb.apache.org/#download

Pre-built packages for Windows, macOS, Debian/Ubuntu and RHEL/CentOS, as well as Docker images are available.

Release Notes highlights:

  • Native support for UUIDv7 automatic _id generation
  • Various performance improvements for purge, bulk endpoints and btree caching
  • A large number of clean ups and bug fixes

Special Notice Heads Up:

  • The next feature version of CouchDB (3.6.0) will switch to using the QuickJS engine for all JavaScript operations by default. SpiderMonkey will remain available on supported platforms, but it is causing an increasing strain on testing and release engineering, so the project is starting to make the switch.
  • To ready yourself for the upgrade, you can run the new Background Scanner feature1 and have your existing JavaScript code be analysed to see if it will behave as expected under QuickJS. Modern JavaScript running on modern (> version 1.8.5) SpiderMonkey should translate seamlessly. Refer to our documented list2 of differences between various engine types and versions.
  • Please note that due to platform support, RHEL 10 and AlmaLinux 10 binaries of 3.5.1 are already only shipping with QuickJS.

See the official release notes document for an exhaustive list of all changes:

https://docs.couchdb.org/en/stable/whatsnew/3.5.html

Apache CouchDB® lets you access your data where you need it. The Couch Replication Protocol is implemented in a variety of projects and products that span every imaginable computing environment from globally distributed server-clusters, over mobile phones to web browsers.

Store your data safely, on your own servers, or with any leading cloud provider. Your web- and native applications love CouchDB, because it speaks JSON natively and supports binary data for all your data storage needs.

The Couch Replication Protocol lets your data flow seamlessly between server clusters to mobile phones and web browsers, enabling a compelling offline-first user-experience while maintaining high performance and strong reliability. CouchDB comes with a developer-friendly query language, and optionally MapReduce for simple, efficient, and comprehensive data retrieval.

The community would like to thank all contributors for their part in making this release, from the smallest bug report or patch to major contributions in code, design, or marketing, we couldn’t have done it without you!

On behalf of the CouchDB PMC,
Jan Lehnardt