In some deployments Traccar is used purely as a protocol gateway: devices connect, messages get decoded, and positions are forwarded to another system that handles storage, business logic and the user interface. This page describes how to configure a minimal Traccar instance for that use case, with an in-memory database and as many features disabled as possible.
Traccar can run without a persistent SQL database. Replace the default H2 database section in the configuration file with a single entry:
<entry key='database.memory'>true</entry>
With this option enabled, Traccar uses an embedded in-memory store. There is no need to install or configure MySQL, PostgreSQL or any other database engine.
Because the database is empty on every start, you typically combine this with automatic device registration so that devices are accepted as soon as they connect:
<entry key='database.registerUnknown'>true</entry>
A forwarder-only instance must push every position to the downstream system. Position forwarding is enabled by setting forward.url. The simplest setup is JSON over HTTP:
<entry key='forward.type'>json</entry>
<entry key='forward.url'>https://example.com/positions</entry>
<entry key='forward.retry.enable'>true</entry>
If you also want raw protocol traffic mirrored to another listener, add:
<entry key='server.forward'>192.0.2.10</entry>
See the data forwarding page for the full list of options, including AMQP, Kafka, MQTT and Redis transports.
Most Traccar features can be turned off when the server only needs to decode and forward data. Add the entries below to the configuration file.
Disable position filtering (the downstream system can apply its own filters):
<entry key='filter.enable'>false</entry>
Disable reverse geocoding and external geolocation lookups:
<entry key='geocoder.enable'>false</entry>
<entry key='geolocation.enable'>false</entry>
<entry key='speedLimit.enable'>false</entry>
Disable anonymous statistics upload:
<entry key='server.statistics'></entry>
By default Traccar starts every protocol that has a port assigned. If you only need a few, list them explicitly to reduce the number of open ports and background threads:
<entry key='protocols.enable'>teltonika,osmand</entry>
Combined with omitting unused [protocol].port entries, this keeps the listener surface to the minimum required by your fleet.
A complete minimal configuration file for a forwarder-only instance looks like this:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'>
<properties>
<entry key='database.memory'>true</entry>
<entry key='database.registerUnknown'>true</entry>
<entry key='forward.type'>json</entry>
<entry key='forward.url'>https://example.com/positions</entry>
<entry key='forward.retry.enable'>true</entry>
<entry key='filter.enable'>false</entry>
<entry key='geocoder.enable'>false</entry>
<entry key='geolocation.enable'>false</entry>
<entry key='speedLimit.enable'>false</entry>
<entry key='server.statistics'></entry>
<entry key='protocols.enable'>teltonika,osmand</entry>
</properties>
Adjust the forwarding URL, the list of enabled protocols and any protocol port numbers to match your environment.