Many resources get created in the course of translating, compiling, copying, or otherwise processing files that the user creates and edits. Derived resources are resources that are not original data, and can be recreated from their source files. It is common for derived files to be excluded from certain kinds of processing.
For example, derived resources are typically not kept in a team repository, since they clutter the repository, change regularly, and can be recreated from their source files. It is not practical for team providers to make decisions about which files are derived. The resource API provides a common mechanism for plug-ins to indicate the resources they create that are derived.
Plug-ins may use IResource.setDerived(boolean) to indicate that a resource is derived from other resources. Newly created resources are not derived by default, so this method must be used to explicitly mark the resource as derived. A common use is to mark a subfolder of the project as derived when an "output" folder (such as the "bin" folder in Java projects) is created by the plug-in.
Other plug-ins, usually team providers, can use IResource.isDerived to determine whether a particular resource should be managed by the repository. Attempts to mark projects or the workspace root as derived will be ignored.
Note: The concept of derived resources is provided for other (non-team) plug-ins to indicate which resources are inappropriate for repository management. Special files created by team implementations to manage their data should not be marked as derived resources. See Team private resources for a technique for marking team-related implementation resources hidden.