Hi, I am Corvus

I am a tool and a platform.
(Jump to Documentation)

What is Corvus?

"Corvus" is a latin noun, meaning "raven" or "crow".
It is a platform for all kind of things.
This site is for developers and interested users only!
If you only need information about The Corvus Project (or 'The Corvus Network') or how to use it, please refer to the About-Page!

The Motto of Corvus:

It is, what you want it to be.
It can do, what you want it to do.
You can customize and adjust everything as you need it, how you need it, when you need it.
It is as private as you want it to be.
Keep your life save and decide yourself how you manage your data!

Privacy is not a privilege. It's a right you have to fight for.

Because privacy matters.

Read more in 'About Corvus' for users

Documentation of Corvus


What is a package?

A package is a piece of software that allows you to do different kinds of tasks.
With packages a user can add functions to the system and customize it as he wants. Packages can be open/available for every user, only to a specific user-group or even only to specific users.
Corvus has two types of packages:
Core Packages, which are part of the core of the system and are active by default. They use completly different access points and functions. For example, the intern Codebase-Version-System is a core package and only available to developers of Corvus.
Tool Packages, which can be created by everyone but have to be verified by the Corvus-Dev-Team (More information: Restrictions).

A Tool Package can be an app ('standalone') or a widget for the dashboard/sidebar - or both.
With apps and widgets, through packages, Corvus becomes the ultimate tool for anything.
However, please keep in mind: privacy is first. To get verified you need to follow the privacy standards of Corvus.
This includes the use of encryption in different levels (see Enryption & Security).



In the package root folder (see File Structure), create an empty JSON-File and rename it to config.json. In this example the root folder and package id is corvus.dev.sample.

The package id has to be a unique identifier for the app/widget/package and will identify the authors too. The official Packages will have the ids corvus.package.* and Packages by Corvus-Devs will have corvus.dev.* or corvus.dev.{username}.* or corvus.dev.{team}.*. External packages will have a domain like package identifier like com.example.* if a domain is available. If no domain is available you can get a package root id when first logging in to the package controll interface. The generated package root ids will be e.g. ext.{custom package root id}.*.

Please note, that the package id or package root id can not be edited if verified once. However it might be possible to apply for a new package root id for new packages.

	"verified": "[HASH]",
	"package": {
		"id": "corvus.dev.sample",
		"name": "Sample Package",
		"author": "CORVUS",
		"created_by_user": ["root"],
		"created_date": "2018-12-15",
		"version": "1.0",
		"version_date": "2018-12-15 12:00:00",
		"description": "This is a package to show the folder and file structure for packages.",
		"team_users": ["root"],
		"allow_user_group": ["corvus.core.SU", "corvus.core.ADMIN", "corvus.dev.USER"],
		"allow_custom_curl": false

	"application_type": "standalone|widget|ink",
	"standalone": {
		"main_path": "/app/",
		"mainfile": "index.php",
		"display_name": "Sample App",
		"navigation": "dynamic",
		"navigation_file": "appnav_corvus_dev_sample.php",
		"settings_mode": "default",
		"settings_array": [
			{"key": "key", "default": "default value"}
		"edit_path": "/edit/",
		"edit_mainfile": "index.php"

	"widget": {
		"type": "dashboard|sidebar",
		"path": "/widget/",
		"mainfile": "index.php",
		"display_name": "Sample Widget",
		"onclick_action": "edit_link",
		"ink": "open:standalone/instancepath",
		"edit_link": "popup:standalone/edit/datapath"

	"ink": {
		"path": "/ink/",
		"big": {
			"img": "ink.big.png",
			"bg-color": "transparent",
			"txt-color": "black",
			"bg-color:hover" : "black",
			"txt-color:hover": "white",
			"title": "Sample App",
			"sub-title-txt": "by CORVUS DEVS"
		"normal": {
			"img": "ink.icon.png",
			"bg-color": "transparent",
			"title": "Sample Package App",
			"hover-title": "by CORVUS DEVS"
The config settings:
verified required '[HASH]' Author and package verification: system-generated hash. Value will be overwritten by system.
package required object Specifies the general package data
package->id required package id string Generated using package manager for devs.
package->name required string Package- and/or App-/Widget-Name.
package->author required string Generated using package manager for devs. Verified author-/group-string.
package->created_by_user required array with usernames from creators in doublequotes Users who created this package.
package->created_date required string in format: YYYY-mm-dd Date the package was created
package->version required string Custom Version Name (e.g. v1.0-alpha). Has to be changed on package-update.
package->version_date required string in format: YYYY-mm-dd HH:ii:ss Date and time of package-creation
package->description required long string This should be an accurate description of your package. This text will show in the app-installer.
package->team_users optional array with usernames in doublequotes or empty array Users in this array can always edit the source package source/settings (overwrites allow_user_group). If empty, only creators and users specified in allow_user_group can access source code/settings. To edit something user has to enable developer package/tools.
package->allow_user_group required array with user groups. The following groups can be added: 'corvus.core.SU', 'corvus.core.ADMIN' and 'corvus.dev.USER'. 'team_users' will always overwrite 'allow_user_group': user can edit even if not in group. corvus.core.SU will be automatically added, if not found.
package->allow_custom_curl optional false (default), true Allow package.php->custom_curl(...) function (see below) for package. Can be requested and has to be authorized. Inline curl is not allowed for privacy and security reasons (see restrictions)!
application_type required standalone, widget, ink Combine multiple with "|". This defines the type of application you want to create. App/Tool (standalone), widget and/or 'ink' (external or internal link to application/site)
standalone optional, required if application_type contains 'standalone' object Defines all settings for the standalone app.
standalone->main_path optional '/app/' (default) or other path Path to app folder relative to package root.
standalone->mainfile optional 'index.php' (default) or other PHP file File that handles the app.
standalone->display_name optional package->name + 'App' (default) or string Standalone App Name.
standalone->navigation optional none (default), static, dynamic none:
no app-specific navigation to display in sidebar.
display contents of a static JSON-Array:
[{"displayname": "link text", "link": "/subpathurl/", "title": "hover text"}, ...].
display generated JSON in format like 'static'.
implement function appnav_[PACKAGEID]($subpathurl="") where in PACKAGEID the '.' should be replaced with '_'.
recommendation: static JSON file.
standalone->navigation_array optional, required if standalone->navigation is 'static'. Array:
[ {"displayname": "...", "link": "...", "title": "..."}, ...]
Array with navigation items (objects).
displayname: text to display as navigation link. Not longer than 12 characters.
link: custom link in path format, e.g. '/subpath/'.
title: custom hover title.
standalone->navigation_file optional, required if standalone->navigation is 'dynamic'. string File(path) relative to package root to a dynamic navigation generator file (php).
The file must contain the main function appnav_[PACKAGEID]($subpathurl="") where in PACKAGEID the '.' gets replaced with '_'. The function gets the sub-path to display a dynamic navigation in context.
The return value of the function has to be an JSON string, formated like standalone->navigation_array.
This method is only recommended, if dynamic links are absolutly necessary.
standalone->settings_mode optional default (default), custom Specifies how settings for the instance(s) get handled.
default: requires standalone->settings_array, displays settings in CORVUS-Mode, recommended.
If no settings have to be made (Are you realy sure? Even no Encryption-Settings?), pass an empty array.
custom: requires standalone->settings_file, displays custom site, only recommended if necessary.
Important: support mode 'apply for all instances' and 'reset to defaults'! See functions below.
User/instance specific settings can be accessed within instance header array.
standalone->settings_array optional, required if standalone-> settings_mode is 'default' Array:
[ {"key": "...", "label": "...", "default": "...", "type": "...", "options": [], "pattern": ""}, ...]
Specifies the settings for the standalone app.
key (required): name of settings key.
label (optional, default is key): label to display to user.
default (required): default value.
type (optional): input type: text (default), number, dropdown (multiple options), checkbox, longtext.
options (required, if type is dropdown). Array with Strings. Value will be String.
pattern (optional): regex input pattern for validation.

File Structure

Corvus Package Functions

What's next?

  • Current Version: 2018.12.17 (Documentation: 2018.12.17)
  • Upcoming:
    - Package-Controll interface
    - Create Package Config
    - Upload Package
    - Submit Package

    - App Manager
    - Encryption and Security


    (newest first)

    Powered by Corvus - Made by Felix Höddinghaus © 2018-2023 | Back to Corvus | About Corvus
    The Creator of Corvus: Xefli.de | Other Projects