Website profiles · Technology insights · Alternatives

ldtk.io

LDtk (Level Designer Toolkit) is an open-source 2D level editor for indie devs, with a strong focus on user-friendliness.

No paid content found
Visit website
Profile views 9 Outbound visits 14 Normal
LDtk Full homepage screenshot

At a glance

Category
Development
Language
English
Paid-content signal
No paid content foundObserved
Registered
2020
Hosting
GANDI SASInferred
HTTPS certificate trusted
PassedObserved
Last updated

Website review

This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.

What is LDtk?

LDtk (Level Designer Toolkit) is a free, open-source 2D level editor aimed at indie game developers. It is built by game developers — its creator describes it as a dream level editor shaped by 20+ years of making games — and it focuses on a modern, user-friendly interface for building 2D levels.

Its main draws, based on the site's own description:

  • World and level organization: Levels live inside "worlds," with layouts like "Grid-vania," linear, or free, and you move between views quickly.
  • Customizable entities: You define your own entities (player starts, enemies, items, triggers) with typed properties such as hit points or patrol paths.
  • Export made simple: A "Super Simple Export" gives you a few PNGs per level plus a small JSON file for entity data.
  • Auto-rendering: Visual rules handle repetitive tile-skinning work.
  • Aseprite support: It loads .aseprite files directly with live reloading, so saving in Aseprite updates the level, including image resizing.
  • Engine and language support: Projects can be loaded into engines and languages such as Unity, Haxe, and Playdate; the JSON output is documented for custom importers, and there is optional Tiled (TMX) export.
  • Backups: A backup system can restore unsaved changes after a crash.

It is deliberately scoped: the editor targets platformers and top-down games, and the site explicitly says isometric 3D is not supported.

Next step: If you are starting a 2D platformer or top-down project, download it and test the export path into your engine first — that step usually decides whether an editor fits your workflow. Compare against Tiled if you need broader format flexibility, or Aseprite if your main need is sprite and tile creation rather than level layout.

Is LDtk free to use?

Yes, LDtk is free to use. The editor is described as “Fast. Free. Open source,” so you can download and use it without paying for a license.

The practical trade-off is not cost but fit. LDtk is built for 2D platformers and top-down games, with a workflow centered on worlds, levels, entities, and a simple export. If your project is 3D or isometric, it is not the right tool.

A useful next step is to test it on a small slice of your game: create one world, a couple of levels, define a player start and one enemy entity, then export and load the JSON in your engine. That tells you quickly whether its world layout and entity workflow match how you build levels.

If you want to compare free editors, Tiled is another long-standing option at Tiled. The main difference is that LDtk is more opinionated about 2D platformer and top-down workflows, while Tiled is a more general tile map editor.

How do I export an LDtk project to Unity or another game engine?

LDtk is designed so you don't need a dedicated exporter for every engine. It saves your project as a JSON file (plus PNGs for the visuals), and you bring that data into Unity or another engine with an importer.

The core export path

  • LDtk's "Super Simple Export" gives you a few PNGs per level and a small JSON file containing your entity data.
  • The JSON format is documented, so you can parse it in whatever language or engine you use.
  • Tiled (TMX) export is available as an optional route if you'd rather use an existing Tiled importer first.

Bringing it into Unity

Unity doesn't read LDtk projects natively, so you have two realistic options:

Approach How it works Best when
Community importer package A third-party Unity package reads the LDtk JSON and generates tiles, colliders and entity prefabs You want levels visible in the editor quickly and don't mind depending on an external package
Your own parser You read the JSON with Unity's JSON tools and instantiate tiles and entities yourself You need tight control over how entities map to your prefabs, or you're targeting a custom pipeline

For most small teams, the community importer is the faster start; writing your own parser is more work but avoids being tied to someone else's update schedule.

Other engines

The same JSON works elsewhere. Haxe, Playdate and similar targets are covered by the ecosystem around LDtk, and any engine that can read JSON and load PNGs can consume the export directly. If an official importer doesn't exist for your engine, the Tiled export is a useful stopgap while you write one.

Practical notes

  • Aseprite files can be loaded directly with live-reloading, so you can paint tiles, save, and see LDtk update without an intermediate PNG conversion step.
  • LDtk's backup system can restore unsaved changes after a crash, which matters when you're iterating on level data before an export.
  • Entities are customizable with typed properties (hit points, patrol paths, inventories), so decide early how each entity type maps to a prefab or object in your engine — that mapping is the part you'll maintain.

Next step: open one small test level, run the export, and inspect the JSON structure before building your importer. Understanding the entity and layer data layout first will save you from rewriting the parser later. You can check supported platforms and languages on LDtk.

Can LDtk directly open Aseprite files without converting to PNG?

Yes. LDtk can load .aseprite files directly, with no intermediate PNG conversion step. It also supports live-reloading: you paint your tiles in Aseprite, save, and LDtk updates the result — including image resizing — automatically.

That matters most for a solo artist or small team doing iterative pixel art. Instead of exporting a PNG, importing it, and fixing tile alignment after every tweak, you keep the source file in the project and let LDtk re-read it. The practical trade-off is that you need to keep the .aseprite file alongside the project rather than treating a PNG as the single source of truth, and you should confirm your target engine's importer handles whatever LDtk exports for that tileset. If your pipeline already generates atlases from Aseprite, decide whether the direct-load convenience is worth keeping raw source art in the repo.

Next step: open one existing project, point a tileset at its .aseprite file, repaint a tile and save, and watch whether LDtk refreshes without a manual reimport. If it does, you can drop the PNG export step for that asset.

For engine-side handling of the exported data, see the LDtk documentation at LDtk.

How does LDtk's backup and crash recovery system work?

LDtk includes a backup system designed to protect against crashes and unexpected shutdowns, and it can restore unsaved changes after a crash. The editor is also built around a project file that stores levels and entity data, so the backup behavior is tied to that project rather than to exported output.

What the page actually states

  • LDtk offers "a strong backup system."
  • It "can even restore unsaved changes if the app crashes."
  • The tone is candid: crashes are treated as something that can happen, not as something the tool promises never occurs.

H3. How to think about it in practice Backups matter most during long editing sessions: you place entities, paint tiles, tweak properties, and haven't saved recently. If the app closes unexpectedly, the value of the feature is whether it recovers that in-progress state rather than only the last manual save.

A useful habit is to treat crash recovery as a safety net, not a replacement for saving. If you are doing a large world layout or a complicated entity setup, save at natural checkpoints anyway. If you want to verify the recovery behavior on your own machine, the practical test is to make a small change in a scratch project, leave it unsaved, force-quit the app, then reopen it and see what returns.

For teams, the bigger risk is usually version control: a recovered unsaved state can be newer than the last commit, so check what was restored before continuing. If you use LDtk alongside an engine such as Unity, the exported JSON and PNGs are separate from the editor's backup state, so a crash recovery in LDtk does not automatically update whatever your game project already imported.

If you want to go further, the official site is LDtk.

What world layouts does LDtk support for organizing levels?

LDtk supports three world layouts for organizing levels: Grid-vania, linear, and free. You pick one per world, and levels can be rearranged by drag-and-drop.

H3 When each layout fits

Layout How levels relate Typical use
Grid-vania Levels sit on a grid, Metroidvania-style Interconnected maps where rooms connect in multiple directions
Linear Levels follow a set sequence Stage-based games, level progressions, side-scrolling campaigns
Free Levels are placed anywhere on an open canvas Overworld maps, hub areas, or non-linear arrangements

You can switch between views with a mousewheel roll, so checking how a world is arranged does not require opening a separate screen.

H3 A quick way to decide

Start with the player's movement through your game. If they backtrack through connected rooms, Grid-vania matches that structure. If they move from one stage to the next, linear keeps the world readable. If the map itself is a space to explore or arrange freely, use free.

For a concrete case: a small team building a top-down adventure might use one free world for the overworld and separate linear worlds for dungeon floors, since layouts are chosen per world rather than once for the whole project.

To try it, create a new world, pick a layout, then drag levels around and scroll to switch views until the arrangement matches how players will actually move. LDtk is available at LDtk.

Related questions

More questions →
What Are Open-Source UI Element Libraries and How Do They Differ From UI Frameworks?

An open-source UI element library is a collection of individual, ready-made interface pieces—buttons, cards, inputs, toggles, loaders—that you copy into your own project and adapt. A UI framework, by contrast, is a structured system of components, conventions, and often a theming layer that governs how your whole interface is built. The practical difference: an element library gives you a snippet; a framework gives you a way of working. If you need a polished button in ten minutes, reach for the element library. If you're building a 40-screen product with a team, you probably want the framework.

What "open-source UI element library" actually means

The term gets used loosely, so it helps to separate the parts:

  • Open-source: the code is publicly available, and the license tells you what you may do with it—copy, modify, redistribute, or use commercially.
  • UI element: a single, self-contained piece of interface, usually small enough to read in one sitting. A button with hover states, a pricing card, a search field.
  • Library: a browsable, searchable collection of those elements, typically contributed by many different people.

On a site like Uiverse, elements are shared by a community and written in plain CSS or Tailwind. You find one you like, copy the markup and styles, paste them into your project, and adjust colors, spacing, and text to fit. There's no package to install and no build step required—which is exactly the appeal, and also the source of most of the confusion.

Element library vs. UI framework: the core differences

Dimension Open-source UI element library UI framework / design system
Unit of reuse A single snippet you copy A component you import or call
Installation None; paste into your code Package install, config, sometimes a provider
Consistency Depends on you; each element may look different Enforced by shared tokens and APIs
Theming Manual edits per element Central theme/config file
Updates You own the copy; no upstream updates Version bumps bring fixes and changes
Accessibility Varies per contributor; must be checked Usually tested and documented
Best for Prototypes, landing pages, small sites, one-off needs Multi-page apps, teams, long-lived products
Learning curve Low—read the CSS Higher—learn the API and conventions

The table isn't a verdict. It's a map of trade-offs. Element libraries win on speed and freedom; frameworks win on consistency and maintenance.

Licensing and attribution: what to check before you paste

This is where people get into trouble, and it's worth slowing down for.

  1. Find the license. Every element or collection should state one. Common open-source licenses include MIT, Apache-2.0, and BSD. Some projects use copyleft licenses like GPL, which can impose obligations if you redistribute your code.
  2. Understand what the license permits. MIT and Apache-2.0 are permissive: you can typically use the code in commercial and closed-source projects. Copyleft licenses may require you to release derivative source under the same terms.
  3. Check attribution requirements. Permissive licenses usually require you to keep the copyright notice and license text somewhere in your project. That's a real obligation, not a formality.
  4. Look for per-element terms. On community sites, the site's overall terms and the individual contributor's stated wishes may differ. If a contributor asks for credit, honor it.
  5. When in doubt, ask or avoid. If a snippet has no license at all, you don't have clear permission to reuse it. Treat "no license" as "not open source," even if the code is publicly visible.

This article is general information, not legal advice. For commercial products with real exposure, have someone qualified review the licenses you're relying on.

How to use a community element in your project: a practical workflow

Here's a repeatable process that avoids most of the usual mess.

1. Start from a real need, not a browsing session

Decide what you need first—"a compact primary button with a loading state"—then search. Browsing aimlessly produces a pile of pretty snippets that don't fit together.

2. Copy the smallest version that works

Take the markup and the styles. Strip anything you don't need: demo wrappers, extra animations, decorative layers. Less code means fewer surprises.

3. Convert it to your conventions

If your project uses design tokens or CSS variables, replace hard-coded values:

/* Before: hard-coded */
.button { background: #4f46e5; border-radius: 8px; }

/* After: token-based */
.button { background: var(--color-primary); border-radius: var(--radius-md); }

This one step is what keeps a copied element from looking like a foreign object in your UI.

4. Check accessibility before you ship

Community elements vary widely here. Verify at minimum:

  • Keyboard focus is visible and the element is reachable by Tab.
  • Color contrast meets WCAG AA (4.5:1 for normal text).
  • Interactive elements use semantic HTML (<button>, not a clickable <div>).
  • Form inputs have associated labels.
  • Motion respects prefers-reduced-motion.

5. Test in context

Paste it into a real page with real content. Long labels, small screens, and dark mode break more copied elements than anything else.

6. Note where it came from

Keep a short comment or an internal credits file: source, license, date. Future you—and your legal reviewer—will be grateful.

Where element libraries genuinely shine

  • Prototypes and demos: you need something clickable today, not a design system.
  • Landing pages and marketing sites: a handful of distinctive elements, each custom.
  • Filling gaps: your framework lacks one specific component, and you don't want to build it from scratch.
  • Learning: reading well-made CSS is one of the fastest ways to improve.
  • Small projects: a personal site doesn't need a theming architecture.

Where they fall short

  • Consistency at scale: ten elements from ten contributors rarely look like one product.
  • Maintenance: you own every copy. When your design changes, you edit each one.
  • Accessibility debt: you inherit whatever the contributor did or didn't do.
  • No upstream fixes: a bug fixed in the original won't reach your copy.
  • Integration friction: different naming conventions, different units, different assumptions about resets.

When to choose which

Choose an element library when the scope is small, the timeline is short, or you need a few distinctive pieces rather than a whole system.

Choose a framework or design system when multiple people build multiple screens over months, when consistency is a product requirement, or when accessibility and theming need to be guaranteed rather than checked.

A hybrid works well for many teams: adopt a framework for the structural components—forms, navigation, layout—and borrow individual elements for the places where you want personality. Just route every borrowed element through the same token and accessibility checks, so it lands as part of your system rather than beside it.

The short version: open-source UI element libraries are a fast, flexible way to get good-looking interface pieces into a project. They are not a substitute for a design system, and the license and accessibility details are the part worth reading carefully.

Website Overview

Identifiable technologies and additional version or configuration signals make the service easier to fingerprint, which may help targeted scanners narrow their checks. An active inbound-mail setup with incomplete authentication may leave the domain more open to impersonation. Provider hosting alone does not close that gap.

Domain and Registration

Transfer-protection status is present, helping reduce the risk of unauthorized domain transfers. The domain has about 5 years of registration history; its current configuration provides more context than age alone. The registrar is Gandi SAS, a widely used domain service provider. The domain uses the common .io extension, which is not an independent safety signal.

DNS and Email

The observed email authentication setup is incomplete: DMARC is missing. Nameservers are provided by gandi.net, indicating managed DNS hosting. MX records point to the gandi.net email service. No CNAME was found; the observed records resolve directly to addresses. TXT records include verification markers for Google. Such markers may also remain after a service stops being used.

TLS and Certificates

The public key uses EC with 256 bits. The server supplied a complete certificate chain. No organization name is present in the certificate; the available fields are consistent with domain validation. The certificate is valid for about 198 days in total, with 196 days remaining. The certificate covers the main domain and its usual www hostname.

HTTP and Browser Security

X-Powered-By exposes backend information: PHP/7.4.25. The checked browser-security headers were not detected, leaving fewer explicit browser-side safeguards. The x-cache, via response header indicates a CDN or caching proxy in the delivery path. No obvious internal addresses or debug information were found in the headers. The Server header identifies Apache without an exact version.

Technology Stack Analysis

The public page identifies WordPress 6.8.10, jQuery, Google Analytics, Apache, PHP, with exact versions exposed for 1 technologies. These details can narrow vulnerability checks, although exposure alone is not a vulnerability.

Search and Social Sharing

No homepage meta description was detected, leaving snippet selection more dependent on page text. The Generator tag identifies WordPress 6.8.10, making the publishing system easier to fingerprint. Twitter Card metadata is configured. The title has 54 characters, within a common display range. A viewport declaration is present, providing a basis for mobile layout.

Hosting and Email

DNSgandi.net
HostingGANDI SAS
Emailgandi.net
Approximate IP geolocation (inferred; a CDN or proxy may differ from the origin server) France flagFrance Inferred 155.133.138.12

Registration details

RDAP / WHOIS

RegistrarGandi SAS
Registered2020-11-03
Expires2026-11-03
Domain statusclientTransferProhibited https://icann.org/epp#clientTransferProhibited
Nameserversns-118-b.gandi.net、ns-47-c.gandi.net、ns-87-a.gandi.net
DNSSECunsigned

DNS records

DNS

TypeNameValueTTLPriority
Aldtk.io155.133.138.123600—
AAAAldtk.io2001:4b98:dc5:253::123600—
MXldtk.iospool.mail.gandi.net1080010
MXldtk.iofb.mail.gandi.net1080050
NSldtk.ions-118-b.gandi.net10800—
NSldtk.ions-47-c.gandi.net10800—
NSldtk.ions-87-a.gandi.net10800—
TXTldtk.iogoogle-site-verification=-mcx4cNPg6dyCARXgNJL8vPkJbekRyFW5QkCIOVK8rg10800—
TXTldtk.iov=spf1 include:_mailcust.gandi.net ?all10800—

TLS and certificates

TLS / SSL

AssessmentNormal configuration
Supported protocolsTLSv1.2、TLSv1.3
Negotiated protocolTLSv1.3
Certificate subjectldtk.io
IssuerGandi SAS
Valid until2027-04-08T23:59 · Remaining when checked: 196 days
Verification detailsCertificate trust: Passed · Hostname match: Passed

HTTP response headers

HTTP

HeaderValue
content-typetext/html; charset=UTF-8
serverApache

Identified technologies

WordPress 6.8.10jQueryGoogle AnalyticsApachePHP

Pages, Search and Sharing

Meta descriptionNot detected
Canonical URLhttps://ldtk.io/
LanguageEnglish (default)
Twitter Cardsummary_large_image
All bots 1 allowed · 1 disallowed
  • Allow/wp-admin/admin-ajax.php
  • Disallow/wp-admin/

User reviews (0)

  • No reviews yet.