
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
@guihss/ngx-dynamic-forms
Advanced tools
A dynamic form generator using Typescript Decorators.
More info in Dynamic Forms.
The default components use Angular Material. Add with ng add @angular/material. Install the library ng add @guihss/ngx-dynamic-forms.
Annotate the class you want to generate the form.
export class User {
@FormInput({ label: "Name", type: "text" })
name = 'Bob';
@FormInput({ label: "Password", type: "password"})
password;
@FormInput({ label: "Email", type: "email"})
email;
}
Create an observable instance.
export class AppComponent {
title = 'dynamic-forms-showcase';
user: Observable<User> = of<User>(new User());
}
Add the dynamic-forms component to your page.
<mat-card>
<h1> Example form </h1>
<dynamic-form
formStyleClass="dynamic-form"
[objectObservable]="user"
></dynamic-form>
</mat-card>
And see the result :D

The inputs are rendered in the defined order and uses any values in the field as default.
You can access the data inserted in the form with.
class AppComponent {
/* ... */
@ViewChild(DynamicFormsComponent) dynamicForm: DynamicFormsComponent;
ngAfterViewInit(): void {
let formResult = this.dynamicForm.getResult();
}
}
The result is a json with field names equals to the annotated field. Filled with the form values.
let formResult = {
name: 'Bob',
password: 'verysecurepassword',
email: ''
}
With dynamic forms you can use your own components.
ng generate component custom-input
Implement the ConfigurableInput interface.
export class CustomInputComponent implements ConfigurableInput {
formControl = new FormControl();
applyArguments(args: any): any {
/* here you can use the args passed in the annotation
to configure your input. */
}
getFormControl(): any {
return this.formControl;
}
}
Use the @CustomInput annotation in your model.
export class User {
/* ... */
@CustomInput(CustomInputComponent, {label: "Custom Input", args: {}})
myCustomInput;
}
The result:

You can nest inputs with dynamic forms.
export class NestedObject {
@FormInput({ label: "street", type: "text" })
street;
@FormInput({ label: "city", type: "text" })
city;
}
export class User {
/* ... */
@NestedInput('Address', /* search depth */ 1)
address = new NestedObject();
}
Result:

The form data are nested too.
let formResult = {
name: 'Bob',
password: 'verysecurepassword',
email: '',
myCustomInput: '',
address: {
street: '',
city: ''
}
}
Check the GitHub page.
FAQs
A dynamic form generator using Typescript Decorators.
We found that @guihss/ngx-dynamic-forms demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.