Editor feature profiles
Hide tools, understand inherited restrictions and share .profile files.
A feature profile simplifies the editor interface: it hides workspaces, classes when creating Entities and individual properties. It does not remove engine classes, shrink exports or restrict script access to data. Use one, for example, for a 2D artist who does not need 3D tools.
This is a local editor setting. Export a .profile to share it; saving a scene alone does not transfer the profile.
Create and apply a profile
The labels below are from the Reckfell 1.0.0 English interface.
- Open Editor → Manage Editor Features… to show Manage Editor Feature Profiles.
- Click Create Profile and name it, for example
layout-2d. - Under Main Features, uncheck 3D Editor. This hides the 3D workspace; it does not by itself exclude Entity3D classes from the creation list.
- To remove 3D classes from creation tools too, uncheck Entity3D in the class tree. The restriction affects native descendants, including
MeshInstance3D. - Click Make Current. Check Current Profile: choosing a profile to edit and applying it are separate actions.
- Use Reset to Default to restore the full interface. This deactivates the current profile; no scene deletion, engine reinstall or individual property restoration is needed.
Editing the current profile saves changes and schedules an interface refresh after a short delay. Edits to another profile remain preparation until Make Current.
Choose the right restriction
| Setting | Effect |
|---|---|
| 3D Editor | The 3D workspace. This is separate from restricting Entity3D classes. |
| A class in the tree | Availability of the class and native descendants in editor tools; existing data is not deleted. |
| A class's Enable Contextual Editor | Availability of its specialized editor. This does not promise a read-only Inspector for all properties. |
| Class properties | Visibility of individual Inspector fields. Their values and code access remain. |
| Scene Tree Editing | Ability to edit the hierarchy; the tree dock itself remains. |
Do not use a profile as permissions or source protection: users can deactivate it, open files elsewhere or change data through code. Reducing project size or runtime cost requires export configuration and content optimization, not hiding panels.
Inheritance: why a class or property is still hidden
A native-class restriction affects descendants. If Entity3D is disabled, enabling MeshInstance3D alone does not override its parent. Enable the parent first. Contextual class-editor restrictions also inherit.
Property queries work differently: IsClassPropertyDisabled("CanvasItem", "modulate") reads an exact record. Querying Sprite2D returns false when only CanvasItem has a record. The Inspector walks parent classes itself, so the field can still be hidden on Sprite2D. A single child-class query does not establish field visibility.
Use the native property name modulate in this API, not the C# wrapper Modulate or a translated label. Class restrictions follow ClassDB's native hierarchy; do not treat them as a general rule system for all your C# types.
Share a profile
- Select the intended profile and click Export. Save
layout-2d.profile. - On another computer, open the same manager and click Import.
- Select the imported profile and click Make Current.
- Use Reset to Default if the interface becomes too restricted.
A .profile is JSON with "type": "feature_profile", not an ordinary .rdata resource. Keep the exported file in the team repository if shared configuration is desired; personal active editor settings still do not become project settings.
Generate a file from a C# editor tool
The following helper is for C# editor code. Write2D() writes a profile disabling both the 3D workspace and the Entity3D branch. TryRead() returns a new data object without activating it in the running editor. Apply the file through Import and Make Current.
using Reckfell;
public static class FeatureProfileFiles
{
public static Error Write2D(string path)
{
using var profile = new EditorFeatureProfile();
profile.SetDisableFeature(EditorFeatureProfile.Feature.Feature3D, true);
profile.SetDisableClass("Entity3D", true);
return profile.SaveToFile(path);
}
// Reads profile data; this does not activate it in the running editor.
// The caller owns the returned instance and must dispose it when finished.
public static bool TryRead(string path, out EditorFeatureProfile? profile, out Error error)
{
var candidate = new EditorFeatureProfile();
error = candidate.LoadFromFile(path);
if (error == Error.Ok)
{
profile = candidate;
return true;
}
candidate.Dispose();
profile = null;
return false;
}
}Supply an existing writable directory and a .profile filename. Check the Error returned by Write2D(); dispose the returned instance after a successful TryRead() when finished reading it. The profile itself is not an EditorPlugin and needs no plugin.cfg.
Why read into a new instance: in 1.0.0, LoadFromFile() does not guarantee resetting all old state. If valid JSON omits disabled_features, previous feature flags remain, although class records are cleared. Ordinary SaveToFile() includes this array, but fresh instances avoid surprises with third-party or abbreviated files. A load error also does not promise a transactional rollback of every field.
Diagnose failures
| Problem | Action |
|---|---|
| Profile selected, interface unchanged | Check Current Profile and click Make Current. |
| 3D classes remain after disabling 3D Editor | Separately disable the Entity3D branch to remove creation choices. |
| An enabled child class remains unavailable | Check its native parent-class restriction. |
| An Inspector field is missing | Check the current profile, class restriction and parent property rules. Use Reset to Default for a quick comparison. |
| The profile did not shrink the game | It changes editor UI, not game content or builds. |
| Import fails | Use an exported .profile with the correct JSON marker; renaming an arbitrary .rdata does not convert it. |
Verification limits
The installed headless 1.0.0 editor verified independent flags, native class/editor-rule inheritance, exact property keys, JSON roundtrips of all rule types and repeated-load behavior for an incomplete file. The user's active profile was not changed. Manager clicks, rendered panel visibility, read-only states, malformed-file/write errors, game exports and other platforms are not established by this test; UI steps and rule consumers were additionally reviewed in editor source.