PHPackages                             openwanderer/openwanderer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. openwanderer/openwanderer

ActiveLibrary

openwanderer/openwanderer
=========================

OpenWanderer is a project to create a 100% free and open source panoramas platform. This is the server package.

v0.1.4(4y ago)1351LGPL-3.0-or-laterPHPPHP &gt;=7.2

Since Jan 29Pushed 4y ago2 watchersCompare

[ Source](https://github.com/openwanderer/server)[ Packagist](https://packagist.org/packages/openwanderer/openwanderer)[ Docs](https://github.com/openwanderer/server)[ RSS](/packages/openwanderer-openwanderer/feed)WikiDiscussions master Synced 6d ago

READMEChangelogDependencies (6)Versions (10)Used By (0)

OpenWanderer server
===================

[](#openwanderer-server)

This is the OpenWanderer server, now available as a Composer package.

`composer install openwanderer/openwanderer`

The OpenWanderer server, based on the [Slim Framework v4](https://slimframework.com) manages panoramas, including linked sequences of panoramas, and allows clients to upload, retrieve, edit and delete panoramas.

Creating an OpenWanderer server
-------------------------------

[](#creating-an-openwanderer-server)

A minimal example would be as follows:

```

```

Note the use of the `OpenWanderer::createApp()` static method. This takes as an argument an associative array of options. Currently there is are two options:

- `auth`, which controls whether a login is needed to perform sensitive tasks (e.g. panorama upload, panorama editing or deletion). The method returns a `\Slim\App` object which can then be further manipulated if needed.
- `mainView`, the name of the main HTML view for the application, which should be located in the `views` subdirectory of the root directory of your application. If not specified, `index.html` will be used.

API endpoints
-------------

[](#api-endpoints)

The following API endpoints are available with an OpenWanderer server. Note that Slim route parameter syntax is used in this documentation, so that for example `{lon}` is a placeholder for longitude, and `{id:[0-9]+}` is a placeholder for an ID which must be numeric.

These endpoints are available whether `auth` is `true` or `false`:

`GET /panorama/{id:[0-9]+}` - retrieves information about a panorama. Returns a JSON object containing `id`, `lon`, `lat`, `ele` (elevation), `seqid` (the ID of the sequence it belongs to, if it does), `poseheadingdegrees` (the XMP PoseHeadingDegrees property, i.e. bearing of the panorama's centre point, if present) and corrections for the three rotation angles for the panorama: `pancorrection`, `tiltcorrection` and `rollcorrection` (note that these are *corrections*, not absolute values, i.e. the amount which the panorama needs to be rotated to be in its correct orientation if the inherent XMP data is inaccurate). In addition, if `auth` is set to true, the panorama has to be authorised (the `authorised` field in the database set to 1) for it to be accessible to users other than its owner or the administrator. This is to allow for operations such as face or license-plate blurring, which will soon be added to the [bot](https://github.com/openwanderer/server-bot). So if you want all panoramas to be visible immediately, you should set `auth` to `false`.

`GET /panorama/{id:[0-9]+}.jpg` - retrieves the actual panorama with the given ID. Again, the panorama has to be authorised to be visible to non-owner or non-admin users if `auth` is set to `true`.

`DELETE /panorama/{id:[0-9]+}` - deletes the given panorama. If `auth` was set to `true`, only administrators or panorama owners may delete it; otherwise, 401 is returned.

`GET /nearest/{lon]/{lat}` - will retrieve the nearest panorama to a given latitude and longitude.

`GET /panos` - retrieves panoramas by bounding box. Expects a query string parameter `bbox` containing a comma-separated list of bounding box parameters in order west, south, east and north.

`POST /panorama/{id:[0-9]+}/rotate` - sets the pan, tilt and roll corrections to the values supplied in a JSON object containing `pan`, `tilt` and `roll` fields, sent in the request body. If `auth` is set to `true`, only the panorama owner or administrators can perform this operation, otherwise 401 is returned.

`POST /panorama/{id:[0-9]+}/move` - moves the panorama position to the given latitude and longitude, supplied as `lat` and `lon` fields within a JSON object sent in the request body. If `auth` is set to `true`, only the panorama owner or administrators can perform this operation, otherwise 401 is returned.

`POST /panorama/moveMulti` - moves multiple panoramas. A JSON object containing the panorama IDs as keys and JSON objects as specified in `move`, above, should be supplied.

`POST /panorama/upload` - uploads a panorama, supplied as POST data `file` with a type of `file`.

`POST /sequence/create` - creates a new sequence. Expects a JSON array containing the panorama IDs which will make up the sequence, in intended sequence order, sent within the request body. If `auth` is true, only logged-in users may create a sequence, otherwise 401 is returned.

`GET /sequence/{id:[0-9]+}` - retrieves a sequence, with the full details of the panoramas contained within it (see `GET /panorama/{id}` above) as a JSON array of objects.

These endpoints are only available if `auth` is `true`:

`GET /user/login` - gets login information about the current user, as a JSON object containing `username`, `userid` and `isadmin` fields. If the user is not logged in, `username` will be `null` and the other fields will be 0.

`POST /user/login` - logs in a user and sets a session variable `userid`. Expects `username` and `password` POST fields. Returns a JSON object, containing `username`, `userid` and `isadmin` fields (on success) or an `error` field (on error).

`POST /user/logout` - logs out a user by destroying the session.

`POST /user/signup` - signs up a new user. Expects `username`, `password` and `password` POST fields. Performs validation, such as checking that the `username` is an email address (this can be used for example to perform forgotten password functionality, though this is not available by default), checks the password is at least 8 characters, check the two password fields match, and check a user of that username has not signed up already. Returns a JSON object, with a `username` field (on success) or `error` field (on error).

`GET /panos/mine` - returns the panoramas belonging to the currently logged-in user, as JSON, as an array of JSON objects as described in `GET /panorama/{id}` above. Returns 401 if not logged in.

Environment variables
---------------------

[](#environment-variables)

Configuring the Openwanderer-server is done through environment-variables. Following variables are currently supported:

- `OTV_UPLOADS` - the directory where panorama files will be uploaded to.
- `MAX_FILE_SIZE` - the maximum file size to accept for panoramas, in MB. Should match the `php.ini` setting.
- `DB_USER` - your database user.
- `DB_PASS` - your database password.
- `DB_HOST` - database hostname.
- `DB_DBASE` - the database holding the panoramas.
- `BASE_PATH` (optional) - set to the path (relative to your server root) holding your OpenWanderer app. If omitted, it is assumed the app is in your server root.

OpenWanderer supports the `.env` file format to control environment variables. In case you want to use a `.env`-file for setting the required environment variables, you should create one in the root directory for your OpenWanderer app.

Example apps
------------

[](#example-apps)

A range of example apps are available in [this repository](https://github.com/openwanderer/example-app). Currently three apps are present, in order of increasing complexity these are:

- a very basic "Hello World" example;
- a basic example allowing sequence navigation, moving to a given latitude and longitude, and panorama upload;
- a full example with a range of functionality; the "official OpenWanderer demo app". This now includes an installable **Docker image** of the server plus example app, for easy server installation, thanks to @MikiDi.

Please see the docs for each example for more details.

Licensing
---------

[](#licensing)

As of the first commit on October 10, 2020, the code is now licensed under the Lesser GNU General Public License, by agreement between both OpenWanderer repository owners (@mrAceT and @nickw). The exception is third-party code such as `geojson-path-finder` which is licensed separately, details in the relevant directories. This has been done to:

- ensure that any changes to OpenWanderer itself will remain Free and open source (if you change OpenWanderer, you must make the modified code available under a compatible free software license);
- but also allow proprietary applications to *use* OpenWanderer code.

Any further changes to the current OpenTrailView - OTV360; repo [here](https://gitlab.com/nickw1/opentrailview) will remain under the GPL v3.

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 93.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~18 days

Recently: every ~26 days

Total

9

Last Release

1788d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/585388?v=4)[Nick Whitelegg](/maintainers/nickw1)[@nickw1](https://github.com/nickw1)

---

Top Contributors

[![nickw1](https://avatars.githubusercontent.com/u/585388?v=4)](https://github.com/nickw1 "nickw1 (41 commits)")[![MikiDi](https://avatars.githubusercontent.com/u/9383603?v=4)](https://github.com/MikiDi "MikiDi (3 commits)")

---

Tags

360panoramas

### Embed Badge

![Health badge](/badges/openwanderer-openwanderer/health.svg)

```
[![Health](https://phpackages.com/badges/openwanderer-openwanderer/health.svg)](https://phpackages.com/packages/openwanderer-openwanderer)
```

###  Alternatives

[phlak/directory-lister

PHP directory lister

2.5k1.4k](/packages/phlak-directory-lister)[showdoc/showdoc

ShowDoc is a tool greatly applicable for an IT team to share documents online

12.8k7.0k](/packages/showdoc-showdoc)[azuracast/azuracast

The AzuraCast self-hosted web radio station management suite.

3.8k27.8k](/packages/azuracast-azuracast)[bacula-web/bacula-web

The open source web based reporting and monitoring tool for Bacula

1537.5k](/packages/bacula-web-bacula-web)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
